英文

Anima Merged

第一个开源的基于QLoRA的33B中文大语言模型 the First QLoRA based 33B fully open-source Chinese LLM

LICENSE

请注意:本model的LICENSE比较特殊,请确认你的使用场景符合此LICENSE。

Github Repo:

https://github.com/lyogavin/Anima

?模型训练

Backbone模型选择

Anima模型基于QLoRA开源的 33B guanaco 训练了10000 steps。训练使用一个H100 GPU。

  • 思考逻辑:本工作主要为了验证QLoRA训练方法的有效性,因此选择了基于QLoRA的Guanaco 33B finetune训练,这个训练更多的是增强模型的中文能力。Assume模型的基础logical reasoning和Knowledge能力已经足够。
训练数据选择

使用 Chinese-Vicuna 项目开放的训练数据集 guanaco_belle_merge_v1.0 进行finetune训练。

  • 思考逻辑:按照 QLoRA Appendix B.4和Table 9中的Grid Search的结论:对于QLoRA finetune,training sample量不一定越大越好。10000个steps是一个ROI比较优的size。因此我们希望选择一个不小于10000个steps的数据集。 Belle 10M 数据集似乎太大了,不确定数据质量如何。时间有限,先选择guanaco_belle_merge_v1.0。后边会进一步更系统性的测试更多的数据集和数据质量筛选的效果。
  • 感谢:Chinese-Vicuna项目、Belle项目、GuanacoDataset的贡献。
超参选择

基于成本ROI平衡的考虑,没有做太多的grid search,基本的思路是follow QLoRA paper 的结论,因为QLoRA做了相对比较详尽的超参Grid Search实验:

  • Batch size: 16 ( QLoRA Appendix B.4和Table 9)
  • Max steps: 10000 ( QLoRA Appendix B.4和Table 9),更多的steps和更大的数据集的训练在进一步实验中,后续会持续更新。
  • Learning rate: 1e-4 ( QLoRA Appendix B.4和Table 9)
  • LoRA r=64, alpha=16 ( QLoRA Appendix B.2)
  • source_max_len=512, target_max_len=512,需要保证大部分的training sample没有truncate,能完整的把信息训练到模型中,根据 脚本 中的估计,512大概可以覆盖大部分的样本长度。
如何训练
  • 重现Anima的模型训练过程:使用以下步骤可以重现Anima 33B模型(单卡80GB H100或双卡40GB A100均测试过可运行):

    # 1. install dependencies
    pip install -r requirements.txt
    # 2. 
    cd training
    ./run_Amina_training.sh
    
  • 基于Anima finetune训练其他model:

    # 1. install dependencies
    pip install -r requirements.txt
    # 2. 
    cd training
    ./run_finetune_raining_based_on_Anima.sh
    

    注:可以修改run_finetune_raining_based_on_Anima.sh中的--dataset和--dataset_format参数使用其他训练数据dataset。

  • 多卡训练

    由于使用Hugging Face Accelerate,天然支持多卡训练。我们测试过双卡40GB的A100,可以直接运行。

    ?验证评估

    Elo rating tournament结论
    Model Elo Rank
    ChatGPT-3.5 turbo 1341.98 1
    Anima 33B 1096.69 2
    Belle 937.71 3
    Chinese Vicuna 623.62 4
    评估方法论
    • 数据集的选择:如 Belle Paper 中论述,评估集的不同类型分布对于评估结论影响巨大。如田忌赛马,以己之长攻人之短,很容易占优势。因此我们选择了英文chatbot模型研究工作中比较普遍公认的 Vicuna benchmark 。为了评测中文,我们使用GPT4对于问题做了翻译。 翻译代码 数据集
    • 评估方法: 为了平衡成本,我们主要采用GPT4进行评估。如 QLoRA 论证,单纯GPT4打分进行模型的对比随机波动性较大。这与我们的观察一致。因此采用了 QLoRA 推荐的,现在比较普遍采用的Elo Rating tournament评测方法。
    • 超参选择:出于成本考虑,我们选择:300轮随机评估,随机选择模型PK的先后顺序以抵消先后顺序的影响,随机种子为:42。Elo rating的实现代码和其他超参参照 Vicuna的Elo代码 : K=32, init rating=1000。
    Elo rating tournament过程代码

    elo_tournanment_all_models_on_translated_vicuna.ipynb

    结论

    LLM模型最重要的还是logical reasoning的能力和encode knowledge的能力。因此模型的规模还是最重要的因素。通过QLoRA的方式可以让我们以足够低的成本finetune优化给定硬件条件下最大的模型。从而达到最优的效果。

    Anima模型只通过10000 steps的训练,并没有深度优化训练数据的质量,就已经达到了最优的中文模型的效果。

    ?如何Inferrence

    首先保证依赖都已经安装:

    pip install -r https://github.com/lyogavin/Anima/blob/main/requirements.txt?raw=true
    

    可以参考: inferrence.ipynb

    或者使用如下代码:

    # imports
    from transformers import GenerationConfig, LlamaForCausalLM, LlamaTokenizer
    import torch
    
    base_model = "lyogavin/Anima33B-merged"
    tokenizer = LlamaTokenizer.from_pretrained(base_model)
    model = LlamaForCausalLM.from_pretrained(
               base_model,
               #load_in_8bit=True,
               torch_dtype=torch.float16,
               device_map="auto",
           )
    model.eval()
    
    # prompt
    prompt = "中国的首都是哪里?"
    inputs = tokenizer(prompt, return_tensors="pt")
    
    # Generate
    generate_ids = model.generate(**inputs, max_new_tokens=30)
    print(tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0])
    
    # output: '中国的首都是哪里?\n中国的首都是北京。\n北京位于中国北部,是中国历史悠'
    

    ? 模型使用例子

    Human Assitant
    1234321 1235321
    1236321 1237321
    1238321 1239321
    12310321 12311321
    12312321 12313321
    12314321 12315321
    12316321 12317321
    12318321 12319321
    12320321 12321321
    12322321 12323321
    12324321 12325321
    12326321 12327321
    12328321 12329321
    12330321 12331321
    12332321 12333321
    12334321 12335321
    12336321 12337321
    12338321 12339321
    12340321 12341321
    12342321 12343321
    12344321 12345321
    12346321 12347321
    12348321 12349321
    12350321 12351321
    12352321 12353321
    12354321 12355321
    12356321 12357321
    12358321 12359321
    12360321 12361321
    12362321 12363321
    12364321 12365321
    12366321 12367321
    12368321 12369321
    12370321 12371321
    12372321 12373321

    ✍️Who We Are?

    此工作来自于 艾写科技 。我们团队来自于硅谷,有多年中、美大厂的一线AI工作经验。

    我们致力于通过最新的AGI,LLM技术为内容创作提供下一代的内容创作工具。

    我们相信:生成式AI的年代,“写”不是变得更容易,而是更难了。因为AI拉平了玩家之间的差距。每个人都可以很容易的让ChatGPT帮你写一段文案。

    单纯的为内容创作提供“写”文案的工具已经远远不够。内容创作者需要的不是“写”,而是“写爆款”,是要结合“爆款”的趋势,结合对于用户内容兴趣和口味变化的敏锐洞察,为内容创作提供能高效产出爆款的AI。

    我们坚持积累大量的中文全网社交媒体数据,积累了大量实时的对于爆款趋势的变化数据。通过结合爆款数据和最近的LLM AI技术,为内容创作者提供算法分发时代真正有效的竞争优势。