Ascend-pytorch插件介绍及模型迁移

Ascend-pytorch插件介绍及模型迁移

用于昇腾适配PyTorch框架,为使用PyTorch框架的开发者提供昇腾AI处理器的超强算力。

当前(2023.9.20)AscendPyTorch支持的pytorch版本如下:

AscendPyTorch版本 CANN版本 支持PyTorch版本 代码分支名称
5.0.RC2 CANN 6.3.RC2 2.0.1.rc1 v2.0.1-5.0.rc2
5.0.RC2 CANN 6.3.RC2 1.8.1.post2 v1.8.1-5.0.rc2
5.0.RC2 CANN 6.3.RC2 1.11.0.post1 v1.11.0-5.0.rc2

基本介绍

PyTorch Adapter实现原理

pytorch仓的结构:

在这里插入图片描述

  • torch/ # 存放大家熟悉的python模块
    • csrc # 用C++实现的pytorch前端的功能,包括python和C++的binding,autograd和JIT
  • aten # "A Tensor Library"的缩写
    • src/ATen # 用C++实现的tensor基本操作
  • c10 # Caffe2和 A Tensor的双关语,包含pytorch的核心抽象,以及tensor和存储数据结构的实际实现
核心机制-dispatch

简单而言,就是根据API调用时,输入的数据类型来决定后端调用的API类型。比如CPU和GPU的API是不一样的,可以自动根据传入的tensor类型来自动选择API。

具体来看,对于每一个前端的算子,dispatcher会维护一个函数指针表,为每个dispatch key提供对应的视线。这个表中有针对不同后端(CPU,GPU,XLA)的dispatch条目,也有想autograd和tracing这样的高抽象层级概念的条目。dispatcher根据输入的tensor和其他东西计算出一个dispatch key,然后跳转到函数指针表所指向的函数。

所以,对于昇腾处理器而言,实现Adapter主要就是要讲用昇腾实现的算子注册到dispatcher上面,即可复用pytorch的dispatch机制完成算子分布。

示例-单算子调用流程
  1. 用户在前端调用算子,比如可调用nn.Module,nn.Funtional,Tensor对象上的函数;
  2. pybind11根据注册绑定的映射规则,调用后端C++方法;
  3. 后端C++接口根据输入参数来选取所需调用的算子类型(dispatch机制),比如是调用CPU实现的算子还是GPU实现的算子(注意:此处只要注册NPU实现的算子,便可调用昇腾处理器的计算能力;
  4. 调用相应算子,返回结果;

PyTorch Adapter的逻辑架构图

在这里插入图片描述

在线适配方案:模型执行,训练等主要功能流程有Pytorch框架提供,用户界面API保持不变,将Davinci设备和计算库作为扩展资源注册到PyTorch框架中。

  • 优点:
    • 继承PyTorch动态图特性
    • 继承原生PyTorch使用方式,移植的时候,在开发方式和代码复用方便做到最小的改动;
    • 继承Pytorch的原生体系结构,保留框架本身出色的特性,比如自动微分,动态
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值