依英特爾
使用 Intel 擴(kuò)展 PyTorrch 來提升圖像處理性能
PyTorrch提供了巨大的CPU性能,并且隨著PyTorrch的Intel擴(kuò)展而可以進(jìn)一步加速。 我用PyTorrch 1.13.1(與ResNet34 Ulet 結(jié)構(gòu))培訓(xùn)了一個(gè)AI圖像分割模型,以便從衛(wèi)星圖象中確定道路和速度限制,所有這些都在第四Gen Intelé Xeon可縮放處理器上進(jìn)行。
我會(huì)帶你們走走這些步驟 與一個(gè)稱為SpaceNet5的衛(wèi)星圖像數(shù)據(jù)集合作 以及如何優(yōu)化代碼 使CPU的深層學(xué)習(xí)工作量
在我們開始之前,一些家務(wù)...
本條所附的代碼可在下列文件的示例文件夾中查閱:PyTorrch 倉庫的 Intel 擴(kuò)展. 我從從衛(wèi)星圖像(CRESI)儲(chǔ)存庫中抽取城市規(guī)模道路。 我對(duì)它進(jìn)行了改造, 以適應(yīng)第四 Gentel Xeon 處理器, 以及PyTorrch 優(yōu)化和PyTorch 的 Intel 擴(kuò)展名優(yōu)化。 特別是,我能夠利用這里的筆記本.
你可以找到我給你的隨同談話在YouTube上.
我強(qiáng)烈建議這些文章詳細(xì)解釋如何開始使用SpaceNet5數(shù)據(jù):
空間網(wǎng)5基線——第1部分:圖像和標(biāo)簽準(zhǔn)備
空間網(wǎng)5基線——第2部分:培訓(xùn)公路速度分割模式
空間網(wǎng)5基線——第3部分:從衛(wèi)星圖像中提取公路速度矢量
SpaceNet 5 SpaceNet 5 贏贏模型發(fā)布模式:道路的終點(diǎn)
我引用了Julien Simon的兩個(gè)Hugging Face博客,金屬-16xl:
使用 Intel Sapphire Rapids 的加速火爐變速器, 第1部分
使用 Intel Sapphire Rapids 的加速火炬變速器,第2部分
使用 CPU 實(shí)例而不是在主要云服務(wù)供應(yīng)商( CSP) 使用 GPU 實(shí)例可能節(jié)省大量成本。 最新的處理器仍在向 CSP 推出, 所以我正在使用 INTel Xeon 第四次 Gente Intel Xeon 處理器, 該處理器設(shè)在 Intel 開發(fā)者云上( 您可以在此報(bào)名 ) :. 云信息 com).
在 AWS 上,您可以從列 約*在你之后的EC2實(shí)例此處預(yù)覽的標(biāo)記(圖1)在編寫本報(bào)告時(shí),新的AI加速發(fā)動(dòng)機(jī)Intel 高級(jí)母體擴(kuò)展裝置(Intel AMX)僅供光金屬使用,但不久將在虛擬機(jī)器上啟用。
圖1 圖1AWS EC2(作者圖像)上的第四次Gen Xeon實(shí)例清單
在 Google Cloud* 平臺(tái)上,您可以從第四 Gen Xeon 可縮放處理器 C3 VMs(圖2)中選擇。
圖2 圖2. Google Cloud平臺(tái)上的第四 Gen Intel Xeon 可縮放處理器實(shí)例列表(作者圖像)
硬件介紹和優(yōu)化
2023年1月釋放了第四 Gen Intel Xeon 處理器,我使用的光金屬實(shí)例有兩個(gè)插座(每個(gè)插座有56個(gè)物理核心),504GB內(nèi)存和英特爾 AMX 加速。 我在后端安裝了幾個(gè)關(guān)鍵庫,以控制和監(jiān)測我在CPU上使用的插座、內(nèi)存和核心:
numactl(與sudo APT- Get 安裝 numactl)
伊利維埃米耶馬洛茨(與安裝 libjemalloc 的 sudo appet- get)
intel- openmp(與conda 安裝 intel- openmp)
gperftotototool 的 gperfftotototo 工具, gperfftototo 工具工具(與conda 安裝 gperftotototool 的 gperfftotototo 工具, gperfftototo 工具工具 - c conda- forge 的 gperftotototool 的 gperfftotototo 工具, gperfftototo 工具工具 - c conda- forge)
PyTorrch PyTorch 和 Intel 擴(kuò)展的 PyTerch 都有輔助腳本, 因而不需要明確使用intel- openmp和numactl,但是它們確實(shí)需要安裝在后端。如果您想要設(shè)置它們用于其他工作,這就是我用來用于 OpenMP * 的內(nèi)容。
導(dǎo)出 縮寫(_num) 縮寫(_N)=36 導(dǎo)出 KMP_AFFIY=granciality=fine, compact, 1,0 導(dǎo)出 kmp_ 阻塞時(shí)間=1
. 何處縮寫(_num) 縮寫(_N)是分配給該任務(wù)的線條數(shù),kmp- 親度影響線條親和設(shè)置(包括相互接近的包裝線、釘線狀態(tài)),以及kmp_ 阻塞時(shí)間以毫秒設(shè)定時(shí)間, 空線在睡覺前應(yīng)該等待時(shí)間 。
以下是我用來做的東西numactl …
numactl - C 0-35 - membind=0 train.
在那里... ... 在那里...-C指定要使用和-- memembind -- membind指示程序只使用一個(gè)套接字( 在這種情況下, 套接字為 0 ) 。
空間網(wǎng)數(shù)據(jù)
我用的是衛(wèi)星圖像數(shù)據(jù)空間網(wǎng)5挑戰(zhàn)不同城市可免費(fèi)下載AWS S3桶:
aws s3是 s3://spacenet-dataset/spacenet/SN5_roads/tarballs/ -- -- 人類可讀
2019-09-03 20:59 3.8 GIB SN5_Roads_test_public_AOI_7_Moscow.tar.gz 2019-09-24 08:43:02 3.2 GIB SN5_test_public_AOI_7_Moscow.gz 2019-09-24 08:43:02 GIB SN5_test_ public_AOI_8_San_Juan.tar.gz 2019-09-14 13:13:19-09-14 13:13:3:34.5 GIB SN5_test_rations_train_AOI_8_Mumbai.tar.gz
您可以使用以下命令下載和拆解文件 :
aws s3 cp s3://spacenet-dataset/spacenet/SN5_roads/tarballs/SN5_roads_train_AOI_7_Moscow.tar.gz. tar-xvzf ~/spacenet5data/moscow/SN5_roads_train_AOI_7_Moscow.tar.gz z
數(shù)據(jù)集準(zhǔn)備
我使用了莫斯科衛(wèi)星衛(wèi)星圖像數(shù)據(jù)集,該數(shù)據(jù)集由1,352張1,300比1,300像素的1,352張圖像組成,在不同的文本文件中有相應(yīng)的街道標(biāo)簽,其中包括8波段多頻譜圖像和3波段RGB圖像。圖3顯示了四種RGB衛(wèi)星圖像樣本及其相應(yīng)的面具。yped_ masks. py 速度和量從 CRESI 倉庫生成分隔面罩的腳本 。
圖3 圖33. 莫斯科(頂行)的衛(wèi)星圖像3頻道RGB芯片和具有不同速度限制(底排)的對(duì)應(yīng)像素分離面罩(作者圖像)
還有一個(gè)JSON配置文件,必須更新其余所有組成部分:培訓(xùn)和驗(yàn)證分解、培訓(xùn)和推論。在此可以找到一個(gè)示例配置。我進(jìn)行了80:20的培訓(xùn)/驗(yàn)證分解,確保指向正確的衛(wèi)星圖像文件夾和相應(yīng)的培訓(xùn)面具。以GitHub為例的筆記本,.
培訓(xùn)ResNet34聯(lián)合國模式
我做了一些修改cresi 縮寫為了在CPU上運(yùn)行并優(yōu)化培訓(xùn),以下的代碼描述如下,以便運(yùn)行在CPU上并優(yōu)化培訓(xùn)。自定義模型 = nn.DataParallel( 模型). cuda ()與自定義模型 = nn.DataParallel( 模型)和在列列. py腳本中01_tran.py 01_tran.py 01_tran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py刪除腳本irch.randn( 10) cuda ().
為優(yōu)化培訓(xùn),增加intel_ extension_ for_ pytorch 導(dǎo)入為 ipex 的 intel_ extension_ for_ pytorch中輸入對(duì)帳單的輸入對(duì)帳單列列. py在將模型和優(yōu)化器定義如下之后:
自我模型 = nn.DataParallel( 模型) 自我. 優(yōu)化 = 優(yōu)化( 自我. 模型. 參數(shù) (), lr= config. lr)
添加Ex. 優(yōu)化使用 BF16 精度的行, 而不是 FP32:
自我模范,自我優(yōu)化 = ipex. 優(yōu)化(自. model, 優(yōu)化 = self. 優(yōu)化, dtype= torch.bfloat16)
添加一條行, 用于混合精度訓(xùn)練, 只需在前方過路和計(jì)算損失函數(shù)前完成 :
使用 torch. cpu. amp. autocast () : 如果動(dòng)詞 : 打印 (“ 輸入. shape, 目標(biāo). shape : ” , 輸入. shape, 目標(biāo). shape ) 輸出 = 自我 。 模型( 輸入) 計(jì)量 = self. calculate_ loss_ single_ channel( 輸出、 目標(biāo)、 計(jì)量、 訓(xùn)練、 超大小 )
現(xiàn)在我們已經(jīng)優(yōu)化了訓(xùn)練守則, 我們可以開始訓(xùn)練我們的模型。
喜歡SpaceNet 5 競賽獲勝者,我訓(xùn)練了一個(gè) ResNet34 編碼器 Unet 解碼器模型。該模型經(jīng)過了圖像網(wǎng)絡(luò)重量的預(yù)先訓(xùn)練,而骨干在訓(xùn)練期間完全解凍。01_tran.py 01_tran.py 01_tran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py但為了控制硬件的使用, 我使用了一個(gè)助手腳本。 實(shí)際上有兩個(gè)助手腳本: 一個(gè)是股票 PyTorch 的腳本, 一個(gè)是 PyToch 的 Intel 擴(kuò)展版 。 它們都完成了同樣的事情, 但第一個(gè)來自股票的腳本是后端. xeon. run_ cpu,第二個(gè)來自 英特爾擴(kuò)展的PyTorrch是Ipexrun 擴(kuò)展.
這是我在指揮線上運(yùn)行的:
python - m short. trachends.xeon. run_ cpu - stinstances 1 -- ncores_per_instance 32 -- log_path/ home/devcloud/spacenet5data/ moscow/v10_xeon4_ devcloud22. 04/logs/run_cpu_logs/home/devcloud/cresi 縮寫/cresi 縮寫/01_train. py / home/devcloud/cresi 縮寫/cresi 縮寫/cresi 縮寫/configs/ ben/v10_xeon4_ baseline_ben.json -- fold=0
Ipexrun 擴(kuò)展 - stinstance 1 -- ncore_per_instance 32/ home/devcloud/cresi 縮寫/cresi 縮寫/01_tran.py 01_tran.py 01_tran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py/ home/devcloud/cresi 縮寫/cresi 縮寫/cresi 縮寫/configs/ben/v10_xeon4_ baseline_ben.json -- fold=0
在這兩種情況下,我都要求PyTorrch在一個(gè)有32個(gè)核心的插座上進(jìn)行訓(xùn)練。 運(yùn)行后,我得到一份打印出哪些環(huán)境變量在后端設(shè)置,以了解PyTorrch是如何使用硬件的:
INFO - 使用 CDMalloc 內(nèi)存分布器INFO - 縮寫(_num) 縮寫(_N)=32 INFO - 使用 Intel OpenMP InFO - KMP_AFITY=granality=fine, compact, 1,0INFO - KMP_BLOCICTIME=1 INFO - LD_PRELOAD=/ home/devcloud/.conda/env/py39/lib/lib/lib/libclomp5.so:/home/dloud/.conda/env/py39/b/bin/python-u 01_tran.py 01_tran.py 01_tran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.py 01_triran.pycongs/ben/v10_xon4_baseline_ben.jfold=0
在培訓(xùn)期間,我確保我的完全損失功能正在減少(即模式正在趨于一致,尋找解決辦法)。
推斷
在培訓(xùn)模型后, 我們可以開始僅從衛(wèi)星圖像中進(jìn)行預(yù)測。 在 evval. py 推斷腳本中, 將導(dǎo)入的 intel_ extension_ for_ pytorch 添加為導(dǎo)入語句的 Ipex 。 在裝入 PyTorch 模型后, 使用 PyTorrch 的 Intel 擴(kuò)展來優(yōu)化 BF16 推斷的模型 :
模型 = irch.load( os. path. join( path_ model_ 量重, “ fold_ best. pth”.format( fold)), 地圖_ 位置 = lambda 存儲(chǔ), loc: 存儲(chǔ)) 模型. eval () 模型 = ipex. optimize( 模型, dtype = rch. bfloat16)
在進(jìn)行預(yù)測之前,增加兩行,以達(dá)到混雜精度:
使用 torch.no_ grad (): 使用 rch. cpu. amp. autocast (): 用于 pbar 中的數(shù)據(jù) : 樣本 = rch. autograd. 可變( 數(shù)據(jù) [ “ 圖像 , 揮發(fā)性 = True ) 預(yù)測 = 預(yù)測 (模型、 樣本、 翻頁 = self. flips )
運(yùn)行推論,我們可以使用02_eval.py現(xiàn)在我們有了經(jīng)過訓(xùn)練的模型, 我們可以在衛(wèi)星圖像上作出預(yù)測(圖4), 我們可以看到它似乎在繪制與圖像相近的道路圖!
圖4 圖41. 莫斯科衛(wèi)星圖像和隨附的道路預(yù)測(作者圖像)
我意識(shí)到我所訓(xùn)練的模型過于適合莫斯科圖像數(shù)據(jù),贏得此項(xiàng)挑戰(zhàn)的解決方案從六個(gè)城市(拉斯維加斯、巴黎、上海、喀土穆、莫斯科、孟買)獲得的數(shù)據(jù)和新城市的表現(xiàn)良好。 在未來,值得測試的一件事就是在所有六個(gè)城市進(jìn)行培訓(xùn),并在另一個(gè)城市進(jìn)行推論,以復(fù)制其結(jié)果。
關(guān)于處理后的說明
還可以采取進(jìn)一步的后處理步驟,在地圖中添加掩碼作為圖表特征。 您可以在此閱讀關(guān)于后處理步驟的更多信息:
空間網(wǎng)5基線——第3部分:從衛(wèi)星圖像中提取公路速度矢量
后處理腳本
結(jié)語
總之,我們:
創(chuàng)建了1 352個(gè)圖像培訓(xùn)面罩(速度限制),與我們的培訓(xùn)衛(wèi)星圖像數(shù)據(jù)(來自.geojson文本文件標(biāo)簽)相對(duì)應(yīng)。
定義了用于培訓(xùn)和推斷的配置文件
將我們的數(shù)據(jù)分成培訓(xùn)和鑒定組
優(yōu)化了我們的CPU培訓(xùn)守則,包括使用PyTorch和BF16的Intel擴(kuò)展
在第四 Gentel Xeon CPU 上培訓(xùn)了表演者ResNet34 UNet 模型
Ran 初始推論,以看到預(yù)測速度限制面罩的速度
您可以找到在此列出第四 Gentel Xeon CPU 的詳細(xì)基準(zhǔn).
下一步步驟
使用 PyTorrch 的 Intel 擴(kuò)展擴(kuò)展號(hào), 擴(kuò)展 Intel CPU 的優(yōu)化 :
pip 安裝 intel- extension 用于 Pytorch 的 Intel- extension 設(shè)備
git 克隆 https://github.com/intel/intel/intel-extension-for-pytorch
聯(lián)系我 聯(lián)系連連In如果你還有問題要問!
PyTorrch 的 Intel 擴(kuò)展的更多信息可在此處找到.
獲取軟件
我鼓勵(lì)你查查英特爾的另外一個(gè)AIAI 工具工具和框架框架框架框架優(yōu)化和了解開放、基于標(biāo)準(zhǔn)的單api構(gòu)成英特爾的AI軟件組合基礎(chǔ)的多神多神多神多神多神多造編程模式。
有關(guān)第四任英特爾Xeon 縮放可縮放處理器的更多詳情,訪問AI 平臺(tái)英特爾是如何授權(quán)開發(fā)商運(yùn)行高性能、高效端對(duì)端的AI管道的。
PyTollch 資源
啟動(dòng) PyTork 啟動(dòng)
D. 討論討論
文檔文件文件
審核編輯:湯梓紅
-
intel
+關(guān)注
關(guān)注
19文章
3478瀏覽量
185654 -
AI
+關(guān)注
關(guān)注
87文章
29806瀏覽量
268103 -
圖像分割
+關(guān)注
關(guān)注
4文章
182瀏覽量
17960 -
pytorch
+關(guān)注
關(guān)注
2文章
802瀏覽量
13115
發(fā)布評(píng)論請(qǐng)先 登錄
相關(guān)推薦
評(píng)論