华为ATLAS配置
2 华为环境配置
2.1 驱动/固件升级
版本对应:
驱动:Ascend-hdk-310p-npu-driver_23.0.1_linux-aarch64.run
固件:Ascend-hdk-310p-npu-firmware_7.1.0.4.220.run
CANN:8.0.RC2.alpha003(或者7.0 - 8.0.RC2之间)
一般来说,环境本身已经带有驱动/固件/CANN,当报错或不满足需求时,一般需要进行升级。此时首先可以尝试覆盖安装,若覆盖安装中报错可以尝试卸载后安装。
安装参考链接:驱动/固件安装说明
覆盖(非首次)安装(⚠️: 选择覆盖安装,一定要先装固件再装驱动
):
# 安装固件🔥
#执行如下命令,增加软件包的可执行权限。
chmod +x Ascend-hdk-310p-npu-firmware_x.x.x.x.X.run
#执行如下命令,校验run安装包的一致性和完整性。
./Ascend-hdk-310p-npu-firmware_x.x.x.x.X.run --check
# 执行如下命令,完成安装。软件包默认安装路径:/usr/local/Ascend。
./Ascend-hdk-310p-npu-firmware_x.x.x.x.X.run --full
# 查看固件版本号
/usr/local/Ascend/driver/tools/upgrade-tool --device_index -1 --component -1 --version
# 安装详细日志路径:/var/log/ascend_seclog/ascend_install.log。
# 安装后软件包的安装路径、安装命令以及运行用户信息记录路径:/etc/ascend_install.info。
# 安装驱动🔥
# 增加软件包权限
chmod +x Ascend-hdk-310p-npu-driver_x.x.x_linux-{arch}.run
# 校验安装包的一致性和完整性
./Ascend-hdk-310p-npu-driver_x.x.x_linux-{arch}.run --check
# 完成驱动安装,默认安装路径“/usr/local/Ascend”
./Ascend-hdk-310p-npu-driver_x.x.x_linux-{arch}.run --full
# 安装详细日志路径:/var/log/ascend_seclog/ascend_install.log。
# 安装后软件包的安装路径、安装命令以及运行用户信息记录路径为“/etc/ascend_install.info”。
# 固件和驱动均覆盖安装成功后,查看显卡信息是否能够查看
npu-smi info
# 重启
reboot
若覆盖安装报错**[ERROR]None of the chips are up**.可选择卸载重装。若首次安装跳过卸载直接安装即可。⚠️:
选择卸载重装或首次安装,一定要先装驱动再装固件
。
# 查看驱动和固件原安装位置,会输出<install-path>路径
cat /etc/ascend_install.info
# 执行脚本卸载驱动
<install-path>/driver/script/uninstall.sh
# 执行脚本卸载
<install-path>/firmware/script/uninstall.sh
# 重启
reboot
# 然后按照之前的安装方式进行安装即可
2.2 CANN升级
在上述提到的下载页面进行选择:
-
产品系列:加速卡;产品型号:实际推理卡型号
-
Pytorch过滤;CANN:8.0.RC2.alpha003;选择AArch64/X86_64;软件包格式:run
-
下载Ascend-cann-toolkit_8.0.RC2.alpha003_linux-aarch64.run
# 建议run
chmod +x Ascend-cann-toolkit_8.0.RC2.alpha003_linux-aarch64.run
./Ascend-cann-toolkit_8.0.RC2.alpha003_linux-aarch64.run --check
./Ascend-cann-toolkit_8.0.RC2.alpha003_linux-aarch64.run --install
# 按照提示确认是否需要reboot
# 添加环境变量
source /usr/local/Ascend/ascend-toolkit/set_env.sh
3 环境信息及报错解决
3.1 信息确认
# 常规系统级
lscpu # 查看cpu相关信息(架构、CPU型号、核心数信息)
cat /etc/os-release # 操作系统(宿主机/容器)
uname -r # 记录内核版本防止后续自动升级无法校验
ldd --version # GLIBC版本
df -h # 查看内存信息
# 华为系统级
cat /usr/local/Ascend/driver/version.info # 查看驱动信息
/usr/local/Ascend/driver/tools/upgrade-tool --device_index -1 --component -1 --version # 查看固件信息
cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info # 查看CANN相关信息
npu-smi info -l # 查看显卡具体信息,🎯注意NPU ID
npu-smi info -t product -i {NPU ID} # 查看具体某张卡的具体型号(310P3->Atlas 300I Pro)
npu-smi info -m # 直接查看所有卡的具体型号
# 程序级
top -d 0.5 -n 200 | grep uwsgi # 每0.5s刷新top命令中uwsgi的执行占用
3.2 获取环境信息脚本(🐾source执行)
#!/bin/bash
# 打印表头
printf "%-30s | %-30s\n" "Tools" "Version"
printf "%-30s | %-30s\n" "------------------------------" "------------------------------"
# 输出指定的CPU信息
echo "=== CPU Information ==="
lscpu | awk -F: '$1 ~ /^(Architecture|CPU\(s\)|Model name)$/ {print $1": "$2}' | while IFS= read -r line; do
printf "%-30s | %-30s\n" "CPU Information" "$line"
done
# 输出指定的OS信息
os_info=$(cat /etc/os-release | awk -F= '$1 ~ /^(PRETTY_NAME)$/ {print $2}' | tr -d '\"')
printf "%-30s | %-30s\n" "OS Information" "$os_info"
# 输出内核版本
kernel_info=$(uname -r)
printf "%-30s | %-30s\n" "Kernel" "$kernel_info"
# 输出GLIBC版本
glibc_info=$(ldd --version | awk '/GLIBC/ {print $3": "$NF}')
printf "%-30s | %-30s\n" "GLIBC" "$glibc_info"
# 输出内存信息
memory_info=$(df -h | awk '/overlay/ {print $1": "$2}')
printf "%-30s | %-30s\n" "Memory" "$memory_info"
# 输出ATLAS驱动信息
atlas_driver_info=$(cat /usr/local/Ascend/driver/version.info | awk -F= '/Version/ {print $2}')
printf "%-30s | %-30s\n" "Atlas Driver" "$atlas_driver_info"
# 输出ATLAS固件信息
atlas_firmware_info=$(/usr/local/Ascend/driver/tools/upgrade-tool --device_index -1 --component -1 --version | awk -F '["}]' '/"version"/ {print $7; exit}')
printf "%-30s | %-30s\n" "Atlas Firmware" "$atlas_firmware_info"
# 输出ATLAS CANN版本信息
atlas_cann_info=$(cat /usr/local/Ascend/ascend-toolkit/latest/aarch64-linux/ascend_toolkit_install.info | awk -F= '/^version/ {print $NF}')
printf "%-30s | %-30s\n" "Atlas CANN" "$atlas_cann_info"
# 查看NPU ID及对应的显卡具体型号
npu_info=$(npu-smi info -m | awk 'NR>1 {print "NPU ID " $1 ": " $4 " " $5}' | sed 's/ -//')
printf "%-30s | %-30s\n" "NPU Information" "$(echo "$npu_info" | tr '\n' ', ')"
# 打印结束标识
printf "%-30s | %-30s\n" "------------------------------" "------------------------------"
3.3 相关报错
3.3.1 日志等级提升
以模型转换为例,当在310P3(300I Pro/300V ProD等)硬件上转换模型时,可能会报错,此时可以通过提升日志等级,生成plog,打印更多的错误信息来进行定位。:
atc --framework=5 --model=water_surface_seg_20240130.onnx --input_shape="x:1,3,512,512" --output=water_surface_seg_20240130 --log=debug --soc_version=Ascend310P3
提升日志等级,生成plog进行定位:
export ASCEND_SLOG_PRINT_TO_STDOUT=1 # 输出不打印到屏幕上
export ASCEND_GLOBAL_LOG_LEVEL=0 # 日志级别改为debug模式
可以通过>>error.log重定向将打屏的所有信息存储到error.log中,一是方便自己查看,另外自身无法解决时,也方便上传error.log到昇腾论坛以供工程师分析。
恢复日志等级:
export ASCEND_SLOG_PRINT_TO_STDOUT=0 # 打印大屏幕上
export ASCEND_GLOBAL_LOG_LEVEL=3 # 执行模式
3.3.2 错误代码-8005
完整报错信息:执行npu-smi info报错dcmi module initialize failed. ret is -8005.
可能性1:
-
系统内核自动升级,导致与需求版本不一致。
# 查看当前版本内核 [root@localhost aarch64-linux]# uname -r 4.19.90-2304.5.0.0199.u120.fos22.aarch64 # 查看所有内核版本 cd /usr/lib/modules # 进入到当前版本的内核文件夹中,查看是否有build目录及对应的映射目录 # 比如build -> /usr/src/kernels/4.19.90-25.44.v2101.ky10.aarch64 # 若没有对应的软链,则先更新内核再手动软链 yum upgrade
可能性2:
- 驱动/固件版本或其他问题。尝试更换版本,覆盖安装或重装参考2.1 驱动/固件升级.
3.3.3 NPU总显存显示异常
npu显存显示不正确:正常显示21527,异常显示为23057。原因:ECC使能状态关闭导致(默认开启)。
3.3.4 NPU显存占用异常上涨
当npu占用超过一定阈值后,显存异常上涨直至崩溃。原因:aicpu/control cpu配比更改。