前言

提示:这里可以添加本文要记录的大概内容:


PyTorch作为业界主流的深度学习框架,广泛应用于深度学习模型的开发与训练。传统上PyTorch默认运行在CPU/GPU环境,而华为昇腾AI处理器通过异构计算架构CANN(Compute Architecture for Neural Networks)为PyTorch提供了强大的算力支持。本文将详细介绍如何在昇腾平台上搭建完整的PyTorch训练环境。

环境架构概述

在昇腾AI处理器上运行PyTorch训练任务,需要构建从底层硬件到上层框架的完整软件栈:

  • 底层:昇腾AI处理器+驱动固件
  • 中间层:CANN异构计算架构
  • 上层:PyTorch框架+适配插件
┌─────────────────────────────────────────┐
│            应用层                         │
│    PyTorch训练脚本 + 自定义模型            │
├─────────────────────────────────────────┤
│           框架层                         │
│    PyTorch + torch_npu适配插件           │
├─────────────────────────────────────────┤
│           CANN层                         │
│    Ascend Computing Language            │
├─────────────────────────────────────────┤
│           驱动层                         │
│    NPU驱动 + 固件                        │
├─────────────────────────────────────────┤
│           硬件层                         │
│        昇腾AI处理器                       │
└─────────────────────────────────────────┘

环境准备与检查

NPU设备检查

在安装驱动和固件前,首先需要确认NPU设备状态及系统兼容性。以Atlas 800训练服务器(型号:9010,Ascend 910处理器)为例:

# 检查NPU是否在位
lspci | grep d801

如果服务器配备N路NPU,将显示N行包含"d801"字段的信息,表明NPU设备正常识别。

0000:89:00.0 Processing accelerators: Device d801
0000:8a:00.0 Processing accelerators: Device d801
0000:8b:00.0 Processing accelerators: Device d801
0000:8c:00.0 Processing accelerators: Device d801
0000:8d:00.0 Processing accelerators: Device d801
0000:8e:00.0 Processing accelerators: Device d801
0000:8f:00.0 Processing accelerators: Device d801
0000:90:00.0 Processing accelerators: Device d801

操作系统兼容性

确保操作系统版本与内核版本符合CANN软件的配套要求,具体可参考昇腾社区文档中的兼容性列表。

驱动与固件安装

创建专用用户

为保障系统安全,建议创建专用用户运行NPU相关服务:

# 创建用户组和用户
groupadd -g 1000 HwHiAiUser
useradd -g HwHiAiUser -u 1000 -d /home/HwHiAiUser -m HwHiAiUser -s /bin/bash

安装驱动

  1. 下载驱动包:从昇腾社区"固件与驱动"页面下载对应版本的驱动软件包
  2. 安装准备
# 添加执行权限
chmod +x Ascend-hdk-910-npu-driver_23.0.rc1_linux-x86-64.run
  1. 执行安装
# 完整安装(需要root权限)
./Ascend-hdk-910-npu-driver_23.0.rc1_linux-x86-64.run --full --install-for-all

成功安装后将显示:Driver package installed successfully!

  1. 验证安装
npu-smi info

该命令将显示NPU设备状态信息,确认驱动加载正常。

+----------------------------------------------------------------------------------------+
| npu-smi 21.0.1.1.241                Version: 21.0.1.1.241                             |
+-------------------+-----------------+-----------------------------------------------------+
| NPU   Name        | Health          | Power(W)    Temp(C)           Hugepages-Usage(page) |
| Chip              | Bus-Id          | AICore(%)   Memory-Usage(MB)                        |
+===================+=================+=====================================================+
| 0     910Pro      | OK              | 48.4        38                0    / 0              |
| 0                 | 0000:89:00.0    | 0           0    / 15169                           |
+===================+=================+=====================================================+
| 1     910Pro      | OK              | 48.4        38                0    / 0              |
| 1                 | 0000:8A:00.0    | 0           0    / 15169                           |
+===================+=================+=====================================================+

安装固件

  1. 准备固件包
chmod +x Ascend-hdk-910-npu-firmware_6.3.0.1.241.run
  1. 执行安装
./Ascend-hdk-910-npu-firmware_6.3.0.1.241.run --full

成功安装后将显示:Firmware package installed successfully!

系统重启

安装完成后必须重启系统使驱动生效:

reboot

CANN软件依赖安装

系统级依赖

Ubuntu/Debian系列

apt-get install -y gcc g++ make cmake zlib1g zlib1g-dev openssl libsqlite3-dev \
libssl-dev libffi-dev unzip pciutils net-tools libblas-dev gfortran libblas3

