如何分析 CPU 脚本的 Python 用法?
How to profile CPU usage of a Python script?
理想情况下,我想要记录 CPU 执行深度神经网络 Keras model. I'm looking for the CPU equivalent of memory_profiler 脚本的 CPU 用法,它提供进程的内存消耗。
我研究过使用 psutil (suggested in ),这表明我的脚本可能包含
的某些变体
p = psutil.Process(current_pid)
p.cpu_percent()
但问题是我真正想要捕获的重要函数调用将是模型的推理阶段
model.predict(x_test)
如果我 运行 psutil before/after 这一步记录的 CPU 使用情况将不会真实反映进程的 CPU 使用情况。
所以我在想我是否可以使用 top/htop 之类的东西将脚本的 CPU 使用情况记录到某个文件中,从而在处理过程中捕获波动的 CPU 使用情况
是 运行ning,然后在事后计算平均值(或类似的值)。然而,我看到的问题是我不需要知道 PID 就可以使用 top,
那么如何在脚本执行之前使用 top 来监视脚本(甚至还没有分配 PID)?
我可以看到 this highly-ranked answer 建议
cProfile 给出脚本中函数的 运行ning 时间。虽然这不是我想要的,但我注意到它 returns
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)
上述脚本 cpu_percents
中的值类似于:
理想情况下,我想要记录 CPU 执行深度神经网络 Keras model. I'm looking for the CPU equivalent of memory_profiler 脚本的 CPU 用法,它提供进程的内存消耗。
我研究过使用 psutil (suggested in
p = psutil.Process(current_pid)
p.cpu_percent()
但问题是我真正想要捕获的重要函数调用将是模型的推理阶段
model.predict(x_test)
如果我 运行 psutil before/after 这一步记录的 CPU 使用情况将不会真实反映进程的 CPU 使用情况。
所以我在想我是否可以使用 top/htop 之类的东西将脚本的 CPU 使用情况记录到某个文件中,从而在处理过程中捕获波动的 CPU 使用情况 是 运行ning,然后在事后计算平均值(或类似的值)。然而,我看到的问题是我不需要知道 PID 就可以使用 top, 那么如何在脚本执行之前使用 top 来监视脚本(甚至还没有分配 PID)?
我可以看到 this highly-ranked answer 建议 cProfile 给出脚本中函数的 运行ning 时间。虽然这不是我想要的,但我注意到它 returns 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)
上述脚本 cpu_percents
中的值类似于: