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/