Получение общей памяти и использования процессора для одного экземпляра Python

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

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


person Rex Pan    schedule 10.04.2019    source источник


Ответы (1)


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

import psutil

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

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

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

print(process.memory_info())

Точное значение результатов процессора и памяти зависит от того, какую платформу вы используете. Структура информации о памяти объясняется здесь

В более подробном примере показано, как можно использовать Расширенный планировщик Python, чтобы получать ресурсы ЦП и измерения памяти в фоновом режиме во время тренировки 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)

person Jeremy Spykerman    schedule 10.04.2019
comment
Что, если я хочу, чтобы общее использование памяти, такое как время процессора, можно было сделать и для памяти? Или он захватывает использование памяти только в момент его вызова? - person Rex Pan; 10.04.2019
comment
Этот метод показывает только текущее использование. Что вы подразумеваете под общим использованием памяти? Вы имеете в виду максимум? Вы имеете в виду накопление всей памяти, которая была выделена скриптом? Если вам нужен максимум, вы можете измерять значение в разное время, сохраняя самое высокое значение. Если вам нужно накопленное выделение памяти, я не уверен, как это рассчитать. - person Jeremy Spykerman; 11.04.2019
comment
Если вас устраивает этот ответ, можете ли вы его принять? Я пытаюсь построить свою репутацию, и очень трудно найти вопросы без ответов, на которые я могу ответить. - person Jeremy Spykerman; 11.04.2019
comment
Ах, нет ли способа показать накопительное использование памяти во всей программе? Макс был бы хорош, но основная вычислительная часть является частью keras, запускающей модель, поэтому невозможно что-либо вставить в нее, чтобы попытаться отслеживать максимальное использование. Спасибо хоть. - person Rex Pan; 17.04.2019
comment
Я не знаю, как можно было бы показать накопительную память, но я расширил свой ответ, чтобы показать, как вы можете измерять процессор и память, пока продолжается обучение keras. - person Jeremy Spykerman; 18.04.2019
comment
Как мне это сделать, если я хочу использовать это, чтобы найти максимальное использование памяти, проверяя, как всегда, 1 с? Я пытаюсь просто использовать if mem ‹ process.memory_info().rss, затем mem = process.memory_info().rss, но, похоже, не обновляет переменную вне функции. - person Rex Pan; 24.04.2019