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

引言

Qwen2.5 是最新的 Qwen 大型语言模型系列。对于 Qwen2.5,我们发布了从 0.5 到 720 亿参数的多个基础语言模型和指令调优语言模型。Qwen2.5 在 Qwen2 的基础上带来了以下改进:

显著地增加了知识量,并在编程和数学方面的能力大幅提升,这得益于我们在这些领域的专业专家模型。 指令遵循、生成长文本(超过 8K tokens)、理解结构化数据(例如表格)以及生成结构化输出(特别是 JSON)方面有显著改进。对系统提示的多样性更具适应性,增强了角色扮演实现和聊天机器人的条件设置。 支持长上下文,最多可达 128K tokens,并且可以生成最多 8K tokens。 支持多语言,包括中文、英文、法语、西班牙语、葡萄牙语、德语、意大利语、俄语、日语、韩语、越南语、泰语、阿拉伯语等超过 29 种语言。 此仓库包含指令调优的 7B Qwen2.5 模型,具有以下特点:

类型:因果语言模型 训练阶段:预训练与后训练 架构:带有 RoPE、SwiGLU、RMSNorm 和 Attention QKV 偏置的 transformers 参数数量:76.1 亿 非嵌入参数数量:65.3 亿 层数:28 层 注意力头数(GQA):Q 为 28 个,KV 为 4 个 上下文长度:完整 131,072 tokens,生成 8192 tokens

昇腾基于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-7B-Instruct 权重及配置文件说明

模型权重
Qwen2.5-7B-Instructhuggingface下载链接

三、运行指导

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-7B-Instruct(单机单卡)
# 通过如下ASCEND_RT_VISIBLE_DEVICES环境变量指定使用的NPU卡设备
export ASCEND_RT_VISIBLE_DEVICES=1

# 如下/disk1/xxx/Qwen2.5-7B-Instruct 为容器内权重文件的路径
vllm serve /disk1/xxx/Qwen2.5-7B-Instruct --port 8001

启动推理等待大约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-7B-Instruct",
    "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 /disk1/xxx/Qwen2.5-7B-Instruct --port 8001
#若环境没有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-7B-Instruct --save_directory /disk1/xxx/Qwen2.5-14B-Instruct-w8a8 --calib_file ../common/boolq.jsonl --w_bit 8 --a_bit 8 --device_type npu --trust_remote_code True
#修改量化后的权重配置
cp /disk1/xxx/Qwen2.5-7B-Instruct/*.json /disk1/xxx/Qwen2.5-7B-Instruct-w8a8/ 
cp /disk1/xxx/Qwen2.5-7B-Instruct/merges.txt /disk1/xxx/Qwen2.5-7B-Instruct-w8a8
rm -f /disk1/xxx/Qwen2.5-7B-Instruct-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