|

Python程式效能逐行評估工具 「line_profiler」

   
作者:尤濬哲

最近寫(抄)了一支利用dlib做臉部辨識的工具,但是效能不佳,程式執行需要大約一分鐘的準備時間,然後FPS也是沒辦法超過1,我用VSCode的F5 debug工具,從第一行逐行執行,發現是卡在cap = cv2.VideoCapture(0)這句,竟然可以卡40秒,後來查詢網路說可以加上cv2.CAP_DSHOW,但是只能用在Windows系統,樹莓派沒辦法使用,不過畢竟是開啟時一次的執行時間,影響不大所以就暫時先不處理。

另外一個比較嚴重的問題是fps,640x480解析度下的fps大約0.5-0.9之間,如果改成320x240可以超過1,實在是慢的離譜,實在很想了解問題出在什麼地方,是哪一行造成的瓶頸,雖然我還是可以用debug逐行執行來"感受"一下時間,但是像這種無限迴圈,要自己一直按F10想想實在算了。

想起我以前在VS.net開發工具時,在debug時會計算每行的執行時間,例如下圖,當從上一行執行到這行時,一共花費了0.979秒,如果我們一步一步Step就可以了解每行的狀況,知道瓶頸出在哪裡,不過這也太累了。

使用debug工具來了解執行效能其實還有一個問題,就是也許他這次很慢,但下次就會很快,例如網路擁塞,每次需要的時間不太一樣,因此必須長期評估再"平均"計算比較合理,用debug工具做這件事情實在很沒有效率。

Scalene工具

在論壇詢問一下,網友提供了幾個工具,最知名應該是這個Scalene,這款的優點是設定很簡單,只要兩個步驟:

  1. 安裝套件:

    pip3 install scalene

  2. 利用scalene來執行你的Python程式:

    scalene YourCode.py

當程式執行完畢後,就會自己跳出這個執行報告,非常詳細,包括每行的執行「總」時間、使用多少GPU、記憶體等等的報告。

本文為會員限定文章

立即加入會員! 全站文章無限看~

                               

已經是會員? 按此登入

只需不到短短一分鐘...

輸入您的信箱與ID註冊即可享有一切福利!

會員福利
1

免費電子報

2

會員搶先看

3

主題訂閱

4

好文收藏

尤濬哲

Author: 尤濬哲

身兼助理教授/專欄作家/知名部落客,以及點點滴滴科技研發總監等身份,專長包括人工智慧、多媒體互動(Unity)、智慧互動裝置(APP、Arduino)、虛擬實境與擴增實境互動、IoT 實做開發。 學歷:中山大學資訊管理研究所 博士

Share This Post On

Submit a Comment

發佈留言必須填寫的電子郵件地址不會公開。