在 Ascend 生态中,CANN工具包涉及的 固件(Firmware) 和 驱动
在 Ascend 生态中,CANN工具包涉及的 固件(Firmware) 和 驱动
ytkz在 Ascend 生态中,CANN(Compute Architecture for Neural Networks)工具包涉及的 固件(Firmware) 和 驱动(Driver) 是支持 Ascend NPU(Neural Processing Unit)硬件运行的两个关键组件。它们与 CANN toolkit(开发套件)共同构成完整的 NPU 开发和运行环境。以下是它们的定义、作用和区别,结合你在 ARM Linux 上安装 torch-npu 的目标,简洁说明:
1. 固件(Firmware)
- 定义:固件是运行在 Ascend NPU 硬件上的低级软件,直接控制 NPU 芯片的硬件行为(如计算单元、内存管理)。它是芯片的嵌入式程序,类似 BIOS 或嵌入式设备的微代码。
- 作用:
- 初始化和管理 NPU 硬件。
- 提供硬件层接口,处理任务调度、数据传输等。
- 确保 NPU 芯片能正确执行计算任务。
- 安装特点:
- 文件名如
Ascend-ascend910-firmware_xxx_linux-aarch64.run。 - 需 root 权限 安装,因为涉及直接写入硬件寄存器或设备固件区域。
- 通常与特定芯片型号(如 Ascend 910/310)绑定。
- 文件名如
- 在你的场景:
- 如果系统没有预装固件,torch-npu 无法直接访问 NPU 硬件(可能回落到 CPU 模式)。
- 由于你无 sudo 权限,固件安装需要管理员完成,或确认系统已预装(如通过
npu-smi info检查硬件状态)。
2. 驱动(Driver)
- 定义:驱动是运行在操作系统中的软件,充当 NPU 硬件和用户应用程序(如 CANN toolkit、torch-npu)之间的桥梁,负责将上层指令翻译为硬件可执行的操作。
- 作用:
- 提供操作系统与 NPU 硬件的通信接口。
- 支持任务调度、内存分配、设备管理等。
- 包含用户态库(如
libascendcl.so)和内核态模块(如/dev/davinci*)。
- 安装特点:
- 文件名如
Ascend-ascend910-driver_xxx_linux-aarch64.run。 - 需 root 权限 安装,因为涉及加载内核模块(如
kmod_hccs)和设备文件(如/dev/davinci0)。 - 依赖固件,通常与固件版本配套。
- 文件名如
- 在你的场景:
- 驱动是 torch-npu 访问 NPU 的必要组件。如果未安装,
torch_npu.npu.is_available()返回False。 - 无 sudo 权限下,你无法安装驱动,但可检查是否预装:
如果命令有效,说明驱动已存在;否则需管理员安装。ls /dev/davinci* npu-smi info
- 驱动是 torch-npu 访问 NPU 的必要组件。如果未安装,
3. 固件与驱动的区别
| 特性 | 固件(Firmware) | 驱动(Driver) |
|---|---|---|
| 运行位置 | NPU 芯片内部 | 操作系统(内核态 + 用户态) |
| 功能 | 控制硬件行为,初始化芯片 | 连接硬件与软件,管理任务和资源 |
| 安装权限 | 需要 root 权限 | 需要 root 权限 |
| 文件类型 | .run 文件,更新芯片微代码 | .run 文件,包含内核模块和库 |
| 依赖关系 | 硬件直接依赖,驱动依赖固件 | 依赖固件,CANN toolkit 依赖驱动 |
| 与 torch-npu | 间接影响(硬件可用性) | 直接影响(torch-npu 需驱动接口) |
4. 与 CANN toolkit 的关系
- CANN toolkit:用户态开发套件,包含编译器、库(如
libascendcl.so)、工具(如ascend-toolkit)和 Python API(如torch_npu依赖的库)。它依赖驱动和固件来访问硬件,但可独立安装用于开发(无硬件时模拟运行)。 - 安装顺序:固件 → 驱动 → toolkit。你的场景中,toolkit 已装(用户目录),但无 sudo 权限,需确认固件和驱动是否由管理员预装。
5. 对 torch-npu 的影响
- torch-npu:PyTorch 的 NPU 适配器,依赖 CANN toolkit 的 Python 库和驱动的硬件接口。
- 无固件/驱动:torch-npu 可安装并导入,但
torch_npu.npu.is_available()返回False,计算回落到 CPU。 - 验证方法:
source ~/ascend/cann/set_env.sh python3 -c "import torch; import torch_npu; print(torch_npu.npu.is_available())"- 如果返回
False,检查驱动/固件:npu-smi info ls /dev/davinci* - 如果驱动缺失,需管理员安装;如果硬件不可用,可用 toolkit 进行开发/测试。
- 如果返回
6. 无 sudo 权限的应对
- 检查预装:运行
npu-smi info或ls /dev/davinci*,确认固件和驱动是否存在。 - 联系管理员:请求安装固件和驱动(提供文件名,如
Ascend-ascend910-firmware_xxx_linux-aarch64.run和Ascend-ascend910-driver_xxx_linux-aarch64.run)。 - 容器化方案:如果系统支持 Podman(rootless 容器),使用预装 CANN 的镜像:
容器内固件和驱动已配置,适合测试 torch-npu。podman run -it --rm ascendhub.huawei.com/public-ascendhub/ascend-toolkit:arm64-8.0.RC1 bash - 纯开发模式:无硬件/驱动时,CANN toolkit 和 torch-npu 可用于代码开发(模拟模式),但无法运行 NPU 加速。
7. 总结
- 固件:硬件层,控制 NPU 芯片,需 root 安装。
- 驱动:系统层,连接硬件和软件,需 root 安装。
- 你的目标(torch-npu):需 toolkit(已装),但硬件加速依赖固件和驱动。无 sudo 权限下,确认系统预装状态,或使用容器化方案。
如果有具体错误或命令输出,提供详情,我可进一步协助!


