导读
11月24日,零一万物基正式发布并开源微调模型 Yi-34B-Chat,可申请免费商用。同时,零一万物还为开发者提供了 4bit/8bit 量化版模型,Yi-34B-Chat 4bit 量化版模型可以直接在消费级显卡(如RTX3090)上使用。魔搭社区已支持下载、推理训练体验,并推出相关教程,欢迎大家来玩!
评测效果
Model |
MMLU |
CMMLU |
C-Eval (val) |
BBH |
GSM8k |
Yi-34B-Chat |
79.11 |
77.04 |
51.41 |
71.65 |
|
Yi-6B-Chat |
69.44 |
68.80 |
39.70 |
38.44 |
|
LLaMA2-70B-Chat |
36.10 |
34.99 |
42.36 |
47.08 |
|
AquilaChat-34B v1.2 |
67.51 |
82.99 |
20.12 |
11.52 |
|
InternLM-chat-20B |
53.55 |
51.19 |
42.41 |
15.69 |
|
Qwen-14B-Chat |
67.73 |
66.12 |
49.65 |
59.51 |
|
Baichuan2-13B-Chat |
58.64 |
56.02 |
38.81 |
45.72 |
|
LLaMA2-13B-Chat |
27.47 |
27.93 |
32.90 |
36.85 |
在 MMLU 英文知识水平评测集,C-Eval、CMMLU 中文综合考试评测集,以及 GSM8K、BBH 两个常用的评估大模型数学及推理能力的评测集中,Yi-34B-Chat 在开源模型中取得多项优异成绩(评测结果均采用 zero-shot 的方式,结果会受到 prompt 设计的影响,官方使用了相同的 prompt 和生成策略来评测表中所有模型以获得一个较为公正的结果,供大家参考)。
模型效果如下,
文本创作:
科技话题:
中文语义理解:
以下为大家带来魔搭社区推理、微调最佳实践教程:
模型链接和下载
Yi系列模型现已在ModelScope社区开源,包括:
Yi-34B-Chat模型:
https://modelscope.cn/models/01ai/Yi-34B-Chat/summary
Yi-34B-Chat-4bits模型:
https://modelscope.cn/models/01ai/Yi-34B-Chat-4bits/summary
Yi-34B-Chat-8bits模型:
https://modelscope.cn/models/01ai/Yi-34B-Chat-8bits/summary
社区支持直接下载模型的repo:
from modelscope import snapshot_download model_dir = snapshot_download("01ai/Yi-34B-Chat", revision = "master") model_dir_int4 = snapshot_download("01ai/Yi-34B-Chat-4bits", revision = "master") model_dir_int8 = snapshot_download("01ai/Yi-34B-Chat-8bits", revision = "master")
Yi系列模型推理
Yi-34B-Chat:
推理代码
from modelscope import AutoModelForCausalLM, AutoTokenizer model_dir = '01ai/Yi-34B-Chat' tokenizer = AutoTokenizer.from_pretrained(model_dir, use_fast=False) model = AutoModelForCausalLM.from_pretrained( model_dir, device_map='auto', torch_dtype='auto' ).eval() messages = [ {"role": "user", "content": "hi"} ] input_ids = tokenizer.apply_chat_template(conversation=messages, tokenize=True, add_generation_prompt=True, return_tensors='pt') output_ids = model.generate(input_ids.to('cuda')) response = tokenizer.decode(output_ids[0][input_ids.shape[1]:], skip_special_tokens=True) # Model response: "Hello! How can I assist you today? If you have any questions or need information on a specific topic, feel free to ask." print(response)
资源消耗:
Yi-34B-Chat-4bits
环境安装
!pip install transformers -U !wget https://github.com/casper-hansen/AutoAWQ/releases/download/v0.1.7/autoawq-0.1.7+cu118-cp310-cp310-linux_x86_64.whl !pip install autoawq-0.1.7+cu118-cp310-cp310-linux_x86_64.whl
推理代码
from modelscope import AutoModelForCausalLM, AutoTokenizer model_dir = '01ai/Yi-34B-Chat-4bits' tokenizer = AutoTokenizer.from_pretrained(model_dir, use_fast=False) model = AutoModelForCausalLM.from_pretrained( model_dir, device_map='auto', torch_dtype='auto' ).eval() messages = [ {"role": "user", "content": "hi"} ] input_ids = tokenizer.apply_chat_template(conversation=messages, tokenize=True, add_generation_prompt=True, return_tensors='pt') output_ids = model.generate(input_ids.to('cuda')) response = tokenizer.decode(output_ids[0][input_ids.shape[1]:], skip_special_tokens=True) # Model response: "Hello! How can I assist you today? If you have any questions or need information on a specific topic, feel free to ask." print(response)
资源消耗
Yi系列模型微调和微调后推理
微调代码开源地址:
https://github.com/modelscope/swift/tree/main/examples/pytorch/llm
clone swift仓库并安装SWIFT(魔搭官方提供的训练推理框架)
# 设置pip全局镜像和安装相关的python包 pip config set global.index-url https://mirrors.aliyun.com/pypi/simple/ git clone https://github.com/modelscope/swift.git cd swift pip install -e . pip install deepspeed -U # 下面的脚本需要在此目录下执行 cd examples/pytorch/llm
使用LoRA+DDP+Deepspeed微调的脚本可以查看:
https://github.com/modelscope/swift/tree/main/examples/pytorch/llm/scripts/yi_34b_chat/lora_ddp_ds
使用QLoRA微调的脚本可以查看:
https://github.com/modelscope/swift/tree/main/examples/pytorch/llm/scripts/yi_34b_chat/qlora
以下具体介绍使用LoRA+DDP+Deepspeed的脚本:
微调脚本
# Experimental environment: 2 * A100 # 2 * 72GB GPU memory nproc_per_node=2 PYTHONPATH=../../.. \ CUDA_VISIBLE_DEVICES=0,1 \ torchrun \ --nproc_per_node=$nproc_per_node \ --master_port 29500 \ llm_sft.py \ --model_type yi-34b-chat \ --sft_type lora \ --tuner_backend swift \ --template_type AUTO \ --dtype AUTO \ --output_dir output \ --dataset blossom-math-zh \ --train_dataset_sample -1 \ --num_train_epochs 1 \ --max_length 2048 \ --check_dataset_strategy warning \ --lora_rank 8 \ --lora_alpha 32 \ --lora_dropout_p 0.05 \ --lora_target_modules DEFAULT \ --gradient_checkpointing true \ --batch_size 1 \ --weight_decay 0.01 \ --learning_rate 1e-4 \ --gradient_accumulation_steps $(expr 16 / $nproc_per_node) \ --max_grad_norm 0.5 \ --warmup_ratio 0.03 \ --eval_steps 100 \ --save_steps 100 \ --save_total_limit 2 \ --logging_steps 10 \ --use_flash_attn true \ --push_to_hub false \ --hub_model_id yi-34b-chat-lora \ --hub_private_repo true \ --hub_token 'your-sdk-token' \
如果显卡显存较低,可以增加如下参数,来支持量化训练:
--quantization_bit 4 \ --bnb_4bit_comp_dtype AUTO \
训练过程也支持本地数据集,需要指定如下参数:
--custom_train_dataset_path xxx.jsonl \ --custom_val_dataset_path yyy.jsonl \
自定义数据集的格式可以参考:
微调后的推理脚本:
这里的ckpt_dir需要修改为训练生成的checkpoint文件夹:
# Experimental environment: A100 PYTHONPATH=../../.. \ CUDA_VISIBLE_DEVICES=0 \ python llm_infer.py \ --ckpt_dir "output/yi-34b-chat/vx_xxx/checkpoint-xxx" \ --load_args_from_ckpt_dir true \ --eval_human false \ --max_length 2048 \ --use_flash_attn true \ --max_new_tokens 2048 \ --temperature 0.1 \ --top_p 0.7 \ --repetition_penalty 1.05 \ --do_sample true \ --merge_lora_and_save false \
微调的可视化结果
训练损失:
评估损失
训练后生成样例
[PROMPT]<|im_start|> system you are a helpful assistant!<|im_end|> <|im_start|> user Jacob的水箱能容纳50升水。Jacob从河里和雨水中收集水来填满他的水箱。他每天可以从雨水中收集800毫升的水,从河里收集1700毫升的水。Jacob需要多少天才能填满他的水箱?<|im_end|> <|im_start|> assistant [OUTPUT]Jacob每天从雨水中收集的水量为800毫升,即0.8升。 Jacob每天从河里收集的水量为1700毫升,即1.7升。 所以,Jacob每天总共收集的水量为0.8 + 1.7 = 2.5升。 要填满50升的水箱,Jacob需要的天数为50 / 2.5 = 20天。 Answer: 20<|im_end|> [LABELS]每天从雨水和河水中收集到的水总量为800毫升+1700毫升=2500毫升=2.5升。 所以,填满50升水箱需要的天数为50升/2.5升=20天。 Answer: 20 -------------------------------------------------------------------------------- [PROMPT]<|im_start|> system you are a helpful assistant!<|im_end|> <|im_start|> user 依法纳税是每个公民的义务.孙老师月收入2400元,按照个人所得税征收标准,孙老师上月应缴纳个人所得税多少元?(个人所得税按1%)<|im_end|> <|im_start|> assistant [OUTPUT]根据题目中的信息,孙老师的月收入为2400元,个人所得税征收标准为1%。 因此,孙老师上月应缴纳的个人所得税为: 2400元 * 1% = 24元 所以,孙老师上月应缴纳的个人所得税为24元。 Answer: 24<|im_end|> [LABELS]孙老师月收入为2400元,按照个人所得税征收标准,个人所得税按照1%来计算。 个人所得税 = 收入 × 税率 = 2400元 × 1% = 2400元 × 0.01 = 24元 所以,孙老师上月应缴纳个人所得税为24元。 Answer: 24
资源消耗:
2 * 70G
点击直达模型开源卡片:https://www.modelscope.cn/models/01ai/Yi-34B-Chat/summary