阿里通义千问 Qwen1.5-MoE 开源!推理训练最佳实践教程来啦 ...

打印 上一主题 下一主题

主题 519|帖子 519|积分 1557

通义千问团队推出 Qwen 系列的首个MoE模型,Qwen1.5-MoE-A2.7B。它仅拥有27亿个激活参数,但其性能却能与当前最先进的70亿参数模型,如Mistral 7B和Qwen1.5-7B相媲美。
模型布局

Qwen1.5-MoE 模型采用了特别设计的 MoE 架构。通常情况下,如Mixtral等方法所示,每个transformer block中的MoE层会配备8个expert,并采用top-2门控计谋进行routing。这种配置还存在很大的优化空间。Qwen1.5-MoE的架构进行了多项改进:


  • Finegrained experts
  • 初始化
  • 新的routing机制
Qwen1.5-MoE-A2.7B在与最佳的7B模型相比取得了非常靠近的性能。同时,也发现在chat模型方面仍有改进的空间。
训练成本与推理服从

MoE模型的训练成本与dense模型存在明显差别。尽管MoE模型通常拥有更多的参数,但由于其希奇性,训练开销可以明显低落。先对比各个模型的三个关键参数,分别是总参数数量、激活参数数量和Non-embedding参数:
Model
Parameters
(Activated) Parameters
(Activated) Non-embedding parameters
Mistral-7B
7.2
7.2
7.0
Gemma-7B
8.5
7.8
7.8
Qwen1.5-7B
7.7
7.7
6.4
DeepSeekMoE 16B
16.4
2.8
2.4
Qwen1.5-MoE-A2.7B
14.3
2.7
2.0
不丢脸出,尽管Qwen1.5-MoE总参数量较大,但Non-embedding激活参数量远小于7B模型。在实践中,观察到使用Qwen1.5-MoE-A2.7B相比于Qwen1.5-7B,训练成本明显低落了75%。另外,由于Qwen1.5-MoE的初始化方法,不必要训练同样数量的token即可达到很好的模型效果,这也明显低落了训练成本。
如下是使用vLLM摆设了Qwen1.5-7B和Qwen1.5-MoE-A2.7B模型,并使用单个NVIDIA A100-80G GPU进行性能测试。在实验设置中,输入token数设置为1000,输出token数设置为1000,通过吞吐量(每秒处置处罚的请求数)和每秒token数(TPS)来权衡性能:
Model
Throughput
TPS
Qwen2-7B-Chat
1.15
2298.89
Qwen1.5-MoE-A2.7B-Chat
2.01
4010.27
Qwen1.5-MoE-A2.7B与Qwen1.5-7B相比,速度提高了约1.74倍。这种加速重要归因于MoE在前向过程中仅激活了其总参数的一小部分,从而低落了计算需求。别的,共享expert也提升了模型的推理服从。因此,尽管MoE模型增长了内存需求,但它们在吞吐性能和推理速度方面都表现出明显的优势。
技术交流&资料

技术要学会分享、交流,不建议闭门造车。一个人可以走的很快、一堆人可以走的更远。
建立了大模型面试和技术交流群,相干资料、技术交流&答疑,均可加我们的交流群获取,群友已超过2000人,添加时最好的备注方式为:泉源+爱好方向,方便找到志同道合的朋友。
   方式①、微信搜索公众号:机器学习社区,配景回复:加群
方式②、添加微信号:mlc2040,备注:来自CSDN + 技术交流
  情况配置与安装


  • python 3.8及以上版本
  • pytorch 1.12及以上版本,推荐2.0及以上版本
  • 建议使用CUDA 11.4及以上
  • 依赖最新的Transformers代码
使用步调

模型链接和下载
Qwen1.5-MoE模型系列现已在ModelScope社区开源,包罗:
Qwen1.5-MoE-A2.7B-Chat: https://modelscope.cn/models/qwen/Qwen1.5-MoE-A2.7B-Chat
Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4: https://modelscope.cn/models/qwen/Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4
Qwen1.5-MoE-A2.7B: https://modelscope.cn/models/qwen/Qwen1.5-MoE-A2.7B
社区支持直接下载模型的repo:
  1. from modelscope import snapshot_download
  2. model_dir = snapshot_download("qwen/Qwen1.5-MoE-A2.7B-Chat")
复制代码
Qwen1.5-MoE模型推理

Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4推理代码,Qwen1.5-MoE已归并到HuggingFace的transformers最新官方代码
  1. from modelscope import AutoModelForCausalLM, AutoTokenizer
  2. device = "cuda" # the device to load the model onto
  3. model = AutoModelForCausalLM.from_pretrained(
  4.     "qwen/Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4",
  5.     torch_dtype="auto",
  6.     device_map="auto"
  7. )
  8. tokenizer = AutoTokenizer.from_pretrained("qwen/Qwen1.5-MoE-A2.7B-Chat-GPTQ-Int4")
  9. prompt = "Give me a short introduction to large language model."
  10. messages = [
  11.     {"role": "system", "content": "You are a helpful assistant."},
  12.     {"role": "user", "content": prompt}
  13. ]
  14. text = tokenizer.apply_chat_template(
  15.     messages,
  16.     tokenize=False,
  17.     add_generation_prompt=True
  18. )
  19. model_inputs = tokenizer([text], return_tensors="pt").to(device)
  20. generated_ids = model.generate(
  21.     model_inputs.input_ids,
  22.     max_new_tokens=512
  23. )
  24. generated_ids = [
  25.     output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids)
  26. ]
  27. response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0]
  28. print(response)
