华为Ascend NPU适配

Ascend Extension for PyTorch插件

简介

本项目开发了名为torch_npuAscend Extension for PyTorch插件,使昇腾NPU可以适配PyTorch框架,为使用PyTorch框架的开发者提供昇腾AI处理器的超强算力。

昇腾为基于华为昇腾处理器和软件的行业应用及服务提供全栈AI计算基础设施。您可以通过访问昇腾社区,了解关于昇腾的更多信息。

安装

使用二进制文件进行安装

我们为用户提供可以快速安装torch_npu的whl安装包。在安装torch_npu之前,您需要先安装CANN软件。昇腾辅助软件中有更多关于CANN的版本信息。请参考CANN安装指南获取CANN安装包。

  1. 安装PyTorch

通过 pip 安装 PyTorch。

aarch64:

pip3 install torch==2.1.0

x86:

pip3 install torch==2.1.0+cpu  --index-url https://download.pytorch.org/whl/cpu

若使用pip命令安装失败,请使用下载链接或进入PyTorch官方网站进行查询下载对应版本。

架构 Python版本 下载链接
x86 Python3.8 下载链接
x86 Python3.9 下载链接
x86 Python3.10 下载链接
aarch64 Python3.8 下载链接
aarch64 Python3.9 下载链接
aarch64 Python3.10 下载链接
  1. 安装torch_npu依赖

运行以下命令安装依赖。

pip3 install pyyaml
pip3 install setuptools
  1. 安装torch_npu
pip3 install torch-npu==2.1.0.post3

如需要保存安装日志,可在pip3 install命令后面加上参数 --log <PATH>,并对您指定的目录<PATH>做好权限管控。

使用源代码进行安装

某些特殊场景下,用户可能需要自行编译torch_npu。可以根据昇腾辅助软件表PyTorch与Python版本配套表选择合适的分支。推荐使用Docker镜像编译torch_npu,可以通过以下步骤获取(建议只挂载工作路径,并避开系统路径,以降低安全风险), 生成的.whl文件路径为./dist/:

  1. 克隆torch_npu代码仓

    git clone https://gitee.com/ascend/pytorch.git -b v2.1.0-6.0.rc1 --depth 1
    
  2. 构建镜像

    cd pytorch/ci/docker/{arch} # {arch} for X86 or ARM
    docker build -t manylinux-builder:v1 .
    
  3. 进入Docker容器

    docker run -it -v /{code_path}/pytorch:/home/pytorch manylinux-builder:v1 bash
    # {code_path} is the torch_npu source code path
    
  4. 编译torch_npu

    Python 3.8 为例。

    cd /home/pytorch
    bash ci/build.sh --python=3.8
    

卸载

Pytorch框架训练环境的卸载可以参考昇腾官方文档

torch_npu的卸载只需执行命令:

pip3 uninstall torch_npu

如需要保存卸载日志,可在pip3 uninstall命令后面加上参数 --log <PATH>,并对您指定的目录<PATH>做好权限管控。

入门

前提

运行以下命令初始化CANN环境变量。

# Default path, change it if needed.
source /usr/local/Ascend/ascend-toolkit/set_env.sh

快速验证

可以通过以下样例快速体验昇腾NPU

import torch
import torch_npu

x = torch.randn(2, 2).npu()
y = torch.randn(2, 2).npu()
z = x.mm(y)

print(z)

PyTorch与Python版本配套表

PyTorch版本 Python版本
PyTorch1.11.0 Python3.7.x(>=3.7.5), Python3.8.x, Python3.9.x, Python3.10.x
PyTorch2.1.0 Python3.8.x, Python3.9.x, Python3.10.x
PyTorch2.2.0 Python3.8.x, Python3.9.x, Python3.10.x

昇腾辅助软件

PyTorch Extension版本号采用{PyTorch版本}-{昇腾版本}命名规则,前者为PyTorch Extension匹配的PyTorch版本,后者用于匹配CANN版本,详细匹配如下:

