優(yōu)配置參數(shù))
精度調(diào)優(yōu)【免費下載鏈接】geGEGraph Engine是面向昇騰的圖編譯器和執(zhí)行器提供了計算圖優(yōu)化、多流并行、內(nèi)存復(fù)用和模型下沉等技術(shù)手段加速模型執(zhí)行效率減少模型內(nèi)存占用。 GE 提供對 PyTorch、TensorFlow 前端的友好接入能力并同時支持 onnx、pb 等主流模型格式的解析與編譯。項目地址: https://gitcode.com/cann/gePRECISION_MODE設(shè)置算子的精度模式。同一張圖中不能與PRECISION_MODE_V2同時使用建議使用PRECISION_MODE_V2參數(shù)。此參數(shù)實際對應(yīng)的options參數(shù)為ge.exec.precision_mode。參數(shù)取值force_fp32/cube_fp16in_fp32out配置為force_fp32或cube_fp16in_fp32out效果等同該選項用來表示AI Core中該算子既支持float32又支持float16數(shù)據(jù)類型時系統(tǒng)內(nèi)部都會根據(jù)算子類型不同選擇不同的處理方式。cube_fp16in_fp32out為新版本中新增的對于矩陣計算類算子該選項語義更清晰。對于矩陣計算類算子系統(tǒng)內(nèi)部會按算子實現(xiàn)的支持情況處理 1. 優(yōu)先選擇輸入數(shù)據(jù)類型為float16且輸出數(shù)據(jù)類型為float32 2. 如果1中的場景不支持則選擇輸入數(shù)據(jù)類型為float32且輸出數(shù)據(jù)類型為float32 3. 如果2中的場景不支持則選擇輸入數(shù)據(jù)類型為float16且輸出數(shù)據(jù)類型為float16 4. 如果3中的場景不支持則報錯。對于矢量計算類算子表示原圖中算子精度為float16或bfloat16強制選擇float32。如果原圖中存在部分算子在AI Core中該算子的實現(xiàn)不支持float32比如某算子僅支持float16類型則該參數(shù)不生效仍然使用支持的float16如果在AI Core中該算子的實現(xiàn)不支持float32且又配置了黑名單precision\_reduce false則會使用float32的AI CPU算子如果AI CPU算子也不支持則執(zhí)行報錯。force_fp16默認值表示原圖中算子精度為float16、bfloat16和float32時強制選擇float16。allow_fp32_to_fp16對于矩陣類算子如果原圖中算子精度為float32優(yōu)先降低精度到float16如果AI Core中算子不支持float16則繼續(xù)選擇float32如果AI Core中算子不支持float32則使用AI CPU算子進行計算如果AI CPU算子也不支持則執(zhí)行報錯。如果原圖中算子精度為bfloat16則優(yōu)先使用原圖精度bfloat16如果AI Core中算子不支持bfloat16則選擇float32如果AI Core中算子不支持float32則直接降低精度到float16如果AI Core中算子不支持float16則使用AI CPU算子進行計算如果AI CPU算子也不支持則執(zhí)行報錯。對于矢量類算子優(yōu)先保持原圖精度如果原圖中算子精度為float32則優(yōu)先使用原圖精度float32如果AI Core中算子不支持float32則直接降低精度到float16如果AI Core中算子不支持float16則使用AI CPU算子進行計算如果AI CPU算子也不支持則執(zhí)行報錯。如果原圖中算子精度為bfloat16則優(yōu)先使用原圖精度bfloat16如果AI Core中算子不支持bfloat16則選擇float32如果AI Core中算子不支持float32則直接降低精度到float16如果AI Core中算子不支持float16則使用AI CPU算子進行計算如果AI CPU算子也不支持則執(zhí)行報錯。must_keep_origin_dtype保持原圖精度。如果原圖中某算子精度為float16AI Core中該算子的實現(xiàn)不支持float16、僅支持float32和bfloat16則系統(tǒng)內(nèi)部會自動采用高精度float32。如果原圖中某算子精度為float16AI Core中該算子的實現(xiàn)不支持float16、僅支持bfloat16則會使用float16的AI CPU算子如果AI CPU算子也不支持則執(zhí)行報錯。如果原圖中某算子精度為float32AI Core中該算子的實現(xiàn)不支持float32類型、僅支持float16類型則會使用float32的AI CPU算子如果AI CPU算子也不支持則執(zhí)行報錯。allow_mix_precision/allow_mix_precision_fp16配置為allow_mix_precision或allow_mix_precision_fp16效果等同均表示使用混合精度float16、bfloat16和float32數(shù)據(jù)類型來處理神經(jīng)網(wǎng)絡(luò)的過程。allow_mix_precision_fp16為新版本中新增的語義更清晰便于理解。針對原始模型中float32和bfloat16數(shù)據(jù)類型的算子按照內(nèi)置的優(yōu)化策略自動將部分float32和bfloat16的算子降低精度到float16從而在精度損失很小的情況下提升系統(tǒng)性能并減少內(nèi)存使用。若配置了該種模式則可以在${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/xxx/aic-xxx-ops-info-*.json內(nèi)置優(yōu)化策略文件中查看“precision_reduce”參數(shù)的取值若取值為true白名單則表示允許將當(dāng)前float32和bfloat16類型的算子降低精度到float16。若取值為false黑名單則不允許將當(dāng)前float32和bfloat16類型的算子降低精度到float16相應(yīng)算子仍舊使用float32或bfloat16精度。若網(wǎng)絡(luò)模型中算子沒有配置該參數(shù)灰名單當(dāng)前算子的混合精度處理機制和前一個算子保持一致即如果前一個算子支持降精度處理當(dāng)前算子也支持降精度如果前一個算子不允許降精度當(dāng)前算子也不支持降精度。allow_mix_precision_bf16表示使用混合精度bfloat16和float32數(shù)據(jù)類型來處理神經(jīng)網(wǎng)絡(luò)的過程。針對原始模型中float32數(shù)據(jù)類型的算子按照內(nèi)置的優(yōu)化策略自動將部分float32的算子降低精度到bfloat16從而在精度損失很小的情況下提升系統(tǒng)性能并減少內(nèi)存使用如果AI Core中算子不支持bfloat16和float32則使用AI CPU算子進行計算如果AI CPU算子也不支持則執(zhí)行報錯。若配置了該種模式則可以在${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/xxx/aic-xxx-ops-info-*.json內(nèi)置優(yōu)化策略文件中查看“precision_reduce”參數(shù)的取值若取值為true白名單則表示允許將當(dāng)前float32類型的算子降低精度到bfloat16。若取值為false黑名單則不允許將當(dāng)前float32類型的算子降低精度到bfloat16相應(yīng)算子仍舊使用float32精度。若網(wǎng)絡(luò)模型中算子沒有配置該參數(shù)灰名單當(dāng)前算子的混合精度處理機制和前一個算子保持一致即如果前一個算子支持降精度處理當(dāng)前算子也支持降精度如果前一個算子不允許降精度當(dāng)前算子也不支持降精度。allow_fp32_to_bf16如果原圖中算子精度為float32則優(yōu)先使用原圖精度float32如果AI Core中算子不支持float32則降低精度到bfloat16如果AI Core中算子不支持bfloat16則使用AI CPU算子進行計算如果AI CPU算子也不支持則執(zhí)行報錯。如果原圖中算子精度為bfloat16則優(yōu)先使用原圖精度bfloat16如果AI Core中算子不支持bfloat16則選擇float32如果AI Core中算子不支持float32則使用AI CPU算子進行計算如果AI CPU算子也不支持則執(zhí)行報錯。上述路徑中的${INSTALL_DIR}請?zhí)鎿Q為CANN軟件安裝后文件存儲路徑。以root用戶安裝為例安裝后文件默認存儲路徑為/usr/local/Ascend/cann。參數(shù)值約束IPV350不支持bfloat16類型對應(yīng)選項也不支持。bfloat16數(shù)據(jù)類型僅支持以下產(chǎn)品類型Ascend 950PR/Ascend 950DTAtlas A3 訓(xùn)練系列產(chǎn)品/Atlas A3 推理系列產(chǎn)品Atlas A2 訓(xùn)練系列產(chǎn)品/Atlas A2 推理系列產(chǎn)品Atlas 200I/500 A2 推理產(chǎn)品該參數(shù)默認為性能優(yōu)先后續(xù)推理時可能會導(dǎo)致精度溢出問題。如果推理時出現(xiàn)精度問題可以參見《應(yīng)用開發(fā) (CC)》中的“模型推理 精度/性能優(yōu)化 模型推理精度提升建議”進行定位。如果用戶聚焦精度問題可以修改為其他取值比如must_keep_origin_dtype。配置示例{ge::ir_option::PRECISION_MODE, force_fp16}產(chǎn)品支持情況全量芯片支持。PRECISION_MODE_V2設(shè)置算子的精度模式。同一張圖中不能與PRECISION_MODE同時使用建議使用PRECISION_MODE_V2參數(shù)。此參數(shù)實際對應(yīng)的options參數(shù)為ge.exec.precision_mode_v2。參數(shù)取值fp16默認值表示原圖中算子精度為float16、bfloat16或float32時強制選擇float16。origin保持原圖精度。如果原圖中某算子精度為float16AI Core中該算子的實現(xiàn)不支持float16、僅支持float32和bfloat16則系統(tǒng)內(nèi)部會自動采用高精度float32。如果原圖中某算子精度為float16AI Core中該算子的實現(xiàn)不支持float16、僅支持bfloat16則會使用float16的AI CPU算子如果AI CPU算子也不支持則執(zhí)行報錯。如果原圖中某算子精度為float32AI Core中該算子的實現(xiàn)不支持float32類型、僅支持float16類型則會使用float32的AI CPU算子如果AI CPU算子也不支持則執(zhí)行報錯。cube_fp16in_fp32outAI Core中該算子既支持float32又支持float16數(shù)據(jù)類型時系統(tǒng)內(nèi)部根據(jù)算子類型不同選擇不同的處理方式。對于矩陣計算類算子系統(tǒng)內(nèi)部會按算子實現(xiàn)的支持情況處理 1. 優(yōu)先選擇輸入數(shù)據(jù)類型為float16且輸出數(shù)據(jù)類型為float32 2. 如果1中的場景不支持則選擇輸入數(shù)據(jù)類型為float32且輸出數(shù)據(jù)類型為float32 3. 如果2中的場景不支持則選擇輸入數(shù)據(jù)類型為float16且輸出數(shù)據(jù)類型為float16 4. 如果3中的場景不支持則報錯。對于矢量計算類算子表示原圖中算子精度為float16或bfloat16強制選擇float32。如果原圖中存在部分算子在AI Core中該算子的實現(xiàn)不支持float32比如某算子僅支持float16類型則該參數(shù)不生效仍然使用支持的float16如果在AI Core中該算子的實現(xiàn)不支持float32且又配置了黑名單precision\_reduce false則會使用float32的AI CPU算子如果AI CPU算子也不支持則執(zhí)行報錯。mixed_float16表示使用混合精度float16、bfloat16和float32數(shù)據(jù)類型來處理神經(jīng)網(wǎng)絡(luò)。針對原圖中float32和bfloat16數(shù)據(jù)類型的算子按照內(nèi)置的優(yōu)化策略自動將部分float32和bfloat16的算子降低精度到float16從而在精度損失很小的情況下提升系統(tǒng)性能并減少內(nèi)存使用。若配置了該種模式則可以在${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/xxx/aic-xxx-ops-info-*.json內(nèi)置優(yōu)化策略文件中查看“precision_reduce”參數(shù)的取值若取值為true白名單則表示允許將當(dāng)前float32和bfloat16類型的算子降低精度到float16。若取值為false黑名單則不允許將當(dāng)前float32和bfloat16類型的算子降低精度到float16相應(yīng)算子仍舊使用float32或bfloat16精度。若網(wǎng)絡(luò)模型中算子沒有配置該參數(shù)灰名單當(dāng)前算子的混合精度處理機制和前一個算子保持一致即如果前一個算子支持降精度處理當(dāng)前算子也支持降精度如果前一個算子不允許降精度當(dāng)前算子也不支持降精度。mixed_bfloat16表示使用混合精度bfloat16和float32數(shù)據(jù)類型來處理神經(jīng)網(wǎng)絡(luò)。針對原圖中float32數(shù)據(jù)類型的算子按照內(nèi)置的優(yōu)化策略自動將部分float32的算子降低精度到bfloat16從而在精度損失很小的情況下提升系統(tǒng)性能并減少內(nèi)存使用如果算子不支持bfloat16和float32則使用AI CPU算子進行計算如果AI CPU算子也不支持則執(zhí)行報錯。若配置了該種模式則可以在${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/xxx/aic-xxx-ops-info-*.json內(nèi)置優(yōu)化策略文件中查看“precision_reduce”參數(shù)的取值若取值為true白名單則表示允許將當(dāng)前float32類型的算子降低精度到bfloat16。若取值為false黑名單則不允許將當(dāng)前float32類型的算子降低精度到bfloat16相應(yīng)算子仍舊使用float32精度。若網(wǎng)絡(luò)模型中算子沒有配置該參數(shù)灰名單當(dāng)前算子的混合精度處理機制和前一個算子保持一致即如果前一個算子支持降精度處理當(dāng)前算子也支持降精度如果前一個算子不允許降精度當(dāng)前算子也不支持降精度。mixed_hif8開啟自動混合精度功能表示混合使用hifloat8此數(shù)據(jù)類型介紹可參見Link、float16、bfloat16和float32數(shù)據(jù)類型來處理神經(jīng)網(wǎng)絡(luò)。針對原圖中float16、bfloat16和float32數(shù)據(jù)類型的算子按照內(nèi)置的優(yōu)化策略自動將部分float16、bfloat16和float32的算子降低精度到hifloat8從而在精度損失很小的情況下提升系統(tǒng)性能并減少內(nèi)存使用。若配置了該種模式則可以在${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/xxx/aic-xxx-ops-info-*.json內(nèi)置優(yōu)化策略文件中查看“precision_reduce”參數(shù)的取值若取值為true白名單則表示允許將當(dāng)前float16、bfloat16和float32類型的算子降低精度到hifloat8。若取值為false黑名單則不允許將當(dāng)前float16、bfloat16和float32類型的算子降低精度到hifloat8相應(yīng)算子仍舊使用float16、bfloat16或float32精度。若原圖中算子沒有配置該參數(shù)灰名單當(dāng)前算子的混合精度處理機制和前一個算子保持一致即如果前一個算子支持降精度處理當(dāng)前算子也支持降精度如果前一個算子不允許降精度當(dāng)前算子也不支持降精度。cube_hif8表示若原圖中的cube算子既支持hifloat8又支持float16、bfloat16或float32數(shù)據(jù)類型時強制選擇hifloat8數(shù)據(jù)類型。上述路徑中的${INSTALL_DIR}請?zhí)鎿Q為CANN軟件安裝后文件存儲路徑。以root用戶安裝為例安裝后文件默認存儲路徑為/usr/local/Ascend/cann。參數(shù)值約束IPV350不支持bfloat16、hif8類型對應(yīng)選項也不支持。bfloat16數(shù)據(jù)類型僅支持以下產(chǎn)品型號Ascend 950PR/Ascend 950DTAtlas A3 訓(xùn)練系列產(chǎn)品/Atlas A3 推理系列產(chǎn)品Atlas A2 訓(xùn)練系列產(chǎn)品/Atlas A2 推理系列產(chǎn)品Atlas 200I/500 A2 推理產(chǎn)品hif8數(shù)據(jù)類型僅支持以下產(chǎn)品型號Ascend 950PR/Ascend 950DT該參數(shù)默認為性能優(yōu)先后續(xù)推理時可能會導(dǎo)致精度溢出問題。如果推理時出現(xiàn)精度問題可以參見《應(yīng)用開發(fā) (CC)》中的“模型推理 精度/性能優(yōu)化 模型推理精度提升建議”進行定位。如果用戶聚焦精度問題可以修改為其他取值比如origin。配置示例{ge::ir_option::PRECISION_MODE_V2, fp16}產(chǎn)品支持情況全量芯片支持。MODIFY_MIXLIST混合精度場景下通過此參數(shù)指定混合精度黑白灰名單的路徑以及文件名自行指定哪些算子允許降精度哪些算子不允許降精度。此參數(shù)實際對應(yīng)的options參數(shù)為ge.exec.modify_mixlist。參數(shù)取值配置為路徑以及文件名文件為JSON格式。黑白灰名單可從${INSTALL_DIR}/opp/built-in/op_impl/ai_core/tbe/config/xxx/aic-xxx-ops-info-*.json內(nèi)置優(yōu)化策略文件中查看“precision_reduce”參數(shù)下的flag參數(shù)值其中${INSTALL_DIR}請?zhí)鎿Q為CANN軟件安裝后文件存儲路徑。以root用戶安裝為例安裝后文件默認存儲路徑為/usr/local/Ascend/cann。_xxx_請根據(jù)實際產(chǎn)品進行選擇。若取值為true白名單表示混合精度模式下允許降低精度。若取值為false黑名單表示混合精度模式下不允許降低精度。不配置該參數(shù)灰名單表示混合精度模式下當(dāng)前算子的混合精度處理機制和前一個算子保持一致即如果前一個算子支持降精度處理當(dāng)前算子也支持降精度如果前一個算子不允許降精度當(dāng)前算子也不支持降精度。開啟混合精度方式PRECISION_MODE參數(shù)設(shè)置為allow_mix_precision、allow_mix_precision_fp16、allow_mix_precision_bf16。PRECISION_MODE_V2參數(shù)設(shè)置為mixed_float16、mixed_bfloat16、mixed_hif8與PRECISION_MODE參數(shù)不能同時配置建議使用PRECISION_MODE_V2。bf16僅在如下產(chǎn)品型號支持Ascend 950PR/Ascend 950DTAtlas A3 訓(xùn)練系列產(chǎn)品/Atlas A3 推理系列產(chǎn)品Atlas A2 訓(xùn)練系列產(chǎn)品/Atlas A2 推理系列產(chǎn)品Atlas 200I/500 A2 推理產(chǎn)品hif8僅在Ascend 950PR/Ascend 950DT支持。配置示例{ge::ir_option::MODIFY_MIXLIST, /home/test/ops_info.json}ops_info.json中可以指定算子類型多個算子使用英文逗號分隔樣例如下{ black-list: { // 黑名單 to-remove: [ // 黑名單算子轉(zhuǎn)換為灰名單算子配置該參數(shù)時請確保被轉(zhuǎn)換的算子已經(jīng)存在于黑名單中 Xlog1py ], to-add: [ // 白名單或灰名單算子轉(zhuǎn)換為黑名單算子 Matmul, Cast ] }, white-list: { // 白名單 to-remove: [ // 白名單算子轉(zhuǎn)換為灰名單算子配置該參數(shù)時請確保被轉(zhuǎn)換的算子已經(jīng)存在于白名單中 Conv2D ], to-add: [ // 黑名單或灰名單算子轉(zhuǎn)換為白名單算子 Bias ] } }上述配置文件樣例中展示的算子僅作為參考請基于實際硬件環(huán)境和具體的算子內(nèi)置優(yōu)化策略進行配置黑白灰名單查詢樣例如下Conv2D:{ precision_reduce:{ flag:true } },true白名單。false黑名單。不配置灰名單。產(chǎn)品支持情況全量芯片支持?!久赓M下載鏈接】geGEGraph Engine是面向昇騰的圖編譯器和執(zhí)行器提供了計算圖優(yōu)化、多流并行、內(nèi)存復(fù)用和模型下沉等技術(shù)手段加速模型執(zhí)行效率減少模型內(nèi)存占用。 GE 提供對 PyTorch、TensorFlow 前端的友好接入能力并同時支持 onnx、pb 等主流模型格式的解析與編譯。項目地址: https://gitcode.com/cann/ge創(chuàng)作聲明:本文部分內(nèi)容由AI輔助生成(AIGC),僅供參考