Ascend-SACT/Qwen2.5-14B
模型介绍文件和版本Pull Requests讨论分析
下载使用量0

引言

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 A28*64G
Atlas 800T A28*64G

表2 软件版本配套表

配套版本环境准备指导
cann8.2.RC1-
Python3.11.13-
torch2.7.1+cpu-
torch_npu2.7.1.dev20250724-
transformers4.56.1-
vllm0.10.2+empty-
vllm_ascend0.10.2rc1-

1.1 获取并安装vLLM Ascend镜像

1.1.1 软件包下载

点击下载链接,打开网页后,选择 v0.10.2rc1 版本下载

1、执行以下命令下载

docker pull quay.io/ascend/vllm-ascend:v0.10.2rc1-openeuler

2、执行以下命令查看镜像是否下载成功

docker images | grep v0.10.2rc1-openeuler

二、下载权重

Qwen2.5-14B 权重及配置文件说明

模型权重
Qwen2.5-14Bhuggingface下载链接

三、运行指导

3.1 单机单卡部署

3.1.1 启动容器服务样例命令

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

3.1.2 进入容器

docker exec -it -u root vllm-ascend-wlh2 bash

3.1.3 启动推理服务

  • Qwen2.5-14B(单机单卡)
# 通过如下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分钟,服务启动成功

3.2 推理服务验证

3.2.1 命令行方式

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": "描述下中国北京历史?"}
    ]}
    ]
    }'

3.3 基础性能优化

3.3.1 绑核

1、获取bus-id

npu-smi info

2、根据bud-id获取numa node

cat /sys/bus/pci/devices/{bus-id}/numa_node

3、查看对应numa node的cpu核

lscpu

4、启动服务时,进行绑定上一步查询的cpu核

numactl -C 144-167 vllm serve ...
#若环境没有numactl,使用yum install numactl进行安装

3.3.2 w8a8量化

参考: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

3.4 性能测试

参考 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