Pytorch的一小步,昇腾芯片的一大步

Pytorch的一小步,昇腾芯片的一大步

相信在AI圈的人多多少少都看到了最近的信息:PyTorch最新2.1版本宣布支持华为昇腾芯片!

1、 发生了什么事儿?

在2023年10月4日PyTorch 2.1版本的发布博客上,PyTorch介绍的beta版本新特性上有一个PRIVATEUSE1特性是提高了第三方设备的支持,并说明了华为Ascend NPU(昇腾NPU芯片)的OSS小组已经成功将torch_npu整合进入PyTorch;

人话就是: pytorch原生支持的是CPU和CUDA,现在昇腾NPU也可以支持pytorch了;

  • **PyTorch2.1 发布了PRIVATEUSE1新特性,PyTorch介绍的beta版本PRIVATEUSE1新特性,**主要目标是让PyTorch可以使用更多的硬件;

  • PyTorch 2.1对华为昇腾芯片NPU的支持:简单理解就是华为的Ascend NPU(昇腾NPU芯片)的OSS小组通过PyTorch的PRIVATEUSE1特性让PyTorch可以在华为的NPU芯片上运行
    在这里插入图片描述

1.1 PyTorch的PRIVATEUSE1特性是什么?

  • PyTorch不是一个完全的前后端分离的架构,但是可以从前后端分离的角度理解,其中前端负责用户交互,而后端处理计算任务;
  • PyTorch的前端:主要有两个,一是Python前端:另一个是C++前端; Python前端是主要的接口,而C++前端为PyTorch机器学习框架提供了纯C++接口; Python API底层是基于C++代码库,提供了诸如张量和自动微分等基础数据结构和功能;
  • PyTorch的后端:指的是执行前端定义操作的计算引擎。PyTorch支持多种后端,每种后端都针对特定的硬件或运行时进行了优化。例如,它有针对CUDA、cuDNN、MKL、MKLDNN、OpenMP等的后端。这些后端控制操作的行为,并且对于利用诸如GPU计算之类的硬件加速至关重要;
  • PyTorch还允许自定义后端,用户可以使用torch.compile定义自己的后端。在追踪FX图后,可以通过TorchDynamo(torch.compile的图追踪组件)调用自定义后端中的后端函数;
  • PRIVATEUSE1特性就是PyTorch提供的一种定制后端的机制,主要是为了帮助开发者在PyTorch中集成新的计算后端,PRIVATEUSE1特性为集成新的计算后端提供了一个结构化的方法。通过此特性,开发者可以将特定于硬件的优化和实现集成到PyTorch中,从而获得更好的性能,特别是在针对特定硬件加速器(如GPU、NPU或FPGA)时;
  • 简单理解就是华为的Ascend NPU(昇腾NPU芯片)的OSS小组通过PyTorch的PRIVATEUSE1特性让PyTorch可以在华为的NPU芯片上运行。

1.2、 PyTorch2.1在华为NPU运行方式

参考官网,非常简单,代码如下:

torch.rename_privateuse1_backend("my_hardware_device")
torch.utils.generate_methods_for_privateuse1_backend()
x = torch.randn((2, 3), device='my_hardware_device')
y = x + x # run add kernel on 'my_hardware_device'

虽然通过插件(之前昇腾自己fork维护的)的形式官方支持了第三方硬件NPU,还有个极大的问题,我们可以看看PyTorch Adapter,版本配套关系及其离谱,就支持了三个pytorch版本,版本配套表一个电脑屏幕都放不下,昇腾在面向开发者文档上还是要多下功夫啊,感觉是研发根据自己的开发环境写的文档,和mindspore文档一样的问题(改天有时间再写),对于一个开发者文档是相当重要的,新手直接劝退…

另外,有意思的是,这个Pytorch Adapter在gitee上也开源了,但是文档不是同步更新,且内容逻辑是不一样的,大家可以去查查看;

gitee上的:PyTorch与Python版本配套表

PyTorch版本Python版本
PyTorch1.8.1Python3.7.x(3.7.5及以上)、Python3.8.x、Python3.9.x
PyTorch1.11.0Python3.7.x(3.7.5及以上)、Python3.8.x、Python3.9.x、Python3.10.x
PyTorch2.0.1Python3.8.x、Python3.9.x、Python3.10.x

