簡體   English   中英

如何分析Python腳本的CPU使用情況?

[英]How to profile CPU usage of a Python script?

理想情況下,我想要的是記錄執行深度神經網絡Keras模型的Python腳本的CPU使用情況。 我正在尋找與memory_profiler相當的CPU,它提供了進程的內存消耗。

我已經看過使用psutil (在這個答案中建議),這表明我的腳本可能包含一些變體

p = psutil.Process(current_pid)
p.cpu_percent()

但問題是重要的函數調用我真的想要捕獲的效果將是模型的推理階段

model.predict(x_test)

如果我在此步驟之前/之后運行psutil,則記錄的CPU使用率將不會真實反映進程的CPU使用情況。

那么我想我可以使用top / htop之類的東西將腳本的CPU使用率記錄到某個文件中,捕獲進程運行時的CPU使用量波動,然后計算事后的平均值(或類似值)。 然而,我看到的問題是,我不需要知道使用top的PID,那么如何在執行之前使用top監視腳本(甚至還沒有分配PID)?

我可以看到這個排名很高的答案表明cProfile給出了腳本中函數的運行時間。 雖然這不是我想要的,但我注意到它返回CPU秒的總數,這至少可以讓我比較這方面的CPU使用率。

您可以在子model.predict(x_test)運行model.predict(x_test)並在主進程中同時記錄其CPU使用情況。 例如,

import time
import multiprocessing as mp
import psutil
import numpy as np
from keras.models import load_model

def run_predict():
    model = load_model('1.h5')
    x_test = np.random.rand(10000, 1000)
    time.sleep(1)

    for _ in range(3):
        model.predict(x_test)
        time.sleep(0.5)

def monitor(target):
    worker_process = mp.Process(target=target)
    worker_process.start()
    p = psutil.Process(worker_process.pid)

    # log cpu usage of `worker_process` every 10 ms
    cpu_percents = []
    while worker_process.is_alive():
        cpu_percents.append(p.cpu_percent())
        time.sleep(0.01)

    worker_process.join()
    return cpu_percents

cpu_percents = monitor(target=run_predict)

上述腳本的cpu_percents中的值類似於:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM