Как мне оценить размер графического процессора моей модели TensorFlow?

Я пытаюсь получить приблизительное представление об объеме памяти GPU в моих моделях глубокого обучения TensorFlow и полагаюсь на эвристику, с которой я столкнулся, предлагает:

Самым большим узким местом, о котором следует помнить при построении архитектур ConvNet, является узкое место в памяти. Многие современные графические процессоры имеют ограничение в 3/4/6 ГБ памяти, а лучшие графические процессоры имеют около 12 ГБ памяти. Есть три основных источника памяти для отслеживания:

  • От размеров промежуточного объема: это необработанное количество активаций на каждом уровне ConvNet, а также их градиенты (одинакового размера). Обычно большинство активаций находятся на более ранних уровнях ConvNet (то есть на первых уровнях Conv). Они хранятся вокруг, потому что они необходимы для обратного распространения, но умная реализация, которая запускает ConvNet только во время тестирования, может в принципе уменьшить это на огромное количество, сохраняя только текущие активации на любом уровне и отбрасывая предыдущие активации на уровнях ниже,

  • От размеров параметров: это числа, которые содержат параметры сети, их градиенты во время обратного распространения и обычно также пошаговый кеш, если оптимизация использует импульс, Adagrad или RMSProp. Поэтому память для хранения одного вектора параметров обычно должна быть умножена не менее чем на 3 раза.

  • Каждая реализация ConvNet должна поддерживать разную память, такую ​​как пакеты данных изображения, возможно, их расширенные версии и т. Д.

Если у вас есть приблизительная оценка общего количества значений (для активаций, градиентов и разного), число следует преобразовать в размер в ГБ. Возьмите количество значений, умножьте на 4, чтобы получить необработанное число байтов (поскольку каждая плавающая точка составляет 4 байта, или, может быть, на 8 для двойной точности), а затем разделите на 1024 несколько раз, чтобы получить объем памяти в КБ, МБ и, наконец, ГБ. Если ваша сеть не подходит, обычная эвристика для "подгонки" - это уменьшение размера пакета, так как большая часть памяти обычно используется активациями.

Но я не уверен в нескольких вещах:

  1. Какова роль размера партии в этом расчете? Похоже, что это влияет только на активации (то есть я должен умножить активации на размер партии). Это верно?
  2. Как мне узнать, какая из этих вещей находится на моем GPU (с 12GiB), а какая на моем CPU (в TensorFlow)? В общем, почти все они находятся на GPU?
  3. Где искать "разное"? Является ли исходные данные основным источником этого. И если да, могу ли я считать одну партию таких данных или все это?

1 ответ

  1. Вы получили одну модель, которая обучается с использованием партий образцов. Одна партия состоит из нескольких входов. Эти входы обрабатываются параллельно с использованием модели. Таким образом, если ваш пакет содержит определенное количество элементов, каждый элемент передается из ЦП (где находятся Очереди ввода) в графический процессор. GPU, следовательно, вычисляет, используя модель в государстве t (Думайте об этой модели как о модели с ее параметрами, зафиксированными на шаге по времени t) прямой проход для каждого элемента входной партии. Затем результаты сети накапливаются в векторе, и теперь вычисляется шаг обратного распространения. Таким образом, градиенты рассчитываются (обратный проход) для каждого отдельного элемента партии, используя модель в то время t (снова), накопленный в векторе и усредненный. Используя это среднее значение, параметры модели обновляются, и модель входит в состояние t+1,

  2. Как правило, все, что является последовательным по своей природе, находится на процессоре (подумайте о входных потоках, очереди, обработке отдельных входных значений,...). Однако все, что должна обработать сеть, затем передается из ЦП в графический процессор.

  3. Разная часть немного сбивает с толку. Я предполагаю, что автор говорит об увеличении данных и факте, что один вход может быть увеличен бесконечными способами. Таким образом, вы должны принять во внимание, что если вы применяете преобразования к пакету ввода (например, к случайной яркости для целого пакета изображений), то эти преобразования, которые нужно вычислить, должны быть перенесены из ЦП в графический процессор и дополненные версии. должны быть сохранены в памяти графического процессора перед обработкой. Тем не менее, операция переноса будет сделана так же, вы просто потеряете некоторое время вычислений (для предварительной обработки, конечно), выделенная память будет такой же

Другие вопросы по тегам