在 Ascend 生态中,CANN工具包涉及的 固件(Firmware) 和 驱动

在 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
      如果命令有效,说明驱动已存在;否则需管理员安装。

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 infols /dev/davinci*,确认固件和驱动是否存在。
  • 联系管理员:请求安装固件和驱动(提供文件名,如 Ascend-ascend910-firmware_xxx_linux-aarch64.runAscend-ascend910-driver_xxx_linux-aarch64.run)。
  • 容器化方案:如果系统支持 Podman(rootless 容器),使用预装 CANN 的镜像:
    podman run -it --rm ascendhub.huawei.com/public-ascendhub/ascend-toolkit:arm64-8.0.RC1 bash
    容器内固件和驱动已配置,适合测试 torch-npu。
  • 纯开发模式:无硬件/驱动时,CANN toolkit 和 torch-npu 可用于代码开发(模拟模式),但无法运行 NPU 加速。

7. 总结

  • 固件:硬件层,控制 NPU 芯片,需 root 安装。
  • 驱动:系统层,连接硬件和软件,需 root 安装。
  • 你的目标(torch-npu):需 toolkit(已装),但硬件加速依赖固件和驱动。无 sudo 权限下,确认系统预装状态,或使用容器化方案。

如果有具体错误或命令输出,提供详情,我可进一步协助!