Qwen1.5-MoE-A2.7B-Chat 基于 Transformers 的部署与推理调用指南(self-llm 实战)
【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调(全参数/Lora)、部署国内外开源大模型(LLM)/多模态大模型(MLLM)教程项目地址: https://gitcode.com/GitHub_Trending/se/self-llm
Qwen1.5-MoE-A2.7B-Chat 是阿里 Qwen1.5 系列中的 MoE(Mixture of Experts,混合专家)对话模型,仅激活 2.7B 参数即可达到当时最先进 7B 模型的水平。本文以开源仓库 self-llm 中 06-Qwen1.5-MoE-A2.7B.md 为核心,完整讲解该模型的架构特点、推理显存估算、环境准备、ModelScope 模型下载以及基于 HuggingFace Transformers 的对话式推理脚本,并结合仓库内的相关文档与源码给出多卡部署、vLLM/MLX 等替代方案,帮助读者在 AutoDL 等 Linux GPU 环境中快速跑通「下载 → 加载 → 对话」的完整链路。
一、Qwen1.5-MoE-A2.7B-Chat 模型与 MoE 架构要点
Qwen1.5-MoE-Chat 是 Qwen1.5 系列中首个混合专家(MoE)结构的对话模型。其最核心的特点是:仅使用 2.7B 激活参数,却能取得与当时最先进的 7B 模型(如 Mistral 7B、Qwen1.5-7B)相当的能力。相比 Qwen1.5-7B,它的训练成本降低了 75%,推理速度提升至约 1.74 倍。
这一「小激活、大总参」的效果来源于 MoE 结构带来的稀疏激活特性,而 Qwen1.5-MoE 相比经典的 Mixtral-MoE 在结构上做了如下改进:
- fine-grained experts(细粒度专家):将专家切分得更细,每个 token 激活的专家组合更灵活,用更小的激活参数量换取更强的表达能力;
- 利用已有的 Qwen1.8B 初始化模型:通过复用成熟的小模型权重做初始化,显著降低从零训练 MoE 的成本;
- shared experts(共享专家)与 routing experts(路由专家)组合的新路由机制:部分专家对所有 token 共享,另一部分专家由路由网络按 token 动态选择,兼顾了通用知识与专业化能力。
需要说明的是,这里提到的 1.74 倍推理速度提升等数据来源于模型发布方在官方技术博客中的说明,在实际硬件上的收益会因 batch size、序列长度、GPU 型号等因素而波动,应以实测为准。该模型在仓库的 support_model.md 中登记为「Qwen1.5-MoE-chat Transformers 部署调用」。
二、推理显存估算:为什么选择双卡 48G
显存计算的考虑会随着模型类型、任务不同而变化。本文的 Transformers 部署调用属于推理任务,因此只需要考虑以下四部分:
- 模型参数;
- KV Cache;
- 中间结果(激活值);
- 输入数据。
由于这是 MoE 模型,虽然每 token 只激活 2.7B 参数,但加载时必须载入完整模型参数。Qwen1.5-MoE-A2.7B 的总参数量约为 14.3B,使用 bf16(即每个参数占用 2 字节)加载时,仅权重就需要约 14.3 × 2 ≈ 28.6 GB 显存;再叠加中间结果、输入数据和 KV Cache 等开销,工程上按约2 × 1.2 × 14.3的经验倍数估算显存需求(其中 1.2 为 bf16 权重 2 字节乘以负载系数后的综合余量)。因此单张 24G 显卡无法容纳,本文选择双卡共 48G 显存的方案,并通过device_map="auto"让 Transformers 自动将模型切分到多张 GPU 上。
提示:若显存紧张,可考虑 4bit/8bit 量化或 vLLM 的 KV Cache 管理(PagedAttention)来降低显存占用,详见本文最后一节。
三、环境准备
本文基础环境如下:
---------------- ubuntu 22.04 python 3.12 cuda 12.1 pytorch 2.3.0 ----------------本文默认学习者已安装好以上 PyTorch(CUDA) 环境,如未安装请自行安装。
接下来开始环境配置、模型下载和运行演示。由于 Qwen1.5-MoE 属于较新的架构,需要安装包含 Qwen1.5-MoE 支持的较新版本 Transformers,同时安装 modelscope、sentencepiece、accelerate 等推理依赖,并可额外安装 fastapi、uvicorn、streamlit 等为后续扩展 API/Web 服务做准备:
# 因为涉及到访问 github,因此最好打开 autodl 的学术镜像加速 source /etc/network_turbo # 升级 pip python -m pip install --upgrade pip # 更换 pypi 源加速库的安装 pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple # 从 transformers 的 github 仓库中安装包含 qwen1.5-moe 的新版本 pip install git+https://github.com/huggingface/transformers # 安装需要的 python 包 pip install modelscope sentencepiece accelerate fastapi uvicorn requests streamlit transformers_stream_generator # 安装 flash-attention pip install https://github.com/Dao-AILab/flash-attention/releases/download/v2.4.2/flash_attn-2.4.2+cu122torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl几点说明:
source /etc/network_turbo是 AutoDL 平台的学术加速开关,仅在 AutoDL 等支持该机制的平台上有效;pip config set global.index-url将默认 PyPI 源切换为清华源,以加速依赖安装,更完整的换源方式(pip/conda)可参考仓库中的 01-pip、conda换源.md;- flash-attention 的预编译 wheel 需要与本地 CUDA、torch、python 版本严格对应,示例给出的 wheel 面向 cu122 + torch2.1 + cp310,若本机版本不同,建议改用
pip install flash-attn --no-build-isolation源码编译,或直接跳过(Transformers 推理不安装 flash-attention 也可运行,仅速度有差异)。
四、模型下载
使用modelscope中的snapshot_download函数下载模型。第一个参数为模型名称,参数cache_dir为自定义的模型下载路径,参数revision为模型仓库分支版本,master代表主分支,也是一般模型上传的默认分支。
先切换到autodl-tmp目录:
cd /root/autodl-tmp然后新建名为model_download.py的 Python 文件,并在其中输入以下内容并保存:
# model_download.py from modelscope import snapshot_download model_dir = snapshot_download('qwen/Qwen1.5-MoE-A2.7B-Chat', cache_dir='/root/autodl-tmp', revision='master')然后在终端中执行下载:
python model_download.py注意该模型权重文件比较大(完整 14.3B 参数,下载体积约 28GB 级别),因此需要耐心等待一段时间直到模型下载完成。
注意:记得修改
cache_dir为你的模型下载路径哦~
下载完成后,模型文件会出现在/root/autodl-tmp/qwen/Qwen1.5-MoE-A2.7B-Chat目录下,供后续代码直接引用。
五、Transformers 推理代码(核心实践)
在/root/autodl-tmp路径下新建trains.py文件,并在其中输入以下内容(原文档即以此脚本演示推理,命名沿用了原文):
import torch # 导入torch库,用于深度学习相关操作 from transformers import AutoTokenizer, AutoModelForCausalLM, GenerationConfig # 三个类分别用于加载分词器、加载因果语言模型和加载生成配置 # 将模型路径设置为刚刚下载的模型路径 model_name = "/root/autodl-tmp/qwen/Qwen1.5-MoE-A2.7B-Chat" # 加载语言模型,设置数据类型为bfloat16即混合精度格式以优化性能并减少显存使用,将推理设备设置为`auto`自动选择最佳的设备进行推理,如果没有可用的GPU,它可能会回退到CPU model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.bfloat16, device_map="auto") # 加载分词器 tokenizer = AutoTokenizer.from_pretrained(model_name) # 定义input字符串 prompt = "Give me a short introduction to large language model." messages = [ {"role": "system", "content": "You are a helpful assistant."}, {"role": "user", "content": prompt} ] # 使用分词器的apply_chat_template方法来处理messages,转换格式 text = tokenizer.apply_chat_template( messages, tokenize=False, add_generation_prompt=True # 在消息前添加生成提示 ) # 将text变量中的文本转换为模型输入的格式,指定返回的张量为PyTorch张量("pt") model_inputs = tokenizer([text], return_tensors="pt").to(device) # 使用模型的generate方法来生成文本 generated_ids = model.generate( model_inputs.input_ids, max_new_tokens=512 ) # 从生成的ID中提取出除了原始输入之外的新生成的token generated_ids = [ output_ids[len(input_ids):] for input_ids, output_ids in zip(model_inputs.input_ids, generated_ids) ] # 使用分词器的batch_decode方法将生成的token ID转换回文本 response = tokenizer.batch_decode(generated_ids, skip_special_tokens=True)[0] # 显示生成的回答 print(response)5.1 逐段拆解:加载、模板与生成
(1)模型与分词器加载
torch_dtype=torch.bfloat16:以 bf16 混合精度加载权重,既减少显存占用,又避免 fp16 在部分精度敏感场景下的溢出问题;device_map="auto":让 Accelerate 自动完成设备分配。在双卡 48G 场景下,模型 14.3B 的 bf16 权重会被自动切分到两张卡上,实现张量并行式的多卡推理。如果检测不到可用 GPU,则会回退到 CPU(速度会非常慢,仅适合验证流程)。
(2)对话模板组装
Qwen1.5-MoE-Chat 使用 ChatML 对话格式,apply_chat_template会自动将system/user/assistant消息列表转换为模型期望的带特殊 token 的输入文本;add_generation_prompt=True会在消息末尾追加assistant的起始标记,告诉模型从该位置开始续写。
(3)生成与解码
model.generate(model_inputs.input_ids, max_new_tokens=512):在已有输入基础上续生最多 512 个新 token;- 用切片
output_ids[len(input_ids):]去除输入部分,只保留新生成部分; batch_decode(..., skip_special_tokens=True)将 token ID 还原为可读文本,并剔除<bos>、<eos>等特殊 token。
一个小提示:脚本中
model_inputs = tokenizer([text], return_tensors="pt").to(device)引用的device变量在原文中未显式定义;由于model已通过device_map="auto"分配设备,实际运行时建议将输入张量移动到与model相同的设备(例如显式使用model.device或直接用.to("cuda")),否则在多卡/CPU 回退场景下可能出现设备不匹配告警。
5.2 运行结果
在终端执行:
cd /root/autodl-tmp python trains.py运行结果如下图所示,模型加载完成后生成了与代码中 prompt 对应的回答:
从截图可以看到两个关键细节:一是模型以**分片(checkpoint shards)**方式加载(8 个分片全部加载成功),这正是 MoE 大总参模型权重文件的典型组织形式;二是模型对英文 prompt「Give me a short introduction to large language model.」输出了一段关于大型语言模型定义、应用与伦理关切的结构化英文介绍,说明对话能力正常生效。
六、延伸:同一模型的更多部署方式(仓库佐证)
围绕 Qwen1.5-MoE-A2.7B-Chat,仓库内其他文档还提供了多种部署路径,可依据硬件与场景按需选择:
6.1 vLLM 推理(高吞吐场景)
仓库的 07-Qwen1.5-7B-Chat vLLM 推理部署调用.md 中,vLLM 离线推理示例特意注释了 MoE 模型的使用方式——只需将模型路径/名称替换为Qwen/Qwen1.5-MoE-A2.7B-Chat即可复用同一套LLM+SamplingParams接口:
from vllm import LLM, SamplingParams model = "/root/autodl-tmp/qwen/Qwen1.5-MoE-A2.7B-Chat" # 或使用 "Qwen/Qwen1.5-MoE-A2.7B-Chat" 自动下载 llm = LLM(model=model, max_model_len=2048) sampling_params = SamplingParams(temperature=0.8, top_p=0.95, max_tokens=512) outputs = llm.generate(["给我介绍一下大型语言模型。"], sampling_params)vLLM 通过 PagedAttention 高效管理 KV Cache,配合 MoE 的稀疏激活特性,能进一步放大显存利用率与吞吐优势;同时它兼容 OpenAI API 协议,可用curl或openai客户端直接调用/v1/chat/completions。该文档还提供了仓库自带的 benchmark_throughput.py 对 vLLM 与原生 Transformers 进行吞吐对比的完整参数说明(--backend可选 vllm/hf/mii,--input-len、--output-len、--num-prompts等均可在脚本源码 benchmark_throughput.py 中核对)。
6.2 MLX 4bit 量化(Apple Silicon 场景)
在仓库的 models_mlx/README.md 与模型配置清单 mlx.json 中,Qwen1.5-MoE-A2.7B-Chat-4bit(以及对应的 Base 版)均被列为受支持的 MLX 量化模型。如果你手头是 Apple Silicon(M 系列)设备,可通过 MLX-LM 加载 4bit 量化版本,从而把该 MoE 模型部署到 Mac 上,详见 models_mlx 目录的说明文档与 Notebook。
6.3 自行扩展 API/Web 服务
若希望在 Transformers 推理脚本基础上进一步封装成 HTTP 服务,可参考同目录的 01-Qwen1.5-7B-Chat FastApi 部署调用.md:其完整实现了 FastAPI + uvicorn 的/POST 端点(包含torch_gc显存回收、apply_chat_template对话组装、curl/requests 调用示例),将该文档中的model_name_or_path换成/root/autodl-tmp/qwen/Qwen1.5-MoE-A2.7B-Chat即可复用。
七、总结与注意事项
本文完整走通了 Qwen1.5-MoE-A2.7B-Chat 在双卡 48G 显存环境下的 Transformers 推理链路,核心要点归纳如下:
- MoE 模型「激活参数小、总参数量大」:每 token 仅激活 2.7B 参数,但加载需要完整 14.3B 权重,显存规划务必按总参数量计算(bf16 下约 28.6GB 权重 + 运行开销);
- 依赖版本敏感:Qwen1.5-MoE 需要较新的 Transformers(文档采用直接从 GitHub 源码安装的方式);flash-attention 的预编译 wheel 与 CUDA/torch/python 版本强绑定,不匹配时应换用源码编译或跳过;
- 双卡推理依赖
device_map="auto":由 Accelerate 自动切分权重,脚本层面无需手工指定张量并行策略; - 对话格式:务必通过
apply_chat_template组装 messages 并开启add_generation_prompt=True,否则模型无法感知 assistant 起始位置; - 多场景复用:同一模型权重在仓库文档支持下可无缝迁移到 vLLM(高吞吐服务化)、MLX 4bit(Apple Silicon 端侧)等部署形态。
以上部署与运行均以仓库内 06-Qwen1.5-MoE-A2.7B.md 及同目录姊妹文档为准,读者可按需查阅 support_model.md 获取该模型在整个 self-llm 教程体系中的完整索引。
【免费下载链接】self-llm《开源大模型食用指南》针对中国宝宝量身打造的基于Linux环境快速微调(全参数/Lora)、部署国内外开源大模型(LLM)/多模态大模型(MLLM)教程项目地址: https://gitcode.com/GitHub_Trending/se/self-llm
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考