github上的:版本配套表

PyTorch VersionPython Version
PyTorch1.8.1Python3.7.x(>=3.7.5),Python3.8.x,Python3.9.x
PyTorch1.11.0Python3.7.x(>=3.7.5),Python3.8.x,Python3.9.x,Python3.10.x
PyTorch2.0.1Python3.8.x,Python3.9.x,Python3.10.x
PyTorch2.1.0Python3.8.x,Python3.9.x,Python3.10.x

2、 对pytorch和第三方芯片厂商(昇腾)有啥好处?

2.1 是原生支持了昇腾吗?

在这里插入图片描述

先通过【paperwithcode】看下目前市场上论文基于不同AI框架实现的框架占比情况来看,Pytorch依旧是作为一哥的存在;并且底层硬件基本都是英伟达,那么如果一个新硬件厂商想要支持Pytorch如何做呢?

我们先看看特斯拉咋做的:

dojo

正常来说

1、 通过ONNX/torchscript作为中转来实现插件,但对于优化和开发效率有极大的影响;

2、 fork下pytorch,适配自己的硬件后并持续维护,但大家要知道Pytorch是按月发版本的,客户无法使用新特性,那硬件厂商的适配要吐血。。。

两种方式都会让使用新硬件的客户抓狂,那此次特性的更新,对于昇腾来说,其实是利好的,pytorch增加了PrivateUse1特性,相当于不用fork了!

但我们得看下其实也不是算原生支持,其实从1.1、1.2 的描述来看,pytorch增加了PrivateUse1特性,这样做可以降低对新硬 XPU 件的支持门槛,而PyTorch在做前后端做进一步的分离,以支持多硬件时代,芯片厂商实现后端后可以无缝切换

为了验证这个功能呢,华为昇腾pytorch团队基于自己维护的torch_npu项目做了个新的后端,并且成功在torch 2.1中调用昇腾的npu;

注:彩蛋

GRAPHCORE发了一个PR(来源)增加IPU专用的DispatchKey通过了,有趣的是,一个多月后,昇腾希望在pytorch中加入NPU专用的DispatchKey(来源),但pytorch团队以PrivateUse1特性马上要支持了为由给拒绝了,昇腾还是慢了些啊,估计好气啊。。。

注:GRAPHCORE:拟未是一家人工智能芯片公司,为人工智能打造计算机系统,这些系统由先进的智能处理器(IPU)提供动力,旨在满足人工智能独特的计算要求。2016年,公司正式成立,总部位于英国布里斯托。2019年,公司在北京设立公司中国总部,并确定中文名“拟未”。目前,拟未已经设立了北京、上海、深圳和新竹办公室。

2.2对于pytorch的好处和挑战是什么?

  • 好处

进一步稳固pytorch的大哥的市场地位,难以撼动,pytorch本身也希望屏蔽硬件的差异,估计希望做到所有用户的一套代码对底层硬件无感知;估计后续pytorch的设备列表会越来越长…

  • 挑战

抛开对第三方硬件的支持这个特性,LLM领域对pytorch的冲击还是有的,当前pytorch对分布式训练的支持…

目前大厂都是pytorch+DeepSpeed/Megatron三件套在玩,大模型时代的对并行框架的需求已经是必需品了,如果只是一个pytorch那在LLM时代是没有意义的;

等等,哟,昇腾有AscendSpeed,据我所知MindSpore是把并行能力集成到框架本身,那么AscendSpeed就是DeepSpeed/Megatron等并行框架的插件咯,和适配pytorch是一个套路;好像也是没办法的办法~

2.3 对于第三方芯片厂商(昇腾)有的好处和挑战是什么?

  • 好处

对于pytorch来说是一小步,对于昇腾来说,解决了NPU支持pytorch的问题,算是生态上一大步,早就受不了第三方硬件上pytorch的各种适配和极低的开发效率;

  • 挑战

torch_npu插件不是原生支持,会有几个较大的挑战:

1、版本更新:面对每季度release的pytorch,插件跟不上可能存在版本兼容性问题;

2、 第三方extension支持: 很多基于 torch 开发的项目本身也是一个 extension,默认一般都会有 CUDA 的支持,有的会有 CPU 的支持。也需要为新的硬件添加相应的kernel,可能的形式是做一个插件的插件,e.g. torchvision-xpu等等。如果前端 API 用法有些和 torch 不匹配的地方还要有自己的 modelzoo;

