ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

华为Atlas 300I Pro推理卡驱动安装:为何必须用Ubuntu 18.04?

华为Atlas 300I Pro推理卡驱动安装:为何必须用Ubuntu 18.04? 先说个段子有人高高兴兴把华为Atlas 300I Promodel 3010推理卡插进工作站的PCIe插槽装好系统照着官网教程一路操作结果第一步就卡住了——官网支持列表里明明白白写着Ubuntu 18.04。心里不服换上20.04再试编译报错一个接一个最后老老实实重装系统。这块卡到底为什么非要用18.0420.04到底差在哪我把安装前后的完整过程、踩过的坑、以及官方文档没写透的那些细节一次性说清楚。这篇内容适合两类人一类是刚拿到Atlas 300I Pro准备做AI推理部署的工程师另一类是已经被驱动折腾到怀疑人生、正在纠结“要不要为了一个驱动重装系统”的朋友。看完你应该能少走不少弯路。1. 先搞清楚ATLAS 300I Pro model 3010到底是什么卡1.1 型号定位不是游戏卡也不是通用计算卡华为Atlas 300I Pro型号3010是一张纯推理卡用的是昇腾310处理器设计目标很明确把训练好的模型跑起来做视频分析、图像分类、OCR、推荐系统之类的线上推理服务。官方标称INT8算力在百TOPS级别这个数字放在2020年前后发布的推理卡里属于优秀水平。它的外形是半高半长功耗也不算离谱PCIe插槽供电就能带起来不需要外接供电线这点对服务器和台式机都很友好。但要注意它和NVIDIA的T4、A10这类卡定位不太一样。T4既能做推理也能做轻量训练Atlas 300I Pro从硬件设计到软件栈都偏向推理场景。你拿它来跑训练可能用起来很别扭你拿它来做高并发推理在配套软件到位的情况下性价比确实能打。1.2 驱动安装的逻辑和NVIDIA卡天差地别用惯了NVIDIA卡的同学拿到这张卡的第一反应是去官网下个.run驱动然后像装NVIDIA驱动一样装完、nvidia-smi验证完事。但昇腾卡的驱动安装逻辑不太一样它不只是“装一个驱动程序”而是包含整个CANNCompute Architecture for Neural Networks软件栈。驱动、固件、算子库、运行时环境是几个独立又互相依赖的组件。还有个容易混淆的点昇腾的“驱动”和“固件”是分开的两个包。固件负责硬件底层初始化驱动负责操作系统和硬件之间的通信。后来官方把驱动包和固件包合并成一个“驱动固件包”安装驱动的时候会自动检查和升级固件但老版本的安装流程里还是分开的。如果你拿到的安装包是分体版顺序一定不能乱先装固件再装驱动。顺序反了轻则报错重则设备状态异常。另外一个和NVIDIA卡很不一样的地方昇腾卡安装完驱动后默认会创建一个名为HwHiAiUser的系统用户很多运行进程比如算子编译、推理服务都需要在这个用户下跑或者至少要让这个用户有权限访问设备。装驱动时不留意这个用户后面跑样例代码时会莫名其妙地遇到权限问题。2. 为什么官网只认Ubuntu 18.04三个真实原因2.1 看官网支持列表到底写了什么打开昇腾社区的软件包下载页面选择Atlas 300I Promodel 3010对应的CANN版本支持的操作系统列表里x86架构下Linux通常会列出Ubuntu 18.04、20.04等选项但如果你仔细看驱动和固件包的适配列表很多版本对Ubuntu的支持就只写了18.04。这个“只写18.04”不是官网懒背后是实打实的技术原因。CANN软件栈的Linux支持策略是“选一个主版本做完整验证其他版本选择性适配”。在昇腾310那一代产品周期里Ubuntu 18.04就是那个被选中的主验证版本。20.04虽然也属于Ubuntu生态但内核、GCC、glibc、OpenSSL这些底层组件版本都变了华为的验证矩阵没有覆盖到所以官方不敢在支持列表里写“支持20.04”。2.2 20.04装不上/装完跑不动的三个技术差异第一个差异也是最直接的内核版本。Ubuntu 18.04默认内核是4.15系列20.04是5.4系列后续小版本可能升到5.6、5.8。昇腾驱动的内核模块在发布前是针对特定内核版本编译和验证的内核模块对内核版本极其敏感——不是“差不多就行”而是接口、数据结构和编译标志都得对得上。在20.04上装18.04时代的驱动最常见的报错就是内核模块编译失败或者编译通过但加载时报Unknown symbol。我见过有人在20.04上用DKMS强行编译旧版驱动折腾半天驱动模块加载了但一跑推理就死机。第二个差异GCC工具链和glibc版本。18.04自带GCC 7.5和glibc 2.2720.04自带GCC 9.4和glibc 2.31。昇腾的很多二进制组件尤其是CANN工具链里的算子编译器和Runtime库是在老版本GCC/glibc环境下编译的拿到新系统上可能出现GLIBC_2.29 not found这类经典报错。反过来驱动模块编译时如果用GCC 9去编又可能因为编译器的检查规则更严格或者宏定义变化直接编译失败。说白了版本跨度太大两头都容易出问题。第三个差异OpenSSL和其他依赖库。华为的驱动和固件安装脚本会调用OpenSSL、libxml2等基础库做签名校验和配置解析。20.04的OpenSSL是1.1.1系列默认安全级别更高某些旧版安装包的签名算法在新OpenSSL下会被拒绝导致安装程序压根没法启动。这个报错很迷惑经常显示成Failed to verify the integrity of the package看起来像包坏了其实是系统环境太新。2.3 是不是真的打死不能用20.04也不能把话说死。CANN版本越新对20.04的支持就越多到CANN 6.x甚至7.x时代官方已经正式支持Ubuntu 20.04和22.04了。但问题在于Atlas 300I Pro model 3010对应的很多稳定版CANN是2021-2023年发布的那个时间段的CANN对20.04的支持并不可靠。如果非要强行上20.04你可能需要解决内核模块编译、GCC降级、glibc兼容性、OpenSSL策略等一系列问题而且是“今天解决一个明天又冒出一个”的连环坑。我个人的建议是除非你有必须用20.04的硬性理由否则老老实实装18.04别和自己的时间过不去。这里也回答标题里“别被官网骗了”的意思官网支持列表看着像是一句话的事但背后的含义是整个软件栈的适配边界。你非要在边界外操作不是不行但风险没人替你兜底官方工单大概率也会让你换系统。3. 实操安装从零到npu-smi info3.1 安装前要准备的材料安装前把下面这些搞清楚能省很多事物料说明获取方式Ubuntu 18.04.5或18.04.6桌面版/服务器版推荐18.04.5以上小版本内核升级过兼容性更好Ubuntu官网下载昇腾CANN驱动固件包根据Atlas 300I Pro和系统架构选择x86_64版本昇腾社区-软件包下载昇腾CANN Toolkit工具包包含算子库、运行时、AscendCL API等昇腾社区-软件包下载一块能正常上网的网卡用于下载依赖包或提前配置离线源无要特别强调的是下载软件包时一定要选对“型号”和“操作系统”。昇腾社区的下载页面支持按硬件型号筛选选Atlas 300I Pro型号3010再选Ubuntu 18.04 x86_64出来的版本才能对上。如果选错成Atlas 300I非Pro版或者选了aarch64安装时会直接报错。3.2 系统环境检查与配置拿到Ubuntu 18.04后别急着装驱动先做三件事。第一更新系统并安装基础编译工具sudo apt update sudo apt upgrade -y sudo apt install -y gcc make dkms linux-headers-$(uname -r)这里装DKMS和linux-headers很关键。昇腾驱动安装时会动态编译内核模块没有内核头文件编译直接失败。很多人在这一步报错然后开始怀疑是不是卡坏了其实是没装headers。第二检查是否已经存在HwHiAiUser用户id HwHiAiUser如果没有输出就手动创建sudo useradd -m -d /home/HwHiAiUser -s /bin/bash HwHiAiUser sudo passwd HwHiAiUser设置一个密码后面跑推理服务时会用到。第三检查BIOS里PCIe设置。如果这台机器原本插着NVIDIA卡BIOS里可能启用了Above 4G Decoding之类的选项这些选项对昇腾卡一般没影响但Resizable BAR可调整基地址寄存器功能如果开启个别主板会和昇腾卡的驱动冲突建议先关掉。另外如果服务器有多个PCIe x16插槽尽量把卡插在直连CPU的插槽上一般是第一根或第二根别插南桥扩展出来的插槽否则性能损失明显且容易识别异常。3.3 固件与驱动的完整安装步骤把从昇腾社区下载的安装包放到同一个目录下假设目录是/home/user/ascend。先看下文件权限安装包一般需要执行权限cd /home/user/ascend chmod x *.run如果你下载的是分体版驱动包和固件包分开按以下顺序安装。先装固件sudo ./Ascend-cann-firmware_版本号_linux-x86_64.run --full --install-for-all其中--full表示全量安装--install-for-all表示安装到系统全局路径/usr/local/Ascend而不是当前用户目录。这一步不需要重启但会把固件写入设备ROM和系统固件目录。接着装驱动sudo ./Ascend-cann-driver_版本号_linux-x86_64.run --full --install-for-all安装过程中终端会打印一堆日志最后一行如果没有出现driver install success之类的提示而是报错先不要慌去看日志文件tail -50 /var/log/ascend_install.log日志里有具体的失败原因常见的有内核头文件缺失、GCC版本不对、Python版本不对等。把前面的依赖问题解决了再重新安装。如果你下载的是“驱动固件合一包”安装包文件名里同时带driver和firmware字样安装顺序就简单了直接sudo ./Ascend-cann-driver_版本号_linux-x86_64.run --full --install-for-all脚本会自动先升级固件再安装驱动。这个方案是我现在推荐的因为它省去了手动匹配固件和驱动版本的麻烦。安装完成后重启系统sudo reboot重启后检查设备状态npu-smi info如果看到类似下面这样的输出说明驱动和固件都正常工作------------------------------------------------------------------------------------------ | NPU Name | Health | Power(W) Temp(C) Hugepages-Usage(page) | | Chip | Bus-Id | AICore(%) Memory-Usage(MB) HBM-Usage(MB) | | 310P3 | OK | ...如果提示npu-smi: command not found说明驱动没装上或者环境变量没配置。npu-smi工具一般在/usr/local/Ascend/driver/tools/目录下可以手动调用/usr/local/Ascend/driver/tools/npu-smi info如果能输出就把它加进PATHecho export PATH/usr/local/Ascend/driver/tools:$PATH ~/.bashrc source ~/.bashrc3.4 环境变量与CANN工具链安装驱动装好了只完成了一半。想让这张卡真正跑起推理还需要装CANN Toolkit。同样从昇腾社区下载Toolkit包文件名类似Ascend-cann-toolkit_版本号_linux-x86_64.run执行sudo ./Ascend-cann-toolkit_版本号_linux-x86_64.run --install注意这里我没加--install-for-all因为Toolkit也支持安装到当前用户目录。对于单机单卡的个人工作站来说安装到当前用户目录其实更省心卸载时直接删目录就行。但如果你是在多人共用服务器上配置建议用--install-for-all让所有用户都能使用。安装完成后Toolkit默认会放在/usr/local/Ascend/ascend-toolkit/目录下。需要设置环境变量source /usr/local/Ascend/ascend-toolkit/set_env.sh如果要永久生效把它写入~/.bashrcecho source /usr/local/Ascend/ascend-toolkit/set_env.sh ~/.bashrc source ~/.bashrc验证Toolkit是否可用可以跑一个Python绑定的示例python3 -c from te import tvm; print(TE OK)正常情况下会输出TE OK。TETensor Engine是CANN的算子开发引擎能跑通说明Runtime和算子库都正常了。到这一步从驱动到工具链的安装链路就完整了。接下来可以跑一下昇腾社区提供的样例工程比如ResNet-50推理验证整条软硬件链路端到端跑通。4. 我踩过的坑常见问题与排查实录4.1 问题速查表下面这些坑是我自己或者周围朋友在实际部署中真实遇到的按出现频率排序现象根本原因解决方法安装驱动时报Kernel module build failed内核头文件缺失或GCC版本不匹配apt install linux-headers-$(uname -r)确认GCC版本与内核编译版本一致npu-smi命令找不到驱动没装上或工具目录不在PATH检查/usr/local/Ascend/driver/tools手动加入PATHnpu-smi显示设备Health: Fault固件和驱动版本不配套重新安装与驱动版本配套的固件或者换用合一包安装时提示Please install the dependency packages系统缺libxml2、OpenSSL等依赖apt install -y libxml2 libxslt1.1 openssl libssl-dev跑推理样例报aclrtSetDevice failedHwHiAiUser用户对设备没有访问权限确认当前用户已加入HwHiAiUser组或切换到HwHiAiUser下执行插上卡后lspci看不到设备PCIe插槽接触不良或BIOS设置问题重新插拔卡BIOS里关闭Resizable BAR尝试其他PCIe插槽Ubuntu 20.04上安装失败内核/GCC/glibc版本不兼容无解最好的方案是重装Ubuntu 18.044.2 最容易被忽视的几个细节第一个细节Ubuntu小版本别太老。我之前用过Ubuntu 18.04.2当时的内核是4.15.0-20昇腾驱动的DKMS编译在那个内核版本下能过但加载时总会报Invalid module format。后来升级到18.04.5内核换到4.15.0-176左右问题就消失了。如果你用的是老镜像先跑sudo apt upgrade把内核更新到较新的4.15小版本再做驱动安装。第二个细节驱动包和CANN Toolkit版本要匹配。曾经下载了最新版Toolkit却配了一个半年前发布的驱动包结果在算子编译阶段频繁报ascend_install.info not found。后来把驱动升级到和Toolkit同期的版本问题消失。以后下载软件包时注意看昇腾社区每个版本的配套关系说明或者在安装前把两个包的版本号发到CANN社区工单里确认。第三个细节虚拟机里装驱动需要网卡直通。如果你是在VMware或KVM虚拟机里给Atlas 300I Pro装驱动要先确认虚拟机能不能看到这个PCIe设备。VMware默认不直通PCIe设备需要在虚拟机设置里把Atlas 300I Pro对应的PCI设备添加进去即PCI直通而且要启用“内存映射I/O”MMIO。如果虚拟机配置不对驱动装得再认真设备也不会出现。这个坑在测试环境里特别常见。第四个细节安装日志才是真正的老师。昇腾的安装脚本很友好会把日志写到/var/log/ascend_install.log但很多人一看终端输出没有success就慌了直接论坛发帖求助。实际上日志里写得清清楚楚。遇到报错先执行cat /var/log/ascend_install.log | tail -10080%的问题在日志里能找到明确原因。5. 一点关于“为什么非要较真系统版本”的个人体会装上Ubuntu 18.04之后你会发现自己回到了一个比较“古早”的软件环境GCC 7.5、内核4.15、OpenSSL 1.1.1。然后你就会明白为什么昇腾社区的很多教程都在强调“请使用Ubuntu 18.04”——因为整个昇腾软件栈在18.04上经历了几年的测试、修复和优化各种问题都在这个版本上被磨平了。回想我自己第一次装Atlas 300I Pro的时候也是不信邪偏要在20.04上折腾。结果花了两天时间解决了内核模块编译错误又解决了GCC降级问题最后死在算子编译阶段——CANN的编译器直接从glibc层面拒绝执行。后来一个朋友一句话点醒我AI卡是用来跑模型的不是用来折腾驱动编译的。系统版本稳固、工具链稳定比什么都重要。如果你需要在生产环境部署多张Atlas 300I Pro我的建议是把Ubuntu 18.04做成镜像模板通过PXE批量部署然后把驱动和CANN工具链的安装过程写成脚本固化下来。这样每台机器装完系统后执行一个脚本十几分钟就能把环境拉起来。这也是我在多个现场项目里验证过的做法。最后分享一个小技巧如果你拿到一块已经装过其他版本固件的Atlas 300I Pro比如二手卡或者同事用过的卡安装驱动固件包之前先用/usr/local/Ascend/driver/tools/upgrade-tool --device_index 0 --software_version具体参数以当前版本工具为准查看一下板上固件版本然后到华为昇腾社区查一下当前版本驱动对固件的最低要求。固件版本太老的话驱动装完可能识别正常但跑推理时会出现莫名其妙的超时或报错。先把固件升上去再装驱动能省掉后续大量的排查时间。
返回列表