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