导读
ChatGLM3-6B 是 ChatGLM 系列最新一代的开源模型,在保留了前两代模型对话流畅、部署门槛低等众多优秀特性的基础上,ChatGLM3-6B 引入了如下特性:
- 更强大的基础模型:ChatGLM3-6B 的基础模型 ChatGLM3-6B-Base 采用了更多样的训练数据、更充分的训练步数和更合理的训练策略。在语义、数学、推理、代码、知识等不同角度的数据集上测评显示,ChatGLM3-6B-Base 具有在 10B 以下的预训练模型中优秀的性能。
- 更完整的功能支持:ChatGLM3-6B 采用了全新设计的 Prompt 格式,除正常的多轮对话外。同时原生支持工具调用(Function Call)、代码执行(Code Interpreter)和 Agent 任务等复杂场景。
- 更全面的开源序列: 除了对话模型 ChatGLM3-6B 外,还开源了基础模型 ChatGLM-6B-Base、长文本对话模型 ChatGLM3-6B-32K。以上所有权重对学术研究完全开放,在登记后亦允许免费商业使用(登记地址可通过魔搭模型详情页直达)。
效果评估
选取了 8 个中英文典型数据集,在 ChatGLM3-6B (base) 版本上进行了性能测试。
Model |
GSM8K |
MATH |
BBH |
MMLU |
C-Eval |
CMMLU |
MBPP |
AGIEval |
ChatGLM2-6B-Base |
6.5 |
33.7 |
51.7 |
50.0 |
- |
- |
||
Best Baseline |
13.1 |
45.0 |
63.5 |
62.2 |
47.5 |
45.8 |
||
ChatGLM3-6B-Base |
25.7 |
66.1 |
69.0 |
67.5 |
52.4 |
53.7 |
Best Baseline 指的是模型参数在 10B 以下、在对应数据集上表现最好的预训练模型,不包括只针对某一项任务训练而未保持通用能力的模型。
对 ChatGLM3-6B-Base 的测试中,BBH 采用 3-shot 测试,需要推理的 GSM8K、MATH 采用 0-shot CoT 测试,MBPP 采用 0-shot 生成后运行测例计算 Pass@1 ,其他选择题类型数据集均采用 0-shot 测试。
在多个长文本应用场景下对 ChatGLM3-6B-32K 进行了人工评估测试。与二代模型相比,其效果平均提升了超过 50%。在论文阅读、文档摘要和财报分析等应用中,这种提升尤为显著。此外,在 LongBench 评测集上对模型的测试具体结果如下表所示:
Model |
平均 |
Summary |
Single-Doc QA |
Multi-Doc QA |
Code |
Few-shot |
Synthetic |
ChatGLM2-6B-32K |
41.5 |
24.8 |
37.6 |
34.7 |
52.8 |
51.3 |
47.7 |
ChatGLM3-6B-32K |
50.2 |
26.6 |
45.8 |
46.1 |
56.2 |
61.2 |
65 |
环节配置与安装
- python 3.8及以上版本
- pytorch 1.12及以上版本,推荐2.0及以上版本
- 建议使用CUDA 11.4及以上
使用步骤
本文主要演示的模型为chatglm3-6b和chatglm3-6b-base模型,在ModelScope的Notebook的环境(这里以PAI-DSW为例)的配置下运行(显存24G) :
服务器连接与环境准备
1、进入ModelScope首页:modelscope.cn,进入我的Notebook
2、选择GPU环境,进入PAI-DSW在线开发环境
3、新建Notebook
创空间体验
魔搭社区上线了 ChatGLM3-6B的体验Demo,欢迎大家体验实际效果!
创空间链接:
https://modelscope.cn/studios/ZhipuAI/chatglm3-6b-demo/summary
晒出一些基于各维度随机抽问的一次性测试案例:
- 国际惯例先上自我认知
- 数学
鸡兔共有100只,鸡的脚比兔子多80只,问鸡与兔各多少只
- 逻辑推理
模型链接和下载
ChatGLM3系列模型现已在ModelScope社区开源,包括:
ChatGLM3-6B模型:
https://modelscope.cn/models/ZhipuAI/chatglm3-6b/summary
ChatGLM3-6B-预训练模型:
https://modelscope.cn/models/ZhipuAI/chatglm3-6b-base/summary
ChatGLM3-6B-32K模型:
https://modelscope.cn/models/ZhipuAI/chatglm3-6b-32k/summary
创空间体验:
https://modelscope.cn/studios/ZhipuAI/chatglm3-6b-demo/summary
社区支持直接下载模型的repo:
from modelscope import snapshot_download model_dir1 = snapshot_download("ZhipuAI/chatglm3-6b", revision = "master") model_dir2 = snapshot_download("ZhipuAI/chatglm3-6b-base", revision = "master") model_dir3 = snapshot_download("ZhipuAI/chatglm3-6b-32k", revision = "master")
模型推理
推理代码:
from modelscope import AutoTokenizer, AutoModel, snapshot_download model_dir = snapshot_download("ZhipuAI/chatglm3-6b", revision = "master") tokenizer = AutoTokenizer.from_pretrained(model_dir, trust_remote_code=True) model = AutoModel.from_pretrained(model_dir, trust_remote_code=True).half().cuda() model = model.eval() response, history = model.chat(tokenizer, "你好", history=[]) print(response) response, history = model.chat(tokenizer, "晚上睡不着应该怎么办", history=history) print(response)
资源消耗:
chatglm3-6b-32k 微调和微调后推理
微调代码开源地址:
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 .[llm] # 下面的脚本需要在此目录下执行 cd examples/pytorch/llm # 如果你想要使用deepspeed. pip install deepspeed -U # 如果你想要使用基于auto_gptq的qlora训练. (推荐, 效果优于bnb) # 使用auto_gptq的模型: qwen-7b-chat-int4, qwen-14b-chat-int4, qwen-7b-chat-int8, qwen-14b-chat-int8 pip install auto_gptq optimum -U # 如果你想要使用基于bnb的qlora训练. pip install bitsandbytes -U
模型微调脚本 (lora+ddp+deepspeed)
# Experimental environment: 2 * 3090 # 2 * 20GB 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_id_or_path ZhipuAI/chatglm3-6b-32k \ --model_revision master \ --sft_type lora \ --tuner_backend swift \ --template_type chatglm3 \ --dtype bf16 \ --output_dir output \ --ddp_backend nccl \ --dataset damo-agent-mini-zh \ --train_dataset_sample -1 \ --num_train_epochs 1 \ --max_length 4096 \ --lora_rank 8 \ --lora_alpha 32 \ --lora_dropout_p 0.05 \ --lora_target_modules AUTO \ --gradient_checkpointing true \ --batch_size 1 \ --weight_decay 0. \ --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 \ --push_to_hub false \ --hub_model_id chatglm3-6b-32k-lora \ --hub_private_repo true \ --hub_token 'your-sdk-token' \ --deepspeed_config_path 'ds_config/zero2.json' \ --only_save_model true \
模型微调后的推理脚本
# Experimental environment: 3090 PYTHONPATH=../../.. \ CUDA_VISIBLE_DEVICES=0 \ python llm_infer.py \ --model_id_or_path ZhipuAI/chatglm3-6b-32k \ --model_revision master \ --sft_type lora \ --template_type chatglm3 \ --dtype bf16 \ --ckpt_dir "output/chatglm3-6b-32k/vx_xxx/checkpoint-xxx" \ --eval_human false \ --dataset damo-agent-mini-zh \ --max_length 4096 \ --max_new_tokens 2048 \ --temperature 0.9 \ --top_k 20 \ --top_p 0.9 \ --do_sample true \ --merge_lora_and_save false \
微调的可视化结果
训练损失:
评估损失
训练后生成样例
[PROMPT][gMASK]sop<|user|> 给我写一首诗,形容绿树成荫,小河潺潺,女生诵读这首诗,生成个视频<|assistant|> [OUTPUT]绿树成荫小河潺潺, 清新空气弥漫香。鸟儿歌唱花芬芳, 青春年华美如画。 <|startofthink|>```JSON {"api_name": "modelscope_speech-generation", "url": "http://178.32.165.179:6440/damo/speech_sambert-hifigan_tts_zh-cn_16k", "parameters": {"text": "绿树成荫小河潺潺, 清新空气弥漫香。鸟儿歌唱花芬芳, 青春年华美如画。", "gender": "woman"}} ```<|endofthink|> <|startofexec|>```JSON {"result": "<audio id="audio" controls="" preload="none"> <source id="wav" src="http://xdp-expriment.oss-cn-zhangjiakou.aliyuncs.com/modelscope/audio/959e84d79155441f.wav"> </audio>"} ```<|endofexec|> <audio id="audio" controls=""preload="none"> <source id="wav" src="http://xdp-expriment.oss-cn-zhangjiakou.aliyuncs.com/modelscope/audio/959e84d79155441f.wav"> </audio> 目前ModelScope只有支持英文的视频生成模型,所以我将首先把您的问题利用ModelScope的中英翻译模型转化为英文,然后再调用英文的视频生成模型<|startofthink|>```JSON {"api_name": "modelscope_text-translation-zh2en", "url": "http://110.172.26.163:6983/damo/nlp_csanmt_translation_zh2en", "parameters": {"text": "绿树成荫小河潺潺, 清新空气弥漫香。鸟儿歌唱花芬芳, 青春年华美如画。"}} ```<|endofthink|> <|startofexec|>```JSON {"result": "The scenery of a small village on a lake."} ```<|endofexec|> 翻译后的指令:The scenery of a small village on a lake. 调用视频生成模型生成视频中...... <|startofthink|>```JSON {"api_name": "modelscope_video-generation", "url": "http://154.87.177.70:7254/damo/text-to-video-synthesis", "parameters": {"text": "The scenery of a small village on a lake."}} ```<|endofthink|> <|startofexec|>```JSON {"result": "![IMAGEGEN](http://xdp-expriment.oss-cn-zhangjiakou.aliyuncs.com/modelscope/video/8f433497664a40a1.gif"} ```<|endofexec|> ![IMAGEGEN](http://xdp-expriment.oss-cn-zhangjiakou.aliyuncs.com/modelscope/video/8f433497664a40a1.gif)
资源消耗:
2 * 20G
点击阅读全文,直达chatglm3-6b-demo创空间体验~