当前位置: 首页 > news >正文

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

相关文章:

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

Pytorch的一小步,昇腾芯片的一大步 相信在AI圈的人多多少少都看到了最近的信息:PyTorch最新2.1版本宣布支持华为昇腾芯片! 1、 发生了什么事儿? 在2023年10月4日PyTorch 2.1版本的发布博客上,PyTorch介绍的beta版本…...

rabbitmq-amqp事务消息+消费失败重试机制+prefetch限流

1. 安装和配置 <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId> </dependency><dependency> <groupId>com.fasterxml.jackson.core</groupId> <arti…...

【HarmonyOS Next】自定义Tabs

背景 项目中Tabs的使用可以说是特别的频繁&#xff0c;但是官方提供的Tabs使用起来&#xff0c;存在tab选项卡切换动画滞后的问题。 原始动画无法满足产品的UI需求&#xff0c;因此&#xff0c;这篇文章将实现下面页面滑动&#xff0c;tab选项卡实时滑动的动画效果。 实现逻…...

Sass 模块化革命:深入解析 @use 语法,打造高效 CSS 架构

文章目录 前言use 用法1. 模块化与命名空间2. use 中 as 语法的使用3. as * 语法的使用4. 私有成员的访问5. use 中with默认值6. use 导入问题总结下一篇预告&#xff1a; 前言 在上一篇中&#xff0c;我们深入探讨了 Sass 中 import 语法的局限性&#xff0c;正是因为这些问题…...

【渗透测试】反弹 Shell 技术详解(一)

反弹 Shell 技术详解 一、前置知识 反弹 shell&#xff08;Reverse Shell&#xff09;是一种技术&#xff0c;攻击者利用它可以在远程主机上获得一个交互式的命令行接口。通常情况下&#xff0c;反弹 shell 会将标准输入&#xff08;stdin&#xff09;、标准输出&#xff08;…...

python:pymunk + pygame 模拟六边形中小球弹跳运动

向 chat.deepseek.com 提问&#xff1a;编写 python 程序&#xff0c;用 pymunk, 有一个正六边形&#xff0c;围绕中心点缓慢旋转&#xff0c;六边形内有一个小球&#xff0c;六边形的6条边作为墙壁&#xff0c;小球受重力和摩擦力、弹力影响&#xff0c;模拟小球弹跳运动&…...

Windows 图形显示驱动开发-WDDM 3.2-本机 GPU 围栏对象(二)

GPU 和 CPU 之间的同步 CPU 必须执行 MonitoredValue 的更新&#xff0c;并读取 CurrentValue&#xff0c;以确保不会丢失正在进行的信号中断通知。 当向系统中添加新的 CPU 等待程序时&#xff0c;或者如果现有的 CPU 等待程序失效时&#xff0c;OS 必须修改受监视的值。OS …...

23种设计模式之《模板方法模式(Template Method)》在c#中的应用及理解

程序设计中的主要设计模式通常分为三大类&#xff0c;共23种&#xff1a; 1. 创建型模式&#xff08;Creational Patterns&#xff09; 单例模式&#xff08;Singleton&#xff09;&#xff1a;确保一个类只有一个实例&#xff0c;并提供全局访问点。 工厂方法模式&#xff0…...

DEV-C++ 为什么不能调试?(正确解决方案)

为了备战pat考试&#xff0c;专门下载了DEV C&#xff0c;然后懵圈的发现&#xff0c;怎么无法调试(╯□&#xff09;╯︵ ┻━┻ 然后整了半天&#xff0c;终于在网上找到相应的解决方案&#xff01;&#xff01;&#xff01;-> Dev C 5.11 调试初始设置 <- 一共四步…...

【C++设计模式】第五篇:原型模式(Prototype)

注意&#xff1a;复现代码时&#xff0c;确保 VS2022 使用 C17/20 标准以支持现代特性。 克隆对象的效率革命 1. 模式定义与用途​ ​ 核心思想​ ​原型模式&#xff1a;通过复制现有对象​&#xff08;原型&#xff09;来创建新对象&#xff0c;而非通过new构造。​关键用…...

深入 Vue.js 组件开发:从基础到实践

深入 Vue.js 组件开发&#xff1a;从基础到实践 Vue.js 作为一款卓越的前端框架&#xff0c;其组件化开发模式为构建高效、可维护的用户界面提供了强大支持。在这篇博客中&#xff0c;我们将深入探讨 Vue.js 组件开发的各个方面&#xff0c;从基础概念到高级技巧&#xff0c;助…...

maven导入spring框架

在eclipse导入maven项目&#xff0c; 在pom.xml文件中加入以下内容 junit junit 3.8.1 test org.springframework spring-core ${org.springframework.version} org.springframework spring-beans ${org.springframework.version} org.springframework spring-context ${org.s…...

数据守护者:备份文件的重要性与自动化实践策略

在数字化浪潮席卷全球的今天&#xff0c;数据已成为企业运营和个人生活中不可或缺的核心资源。无论是企业的财务报表、客户资料&#xff0c;还是个人的家庭照片、工作文档&#xff0c;这些数据都承载着巨大的价值。然而&#xff0c;数据丢失的风险无处不在&#xff0c;硬件故障…...

MyBatis @Param 注解详解:指定的参数找不到?

MyBatis Param 注解详解 1. Param 注解的作用 Param 注解用于显式指定方法参数的名称&#xff0c;让 MyBatis 在 SQL 映射文件&#xff08;XML&#xff09;或注解中通过该名称访问参数。 核心场景&#xff1a; 方法有多个参数时&#xff0c;避免参数名丢失或混淆。参数为简单…...

