0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

ECS實例——Arm芯片的 Python-AI算力優(yōu)化

Linux閱碼場 ? 來源:Linux閱碼場 ? 2023-05-09 11:37 ? 次閱讀

深度學習技術(shù)在圖像識別、搜索推薦等領(lǐng)域得到了廣泛應(yīng)用。近年來各大 CPU 廠商也逐漸把 AI 算力納入了重點發(fā)展方向,通過《Arm 芯片 Python-AI 算力優(yōu)化》我們將看到龍蜥社區(qū) Arm 架構(gòu) SIG(Special Interest Group) 利用最新的 Arm 指令集優(yōu)化 Python-AI 推理 workload 的性能。

倚天 ECS 實例的 AI 推理軟件優(yōu)化

阿里云推出的倚天 Arm ECS 實例,擁有針對 AI 場景的推理加速能力,我們將了解加速的原理以及以及相關(guān)的軟件生態(tài)適配。

0d2ebbfe-ee0e-11ed-90ce-dac502259ad0.png

卷積神經(jīng)網(wǎng)絡(luò)(CNN)在圖像和語音領(lǐng)域使用廣泛,神經(jīng)網(wǎng)絡(luò)算法相比傳統(tǒng)的算法消耗了更多算力。為了探索對計算的優(yōu)化,我們進一步看到 AlexNet 模型(一種 CNN)的推理過程的各個層的計算資源消耗占比。

可以看到名為 conv[1-5] 的 5 個卷積層消耗了 90% 的計算資源,因此優(yōu)化 CNN 推理的關(guān)鍵就是優(yōu)化卷積層的計算。

0d39c760-ee0e-11ed-90ce-dac502259ad0.png

我們進一步來看如何對圖像應(yīng)用卷積核:1、使用 im2col 根據(jù)卷積核尺寸,將圖像轉(zhuǎn)化為若干塊(patch)。2、將多個卷積核展開成若干向量。

3、對由圖像塊組成的矩陣和由多個卷積核展開組成的矩陣應(yīng)用矩陣乘法。

0d42ef70-ee0e-11ed-90ce-dac502259ad0.png

上面一頁的計算應(yīng)用了矩陣乘法操作,為什么我們不采用更加直接的迭代計算方式,而是采用需要額外內(nèi)存的矩陣乘法呢?這里有兩個關(guān)鍵因素:

  • 深度學習的卷積計算量很大,典型計算需要涉及 5000 萬次乘法和加法操作,因此對計算的優(yōu)化十分重要。

  • 計算機科學家們已經(jīng)深入探索了矩陣乘法操作,矩陣乘法操作可以被優(yōu)化得非??臁?/span>

fortran 世界中,GEMM(general matrix multiplication)已經(jīng)成為一個通用操作:0d50b1f0-ee0e-11ed-90ce-dac502259ad0.png該操作通過對數(shù)據(jù)重新排列,精心設(shè)計計算過程,利用多線程和向量指令,可以比自己實現(xiàn)的樸素版本快十倍以上。因此使用矩陣運算帶來的收益相比額外的開銷是值得的。

因為 AI 推理大量使用了矩陣乘法,如今也有許多硬件對矩陣運算進行了加速:

  • NVIDIA Volta 架構(gòu)引入了 tensor core,可以高效地以混合精度處理矩陣乘。
  • Intel AMX(Advanced Matrix Extensions) 通過脈動陣列在硬件層面支持矩陣乘。

  • Arm SME(Scalable Matrix Extension) 支持向量外積運算,加速矩陣乘。

雖然在 AI 算力上 GPU 要遠高于 CPU,但是 CPU 因為其部署方便,且無需在主機-設(shè)備間拷貝內(nèi)存,在 AI 推理場景占有一席之地。目前市面上尚沒有可以大規(guī)模使用的支持 AMX 或者 SME 的硬件,在這個階段我們應(yīng)該如何優(yōu)化 CPU 上的 AI 推理算力?我們首先要了解 BF16 數(shù)據(jù)類型。

0d5bf11e-ee0e-11ed-90ce-dac502259ad0.png

BF16(Brain Float 16)是由 Google Brain 開發(fā)設(shè)計的 16 位浮點數(shù)格式。相比傳統(tǒng)的 IEEE16 位浮點數(shù),BF16 擁有和 IEEE 單精度浮點數(shù)(FP32)一樣的取值范圍,但是精度較差。研究人員發(fā)現(xiàn),在 AI 訓(xùn)練和推理中,使用 BF16 可以節(jié)約一半的內(nèi)存,獲得和單精度浮點數(shù)接近的準確率。

根據(jù)右圖,BF16 指數(shù)的位數(shù)和 FP32 是一致的,因此 BF16 和 FP32 的相互轉(zhuǎn)換只要截斷尾數(shù)即可,左下角圖上便是 tensorflow 源碼中的轉(zhuǎn)換實現(xiàn)。