openEuler/CentOS系列

yum install -y gcc gcc-c++ make cmake unzip zlib-devel libffi-devel openssl-devel \
pciutils net-tools sqlite-devel lapack-devel gcc-gfortran

Python环境配置

以Python 3.7.5为例:

  1. 下载源码
wget https://www.python.org/ftp/python/3.7.5/Python-3.7.5.tgz
  1. 解压与编译
tar -zxvf Python-3.7.5.tgz
cd Python-3.7.5
./configure --prefix=/usr/local/python3.7.5 --enable-loadable-sqlite-extensions --enable-shared
make -j$(nproc)
make install
  1. 配置环境变量
export LD_LIBRARY_PATH=/usr/local/python3.7.5/lib:$LD_LIBRARY_PATH
export PATH=/usr/local/python3.7.5/bin:$PATH

建议将上述环境变量配置添加到~/.bashrc/etc/profile中实现持久化。

  1. 验证安装
python3 --version  # 应输出: Python 3.7.5
pip3 --version     # 应显示pip版本信息
  1. 安装Python依赖
pip3 install attrs numpy decorator sympy cffi pyyaml pathlib2 psutil protobuf scipy requests absl-py

CANN开发套件安装

  1. 获取安装包:从昇腾社区"CANN"产品页下载对应架构的CANN工具包

  2. 安装步骤

# 添加执行权限
chmod +x Ascend-cann-toolkit_6.3.RC1_linux-x86_64.run

# 校验完整性
./Ascend-cann-toolkit_6.3.RC1_linux-x86_64.run --check

# 执行安装
./Ascend-cann-toolkit_6.3.RC1_linux-x86_64.run --install --install-for-all

安装成功后显示:[INFO] xxx install success

[INFO] Ascend-cann-toolkit installed successfully! 
[INFO] Please set environment variables by referring to /usr/local/Ascend/ascend-toolkit/set_env.sh

PyTorch环境搭建

前置依赖安装

pip3 install wheel typing_extensions

PyTorch 1.8.1安装指南

x86_64架构

# 安装官方PyTorch
wget https://download.pytorch.org/whl/cpu/torch-1.8.1%2Bcpu-cp37-cp37m-linux_x86_64.whl
pip3 install torch-1.8.1+cpu-cp37-cp37m-linux_x86_64.whl

# 安装昇腾适配插件
wget https://gitee.com/ascend/pytorch/releases/download/v5.0.rc1-pytorch1.8.1/torch_npu-1.8.1.post1-cp37-cp37m-linux_x86_64.whl
pip3 install torch_npu-1.8.1.post1-cp37-cp37m-linux_x86_64.whl

aarch64架构

# 安装官方PyTorch
wget https://repo.huaweicloud.com/kunpeng/archive/Ascend/PyTorch/torch-1.8.1-cp37-cp37m-linux_aarch64.whl
pip3 install torch-1.8.1-cp37-cp37m-linux_aarch64.whl

# 安装昇腾适配插件
wget https://gitee.com/ascend/pytorch/releases/download/v5.0.rc1-pytorch1.8.1/torch_npu-1.8.1.post1-cp37-cp37m-linux_aarch64.whl
pip3 install torch_npu-1.8.1.post1-cp37-cp37m-linux_aarch64.whl

安装torchvision

pip3 install torchvision==0.9.1

PyTorch 1.11.0安装指南

x86_64架构

# 安装官方PyTorch
wget https://download.pytorch.org/whl/cpu/torch-1.11.0%2Bcpu-cp37-cp37m-linux_x86_64.whl
pip3 install torch-1.11.0+cpu-cp37-cp37m-linux_x86_64.whl

# 安装昇腾适配插件
wget https://gitee.com/ascend/pytorch/releases/download/v5.0.rc1-pytorch1.11.0/torch_npu-1.11.0-cp37-cp37m-linux_x86_64.whl
pip3 install torch_npu-1.11.0-cp37-cp37m-linux_x86_64.whl

aarch64架构

# 安装官方PyTorch
wget https://repo.huaweicloud.com/kunpeng/archive/Ascend/PyTorch/torch-1.11.0-cp37-cp37m-linux_aarch64.whl
pip3 install torch-1.11.0-cp37-cp37m-linux_aarch64.whl

# 安装昇腾适配插件
wget https://gitee.com/ascend/pytorch/releases/download/v5.0.rc1-pytorch1.11.0/torch_npu-1.11.0-cp37-cp37m-linux_aarch64.whl
pip3 install torch_npu-1.11.0-cp37-cp37m-linux_aarch64.whl