复制代码
资源斲丧(10G):

Qwen1.5-MoE-A2.7B-Chat使用vLLM加速推理:
要使用vLLM加速模型推理,请从源代码安装vLLM:
  1. git clone https://github.com/wenyujin333/vllm.git
  2. cd vllm
  3. git checkout add_qwen_moe
  4. pip install -e .
复制代码
设置情况变量VLLM_USE_MODELSCOPE为True,从ModelScope下载模型:
  1. export VLLM_USE_MODELSCOPE=True
复制代码
下面这个示例说明如何使用vLLM构建一个与Qwen-MoE兼容的OpenAI-API接口:
  1. python -m vllm.entrypoints.openai.api_server --model qwen/Qwen1.5-MoE-A2.7B-Chat
复制代码
  1. curl http://localhost:8000/v1/chat/completions \
  2.     -H "Content-Type: application/json" \
  3.     -d '{
  4.     "model": "qwen/Qwen1.5-MoE-A2.7B-Chat",
  5.     "messages": [
  6.     {"role": "system", "content": "You are a helpful assistant."},
  7.     {"role": "user", "content": "Tell me something about large language models."}
  8.     ]
  9.     }'
复制代码
Qwen1.5-MoE模型还将继续更新对第三方框架的支持,包罗llama.cpp、MLX等。
Qwen1.5-MoE微调和微调后推理

我们使用SWIFT来对模型进行微调, swift是魔搭社区官方提供的LLM&AIGC模型微调推理框架.
微调代码开源地址: https://github.com/modelscope/swift
我们使用blossom-math-zh数据集进行微调,使命是: 解数学题
情况预备:
  1. git clone https://github.com/modelscope/swift.git
  2. cd swift
  3. pip install .[llm]
复制代码
微调脚本: LoRA
  1. # https://github.com/modelscope/swift/blob/main/examples/pytorch/llm/scripts/qwen1half-moe-a2_7b-chat/lora/sft.sh
  2. # Experimental environment: A100
  3. # 42GB GPU memory
  4. PYTHONPATH=../../.. \
  5. CUDA_VISIBLE_DEVICES=0 \
  6. python llm_sft.py \
  7.     --model_type qwen1half-moe-a2_7b-chat \
  8.     --sft_type lora \
  9.     --tuner_backend swift \
  10.     --dtype AUTO \
  11.     --output_dir output \
  12.     --dataset dureader-robust-zh \
  13.     --train_dataset_sample 10000 \
  14.     --num_train_epochs 1 \
  15.     --max_length 1024 \
  16.     --check_dataset_strategy warning \
  17.     --lora_rank 8 \
  18.     --lora_alpha 32 \
  19.     --lora_dropout_p 0.05 \
  20.     --lora_target_modules ALL \
  21.     --gradient_checkpointing true \
  22.     --batch_size 1 \
  23.     --weight_decay 0.1 \
  24.     --learning_rate 1e-4 \
  25.     --gradient_accumulation_steps 16 \
  26.     --max_grad_norm 0.5 \
  27.     --warmup_ratio 0.03 \
  28.     --eval_steps 100 \
  29.     --save_steps 100 \
  30.     --save_total_limit 2 \
  31.     --logging_steps 10 \
  32.     --use_flash_attn true \
  33.     --self_cognition_sample 1000 \
  34.     --model_name 卡卡罗特 \
  35.     --model_author 陶白白 \
复制代码
训练过程也支持本地数据集,必要指定如下参数:
  1. --custom_train_dataset_path xxx.jsonl \
  2. --custom_val_dataset_path yyy.jsonl \
复制代码
微调后推理脚本:
(这里的ckpt_dir必要修改为训练生成的checkpoint文件夹)
  1. # Experimental environment: A100
  2. # 3GB GPU memory
  3. PYTHONPATH=../../.. \
  4. CUDA_VISIBLE_DEVICES=0 \
  5. python llm_infer.py \
  6.     --ckpt_dir "output/qwen1half-moe-a2_7b-chat/vx-xxx/checkpoint-xxx" \
  7.     --load_dataset_config true \
  8.     --use_flash_attn true \
  9.     --max_new_tokens 2048 \
  10.     --temperature 0.1 \
  11.     --top_p 0.7 \
  12.     --repetition_penalty 1. \
  13.     --do_sample true \
  14.     --merge_lora false \
复制代码


微调的可视化效果

训练loss:

