依英特爾
使用 Intel 擴展 PyTorrch 來提升圖像處理性能
PyTorrch提供了巨大的CPU性能,并且隨著PyTorrch的Intel擴展而可以進一步加速。 我用PyTorrch 1.13.1(與ResNet34 Ulet 結構)培訓了一個AI圖像分割模型,以便從衛星圖象中確定道路和速度限制,所有這些都在第四Gen Intelé Xeon可縮放處理器上進行。
我會帶你們走走這些步驟 與一個稱為SpaceNet5的衛星圖像數據集合作 以及如何優化代碼 使CPU的深層學習工作量
在我們開始之前,一些家務...
本條所附的代碼可在下列文件的示例文件夾中查閱:PyTorrch 倉庫的 Intel 擴展. 我從從衛星圖像(CRESI)儲存庫中抽取城市規模道路。 我對它進行了改造, 以適應第四 Gentel Xeon 處理器, 以及PyTorrch 優化和PyTorch 的 Intel 擴展名優化。 特別是,我能夠利用這里的筆記本.
你可以找到我給你的隨同談話在YouTube上.
我強烈建議這些文章詳細解釋如何開始使用SpaceNet5數據:
空間網5基線——第1部分:圖像和標簽準備
空間網5基線——第2部分:培訓公路速度分割模式
空間網5基線——第3部分:從衛星圖像中提取公路速度矢量
SpaceNet 5 SpaceNet 5 贏贏模型發布模式:道路的終點
我引用了Julien Simon的兩個Hugging Face博客,金屬-16xl:
使用 Intel Sapphire Rapids 的加速火爐變速器, 第1部分
使用 Intel Sapphire Rapids 的加速火炬變速器,第2部分
使用 CPU 實例而不是在主要云服務供應商( CSP) 使用 GPU 實例可能節省大量成本。 最新的處理器仍在向 CSP 推出, 所以我正在使用 INTel Xeon 第四次 Gente Intel Xeon 處理器, 該處理器設在 Intel 開發者云上( 您可以在此報名 ) :. 云信息 com).
在 AWS 上,您可以從列 約*在你之后的EC2實例此處預覽的標記(圖1)在編寫本報告時,新的AI加速發動機Intel 高級母體擴展裝置(Intel AMX)僅供光金屬使用,但不久將在虛擬機器上啟用。
圖1 圖1AWS EC2(作者圖像)上的第四次Gen Xeon實例清單
在 Google Cloud* 平臺上,您可以從第四 Gen Xeon 可縮放處理器 C3 VMs(圖2)中選擇。
圖2 圖2. Google Cloud平臺上的第四 Gen Intel Xeon 可縮放處理器實例列表(作者圖像)
硬件介紹和優化
2023年1月釋放了第四 Gen Intel Xeon 處理器,我使用的光金屬實例有兩個插座(每個插座有56個物理核心),504GB內存和英特爾 AMX 加速。 我在后端安裝了幾個關鍵庫,以控制和監測我在CPU上使用的插座、內存和核心:
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 擴展的 PyTerch 都有輔助腳本, 因而不需要明確使用intel- openmp和numactl,但是它們確實需要安裝在后端。如果您想要設置它們用于其他工作,這就是我用來用于 OpenMP * 的內容。
導出 縮寫(_num) 縮寫(_N)=36 導出 KMP_AFFIY=granciality=fine, compact, 1,0 導出 kmp_ 阻塞時間=1
. 何處縮寫(_num) 縮寫(_N)是分配給該任務的線條數,kmp- 親度影響線條親和設置(包括相互接近的包裝線、釘線狀態),以及kmp_ 阻塞時間以毫秒設定時間, 空線在睡覺前應該等待時間 。
以下是我用來做的東西numactl …
numactl - C 0-35 - membind=0 train.
在那里... ... 在那里...-C指定要使用和-- memembind -- membind指示程序只使用一個套接字( 在這種情況下, 套接字為 0 ) 。
空間網數據
我用的是衛星圖像數據空間網5挑戰不同城市可免費下載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
數據集準備
我使用了莫斯科衛星衛星圖像數據集,該數據集由1,352張1,300比1,300像素的1,352張圖像組成,在不同的文本文件中有相應的街道標簽,其中包括8波段多頻譜圖像和3波段RGB圖像。圖3顯示了四種RGB衛星圖像樣本及其相應的面具。yped_ masks. py 速度和量從 CRESI 倉庫生成分隔面罩的腳本 。
圖3 圖33. 莫斯科(頂行)的衛星圖像3頻道RGB芯片和具有不同速度限制(底排)的對應像素分離面罩(作者圖像)
還有一個JSON配置文件,必須更新其余所有組成部分:培訓和驗證分解、培訓和推論。在此可以找到一個示例配置。我進行了80:20的培訓/驗證分解,確保指向正確的衛星圖像文件夾和相應的培訓面具。以GitHub為例的筆記本,.
培訓ResNet34聯合國模式
我做了一些修改cresi 縮寫為了在CPU上運行并優化培訓,以下的代碼描述如下,以便運行在CPU上并優化培訓。自定義模型 = 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 ().
為優化培訓,增加intel_ extension_ for_ pytorch 導入為 ipex 的 intel_ extension_ for_ pytorch中輸入對帳單的輸入對帳單列列. py在將模型和優化器定義如下之后:
自我模型 = nn.DataParallel( 模型) 自我. 優化 = 優化( 自我. 模型. 參數 (), lr= config. lr)
添加Ex. 優化使用 BF16 精度的行, 而不是 FP32:
自我模范,自我優化 = ipex. 優化(自. model, 優化 = self. 優化, dtype= torch.bfloat16)
添加一條行, 用于混合精度訓練, 只需在前方過路和計算損失函數前完成 :
使用 torch. cpu. amp. autocast () : 如果動詞 : 打印 (“ 輸入. shape, 目標. shape : ” , 輸入. shape, 目標. shape ) 輸出 = 自我 。 模型( 輸入) 計量 = self. calculate_ loss_ single_ channel( 輸出、 目標、 計量、 訓練、 超大小 )
現在我們已經優化了訓練守則, 我們可以開始訓練我們的模型。
喜歡SpaceNet 5 競賽獲勝者,我訓練了一個 ResNet34 編碼器 Unet 解碼器模型。該模型經過了圖像網絡重量的預先訓練,而骨干在訓練期間完全解凍。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但為了控制硬件的使用, 我使用了一個助手腳本。 實際上有兩個助手腳本: 一個是股票 PyTorch 的腳本, 一個是 PyToch 的 Intel 擴展版 。 它們都完成了同樣的事情, 但第一個來自股票的腳本是后端. xeon. run_ cpu,第二個來自 英特爾擴展的PyTorrch是Ipexrun 擴展.
這是我在指揮線上運行的:
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 擴展 - 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在一個有32個核心的插座上進行訓練。 運行后,我得到一份打印出哪些環境變量在后端設置,以了解PyTorrch是如何使用硬件的:
INFO - 使用 CDMalloc 內存分布器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
在培訓期間,我確保我的完全損失功能正在減少(即模式正在趨于一致,尋找解決辦法)。
推斷
在培訓模型后, 我們可以開始僅從衛星圖像中進行預測。 在 evval. py 推斷腳本中, 將導入的 intel_ extension_ for_ pytorch 添加為導入語句的 Ipex 。 在裝入 PyTorch 模型后, 使用 PyTorrch 的 Intel 擴展來優化 BF16 推斷的模型 :
模型 = irch.load( os. path. join( path_ model_ 量重, “ fold_ best. pth”.format( fold)), 地圖_ 位置 = lambda 存儲, loc: 存儲) 模型. eval () 模型 = ipex. optimize( 模型, dtype = rch. bfloat16)
在進行預測之前,增加兩行,以達到混雜精度:
使用 torch.no_ grad (): 使用 rch. cpu. amp. autocast (): 用于 pbar 中的數據 : 樣本 = rch. autograd. 可變( 數據 [ “ 圖像 , 揮發性 = True ) 預測 = 預測 (模型、 樣本、 翻頁 = self. flips )
運行推論,我們可以使用02_eval.py現在我們有了經過訓練的模型, 我們可以在衛星圖像上作出預測(圖4), 我們可以看到它似乎在繪制與圖像相近的道路圖!
圖4 圖41. 莫斯科衛星圖像和隨附的道路預測(作者圖像)
我意識到我所訓練的模型過于適合莫斯科圖像數據,贏得此項挑戰的解決方案從六個城市(拉斯維加斯、巴黎、上海、喀土穆、莫斯科、孟買)獲得的數據和新城市的表現良好。 在未來,值得測試的一件事就是在所有六個城市進行培訓,并在另一個城市進行推論,以復制其結果。
關于處理后的說明
還可以采取進一步的后處理步驟,在地圖中添加掩碼作為圖表特征。 您可以在此閱讀關于后處理步驟的更多信息:
空間網5基線——第3部分:從衛星圖像中提取公路速度矢量
后處理腳本
結語
總之,我們:
創建了1 352個圖像培訓面罩(速度限制),與我們的培訓衛星圖像數據(來自.geojson文本文件標簽)相對應。
定義了用于培訓和推斷的配置文件
將我們的數據分成培訓和鑒定組
優化了我們的CPU培訓守則,包括使用PyTorch和BF16的Intel擴展
在第四 Gentel Xeon CPU 上培訓了表演者ResNet34 UNet 模型
Ran 初始推論,以看到預測速度限制面罩的速度
您可以找到在此列出第四 Gentel Xeon CPU 的詳細基準.
下一步步驟
使用 PyTorrch 的 Intel 擴展擴展號, 擴展 Intel CPU 的優化 :
pip 安裝 intel- extension 用于 Pytorch 的 Intel- extension 設備
git 克隆 https://github.com/intel/intel/intel-extension-for-pytorch
聯系我 聯系連連In如果你還有問題要問!
PyTorrch 的 Intel 擴展的更多信息可在此處找到.
獲取軟件
我鼓勵你查查英特爾的另外一個AIAI 工具工具和框架框架框架框架優化和了解開放、基于標準的單api構成英特爾的AI軟件組合基礎的多神多神多神多神多神多造編程模式。
有關第四任英特爾Xeon 縮放可縮放處理器的更多詳情,訪問AI 平臺英特爾是如何授權開發商運行高性能、高效端對端的AI管道的。
PyTollch 資源
啟動 PyTork 啟動
D. 討論討論
文檔文件文件
審核編輯:湯梓紅
-
intel
+關注
關注
19文章
3480瀏覽量
185748 -
AI
+關注
關注
87文章
30106瀏覽量
268399 -
圖像分割
+關注
關注
4文章
182瀏覽量
17976 -
pytorch
+關注
關注
2文章
803瀏覽量
13145
發布評論請先 登錄
相關推薦
評論