3、 **Test Coverage 的问题:**torch 本身的测试项目很多的,默认的测试不会跑非原生的 device,要保障质量是有一定难度的,毕竟 torch 用户那么多迭代了这么久才到现在的地步;

4、 LLM支持:大模型的爆发式增长,对新硬件的底层算子的支持有新的需求,如flashattension等大算子的支持,今天有flashattention,明天如果有另外一个算子的,昇腾还是要补齐基础算子的基础上,基于生态构建基于昇腾的优势算子,但昇腾的设备又没有2C端,终究在广大开发者生态上慢英伟达一拍

加油啊,昇腾、加油啊dojo、加油啊~

天下苦英伟达久矣~

参考

1、 https://www.zhihu.com/question/624955377/answer/3239829901

2、 https://gitee.com/ascend/pytorch

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/71965.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/71965.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

嵌入式硬件篇---手柄控制控制麦克纳姆轮子

文章目录 前言1. 变量定义2. 摇杆死区设置3. 模式检查4. 摇杆数据处理4.1 右摇杆垂直值(psx_buf[7])4.2 右摇杆水平值(psx_buf[8])4.3 左摇杆水平值(psx_buf[5])4.4 左摇杆垂直值(psx_buf[6]&am…

阿里千问大模型(Qwen2.5-VL-7B-Instruct)部署

参考链接 知乎帖子 B站视频 huggingface 镜像网站(不太全,比如 Qwen/Qwen2.5-VL-7B-Instruct就没有) huggingface 5种下载方式汇总 通过huggingface-cli下载模型 不一样的部分是预训练权重的下载和demo 首先安装huggingface_hub pip insta…

Jenkins在Windows上的使用(二):自动拉取、打包、部署

(一)Jenkins全局配置 访问部署好的Jenkins服务器网址localhost:8080,完成默认插件的安装后,接下来将使用SSH登录远程主机以实现自动化部署。 1. 配置插件 选择dashboard->Manage Jenkins->plugins 安装下面两个插件  …

群晖DS 223 Docker:开启私有云

群晖DS 223 Docker:开启私有云的无限可能 引言 在数据存储与管理的不断演进中,群晖 DS 223 凭借其出色的性能和丰富的功能,成为众多用户搭建私有云的热门选择。而当它与 Docker 技术相遇,犹如为数据管理的舞台添上了绚丽多彩的灯…

git切换版本

git brach 查看本地 刚从git上下载下来 的话 可以通过 git checkout xxxx进行切换 可能一段时间没有用 而服务器上新建了某些版本 那么需要用 git fetch origin 同步本地与git服务器的分支 然后 创建本地分支xxx 并从服务器拉取xxx git checkout -b xxx origin/xxx…

Three.js 进阶(灯光阴影关系和设置、平行光、阴影相机)

本篇主要学习内容 : 灯光与阴影聚光灯点光源平行光阴影相机和阴影计算投射阴影接受阴影 点赞 关注 收藏 学会了 1.灯光与阴影 1、材质要满足能够对光有反应 2、设置渲染器开启阴影计算 renderer.shadowMap.enabledtrue 3、设置光照投射阴影 directionalLight.castShadow …

【 <一> 炼丹初探:JavaWeb 的起源与基础】之 Tomcat 的工作原理:从启动到请求处理的流程

<前文回顾> 点击此处查看 合集 https://blog.csdn.net/foyodesigner/category_12907601.html?fromshareblogcolumn&sharetypeblogcolumn&sharerId12907601&sharereferPC&sharesourceFoyoDesigner&sharefromfrom_link <今日更新> 一、Tomcat…

【GPT入门】第11课 FunctionCall调用本地代码入门

【GPT入门】第11课 FunctionCall调用代码入门 1. 手撕FunctionCall2.代码3.functionCall的结果 1. 手撕FunctionCall 为了了解&#xff0c;funcationCall底层&#xff0c;手写一个functionCall多方法&#xff0c;并调用&#xff0c;体验 思路&#xff1a; 任务&#xff1a;让…

MySQL主从架构配合ShardingJdbc实现读写分离

文章目录 目录架构搭建读写分离pom.xmlfdy-live-user-provider 模块application.ymlfdy-db-sharding.yamlShardingJdbcDatasourceAutoInitConnectionConfig.java 目录 架构搭建 基于Docker去创建MySQL的主从架构 读写分离 pom.xml <dependency><groupId>mysql…

计网面试准备

正确理解网络数据传输过程 同一路由器的不同接口属于不同局域网&#xff0c;广播只能在同一个局域网

NLP常见任务专题介绍(1)-关系抽取(Relation Extraction, RE)任务训练模板

📌 关系抽取(Relation Extraction, RE)任务训练示例 本示例展示如何训练一个关系抽取模型,以识别两个实体之间的关系。 1️⃣ 任务描述 目标:从文本中提取两个实体之间的语义关系,例如 “人物 - 组织”、“药物 - 疾病”、“公司 - 创始人” 等。输入:句子 + 标注的实…

【技术白皮书】内功心法 | 第二部分 | Telnet远程登录的工作原理

远程登录的工作原理 背景介绍远程登录远程登录的服务模式远程登录服务的实现基础远程登录服务的运行模式Telnet服务为什么不被操作系统管理 Telnet协议的原理网络虚终端&#xff08;NVT&#xff09;结束标示NVT的原理NVT屏蔽差异 背景介绍 绝大多数计算机都是运行多用户操作系…

在 Spring Boot 中实现基于 TraceId 的日志链路追踪

1 前言 1.1 什么是 TraceId? TraceId 是一个唯一的标识符,用于跟踪分布式系统中的请求。每个请求从客户端发起到服务端处理,再到可能的多个微服务调用,都会携带这个 TraceId,以便在整个请求链路中进行追踪和调试。 1.2 日志链路追踪的意义 日志链路追踪可以帮助开发者…

游戏引擎学习第150天

回顾与当天计划 我们在这里完全不使用任何库&#xff0c;所以我们完全是引擎和库免疫的, 正如大家所知道的&#xff0c;我们正在编写自己的资源处理系统&#xff0c;准确来说&#xff0c;是一个资源加载系统。过去一周我们已经完成了很多工作&#xff0c;现在只剩下最后几步&a…

Flutter中stream学习

Flutter中stream学习 概述Stream的基础概念stream的常用方法Stream.fromFuture(Future<T> future)Stream.fromFutures(Iterable<Future<T>> futures)Stream.fromIterable(Iterable<T> elements)Stream.periodic(Duration period, [T computation(int c…

基于javaweb的SSM房屋租赁管理系统设计和实现(源码+文档+部署讲解)

技术范围&#xff1a;SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容&#xff1a;免费功能设计、开题报告、任务书、中期检查PPT、系统功能实现、代码编写、论文编写和辅导、论…

物联网商业模式

物联网商业模式是一种战略规划&#xff0c;它融合了物联网技术来创造价值并获取收入。它与传统商业模式的不同之处在于&#xff0c;它利用互联设备来改善运营、提升客户体验以及优化服务项目。在当今由科技驱动的世界中&#xff0c;这种商业模式通过利用实时数据来提供创新服务…

从0开始的操作系统手搓教程45——实现exec

目录 建立抽象 实现加载 实现sys_execv &#xff01;&#xff01;&#xff01;提示&#xff1a;因为实现问题没有测试。所以更像是笔记&#xff01; exec 函数的作用是用新的可执行文件替换当前进程的程序体。具体来说&#xff0c;exec 会将当前正在运行的用户进程的进程体&…

【python爬虫】酷狗音乐爬取练习

注意&#xff1a;本次爬取的音乐仅有1分钟试听&#xff0c;仅作学习爬虫的原理&#xff0c;完整音乐需要自行下载客户端。 一、 初步分析 登陆酷狗音乐后随机选取一首歌&#xff0c;在请求里发现一段mp3文件&#xff0c;复制网址&#xff0c;确实是我们需要的url。 复制音频的…

Linux开发工具----vim

目录 Linux编辑器-vim使用 1. vim的基本概念 正常/普通/命令模式(Normal mode) 插入模式(Insert mode) 底行模式(last line mode) 2. vim的基本操作 3. vim正常模式命令集 4. vim底行模式命令集 5. vim操作总结 (本篇文章相当于vim常用命令字典) Linux编辑器-vim使用 我们先来看…