Phi*_*ien 6 python profiling cpu-usage keras
理想情况下,我想要记录执行深度神经网络Keras模型的Python脚本的CPU使用情况。我正在寻找与CPU等效的memory_profiler,它提供了进程的内存消耗。
我看过使用psutil(在此答案中建议),这表明我的脚本可能包含的某些变体。
p = psutil.Process(current_pid)
p.cpu_percent()
Run Code Online (Sandbox Code Playgroud)
但问题是我真正想捕获效果的重要函数调用将是模型的推断阶段
model.predict(x_test)
Run Code Online (Sandbox Code Playgroud)
如果在此步骤之前/之后运行psutil,则记录的CPU使用率将无法真正反映该进程的CPU使用率。
因此,我当时在考虑是否可以使用top / htop之类的东西将脚本的CPU使用率记录到某个文件中,捕获进程运行时CPU的使用情况波动,然后在事后计算平均值(或类似值)。但是,我看到的问题是,我是否不需要知道PID才能使用top,所以在执行脚本之前(甚至还没有分配PID的情况下)如何使用top监视脚本?
我可以看到这个排名很高的答案建议使用cProfile,它可以提供脚本中函数的运行时间。尽管这并不是我想要的,但我注意到它返回了CPU秒总数,这至少可以让我比较这方面的CPU使用率。
您可以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)
Run Code Online (Sandbox Code Playgroud)
cpu_percents上面脚本中的值将类似于:
| 归档时间: |
|
| 查看次数: |
2587 次 |
| 最近记录: |