npu推理环境配置:https://ascend.github.io/docs/sources/ascend/quick_install.html
llama-factory适配的NPU说明:https://llamafactory.readthedocs.io/zh-cn/latest/advanced/npu_inference.html
一些CANN命令:
与cuda的对应关系
# 查看NPU信息
npu-smi info = nvidia-smi
# 查看NPU当前情况(更新时间间隔为1秒,原地刷新):
watch -n 1 npu-smi info = watch -n 1 nvidia-smi
# 查看NPU当前情况(更新时间间隔为1秒,会保留之前的历史)
npu-smi info -l 1 = nvidia-smi -l 1
一、环境配置
- 两张300i duo卡(官方显存每张96G),每张卡由两个芯片组成,每个芯片显存大约44G;
- 驱动版本信息:25.0.rc1.1
- 固件版本信息:
Version=7.7.0.1.231
firmware_version=1.0
package_version=25.0.rc1.1
compatible_version_drv=[23.0.rc2,23.0.rc2.],[23.0.rc3,23.0.rc3.],[23.0.0,23.0.0.],[24.0,24.0.],[24.1,24.1.],[25.0,25.0.] - CANN版本:8.0.RC1;
- 算子包版本:8.0.RC1。
1、查看HwHiAiUser用户是否存在:
id HwHiAiUser
不存在则:
sudo groupadd HwHiAiUser
sudo useradd -g HwHiAiUser -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash
然后将当前用户添加到HwHiAiUser group中(存在则直接运行该命令):
sudo usermod -aG HwHiAiUser $USER
之后需要安装驱动npu-driver、固件npu-firmware。
安装完成驱动后,使用npu-smi info命令即可验证是否安装成功。
2、安装CANN+算子包:
(1)安装python环境依赖:
安装Miniforge:
下载.sh文件:https://mirror.nju.edu.cn/github-release/conda-forge/miniforge/LatestRelease/
然后执行:
bash Miniforge3-25.3.0-3-Linux-aarch64.sh # 根据自己下载的版本替换文件名
创建conda环境后,在环境下pip安装环境依赖即可;
(2)安装CANN
# 下载需要的版本
wget "https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN 8.0.RC1/Ascend-cann-toolkit_8.0.RC1_linux-aarch64.run"
# 执行bash命令安装
bash Ascend-cann-toolkit_8.0.RC1_linux-aarch64.run --full
配置环境变量:
source ~/Ascend/ascend-toolkit/set_env.sh #~/根据自己的真实路径进行替换,后面的路径基本都是固定的
【
上述方式需要每次打开新的终端都执行一次,可以直接修改用户配置文件,当前用户永久生效。
# 打开当前用户的配置文件
vi ~/.bashrc
# 在文件末尾加入:
source ~/Ascend/ascend-toolkit/set_env.sh
# 保存文件后,使配置立即生效:
source ~/.bashrc
】
(3)安装算子包
# 下载与CANN对应的算子包版本
wget "https://ascend-repo.obs.cn-east-2.myhuaweicloud.com/CANN/CANN 8.0.RC1/Ascend-cann-kernels-310p_8.0.RC1_linux.run"
# 执行bash命令安装
bash Ascend-cann-kernels-310p_8.0.RC1_linux.run --install
二、使用transformers进行模型推理
1、具体方式
与使用GPU相比,需要改以下几点:
- 除了需要安装并导入torch模块,还需要torch_npu,
import torch, torch_npu
; - 指定设别device为npu,
device = torch.device("npu" if torch.npu.is_available() else "cpu")
; - 模型成功后,显式加载到NPU上,
model.to(device)
- 指定多张卡,使用环境变量:
ASCEND_RT_VISIBLE_DEVICES=0,1
- 指定了多张卡没有起作用,且最终模型加载到了NPU上,计算在CPU上进行的。
2、遇见的一些报错:
报错一:
ImportError: libhccl.so: cannot open shared object file: No such file or directory. Please check that the cann package is installed. Please run 'source set_env.sh' in the CANN installation path.
原因:CANN环境变量未正确配置或 CANN 未完全安装。
解决:确保CANN安装成功后,配置环境变量:
source ~/Ascend/ascend-toolkit/set_env.sh # CANN的安装路径
报错二:
RuntimeError: Expected one of cpu, cuda, ipu, xpu, mkldnn, opengl, opencl, ideep, hip, ve, fpga, maia, xla, lazy, vulkan, mps, meta, hpu, mtia, privateuseone device type at start of device string: npu
原因:
使用transformers加载模型时,指定的device=‘npu’,但是没有安装torch_npu相关模块。
解决:
注意torch_npu相关版本。
安装torch_npu
安装torchvision
需要注意torchvision与torch的版本对应关系(https://kkgithub.com/pytorch/vision),如:
pip install torchvision==0.16.0
pip install torch==2.1.0
pip install torch_npu==2.1.0
报错三:
ModuleNotFoundError: Could not import module 'PreTrainedModel'. Are this object's requirements defined correctly?
原因:transformer版本不匹配导致
解决:
注意transfromers相关版本。
降低transformers版本,4.53.2—>4.51.0
报错四:
RuntimeError: Expected all tensors to be on the same device. Expected NPU tensor, please check whether the input tensor device is correct.
报错前的提醒:
/home/wzb/miniforge3/envs/llama_factory_cqf/lib/python3.10/site-packages/transformers/generation/