一、引言
阿里Qwen推出了Qwen2,相较于Qwen1.5中0.5B、1.8B、4B、7B、14B、32B、72B、110B等8个Dense模型以及1个14B(A2.7B)MoE模型共计9个模型,Qwen2包含了0.5B、1.5B、7B、57B-A14B和72B共计5个尺寸模型。从尺寸上来讲,最关键的就是推出了57B-A14B这个更大尺寸的MoE模型,有人问为什么删除了14B这个针对32G显存的常用尺寸,其实对于57B-A14B剪枝一下就可以得到。
二、模型简介
2.1 Qwen2 模型概述
Qwen2对比Qwen1.5 :
- 模型尺寸:将Qwen2-7B和Qwen2-72B的模型尺寸有32K提升为128K

- GQA(分组查询注意力):在Qwen1.5系列中,只有32B和110B的模型使用了GQA。这一次,所有尺寸的模型都使用了GQA,提供GQA加速推理和降低显存占用

分组查询注意力 (Grouped Query Attention) 是一种在大型语言模型中的多查询注意力 (MQA) 和多头注意力 (MHA) 之间进行插值的方法,它的目标是在保持 MQA 速度的同时实现 MHA 的质量
- tie embedding:针对小模型,由于embedding参数量较大,使用了tie embedding的方法让输入和输出层共享参数,增加非embedding参数的占比
效果对比 :
Qwen2-72B全方位围剿Llama3-70B,同时对比更大尺寸的Qwen1.5-110B也有很大提升,官方表示来自于“预训练数据及训练方法的优化”。

2.2 Qwen2 模型架构
Qwen2仍然是一个典型decoder-only的transformers大模型结构,主要包括文本输入层 、embedding层 、decoder层 、输出层 及损失函数
通过AutoModelForCausalLM查看Qwen1.5-7B-Chat和Qwen2-7B-Instruct的模型结构,对比config.json发现:


- 网络结构:无明显变化
- 核心网络Qwen2DecoderLayer层:由32层减少为28层(72B是80层)
- Q、K、V、O隐层尺寸:由4096减少为3584(72B是8192)
- attention heads:由32减少为28(72B是64)
- kv head:由32减少为4(72B是8)
- 滑动窗口(模型尺寸):由32768(32K)增长为131072(128K)(72B一样)
- 词表:由151936增长为152064(72B一样)
- intermediate_size(MLP交叉层):由11008增长为18944(72B是29568)
可以看到其中有的参数增加有的参数减少,猜想是:
- 减少的参数,并不会降低模型效果,反而能增加训练和推理效率,
- 增大的参数:比如MLP中的intermediate_size,参数越多,模型表达能力越明显。
三、训练与推理
3.1 Qwen2 模型训练
在【机器学习】Qwen1.5-14B-Chat大模型训练与推理实战 中,我们采用LLaMA-Factory的webui进行训练,今天我们换成命令行的方式,对于LLaMA-Factory框架的部署,可以参考我之前的文章:
AI智能体研发之路-模型篇(一):大模型训练框架LLaMA-Factory在国内网络环境下的安装、部署及使用
该文在百度“LLaMA Factory 部署”词条排行第一:
假设你已经基于上文部署了llama_factory的container,运行进入到container中
代码语言:javascript
复制
docker exec -it llama_factory bash
在app/目录下建立run_train.sh。
代码语言:javascript
复制
CUDA_VISIBLE_DEVICES=2 llamafactory-cli train \
--stage sft \
--do_train True \
--model_name_or_path qwen/Qwen2-7B-Instruct \
--finetuning_type lora \
--template qwen \
--flash_attn auto \
--dataset_dir data \
--dataset alpaca_zh \
--cutoff_len 4096 \
--learning_rate 5e-05 \
--num_train_epochs 5.0 \
--max_samples 100000 \
--per_device_train_batch_size 4 \
--gradient_accumulation_steps 4 \
--lr_scheduler_type cosine \
--max_grad_norm 1.0 \
--logging_steps 10 \
--save_steps 1000 \
--warmup_steps 0 \
--optim adamw_torch \
--packing False \
--report_to none \
--output_dir saves/Qwen2-7B-Instruct/lora/train_2024-06-09-23-00 \
--fp16 True \
--lora_rank 32 \
--lora_alpha 16 \
--lora_dropout 0 \
--lora_target q_proj,v_proj \
--val_size 0.1 \
--evaluation_strategy steps \
--eval_steps 1000 \
--per_device_eval_batch_size 2 \
--load_best_model_at_end True \
--plot_loss True
因为之前文章中重点讲的就是国内网络环境的LLaMA-Factory部署,核心就是采用modelscope模型源代替huggingface模型源,这里脚本启动后,就会自动从modelscope下载指定的模型,这里是"qwen/Qwen2-7B-Instruct",下载完后启动训练
训练数据可以通过LLaMA-Factory/data/dataset_info.json文件进行配置,格式参考data目录下的其他数据文件。 比如构建成类型LLaMA-Factory/data/alpaca_zh_demo.json的格式
在LLaMA-Factory/data/dataset_info.json中复制一份进行配置:

3.2 Qwen2 模型推理
Qwen2的官方文档中介绍了多种优化推理部署的方式,包括基于hf transformers、vllm、llama.cpp、Ollama以及AWQ、GPTQ、GGUF等量化方式,主要因为Qwen2开源的Qwen2-72B、Qwen1.5-110B,远大于GLM4、Baichuan等开源的10B量级小尺寸模型。需要考虑量化、分布式推理问题。今天重点介绍Qwen2-7B-Instruct在国内网络环境下的hf transformers推理测试,其他方法单开篇幅进行细致讲解。
呈上一份glm-4-9b-chat、qwen/Qwen2-7B-Instruct通用的极简代码:
代码语言:javascript
复制
from modelscope import snapshot_download
from transformers import AutoTokenizer, AutoModelForCausalLM
#model_dir = snapshot_downlo

最低0.47元/天 解锁文章
1988

被折叠的 条评论
为什么被折叠?