引入 BF16 的一大價值是如今的很多硬件計算的瓶頸在寄存器寬度或者訪問內(nèi)存的速度上,更緊湊的內(nèi)存表示往往可以獲得更高的計算吞吐,在理想情況下,BF16 相比 FP32 可以提高一倍的吞吐(FLOPS)。

0d67f608-ee0e-11ed-90ce-dac502259ad0.png

如今我們雖然無法大規(guī)模使用到支持 AMX/SME 的硬件,但是 Armv8.6-A 提供了 bf16 擴展,該擴展利用了有限的 128bit 向量寄存器,通過 BFMMLA 指令執(zhí)行矩陣乘法運算:

  • 輸入 A大小為 2*4 的 BF16 矩陣,按行存儲。

  • 輸入 B大小為 4*2 的 BF16 矩陣,按列存儲。

  • 輸出C:大小為 2*2 的 FP32 矩陣。

該指令單次執(zhí)行進行了 16 次浮點數(shù)乘法和 16 次浮點數(shù)加法運算,計算吞吐非常高。

0d732366-ee0e-11ed-90ce-dac502259ad0.png

阿里巴巴向 OpenBLAS 項目貢獻了 sbgemm(s 表示返回單精度,b 表示輸入 bf16)的硬件加速實現(xiàn),從 GEMM 吞吐上看,BF16 相比 FP32 GEMM 吞吐提升超過100%。

倚天 ECS 實例是市面上少數(shù)可以支持 bf16 指令擴展的 Arm服務(wù)器。目前已經(jīng)支持了 Tensorflow 和 Pytorch 兩種框架的 AI 推理:

  • Tensorflow下可以通過OneDNN + ACL(Arm Compute Library)來使用BFMMLA 加速。

  • Pytorch 已經(jīng)支持了 OneDNN + ACL,但是目前還在試驗狀態(tài),無法很好地發(fā)揮性能。但是 Pytorch 同時支持 OpenBLAS 作為其計算后端,因此可以通過 OpenBLAS 來享受 ARM bf16 擴展帶來的性能收益。

0d7e6c94-ee0e-11ed-90ce-dac502259ad0.png

可以看到相比默認的 eigen 實現(xiàn),開啟 OneDNN + ACL 后,perf 獲得的計算熱點已經(jīng)從 fmla(向量乘加)轉(zhuǎn)換到了 bfmmla,算力顯著提升。

0d9a0f80-ee0e-11ed-90ce-dac502259ad0.png

從 workload 角度評測,上圖對比了兩種機型:

  • g7:Intel IceLake 實例。

  • g8m:倚天 Arm 服務(wù)器。

左邊柱狀圖中藍色柱子表示算力對比,橙色柱子表示考慮性價比后使用倚天處理器獲得的收益??梢钥吹皆?Resnet50BERT-Large 模型的推理場景下,軟件優(yōu)化后的倚天處理器皆可獲得一倍左右的性價比收益。

0dad2534-ee0e-11ed-90ce-dac502259ad0.png

在上文中,我們看到使用倚天處理器若想獲得較高收益,軟件版本的選擇十分重要。隨意選擇 tensorflow 或者 Pytorch 包可能遭遇:

  • 未適配 Arm 架構(gòu),安裝失敗。
  • 軟件未適配 bf16 擴展或者環(huán)境參數(shù)有誤,無法發(fā)揮硬件的全部算力,性能打折。
  • 需要精心選擇計算后端,例如目前 Pytorch 下 OpenBLAS 較快。

因此我們提供了 Docker 鏡像,幫助云上的用戶充分使用倚天 710 處理器的 AI 推理性能:

  • accc-registry.cn-hangzhou.cr.aliyuncs.com/tensorflow/tensorflow

  • accc-registry.cn-hangzhou.cr.aliyuncs.com/pytorch/pytorch

通過 Serverless 能力充分釋放算力

除了使能更多的硬件指令,另一種充分釋放硬件算力的方式就是通過 Serverless 架構(gòu)提高 CPU 利用率。Python 作為動態(tài)語言,其模塊是動態(tài)導(dǎo)入的,因此啟動速度不是 Python 的強項,這也制約了 Python workload 在 Serverless 場景的普及。

0dc5777e-ee0e-11ed-90ce-dac502259ad0.png

Python 應(yīng)用啟動的主要耗時在模塊導(dǎo)入,Python 模塊導(dǎo)入步驟為:1、尋找到模塊所在的文件。2、獲得代碼對象 code_object。

3、執(zhí)行代碼對象。

