Qwen2.5是Qwen大型语言模型系列的最新成果。对于Qwen2.5,我们发布了从0.5到720亿参数不等的基础语言模型与指令微调语言模型。Qwen2.5在Qwen2的基础上带来了以下改进:
显著增加的知识量,并在编程与数学领域的能力有了大幅提升,这得益于我们在这些领域的专业专家模型。 在遵循指令、生成长文本(超过8K令牌)、理解结构化数据(如表格)以及生成尤其是JSON格式的结构化输出方面有显著提升。对系统提示多样性的适应性更强,增强了聊天机器人的角色扮演实现和条件设定功能。 支持长上下文,最长可达128K令牌,并能生成最多8K令牌的文本。 支持超过29种语言的多语言能力,包括中文、英语、法语、西班牙语、葡萄牙语、德语、意大利语、俄语、日语、韩语、越南语、泰语、阿拉伯语等。 本仓库包含基础版14B的Qwen2.5模型,其特点如下:
类型:因果语言模型 训练阶段:预训练 架构:采用RoPE、SwiGLU、RMSNorm及Attention QKV偏置的transformers架构 参数数量:147亿 非嵌入参数数量:131亿 层数:48层 注意力头数(GQA):查询(Q)为40个,键值(KV)为8个 上下文长度:131,072个令牌 我们不建议直接使用基础语言模型进行对话。 相反,您可以对此模型进行后训练,例如SFT、RLHF、持续预训练等。
昇腾基于vLLM-Ascend推理框架支持Qwen2.5,兼容当前vLLM-Ascend框架内主流的分布式并行能力,Qwen2.5系列模型一经发布即实现低代码无缝使能,欢迎广大开发者下载体验,以下为手把手教程:
表1 硬件设备
| 设备型号 | NPU配置 |
|---|---|
| Atlas 800I A2 | 8*64G |
| Atlas 800T A2 | 8*64G |
表2 软件版本配套表
| 配套 | 版本 | 环境准备指导 |
|---|---|---|
| cann | 8.2.RC1 | - |
| Python | 3.11.13 | - |
| torch | 2.7.1+cpu | - |
| torch_npu | 2.7.1.dev20250724 | - |
| transformers | 4.56.1 | - |
| vllm | 0.10.2+empty | - |
| vllm_ascend | 0.10.2rc1 | - |
点击下载链接,打开网页后,选择 v0.10.2rc1 版本下载
1、执行以下命令下载
docker pull quay.io/ascend/vllm-ascend:v0.10.2rc1-openeuler2、执行以下命令查看镜像是否下载成功
docker images | grep v0.10.2rc1-openeulerQwen2.5-14B 权重及配置文件说明
| 模型 | 权重 |
|---|---|
| Qwen2.5-14B | huggingface下载链接 |
docker run -itd -u root \
--net=host \
--privileged=true \
--device=/dev/davinci0 \
--device=/dev/davinci1 \
--device=/dev/davinci2 \
--device=/dev/davinci3 \
--device=/dev/davinci4 \
--device=/dev/davinci5 \
--device=/dev/davinci6 \
--device=/dev/davinci7 \
--device=/dev/davinci_manager \
--device=/dev/devmm_svm \
--device=/dev/hisi_hdc \
-v /usr/local/dcmi:/usr/local/dcmi \
-v /usr/local/bin/npu-smi:/usr/local/bin/npu-smi \
-v /usr/local/Ascend/driver/lib64/:/usr/local/Ascend/driver/lib64/ \
-v /usr/local/Ascend/driver/version.info:/usr/local/Ascend/driver/version.info \
-v /etc/ascend_install.info:/etc/ascend_install.info \
-v /root:/root \
-p 8001:8001 \
--shm-size 1024g \
--name vllm-ascend-wlh2 \
quay.io/ascend/vllm-ascend:v0.10.2rc1-openeuler
docker exec -it -u root vllm-ascend-wlh2 bash# 通过如下ASCEND_RT_VISIBLE_DEVICES环境变量指定使用的NPU卡设备
export ASCEND_RT_VISIBLE_DEVICES=1
# 如下/disk1/xxx/Qwen2.5-14B 为容器内权重文件的路径
vllm serve /disk1/xxx/Qwen2.5-14B --port 8001 --max_model_len 9000 --gpu-memory-utilization 0.9启动推理等待大约3~10分钟,服务启动成功
1、登录服务器,修改如下命令中{IP地址:端口号}为推理服务所在的IP:端口,通过curl命令进行调用:
curl http://localhost:8001/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "/disk1/xxx/Qwen2.5-14B",
"messages": [
{"role": "system", "content": "You are a helpful assistant."},
{"role": "user", "content": [
{"type": "text", "text": "描述下中国北京历史?"}
]}
]
}'
1、获取bus-id
npu-smi info2、根据bud-id获取numa node
cat /sys/bus/pci/devices/{bus-id}/numa_node3、查看对应numa node的cpu核
lscpu4、启动服务时,进行绑定上一步查询的cpu核
numactl -C 144-167 vllm serve ...
#若环境没有numactl,使用yum install numactl进行安装参考:https://gitcode.com/Ascend/msit/blob/master/msmodelslim/example/Qwen/README.md
#执行量化命令
export ASCEND_RT_VISIBLE_DEVICES=2
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:False
python3 quant_qwen.py --model_path /disk1/xxx/Qwen2.5-14B --save_directory /disk1/xxx/Qwen2.5-14B-w8a8 --calib_file ../common/boolq.jsonl --w_bit 8 --a_bit 8 --device_type npu --trust_remote_code True
#修改量化后的权重配置
cp /disk1/xxx/Qwen2.5-14B/*.json /disk1/xxx/Qwen2.5-14B-w8a8/
cp /disk1/xxx/Qwen2.5-14B/merges.txt /disk1/xxx/Qwen2.5-14B-w8a8/
rm -f /disk1/xxx/Qwen2.5-14B-w8a8/model.safetensors.index.json参考 https://gitee.com/aisbench/benchmark/blob/master/README.md 安装ais_bench
1、修改ais_bench/datasets/synthetic/synthetic_config.py (请求总数,输入、输出大小)
synthetic_config = {
"Type": "string",
"RequestCount": 200,
"StringConfig": {
"Input": {
"Method": "uniform",
"Params": {"MinValue": 2000, "MaxValue": 2001} # 轾S佅¥轕¿度50-500
},
"Output": {
"Method": "uniform",
"Params": {"MinValue": 1000, "MaxValue": 1001} # 轾S佇º轕¿度20-200
}
}
}2、修改ais_bench/benchmark/configs/models/vllm_api/vllm_api_stream_chat.py(模型名称、并发数)
from ais_bench.benchmark.models import VLLMCustomAPIChatStream
from ais_bench.benchmark.utils.model_postprocessors import extract_non_reasoning_content
models = [
dict(
attr="service",
type=VLLMCustomAPIChatStream,
abbr='vllm-api-stream-chat',
path="/disk1/xxx/Qwen2.5-14B",
model="/disk1/xxx/Qwen2.5-14B",
request_rate = 1,
retry = 2,
host_ip = "localhost",
host_port = 8001,
max_out_len = 512,
batch_size=4,
trust_remote_code=False,
generation_kwargs = dict(
temperature = 0.5,
top_k = 10,
top_p = 0.95,
seed = None,
ignore_eos = True,
repetition_penalty = 1.03,
),
pred_postprocessor=dict(type=extract_non_reasoning_content)
)
]
3、执行测试命令
ais_bench --models vllm_api_stream_chat --datasets synthetic_gen --debug -m perf