国产GPU跑大模型:从驱动到推理的部署实操
想在国产GPU上跑通大模型,核心是把驱动、计算库和推理框架三层环境对齐,再选一个与硬件匹配的模型加载方式。
下面以昇腾NPU为例,按实际部署顺序拆解步骤,零基础也能照着走。
先确认硬件与系统环境
部署前先登录服务器,用命令确认NPU型号和操作系统版本,避免后面装错驱动包。
npu-smi info
cat /etc/os-release
uname -m
npu-smi info 会列出NPU型号和健康状态。
如果提示命令不存在,说明驱动未安装或环境变量未生效。
记录下型号(如910B)和系统架构(aarch64或x86_64),后续下载驱动和CANN包时必须严格对应。
同时确认Python版本在3.8到3.10之间,并预留至少50GB磁盘空间给模型权重和依赖。
安装驱动与CANN工具包
驱动是内核态基础,CANN是昇腾的计算架构层,两者版本必须配套。
从昇腾社区下载对应版本的Ascend-hdk-<型号>-npu-driver_<版本>_linux-<架构>.run和Ascend-cann-toolkit_<版本>_linux-<架构>.run,上传到服务器后按顺序执行。
chmod +x Ascend-hdk-*-npu-driver_*.run
./Ascend-hdk-*-npu-driver_*.run --full
安装完成后重启服务器,再次执行npu-smi info应能看到NPU列表且状态正常。
接着安装CANN:
chmod +x Ascend-cann-toolkit_*.run
./Ascend-cann-toolkit_*.run --install
source /usr/local/Ascend/ascend-toolkit/set_env.sh
把source命令写入~/.bashrc,避免每次新开终端都要手动加载。
验证CANN是否生效:
python3 -c "import acl; print(acl.get_device_count())"
输出大于0表示Python侧已能识别NPU。
部署推理框架并加载模型
推荐使用vLLM的昇腾适配版本,它兼容OpenAI接口,方便后续对接应用。
先创建虚拟环境,再安装对应版本的torch和vllm-ascend:
python3 -m venv /opt/llm-env
source /opt/llm-env/bin/activate
pip install torch==2.1.0 --index-url https://download.pytorch.org/whl/cpu
pip install vllm-ascend
注意torch需安装CPU版本,NPU计算由vllm-ascend后端接管。
模型权重可从ModelScope下载,以Qwen2.5-7B-Instruct为例:
pip install modelscope
modelscope download --model Qwen/Qwen2.5-7B-Instruct --local_dir /data/models/qwen2.5-7b
启动服务时指定NPU设备和模型路径:
ASCEND_RT_VISIBLE_DEVICES=0 vllm serve /data/models/qwen2.5-7b \
--dtype float16 --max-model-len 4096 --port 8000
首次加载会编译算子,耗时较长属正常现象。
看到Uvicorn running on http://0.0.0.0:8000即表示服务已就绪。
常见报错与避坑提醒
npu-smi找不到设备:检查驱动是否安装完整,执行ls /dev/davinci*确认设备节点存在;若缺失,重装驱动并重启。- CANN版本与驱动不匹配:安装CANN时若提示版本校验失败,回到昇腾社区核对驱动与CANN的配套关系表,不要强行跳过。
- 显存不足(OOM):7B模型float16约需14GB显存,若NPU显存较小,改用
--dtype bfloat16或量化版本,并降低--max-model-len。 - pip安装vllm-ascend失败:确认Python版本和系统架构与wheel包一致,aarch64环境需使用对应架构的源。
验证推理服务是否可用
服务启动后,用curl发送一个简单请求,检查返回是否包含正常文本:
curl http://127.0.0.1:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{"model":"/data/models/qwen2.5-7b","messages":[{"role":"user","content":"你好"}],"max_tokens":32}'
若返回JSON中choices[0].message.content有中文回复,说明部署成功。
同时观察npu-smi info中的显存占用和利用率,确认请求确实跑在NPU上而非CPU回退。
适用条件说明:本文步骤基于昇腾NPU与vLLM-Ascend组合,其他国产GPU(如寒武纪、海光)的驱动和框架名称不同,需替换为对应厂商的工具链。
模型加载参数和显存需求随模型规模变化,请以实际硬件规格调整。
两个常见疑问
Q:必须用vLLM吗? 不是。
也可用MindIE或TGI的昇腾适配版,选择取决于是否需要OpenAI兼容接口和社区生态。
vLLM-Ascend的优点是配置简单、接口通用。
Q:模型权重可以放系统盘吗? 不建议。
权重文件通常十几GB以上,放在独立数据盘(如/data)便于扩容和迁移,也避免系统盘写满导致服务异常。