日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OnnxRuntime 性能调优

發(fā)布時間:2025/4/5 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 OnnxRuntime 性能调优 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

link
文檔的一些筆記:
性能調(diào)優(yōu)小工具 ONNX GO Live Tool
這玩意兒有倆docker容器來實現(xiàn)支持,一個優(yōu)化容器和一起模型轉(zhuǎn)換容器。暫時具體不清楚原理,還沒來得及看,后面試試。

什么執(zhí)行單元(Execution Provider, EP)能夠提供最好的性能表現(xiàn)
CPU版本的ONNX Runtime提供了完整的算子支持,因此只要編譯過的模型基本都能成功運行。一個要注意的點是為了減少編譯的二進制包能夠足夠小,算子只支持常見的數(shù)據(jù)類型,如果是一些非常見數(shù)據(jù)類型,請去提交PR。

CUDA版本的算子并不能完全支持,如果模型中有一部分不支持的算子,將會切換到CPU上去計算,這部分的數(shù)據(jù)切換是有比較大的性能影響。當然也可以contribute或者提交issue。

對于TRT和CUDA的區(qū)別,在同設(shè)備上TRT會比CUDA有著更好的性能表現(xiàn),但是這個狀況也局限于特定的模型以及算子是被TRT支持。

性能調(diào)優(yōu)的一些建議

  • Shared arena based allocator

通過配置多個session中共享內(nèi)存區(qū)域配置,可以減少內(nèi)存消耗

  • 線程調(diào)控

    • 如果編譯支持OpenMP,那么使用OpenMP的環(huán)境變量來控制預(yù)測線程數(shù)量。
    • 如果沒有OpenMP支持,使用合適的ORT API來進行操控。
    • 當使用并行實行的時候inter op線程并不會受到OpenMP設(shè)置的影響,且總是應(yīng)該使用ORT APIs來進行設(shè)置。
      默認CPU執(zhí)行單元的相關(guān)設(shè)置(MLAS)
默認EP使用了很多旋鈕來控制線程數(shù)量。舉個例子:
import onnxruntime as rtsess_options = rt.SessionOptions()sess_options.intra_op_num_threads = 2 sess_options.execution_mode = rt.ExecutionMode.ORT_SEQUENTIAL sess_options.graph_optimization_level = rt.GraphOptimizationLevel.ORT_ENABLE_ALL
  • Thread Count

    • sess_options.intra_op_num_threads = 2控制了運行模型時的線程數(shù)量。
  • Sequential vs Parallel Execution

    • sess_options.execution_mode = rt.ExecutionMode.ORT_SEQUENTIAL控制了計算圖內(nèi)部的算子是順序計算還是并行計算,當一個模型含有多個分支的時候,設(shè)置為False會有比較大的性能提升。
  • 當sess_options.execution_mode = rt.ExecutionMode.ORT_PARALLEL時(即模型內(nèi)計算圖中的并行), 你可以設(shè)置 sess_options.inter_op_num_threads 來對并行計算的線程數(shù)量進行控制。這里注意是inter不是intra,和Thread Count里面的那個不一樣。

  • sess_options.graph_optimization_level = rt.GraphOptimizationLevel.ORT_ENABLE_ALL

圖結(jié)構(gòu)優(yōu)化設(shè)置,分為三個level,Basic,Extend和Layout Optimizations。默認所有的優(yōu)化都是ENABLE。

MKL_DNN / nGraph執(zhí)行單元

這倆玩意兒依賴openmp支持來實現(xiàn)并行化,對于這倆需要使用openmp的環(huán)境變量來進行性能調(diào)整。

  • OMP_NUM_THREADS=n
    • 控制線程池大小
  • OMP_WAIT_POLICY=PASSIVE / ACTIVE
    • 線程是否是thread spinning模式(線程調(diào)度的一種方式)。
    • PASSIVE 吞吐量模式,CPU只有在完成當前任務(wù)后被釋放。當CPU使用率已經(jīng)很高了,用這個模式。
    • ACTIVE 永遠不會釋放CPU,會以一個死循環(huán)的方式來檢查下一個任務(wù)是否已經(jīng)準備好。當你要低時延,用這個模式。

總結(jié)

以上是生活随笔為你收集整理的OnnxRuntime 性能调优的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。