本方案可以实现多卡推理 DeepSeek R1 Distill Qwen 模型,全程操作没有使用容器,特别适合在 Batch System (e.g., Slurm, CraneSched) 下使用。
一开始尝试使用昇腾 MindIE 推理引擎(DeepSeek 推荐),但该方案部分文件需要获取华为的授权,无法下载。因此使用 LMDeploy 项目推理 DeepSeek-R1-Distill-Qwen-32B 模型。
环境准备
Driver
下载并安装昇腾 Driver(直接参考教程即可)。
CANN
使用 LMDeploy 需要 CANN 8.0。
下载地址:https://www.hiascend.com/developer/download/community/result?module=pt+cann
选择 CANN 8.0.0beta(2025/01 最新版),aarch64 架构。下载以下安装包(.run 或 .rpm 格式均可):
- cann toolkit
- cann kernels
- cann naal
下载后按 toolkit -> kernels -> naal 的顺序安装。
Pytorch
- 新建一个 Conda 虚拟环境,使用 Python 3.10 版本:
conda create env -n lmdeploy python=3.10
- 进入虚拟环境,直接安装 torch 2.3.1:
pip install torch==2.3.1
- 下载安装对应版本的昇腾 NPU 插件(torch_npu):
下载地址:https://gitee.com/ascend/pytorch/releases/download/v6.0.0-pytorch2.3.1/torch_npu-2.3.1.post4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
pip install ./torch_npu-2.3.1.post4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
LMDeploy
需要通过源代码安装。
- 首先从远程拉取代码:
git clone https://github.com/InternLM/lmdeploy.git
- 激活环境变量:
source /usr/local/Ascend/ascend-toolkit/set_env.sh
source /usr/local/Ascend/nnal/atb/set_env.sh --cxx_abi=0
- 注意后续使用 LMDeploy 时也必须先加载这些环境变量。
- 从源代码安装 lmdeploy:
cd lmdeploy
LMDEPLOY_TARGET_DEVICE=ascend pip3 install -v --no-build-isolation -e .
- 注意必须使用
LMDEPLOY_TARGET_DEVICE=ascend
否则安装失败。
验证安装
- Pytorch 调用 NPU 功能验证:
python -c "import torch;import torch_npu; a = torch.randn(3, 4).npu(); print(a + a);"
- LMDeploy 验证:
which lmdeploy
lmdeploy --help
获取权重
可以使用 Hugging Face / ModelScope 的 Safe-tensor 格式权重。推荐使用 Hugging Face 或 ModelScope 的 CLI,支持断点续传:
# hugging face cli
pip install "huggingface_hub[cli]"
# modelscope
pip install modelscope
下载权重:
# 从 hugging face 下载(注意网络问题)
huggingface-cli download deepseek-ai/DeepSeek-R1-Distill-Qwen-32B --local-dir ./DeepSeek-R1-Distilled-Qwen-32B
# 从 modelscope 下载(阿里云)
modelscope download --model deepseek-ai/DeepSeek-R1-Distill-Qwen-32B --local_dir ./DeepSeek-R1-Distilled-Qwen-32B
命令行推理
可以在命令行中快捷加载权重,在终端中测试 LLM 推理。
lmdeploy chat ./DeepSeek-R1-Distill-Qwen-32B --backend pytorch --device ascend --eager-mode
- 注意替换模型路径。
- 必须使用 pytorch 后端,并指定使用 ascend 设备类型。
- 以上命令为单机单卡推理,如果需要多卡,需要使用
--tp
开启张量并行(必须为 2^n)。
API Server
启动 API Server:
lmdeploy serve api_server $MODEL_PATH \
--backend pytorch \
--device ascend \
--dtype 'bfloat16' \
--tp $TENSOR_PARA \
--model-name $MODEL_PATH \
--server-name '0.0.0.0'\
--server-port 9000 \
--eager-mode
测试 API
curl -X POST "http://0.0.0.0:9000/v1/completions" \
-H "Content-Type: application/json" -d '{
"model": "/data/hf-models/DeepSeek/DeepSeek-R1-Distill-Qwen-32B",
"prompt": "What is the answer of expression 27d & 10b + 11o? Output the answer in \boxed{}.",
"max_tokens": 8192,
"context_length": 8192
}'
- 注意替换 Model 字段为启动 API Server 时的模型路径/模型名称。