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
英文地址,請注明出處:http://en.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使用 我們先來看…