其中的第二步在首次加載模塊時,要對 .py 文件進行編譯,獲得 code_object, 為了降低將來加載的開銷,Python 解釋器會序列化并緩存 code_object.pyc 文件。

即便模塊導(dǎo)入過程已經(jīng)通過緩存機制優(yōu)化過了,但是讀取 .pyc 文件并反序列化依舊比較耗時。

0dd9ff6e-ee0e-11ed-90ce-dac502259ad0.png

在這里我們借助了 OpenJDK 的 AppCDS 的思路:將 heap 上的 code_object 復(fù)制到內(nèi)存映射文件中(mmap)。在下次加載模塊時,直接使用 mmap 中的 code_object。

這種框架下有兩個難點:

1、Python 的 code_object 是散落在 heap 的各處且不連續(xù)的,因此 mmap 復(fù)制整個 heap 是行不通的。我們采用的方式是以 code_object 為根,遍歷對象圖,對感興趣的內(nèi)容復(fù)制并緊湊排布。

2、Python 的 code_object 會引用 .data 段的變量,在 Linux 的隨機地址安全機制下,.data 段的數(shù)據(jù)的地址在每次運行時都會隨機變化,這樣 mmap 中的指針就失效了。我們的解決方式是遍歷所有對象,針對 .data 段的指針進行偏移量修復(fù)。

因為該項目共享了 Python 的 code_object,因此名字是 code-data-share-for-python,簡稱 pycds。

0df7c36e-ee0e-11ed-90ce-dac502259ad0.png

我們測試了 bota3numpy、flask 等常用的 Python 庫,平均可以節(jié)省 20% 的模塊導(dǎo)入耗時。

對于現(xiàn)有的 Python 應(yīng)用可以輕易地使用 pycds,且無需修改任何代碼:

# 安裝pycds
pip install code-data-share # 安裝pycds
# 生成模塊列表
PYCDSMODE=TRACE PYCDSLIST=mod.lst python -c 'import numpy’


# 生成 archive
python -c 'import cds.dump; cds.dump.run_dump("mod.lst", "mod.img")’


# 使用archive
time PYCDSMODE=SHARE PYCDSARCHIVE=mod.img python -c 'import numpy'
real 0m0.090s
user 0m0.180s
sys 0m0.339s


# 對比基線
time python -c 'import numpy'
real 0m0.105s
user 0m0.216s
sys 0m0.476s

我們僅僅通過安裝 PyPI,修改環(huán)境變量運行和使用 cdsAPI 做 dump 即可對現(xiàn)有的應(yīng)用啟動進行加速了。

code-data-share-for-python 是一個新項目,需要大家的參與和反饋,歡迎通過以下鏈接了解和使用:

https://github.com/alibaba/code-data-share-for-python

https://pypi.org/project/code-data-share-for-python

ARM 架構(gòu) SIG鏈接地址:

https://openanolis.cn/sig/ARM_ARCH_SIG


審核編輯 :李倩


聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • ARM
    ARM
    +關(guān)注

    關(guān)注

    134

    文章

    9121

    瀏覽量

    368241
  • 神經(jīng)網(wǎng)絡(luò)

    關(guān)注

    42

    文章

    4776

    瀏覽量

    100952
  • 算力
    +關(guān)注

    關(guān)注

    1

    文章

    1003

    瀏覽量

    14882

原文標題:技術(shù)解讀倚天 ECS 實例——Arm 芯片的 Python-AI 算力優(yōu)化 | 龍蜥技術(shù)