训练后生成样例:
  1. [PROMPT]<|im_start|>system
  2. You are a helpful assistant.<|im_end|>
  3. <|im_start|>user
  4. 学校需新添28套课桌椅,共付款1820元,椅子每把17元,课桌每张多少元?<|im_end|>
  5. <|im_start|>assistant
  6. [OUTPUT]设课桌每张x元。
  7. 根据题意,椅子每把17元,课桌每张x元。
  8. 则椅子的总费用为17元/把 × 28把 = 476元。
  9. 课桌的总费用为x元/张 × 28张 = 28x元。
  10. 根据题意,课桌和椅子的总费用为1820元。
  11. 所以,28x + 476 = 1820。
  12. 解方程得:28x = 1820 - 476 = 1344。
  13. x = 1344 / 28 = 48。
  14. 所以,课桌每张48元。
  15. Answer: 48<|im_end|>
  16. [LABELS]假设课桌的价格为x元每张。
  17. 根据题意可得方程:
  18. 28(17+x) = 1820
  19. 化简得:
  20. 476 + 28x = 1820
  21. 移项得:
  22. 28x = 1820 - 476
  23. 化简得:
  24. 28x = 1344
  25. 将等式两边同时除以28,得:
  26. x = 1344 / 28
  27. 化简得:
  28. x = 48
  29. 所以,每张课桌的价格为48元。
  30. Answer: 48
  31. --------------------------------------------------
  32. [PROMPT]<|im_start|>system
  33. You are a helpful assistant.<|im_end|>
  34. <|im_start|>user
  35. 甲数是18,乙数比甲数的2倍少5,乙数=.<|im_end|>
  36. <|im_start|>assistant
  37. [OUTPUT]设乙数为x,则根据题意可得:
  38. x = 2 * 18 - 5
  39. x = 36 - 5
  40. x = 31
  41. 所以乙数为31。
  42. Answer: 31<|im_end|>
  43. [LABELS]首先,让我们用变量来表示甲数和乙数。
  44. 甲数 = 18
  45. 乙数 = 2 * 甲数 - 5
  46. 将甲数的值代入乙数的表达式中,我们得到:
  47. 乙数 = 2 * 18 - 5
  48.       = 36 - 5
  49.       = 31
  50. 所以,乙数=31。
  51. Answer: 31
复制代码
资源斲丧
微调

通俗易懂讲解大模型系列



  • 重磅消息!《大模型面试宝典》(2024版) 正式发布!
  • 重磅消息!《大模型实战宝典》(2024版) 正式发布!
  • 做大模型也有1年多了,聊聊这段时间的感悟!
  • 用通俗易懂的方式讲解:不要再苦苦寻觅了!AI 大模型面试指南(含答案)的最全总结来了!
  • 用通俗易懂的方式讲解:我的大模型岗位面试总结:共24家,9个offer
  • 用通俗易懂的方式讲解:大模型 RAG 在 LangChain 中的应用实战
  • 用通俗易懂的方式讲解:一文讲清大模型 RAG 技术全流程

  • 用通俗易懂的方式讲解:如何提升大模型 Agent 的能力?
  • 用通俗易懂的方式讲解:ChatGPT 开放的多模态的DALL-E 3功能,好玩到停不下来!
  • 用通俗易懂的方式讲解:基于扩散模型(Diffusion),文生图 AnyText 的效果太棒了
  • 用通俗易懂的方式讲解:在 CPU 服务器上摆设 ChatGLM3-6B 模型
  • 用通俗易懂的方式讲解:使用 LangChain 和大模型生成海报文案
  • 用通俗易懂的方式讲解:ChatGLM3-6B 摆设指南
  • 用通俗易懂的方式讲解:使用 LangChain 封装自界说的 LLM,太棒了
  • 用通俗易懂的方式讲解:基于 Langchain 和 ChatChat 摆设本地知识库问答系统
  • 用通俗易懂的方式讲解:在 Ubuntu 22 上安装 CUDA、Nvidia 显卡驱动、PyTorch等大模型基础情况
  • 用通俗易懂的方式讲解:Llama2 摆设讲解及试用方式
  • 用通俗易懂的方式讲解:基于 LangChain 和 ChatGLM2 打造自有知识库问答系统
  • 用通俗易懂的方式讲解:一份保姆级的 Stable Diffusion 摆设教程,开启你的炼丹之路
  • 用通俗易懂的方式讲解:对 embedding 模型进行微调,我的大模型召回效果提升了太多了
  • 用通俗易懂的方式讲解:LlamaIndex 官方发布高清大图,纵览高级 RAG技术
  • 用通俗易懂的方式讲解:为什么大模型 Advanced RAG 方法对于AI的未来至关告急?
  • 用通俗易懂的方式讲解:使用 LlamaIndex 和 Eleasticsearch 进行大模型 RAG 检索增强生成
  • 用通俗易懂的方式讲解:基于 Langchain 框架,使用 MongoDB 矢量搜索实现大模型 RAG 高级检索方法
  • 用通俗易懂的方式讲解:使用Llama-2、PgVector和LlamaIndex,构建大模型 RAG 全流程

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

x
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

前进之路

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表