【项目日记(八)】内存回收与联调

前言 我们前面实现了三层缓存申请的过程&#xff0c;并完成了三层缓存申请过程的联调&#xff01;本期我们来介绍三层的缓存的回收机制以及三层整体联调释放的过程。 目录 前言 一、thread cache 回收内存 二、central cache 回收内存 • 如何确定一个对象对应的span • …...

性能测试监控工具jmeter+grafana

1、什么是性能测试监控体系&#xff1f; 为什么要有监控体系&#xff1f; 原因&#xff1a; 1、项目-日益复杂&#xff08;内部除了代码外&#xff0c;还有中间件&#xff0c;数据库&#xff09; 2、一个系统&#xff0c;背后可能有多个软/硬件组合支撑&#xff0c;影响性能的因…...

016.3月夏令营:数理类

016.3月夏令营&#xff1a;数理类&#xff1a; 中国人民大学统计学院&#xff1a; http://www.eeban.com/forum.php?modviewthread&tid386109 北京大学化学学院第一轮&#xff1a; http://www.eeban.com/forum.php?m ... 6026&extrapage%3D1 香港大学化学系夏令营&a…...

CS144 Lab Checkpoint 0: networking warm up

Set up GNU/Linux on your computer 我用的是Ubuntu&#xff0c;按照指导书上写的输入如下命令安装所需的软件包&#xff1a; sudo apt update && sudo apt install git cmake gdb build-essential clang \ clang-tidy clang-format gcc-doc pkg-config glibc-doc tc…...

靶场之路-VulnHub-DC-6 nmap提权、kali爆破、shell反连

靶场之路-VulnHub-DC-6 一、信息收集 1、扫描靶机ip 2、指纹扫描 这里扫的我有点懵&#xff0c;这里只有两个端口&#xff0c;感觉是要扫扫目录了 nmap -sS -sV 192.168.122.128 PORT STATE SERVICE VERSION 22/tcp open ssh OpenSSH 7.4p1 Debian 10deb9u6 (protoc…...

给没有登录认证的web应用添加登录认证(openresty lua实现)

这阵子不是deepseek火么&#xff1f;我也折腾了下本地部署&#xff0c;ollama、vllm、llama.cpp都弄了下&#xff0c;webui也用了几个&#xff0c;发现nextjs-ollama-llm-ui小巧方便&#xff0c;挺适合个人使用的。如果放在网上供多人使用的话&#xff0c;得接入登录认证才好&a…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

在四层代理中还原真实客户端ngx_stream_realip_module

一、模块原理与价值 PROXY Protocol 回溯 第三方负载均衡&#xff08;如 HAProxy、AWS NLB、阿里 SLB&#xff09;发起上游连接时&#xff0c;将真实客户端 IP/Port 写入 PROXY Protocol v1/v2 头。Stream 层接收到头部后&#xff0c;ngx_stream_realip_module 从中提取原始信息…...

安宝特方案丨船舶智造的“AR+AI+作业标准化管理解决方案”(装配)

船舶制造装配管理现状&#xff1a;装配工作依赖人工经验&#xff0c;装配工人凭借长期实践积累的操作技巧完成零部件组装。企业通常制定了装配作业指导书&#xff0c;但在实际执行中&#xff0c;工人对指导书的理解和遵循程度参差不齐。 船舶装配过程中的挑战与需求 挑战 (1…...

基于SpringBoot在线拍卖系统的设计和实现

摘 要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统&#xff0c;主要的模块包括管理员&#xff1b;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...

uniapp手机号一键登录保姆级教程(包含前端和后端)

目录 前置条件创建uniapp项目并关联uniClound云空间开启一键登录模块并开通一键登录服务编写云函数并上传部署获取手机号流程(第一种) 前端直接调用云函数获取手机号&#xff08;第三种&#xff09;后台调用云函数获取手机号 错误码常见问题 前置条件 手机安装有sim卡手机开启…...

适应性Java用于现代 API:REST、GraphQL 和事件驱动

在快速发展的软件开发领域&#xff0c;REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名&#xff0c;不断适应这些现代范式的需求。随着不断发展的生态系统&#xff0c;Java 在现代 API 方…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

【堆垛策略】设计方法

堆垛策略的设计是积木堆叠系统的核心&#xff0c;直接影响堆叠的稳定性、效率和容错能力。以下是分层次的堆垛策略设计方法&#xff0c;涵盖基础规则、优化算法和容错机制&#xff1a; 1. 基础堆垛规则 (1) 物理稳定性优先 重心原则&#xff1a; 大尺寸/重量积木在下&#xf…...

嵌入式学习之系统编程(九)OSI模型、TCP/IP模型、UDP协议网络相关编程(6.3)

目录 一、网络编程--OSI模型 二、网络编程--TCP/IP模型 三、网络接口 四、UDP网络相关编程及主要函数 ​编辑​编辑 UDP的特征 socke函数 bind函数 recvfrom函数&#xff08;接收函数&#xff09; sendto函数&#xff08;发送函数&#xff09; 五、网络编程之 UDP 用…...

标注工具核心架构分析——主窗口的图像显示

&#x1f3d7;️ 标注工具核心架构分析 &#x1f4cb; 系统概述 主要有两个核心类&#xff0c;采用经典的 Scene-View 架构模式&#xff1a; &#x1f3af; 核心类结构 1. AnnotationScene (QGraphicsScene子类) 主要负责标注场景的管理和交互 &#x1f527; 关键函数&…...