Получение общего объема памяти и использования процессора для одного экземпляра Python - PullRequest
2 голосов
/ 10 апреля 2019

Я использую керасы для создания и тестирования различных типов нейронных сетей, и мне нужны данные для их сравнения. Мне нужны данные о процессоре и памяти, используемые во время обучения и тестирования. Это на python, и когда я осмотрелся, я нашел много предложений для psutil. Однако все, что я вижу, похоже, захватывает текущее использование.

Что такое текущее использование? Как объем памяти, использованный в этот конкретный момент? Как я могу использовать его, чтобы получить общее количество процессоров и памяти, используемых всей программой, или, по крайней мере, ту часть кода, где NN обучает и тестирует. Спасибо за любую помощь!

1 Ответ

0 голосов
/ 10 апреля 2019

psutil - хорошая рекомендация для сбора информации такого типа. Если вы включите этот код в свой существующий код keras, вы сможете собирать информацию об использовании процессором вашего процесса во время вызова метода cpu_times ()

import psutil

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

Значение значения, возвращаемого функцией cpu_times (), объясняется здесь . Он кумулятивный, поэтому, если вы хотите узнать, сколько процессорного времени вообще использовал ваш код keras, просто запустите его перед выходом из скрипта python.

Чтобы получить информацию об использовании памяти для вашего процесса, в конкретный момент времени, когда вы делаете вызов memory_info (), вы можете запустить его на том же process объекте, который мы объявили ранее

print(process.memory_info())

Точное значение результатов процессора и памяти зависит от используемой вами платформы. Информационная структура памяти поясняется здесь

Более подробный пример показывает, как вы могли бы использовать Advanced Python Scheduler для измерения процессора и памяти в фоновом режиме во время тренировки с керасом

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)

...