# Ascend NPU 本页介绍 Ascend NPU 的手动安装、功能范围和融合算子加速能力。 ## 手动安装 手动安装需要依次准备 HDK 驱动与固件、CANN 和 `torch-npu`。安装包需要与 NPU 型号、CPU 架构和操作系统匹配。本分支使用以下软件组合: | 组件 | 版本 | |------|------| | CANN | `9.1.0` | | PyTorch | `2.10.0` | | torch-npu | `2.10.0.post2` | | torchvision | `0.25.0` | | torchaudio | `2.10.0` | | Triton Ascend | `3.2.1` | 安装前使用[Ascend 兼容性查询助手](https://www.hiascend.com/hardware/compatibility)确认硬件与操作系统组合,并从[CANN 9.1.0 社区版资源中心](https://www.hiascend.com/developer/download/community/result?cann=9.1.0&module=cann)选择对应 CPU 架构的软件包。 ### 安装驱动与固件 从 Ascend 下载与设备匹配的 HDK 驱动和固件安装包。以下命令中的文件名需要替换为实际下载的包名: ```bash chmod +x Ascend-hdk--npu-driver__linux-.run chmod +x Ascend-hdk--npu-firmware_.run sudo ./Ascend-hdk--npu-driver__linux-.run \ --full --install-for-all sudo ./Ascend-hdk--npu-firmware_.run --full ``` 根据安装程序提示重启系统,然后验证驱动: ```bash npu-smi info ``` ### 安装 CANN 先安装 Toolkit,再安装与设备匹配的 ops 算子包: ```bash chmod +x Ascend-cann-toolkit__linux-.run sudo ./Ascend-cann-toolkit__linux-.run --install chmod +x Ascend-cann--ops__linux-.run sudo ./Ascend-cann--ops__linux-.run --install ``` 默认以 root 安装时,加载以下环境变量: ```bash source /usr/local/Ascend/ascend-toolkit/set_env.sh ``` 普通用户安装时,环境脚本位于用户选择的 CANN 安装目录。需要在每个运行 LlamaFactory 的 shell 中加载该脚本,也可以将命令加入 shell 配置文件。 ### 安装 LlamaFactory 在项目根目录创建 Python 环境,并安装 NPU 依赖和 LlamaFactory: ```bash python -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip python -m pip install -e . python -m pip install -r requirements/npu.txt python -m pip install -r requirements/triton_ascend.txt ``` `requirements/npu.txt` 固定了相互匹配的 PyTorch、torchvision、torchaudio 和 `torch-npu` 版本;`requirements/triton_ascend.txt` 安装 NPU 对应的 Triton 实现。如果使用已有 Python 环境,应确认安装完成后的 PyTorch 与 `torch-npu` 版本仍与上述版本一致。 ### 验证 PyTorch NPU ```bash python -c "import torch, torch_npu; print(torch.npu.is_available())" ``` 输出 `True` 表示 PyTorch 已识别 NPU。启用 v1 后即可运行 SFT: ```bash export USE_V1=1 llamafactory-cli sft examples/v1/train_full/train_full_fsdp2.yaml ``` ## 功能范围 | 功能 | 状态 | 说明 | |------|:----:|------| | [SFT 全参训练](../../feature-guide/sft.md) | 支持 | 支持 FSDP2 | | [LoRA / Freeze](../../feature-guide/sft.md) | 支持 | 使用通用 PEFT 路径 | | [QLoRA](../../feature-guide/sft.md#qlora) | 不支持 | 当前量化路径依赖 bitsandbytes | | [DPO](../../feature-guide/dpo.md) | 支持 | 使用偏好对数据 | | [RM](../../feature-guide/rm.md) | 支持 | `cp_size` 需要为 `1` | | [FSDP2](../../feature-guide/distributed_training.md) | 支持 | 使用 NPU 设备和通信后端 | | [FSDPTurbo](../../feature-guide/distributed_training.md) | 支持 | 提供 MoE 专家并行和专家参数分片 | | [Ulysses CP](../../feature-guide/distributed_training.md#ulysses-context-parallel) | 支持 | 依赖适配的 attention 实现 | | [DeepSpeed](../../feature-guide/distributed_training.md#deepspeed) | 依赖环境 | 由 NPU DeepSpeed 发行版和配置决定 | | [HF CLI 推理](../../feature-guide/inference.md) | 支持 | `sample_backend: hf` | ## 量化支持 当前 v1 QLoRA 依赖 bitsandbytes,因此不适用于 NPU。 ## 融合算子加速 `kernel_config.name: auto` 在 NPU 上依次尝试: - `npu_fused_moe` - `npu_fused_rmsnorm` - `npu_fused_rope` - `npu_fused_swiglu` 也可以显式选择一个或多个名称: ```yaml kernel_config: name: npu_fused_rmsnorm,npu_fused_rope ``` 每个实现会检查当前设备及 `torch_npu` 依赖。模型结构不匹配时,具体 Kernel 可能跳过替换或抛出明确错误。 ## Liger Kernel `liger_kernel` 接受 CUDA 或 NPU,但仍要求模型类型在当前 Liger 映射中,并且已安装兼容版本的 `liger_kernel`。 ## 分布式训练 FSDP2、FSDPTurbo 与 Ulysses 使用 accelerator 抽象选择 NPU 通信设备。DeepSpeed 的可用性由 NPU DeepSpeed 发行版、依赖版本和配置共同决定。