获取单个Python实例的总内存和CPU使用率

3

我正在使用keras制作和测试不同类型的神经网络,并需要数据来比较它们。我需要有关训练和测试期间使用的CPU和内存的数据。这是在Python中实现的,我找到了很多有关psutil的建议。然而,我看到的所有内容似乎都是获取当前使用情况。

什么是当前使用情况?像特定时刻使用的内存量一样吗?如何使用它来获取整个程序或至少NN训练和测试代码部分使用的总CPU和内存?感谢任何帮助!

1个回答

1

psutil是收集此类信息的良好建议。如果您将此代码并入现有的keras代码中,则可以在调用cpu_times()方法时收集有关进程CPU使用情况的信息。

import psutil

process = psutil.Process()
print(process.cpu_times())

cpu_times()返回的值的含义在这里解释。它是累计的,因此如果您想知道您的keras代码总共使用了多少CPU时间,请在退出python脚本之前运行它。

要获取进程的内存使用信息,在调用memory_info()时,您可以在同一个process对象上运行此命令,以获取特定时间的信息。

print(process.memory_info())

CPU和内存结果的确切含义取决于您使用的平台。有关内存信息结构的解释,请单击此处
更全面的示例显示了如何使用高级Python调度程序在后台进行CPU和内存测量,同时运行Keras培训。
import psutil

import time
import os

from apscheduler.schedulers.background import BackgroundScheduler

process = psutil.Process()

def get_info():
    print(process.cpu_times(), process.memory_info())

if __name__ == '__main__':
    scheduler = BackgroundScheduler()
    scheduler.add_job(get_info, 'interval', seconds=3)
    scheduler.start()

    # run the code you want to measure here
    # replace this nonsense loop
    now = time.time()
    finish = now + 60

    while time.time() < finish:
        print("Some progress message: {}".format(time.time()))
        time.sleep(10)


如果我想要像 CPU 时间那样的总内存使用情况,是否也能实现?还是它只能在调用时抓取当前的内存使用情况? - Rex Pan
那个方法只显示当前使用情况。你所说的总内存使用是什么意思?你是指最大值吗?你是指脚本分配的所有内存的累积吗?如果你想要最大值,你可以在不同时间测量该值,并保留最高值。如果你想要累积内存分配,我不确定如何计算。 - Jeremy Spykerman
如果您对这个答案感到满意,能否请您接受它?我正在努力建立我的声誉,很难找到我可以回答的未解决问题。 - Jeremy Spykerman
啊,没有办法显示整个程序的累积内存使用情况吗?最大值很好,但主要的计算部分是keras运行模型的一部分,因此无法插入任何内容来尝试跟踪最大使用量。不过还是谢谢。 - Rex Pan
我不知道如何显示累积内存,但我已经改进了我的答案,展示了如何在Keras训练进行时进行CPU和内存测量。 - Jeremy Spykerman
如果我想使用这个来每1秒检查一次并找到最大内存使用情况,我该怎么做呢?我尝试了简单的if mem < process.memory_info().rss,然后mem = process.memory_info().rss,但似乎无法在函数外更新变量。 - Rex Pan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接