安装torchvision

pip3 install torchvision==0.12.0

验证安装

执行以下命令验证PyTorch与NPU适配是否成功:

import torch
import torch_npu

# 测试基础功能
a = torch.ones(3, 4).npu()
result = a + a
print(result)

预期输出:

tensor([[2., 2., 2., 2.],
        [2., 2., 2., 2.],
        [2., 2., 2., 2.]], device='npu:0')

APEX混合精度模块安装

APEX模块为昇腾平台提供混合精度训练支持,可显著提升训练性能。

系统依赖

Ubuntu系统

apt-get install -y patch build-essential libbz2-dev libreadline-dev wget curl \
llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev liblzma-dev m4 dos2unix \
libopenblas-dev git

CentOS系统

yum install -y patch libjpeg-turbo-devel dos2unix openblas git

源码编译与安装

  1. 获取源码
# 克隆昇腾适配版APEX
git clone -b master https://gitee.com/ascend/apex.git
cd apex

# 获取原生APEX代码
git clone https://github.com/NVIDIA/apex.git
  1. 切换分支
cd apex
git checkout 4ef930c1c884fdca5f472ab2ce7cb9b505d26c1a
cd ..
  1. 生成适配代码
cd scripts
bash gen.sh
  1. 编译安装包
cd ../apex
python3 setup.py --cpp_ext --npu_float_status bdist_wheel
  1. 安装APEX

x86_64架构

cd dist
pip3 install apex-0.1_ascend-cp37-cp37m-linux_x86_64.whl

aarch64架构

cd dist
pip3 install apex-0.1_ascend-cp37-cp37m-linux_aarch64.whl

完整环境验证

创建测试脚本test_npu_environment.py

import torch
import torch_npu
from apex import amp

def test_environment():
    print("=== PyTorch与昇腾NPU环境验证 ===")
    
    # 检查PyTorch版本
    print(f"PyTorch版本: {torch.__version__}")
    
    # 检查NPU设备
    if torch.npu.is_available():
        print(f"NPU设备数量: {torch.npu.device_count()}")
        for i in range(torch.npu.device_count()):
            print(f"NPU设备 {i}: {torch.npu.get_device_name(i)}")
    else:
        print("NPU设备不可用")
        return False
    
    # 基础张量运算测试
    print("\n=== 基础运算测试 ===")
    x = torch.randn(2, 3).npu()
    y = torch.randn(2, 3).npu()
    z = x + y
    print(f"张量加法测试: {z.shape}, device: {z.device}")
    
    # 模型前向传播测试
    print("\n=== 模型推理测试 ===")
    model = torch.nn.Linear(10, 5).npu()
    input_data = torch.randn(1, 10).npu()
    output = model(input_data)
    print(f"模型推理输出: {output.shape}")
    
    print("\n✅ 环境验证通过!PyTorch与昇腾NPU适配成功")
    return True

if __name__ == "__main__":
    test_environment()

运行结果示例:

=== PyTorch与昇腾NPU环境验证 ===
PyTorch版本: 1.8.1
NPU设备数量: 8
NPU设备 0: Ascend 910

=== 基础运算测试 ===
张量加法测试: torch.Size([2, 3]), device: npu:0

=== 模型推理测试 ===
模型推理输出: torch.Size([1, 5])

✅ 环境验证通过!PyTorch与昇腾NPU适配成功

结语

现在已完成昇腾平台上完整的PyTorch训练环境搭建。这个环境支持:

  • 原生PyTorch API与编程范式
  • NPU设备加速计算
  • 混合精度训练优化
  • 分布式训练支持

开发者现在可以将现有的PyTorch训练脚本迁移到昇腾平台,只需将设备指定为NPU即可享受昇腾处理器的强大算力:

# 将cuda设备切换为npu
device = torch.device("npu:0")
model = model.to(device)
data = data.to(device)

# 或者直接使用npu()方法
model = model.npu()
data = data.npu()

性能优化建议

  1. 使用混合精度训练
from apex import amp
model, optimizer = amp.initialize(model, optimizer, opt_level="O1", loss_scale=128.0)
  1. 启用数据并行
if torch.npu.device_count() > 1:
    model = torch.nn.DataParallel(model)

资源与支持

昇腾RAG SDK技术原理和功能介绍
慕课:https://www.hiascend.com/developer/courses/detail/1980194995581026305

Pytorch小模型迁移与精度调优
慕课:https://www.hiascend.com/developer/courses/detail/1983449864584704001

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