文章出處:【微信號:LinuxDev,微信公眾號:Linux閱碼場】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    一體大AI芯片將逐漸走向落地應(yīng)用

    電子發(fā)燒友網(wǎng)報道(文/李彎彎)前不久,后摩智能宣布,其自主研發(fā)的業(yè)內(nèi)首款存一體大AI芯片成功點亮,并成功跑通智能駕駛算法模型。 ? 這
    的頭像 發(fā)表于 05-31 00:03 ?5046次閱讀

    【AD新聞】AI時代,一美元能夠買到多強的?

    何突破AI芯片與功耗的限制進行更加深入的對談。表明這是兩種很難調(diào)和的矛盾。深鑒科技研發(fā)團隊為此進行了深入分析,試圖解開困擾當前AI運算
    發(fā)表于 03-23 15:27

    ECS控制臺實例搜索的優(yōu)化與改進

    繁瑣。 過濾條件太多了, 搜索框,tag,表格過濾,高級搜索,搜索條件不統(tǒng)一 不支持模糊搜索 從已知的這些問題出發(fā),ECS控制臺將對搜索功能,以及整個實例管理的用戶體驗部分做長期的優(yōu)化和改進。搜索功能
    發(fā)表于 03-26 15:04

    【免費直播】讓AI芯片擁有最強大腦—AI芯片的操作系統(tǒng)設(shè)計介紹.

    智慧化進程。人工智能芯片是人工智能發(fā)展的基石,是數(shù)據(jù)、算法和在各類場景應(yīng)用落地的基礎(chǔ)依托?!盁o芯片AI”已經(jīng)深入人心,成為業(yè)界共識。本
    發(fā)表于 11-07 14:18

    解讀最佳實踐:倚天 710 ARM 芯片Python+AI 優(yōu)化

    編者按: 在剛剛結(jié)束的 PyCon China 2022 大會上,龍蜥社區(qū)開發(fā)者朱宏林分享了主題為《ARM 芯片Python+AI
    發(fā)表于 12-23 16:02

    IBM全新AI芯片設(shè)計登上Nature,解決GPU的瓶頸

    現(xiàn)如今的人工智能的神經(jīng)網(wǎng)絡(luò)與GPU密不可分,但是GPU的對于未來神經(jīng)網(wǎng)絡(luò)的發(fā)展是不夠用的,好在IBM全新AI芯片設(shè)計,能夠解決GPU的
    發(fā)表于 06-13 09:28 ?1425次閱讀

    深度解析AI的現(xiàn)狀和趨勢

    分享會從 AI 的現(xiàn)狀和趨勢談起,并從硬件設(shè)計和算法優(yōu)化兩個層面切入,剖析提升的最新落地
    的頭像 發(fā)表于 08-01 16:08 ?8826次閱讀

    華為發(fā)布最外那個AI芯片

    華為史上最強AI芯片發(fā)布,開源首款國產(chǎn)全場景AI計算框架
    的頭像 發(fā)表于 08-23 17:15 ?3244次閱讀

    昆侖芯AI芯片AI服務(wù)實體經(jīng)濟 筑底經(jīng)濟新基建

    當前,已經(jīng)成為繼熱力、電力之后新的關(guān)鍵生產(chǎn)。數(shù)字化轉(zhuǎn)型背景下,工業(yè)、能源、交通等領(lǐng)域?qū)?b class='flag-5'>AI
    的頭像 發(fā)表于 10-19 16:31 ?1900次閱讀

    云端芯片為什么是科技石油?

    21世紀前后,人類逐漸從工業(yè)時代步入信息時代,當下AI時代的大門又再度緩緩開啟。2023年以來,以ChatGPT為首的生成式AI逐漸滲透到了各行各業(yè)中,有人說,這或許又是一個IPhone時刻。AI起舞,
    的頭像 發(fā)表于 07-12 10:21 ?893次閱讀

    ai芯片芯片的區(qū)別

    ai芯片芯片的區(qū)別 隨著人工智能和機器學習應(yīng)用的不斷發(fā)展,因此種種對硬件的需求也在不斷提高。在這樣的趨勢之下,出現(xiàn)了很多新的
    的頭像 發(fā)表于 08-09 14:24 ?5986次閱讀

    阿里云倚天實例已為數(shù)千家企業(yè)提供,性價比提升超30%

    規(guī)?;渴?,并向云上企業(yè)提供。過去一年,阿里云繼續(xù)在芯片、編譯器、操作系統(tǒng)、虛擬化及應(yīng)用層等方面完成了數(shù)十項軟硬一體的全棧優(yōu)化,進一步將芯片
    的頭像 發(fā)表于 11-03 11:25 ?842次閱讀
    阿里云倚天<b class='flag-5'>實例</b>已為數(shù)千家企業(yè)提供<b class='flag-5'>算</b><b class='flag-5'>力</b>,性價比提升超30%

    淺談為AI而生的存-體芯片

    大模型爆火之后,存一體獲得了更多的關(guān)注與機會,其原因之一是因為存一體芯片的裸相比傳統(tǒng)架構(gòu)的AI
    發(fā)表于 12-06 15:00 ?422次閱讀
    淺談為<b class='flag-5'>AI</b>大<b class='flag-5'>算</b><b class='flag-5'>力</b>而生的存<b class='flag-5'>算</b>-體<b class='flag-5'>芯片</b>

    PythonAI中的應(yīng)用實例

    Python在人工智能(AI)領(lǐng)域的應(yīng)用極為廣泛且深入,從基礎(chǔ)的數(shù)據(jù)處理、模型訓(xùn)練到高級的應(yīng)用部署,Python都扮演著至關(guān)重要的角色。以下將詳細探討Python
    的頭像 發(fā)表于 07-19 17:16 ?1233次閱讀

    企業(yè)AI租賃是什么

    企業(yè)AI租賃是指企業(yè)通過互聯(lián)網(wǎng)向?qū)I(yè)的提供商租用所需的計算資源,以滿足其AI應(yīng)用的需求。
    的頭像 發(fā)表于 11-14 09:30 ?865次閱讀