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

1.准备运行环境

1.1 环境准备

环境配置配置说明
硬件配置Atlas 800T A2 910B2(64G)
驱动版本25.2.3
CANN版本8.3.RC2
推理框架vllm-ascend
推理镜像quay.io/ascend/vllm-ascend:v0.11.0rc3
部署方式单机4卡

1.2 镜像及组合制作及安装

  1. 本文使用官方提供镜像,通过docker pull方式进行拉取。

参考示例如下(v0.11.0rc3 为镜像TAG,可以按需修改):

# 获取方式1:
docker pull quay.io/ascend/vllm-ascend:v0.11.0rc3

# 获取方式2:
docker pull m.daocloud.io/quay.io/ascend/vllm-ascend:v0.11.0rc3

# 获取方式3:
docker pull quay.nju.edu.cn/ascend/vllm-ascend:v0.11.0rc3

指定架构可以参考如下:

docker pull --platform arm64 quay.io/ascend/vllm-ascend:v0.11.0rc3
  1. 如果该方案不适用,可参考官方文档进行手动安装

1.3 相关依赖版本信息

配套版本
python3.11.13
torch2.7.1
torch_npu2.7.1
vllm0.11.0
vllm-ascend0.11.0rc3

2.模型权重准备

2.1原始权重

可以从下面示例中任选一种下载权重

# 获取地址1:
https://huggingface.co/Qwen/Qwen2.5-72B-Instruct/tree/main

# 获取地址2:
https://modelscope.cn/models/Qwen/Qwen2.5-72B-Instruct

# 获取地址3:
https://modelers.cn/models/MindSDK/Qwen2.5-72B-Instruct

2.2 权重量化

本文使用W8A8量化权重,量化工具为msModelSlim,官方参考文档:

1)大模型支持矩阵

2)Qwen量化案例

2.2.1 安装msModelSlim

安装指南请参考msModelSlim安装

关键操作如下:

# 1.git clone msmodelslim代码
git clone https://gitcode.com/Ascend/msit.git

# 2.进入到msit/msmodelslim的目录并运行安装脚本
cd msit/msmodelslim
bash install.sh

2.2.2 进行量化

export ASCEND_RT_VISIBLE_DEVICES=0,1,2,3
export PYTORCH_NPU_ALLOC_CONF=expandable_segments:False

python3 quant_qwen.py --model_path {浮点权重路径} --save_directory {W8A8量化权重路径} --calib_file ../common/boolq.jsonl --w_bit 8 --a_bit 8 --device_type npu --trust_remote_code True

3.部署实践

3.1 启动推理容器

# 设置容器名称
export CONTAINER_NAME=Qwen2.5-72B-W8A8
# 选择镜像
export IMAGE=quay.io/ascend/vllm-ascend:v0.11.0rc3
# device 可按需挂载。示例为0-3卡
# 挂载目录需包含权重所在路径,如/root/.cache

docker run --rm \
    --name $CONTAINER_NAME \
    --shm-size=256g \
    --net=host \
    --device /dev/davinci0 \
    --device /dev/davinci1 \
    --device /dev/davinci2 \
    --device /dev/davinci3 \
    --device /dev/davinci_manager \
    --device /dev/devmm_svm \
    --device /dev/hisi_hdc \
    -v /usr/local/dcmi:/usr/local/dcmi \
    -v /usr/local/Ascend/driver/tools/hccn_tool:/usr/local/Ascend/driver/tools/hccn_tool \
    -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/.cache:/root/.cache \
    -it $IMAGE bash

3.2 启动推理服务

进入推理容器后,执行以下操作,启动推理服务

export VLLM_USE_MODELSCOPE=True
export PYTORCH_NPU_ALLOC_CONF=max_split_size_mb:256
export VLLM_USE_V1=1
export LD_PRELOAD=/usr/lib/"$(uname -i)"-linux-gnu/libjemalloc.so.2:$LD_PRELOAD
export TASK_QUEUE_ENABLE=1
export CPU_AFFINITY_CONF=1
export OMP_PROC_BIND=false
export OMP_NUM_THREADS=10
export HCCL_OP_EXPANSION_MODE="AIV"
export VLLM_ASCEND_ENABLE_TOPK_OPTIMIZE=1
export VLLM_ASCEND_ENABLE_FLASHCOMM=1
export VLLM_ASCEND_ENABLE_DENSE_OPTIMIZE=1
export VLLM_ASCEND_ENABLE_PREFETCH_MLP=1


LOCAL_CKPT_DIR=/root/.cache/models/Qwen2.5-72B-Instruct-W8A8

vllm serve "$LOCAL_CKPT_DIR" \
    --host 0.0.0.0 \
    --port 8000 \
    --dtype bfloat16 \
    --tensor-parallel-size 4 \
    --served-model-name Qwen2.5-72B-w8a8 \
    --max-num-seqs 64 \
    --max_model_len 98304 \
    --rope-scaling '{"rope_type":"yarn","factor":3.0,"original_max_position_embeddings":32768}' \
    --enable-auto-tool-choice \
    --tool-call-parser hermes \
    --gpu-memory-utilization 0.9 \
    --quantization ascend \
    --trust-remote-code \
    --distributed_executor_backend "mp" \
    --async-scheduling \
    --compilation-config '{"cudagraph_mode": "FULL_DECODE_ONLY"}'

说明:
1)rope-scaling:modelscope说明内容。

当前模型的 config.json 设置为上下文长度最高可达 32,768 tokens。为了处理超过 32,768 tokens 的大量输入,可以利用 YaRN,这是一种增强模型长度外推的技术,确保在长文本上的最佳性能。

目前,vLLM 仅支持静态 YARN,这意味着无论输入长度如何,缩放因子都保持不变,这可能会影响较短文本的性能。建议仅在需要处理长上下文时添加 rope_scaling 配置。

--rope-scaling '{"rope_type":"yarn","factor":3.0,"original_max_position_embeddings":32768}'

2)需要使用function call功能,可添加如下配置

--enable-auto-tool-choice
--tool-call-parser hermes

3.3 进行推理测试

curl http://localhost:8000/v1/completions \
    -H "Content-Type: application/json" \
    -d '{
        "model": "Qwen2.5-72B-W8A8",
        "prompt": "你好,你是谁",
        "max_tokens": 50,
        "temperature": 0,
        "stream": false
    }'