將TensorFlow模型快速遷移到昇騰平臺(tái)
當(dāng)前業(yè)界很多訓(xùn)練腳本是基于TensorFlow的Python API進(jìn)行開發(fā)的,默認(rèn)運(yùn)行在CPU/GPU/TPU上,為了使這些腳本能夠利用昇騰AI處理器的強(qiáng)大算力執(zhí)行訓(xùn)練,需要對(duì)TensorFlow的訓(xùn)練腳本進(jìn)行遷移。
首先,我們了解下模型遷移的全流程:

通過(guò)上圖可以看出,模型遷移包括“腳本遷移?–> 模型訓(xùn)練?–> 精度調(diào)優(yōu)?–> 性能調(diào)優(yōu)?–> 模型固化”幾個(gè)流程,其中:
“腳本遷移”是將TensorFlow訓(xùn)練腳本經(jīng)過(guò)少量修改,可以運(yùn)行在昇騰AI處理器上。
“模型訓(xùn)練”是根據(jù)模型參數(shù)進(jìn)行多輪次的訓(xùn)練迭代,并在訓(xùn)練過(guò)程中評(píng)估模型準(zhǔn)確度,達(dá)到一定閾值后停止訓(xùn)練,并保存訓(xùn)練好的模型。
“精度調(diào)優(yōu)”與“性能調(diào)優(yōu)”是在用戶對(duì)精度或性能有要求時(shí)需要執(zhí)行的操作。
“模型固化”是將訓(xùn)練好的、精度性能達(dá)標(biāo)的模型固化為pb模型。
下面我們針對(duì)“腳本遷移”和“模型訓(xùn)練”兩個(gè)階段進(jìn)行詳細(xì)的介紹。
腳本遷移
將TensorFlow訓(xùn)練腳本遷移到昇騰平臺(tái)有自動(dòng)遷移和手工遷移兩種方式。
自動(dòng)遷移:算法工程師通過(guò)遷移工具,可自動(dòng)分析出原生的TensorFlow Python API在昇騰AI處理器上的支持度情況,同時(shí)將原生的TensorFlow訓(xùn)練腳本自動(dòng)遷移成昇騰AI處理器支持的腳本,對(duì)于少量無(wú)法自動(dòng)遷移的API,可以參考工具輸出的遷移報(bào)告,對(duì)訓(xùn)練腳本進(jìn)行相應(yīng)的適配修改。
手工遷移:算法工程師需要參考文檔人工分析TensorFlow訓(xùn)練腳本的API支持度,并進(jìn)行相應(yīng)API的修改,以支持在昇騰AI處理器上執(zhí)行訓(xùn)練,該種方式相對(duì)復(fù)雜,建議優(yōu)先使用自動(dòng)遷移方式。
下面以TensorFlow 1.15的訓(xùn)練腳本為例,講述訓(xùn)練腳本的詳細(xì)遷移操作,TensorFlow 2.6的遷移操作類似,詳細(xì)的遷移點(diǎn)可參見(jiàn)“昇騰文檔中心[1]”。
自動(dòng)遷移
自動(dòng)遷移的流程示意圖如下所示:

詳細(xì)步驟如下;
1. 安裝遷移工具依賴。
2. 執(zhí)行自動(dòng)遷移命令。
進(jìn)入遷移工具所在目錄,例如“tfplugin安裝目錄/tfplugin/latest/python/site-packages/npu_bridge/convert_tf2npu/”,執(zhí)行類似如下命令可同時(shí)完成腳本掃描和自動(dòng)遷移:
其中main.py是遷移工具入口腳本,-i指定待遷移原始腳本路徑,-r指定遷移報(bào)告存儲(chǔ)路徑。
3. 查看遷移報(bào)告。
在/root/models/official/output_npu_*下查看遷移后的腳本,在root/models/official/report_npu_*下查看遷移報(bào)告。
遷移報(bào)告示例如下:

手工遷移
手工遷移訓(xùn)練腳本主要包括如下遷移點(diǎn):
1. 導(dǎo)入NPU庫(kù)文件。
2. 將部分TensorFlow接口遷移成NPU接口。
例如,修改基于Horovod開發(fā)的分布式訓(xùn)練腳本,使能昇騰AI處理器的分布式訓(xùn)練。
修改后:
3. 通過(guò)配置關(guān)閉TensorFlow與NPU沖突的功能。
關(guān)閉TensorFlow中的remapping、xla等功能,避免與NPU中相關(guān)功能沖突。例如:
4. 配置NPU相關(guān)參數(shù)
Ascend平臺(tái)提供了功能調(diào)試、性能/精度調(diào)優(yōu)等功能,用戶可通過(guò)配置使能相關(guān)功能,例如enable_dump_debug配置,支持以下取值:
True:開啟溢出檢測(cè)功能。
False:關(guān)閉溢出檢測(cè)功能。
配置示例:
模型訓(xùn)練
遷移成功后的腳本可在昇騰AI處理器上執(zhí)行單Device訓(xùn)練,也可以在多個(gè)Device上執(zhí)行分布式訓(xùn)練。
單Device訓(xùn)練
1)配置訓(xùn)練進(jìn)程啟動(dòng)依賴的環(huán)境變量。
2)執(zhí)行訓(xùn)練腳本拉起訓(xùn)練進(jìn)程。
分布式訓(xùn)練
分布式訓(xùn)練需要先配置參與訓(xùn)練的昇騰AI處理器的資源信息,然后再拉起訓(xùn)練進(jìn)程。當(dāng)前有兩種配置資源信息的方式:通過(guò)配置文件(即ranktable文件)或者通過(guò)環(huán)境變量的方式。下面以配置文件的方式介紹分布式訓(xùn)練的操作。
1)準(zhǔn)備配置文件。
配置文件(即ranktable文件)為json格式,示例如下:
2)執(zhí)行分布式訓(xùn)練。
依次設(shè)置環(huán)境變量配置集群參數(shù),并拉起訓(xùn)練進(jìn)程。
拉起訓(xùn)練進(jìn)程0:
拉起訓(xùn)練進(jìn)程1:
以上就是TensorFlow模型遷移訓(xùn)練的相關(guān)知識(shí)點(diǎn),您也可以在“昇騰社區(qū)在線課程[2]”板塊學(xué)習(xí)視頻課程,學(xué)習(xí)過(guò)程中的任何疑問(wèn),都可以在“昇騰論壇[3]”互動(dòng)交流!
相關(guān)參考:
[1]昇騰文檔中心:https://www.hiascend.com/zh/document
[2]昇騰社區(qū)在線課程:https://www.hiascend.com/zh/edu/courses
[3]昇騰論壇:https://www.hiascend.com/forum