CANN版本 支持的PyTorch版本 支持的Extension版本 Gitee分支 AscendHub镜像版本/名称(链接)
CANN 8.0.RC1 2.2.0 2.2.0 v2.2.0-6.0.rc1
2.1.0 2.1.0.post3 v2.1.0-6.0.rc1
1.11.0 1.11.0.post11 v1.11.0-6.0.rc1
CANN 7.0.0 2.1.0 2.1.0 v2.1.0-5.0.0
2.0.1 2.0.1.post1 v2.0.1-5.0.0
1.11.0 1.11.0.post8 v1.11.0-5.0.0
CANN 7.0.RC1 2.1.0 2.1.0.rc1 v2.1.0-5.0.rc3
2.0.1 2.0.1 v2.0.1-5.0.rc3
1.11.0 1.11.0.post4 v1.11.0-5.0.rc3
CANN 6.3.RC3.1 1.11.0 1.11.0.post3 v1.11.0-5.0.rc2.2
CANN 6.3.RC3 1.11.0 1.11.0.post2 v1.11.0-5.0.rc2.1
CANN 6.3.RC2 2.0.1 2.0.1.rc1 v2.0.1-5.0.rc2
1.11.0 1.11.0.post1 v1.11.0-5.0.rc2 23.0.RC1-1.11.0
1.8.1 1.8.1.post2 v1.8.1-5.0.rc2 23.0.RC1-1.8.1
CANN 6.3.RC1 1.11.0 1.11.0 v1.11.0-5.0.rc1
1.8.1 1.8.1.post1 v1.8.1-5.0.rc1
CANN 6.0.1 1.5.0 1.5.0.post8 v1.5.0-3.0.0 22.0.0
1.8.1 1.8.1 v1.8.1-3.0.0 22.0.0-1.8.1
1.11.0 1.11.0.rc2(beta) v1.11.0-3.0.0
CANN 6.0.RC1 1.5.0 1.5.0.post7 v1.5.0-3.0.rc3 22.0.RC3
1.8.1 1.8.1.rc3 v1.8.1-3.0.rc3 22.0.RC3-1.8.1
1.11.0 1.11.0.rc1(beta) v1.11.0-3.0.rc3
CANN 5.1.RC2 1.5.0 1.5.0.post6 v1.5.0-3.0.rc2 22.0.RC2
1.8.1 1.8.1.rc2 v1.8.1-3.0.rc2 22.0.RC2-1.8.1
CANN 5.1.RC1 1.5.0 1.5.0.post5 v1.5.0-3.0.rc1 22.0.RC1
1.8.1 1.8.1.rc1 v1.8.1-3.0.rc1
CANN 5.0.4 1.5.0 1.5.0.post4 2.0.4.tr5 21.0.4
CANN 5.0.3 1.8.1 1.5.0.post3 2.0.3.tr5 21.0.3
CANN 5.0.2 1.5.0 1.5.0.post2 2.0.2.tr5 21.0.2

建议与交流

欢迎大家为社区做贡献。如果有任何疑问或建议,请提交gitee Issues,我们会尽快回复。感谢您的支持。

分支维护策略

AscendPyTorch版本分支的维护阶段如下:

状态 时间 说明
计划 1—3 个月 计划特性
开发 3 个月 开发特性
维护 6-12 个月 合入所有已解决的问题并发布版本,针对不同的PyTorch版本采取不同的维护策略,常规版本和长期支持版本维护周期分别为6个月和12个月
无维护 0—3 个月 合入所有已解决的问题,无专职维护人员,无版本发布
生命周期终止(EOL) N/A 分支不再接受任何修改

PyTorch版本维护策略

PyTorch版本 维护策略 当前状态 发布时间 后续状态 EOL日期
2.2.0 常规版本 维护 2024/04/01 预计2024/10/15起无维护
2.1.0 长期支持 维护 2023/10/15 预计2024/10/15起无维护
2.0.1 常规版本 EOL 2023/7/19 2024/3/14
1.11.0 长期支持 维护 2023/4/19 预计2024/4/19起无维护
1.8.1 长期支持 EOL 2022/4/10 2023/4/10
1.5.0 长期支持 EOL 2021/7/29 2022/7/29

安全声明

Ascend Extension for PyTorch插件 安全声明

参考文档

有关安装指南、模型迁移和训练/推理教程和API列表等更多详细信息,请参考昇腾社区Ascend Extension for PyTorch

文档名称 文档链接
安装指南 参考链接
网络模型迁移和训练 参考链接
算子适配 参考链接
API清单(PyTorch原生接口与自定义接口) 参考链接

许可证

Ascend Extension for PyTorch插件使用BSD许可证。详见LICENSE文件。

在colab里跑书生大模型

1.8B(fp16情况下,3.35G)跑下来没有问题。

下图是20B模型(fp16情况下,37G),把环境搞宕机了,硬盘只有78G,我尝试挂载一块google drive上去是否可行。

计算逻辑

要计算使用 fp16(半精度浮点数)时 InternLM 20B 模型的大小,我们可以按照以下步骤进行:

参数数量:

InternLM 20B 模型包含 20B(20,000,000,000)个参数。
每个参数的大小:

在 fp16 模式下,每个浮点数占用 2 个字节(16 位)。
计算模型大小:

模型大小(字节) = 参数数量 × 每个参数的大小(字节)
模型大小(字节) = 20,000,000,000 × 2
模型大小(字节) = 40,000,000,000 字节
转换为常见单位:

1 GB = 1,073,741,824 字节
模型大小(GB) = 模型大小(字节) / 1,073,741,824
模型大小(GB) ≈ 40,000,000,000 / 1,073,741,824
模型大小(GB) ≈ 37.25 GB
结果
在 fp16 模式下,InternLM 20B 模型的大小约为 37.25 GB。

这个计算基于每个参数占用 2 个字节的假设,并且忽略了模型中的额外开销(例如优化器状态和其他元数据),所以实际的内存占用可能略高。