2

В настоящее время я тренирую рекуррентную сеть на Tensorflow для проблемы классификации текста и сталкиваюсь с проблемами производительности и памяти. Я на AWS g2.8xlarge с Ubuntu 14.04, и недавняя ночная сборка тензорного потока (которую я загрузил 25 августа).AWS g2.8xбольшая производительность и проблемы с памятью при использовании tensorflow

1) Вопрос Производительность:

На поверхности, как процессор и GPU, высоко недоиспользуются. Я выполнил несколько тестов на этом (и использовал этот процесс в процессе). Длительность поезда линейно изменяется с количеством эпох, поэтому я проверил с 1 эпохой. Для RNN config = 1 слой, 20 узлов, время тренировки = 146 секунд.

Кстати, это число примерно на 20 секунд выше/медленнее, чем тот же пробный прогон на g2.2xlarge!

Вот снимок системного монитора и NVidia-SMI (обновляется каждые 2 секунды) около 20 секунд в перспективе:

SnapshotEarlyPartOfRun

Как вы можете видеть, использование GPU составляет 19%. Когда я использую nvprof, я обнаружил, что общее время процесса GPU составляет около 27 секунд или около того. Кроме того, за исключением одного vCPU, все остальные очень мало используются. Числа остаются на этом уровне, до конца эпохи, где я измеряю ошибку во всем учебном наборе, отправляя использование графического процессора до 45%.

Если я ничего не теряю, на поверхности каждое устройство сидит, ожидая чего-то.

2) Из выпуска памяти:

Если я увеличить число узлов до 200, это дает мне Out ошибки памяти, которая происходит на стороне GPU. Как видно из приведенных выше снимков, используется только один из четырех графических процессоров. Я обнаружил, что способ использования tenorflow для использования GPU связан с тем, как вы назначаете модель. Если вы ничего не укажете, tenorflow присваивает его графическому процессору. Если вы укажете GPU, будет использоваться только он. Tensorflow не нравится, когда я назначаю его нескольким устройствам с «for d in ['/ gpu: 0», ...] ». Я попал в проблему с повторным использованием переменной внедрения. Я хотел бы использовать все 4 графических процессора для этого (без настройки распределенного тензорного потока). Вот снимок Из ошибки памяти:

OutofMemoryError

Любые предложения, вы можете иметь для обеих этих проблем было бы весьма признателен!

ответ

0

Re (1), чтобы улучшить использование графического процессора, вы попытались увеличить размер партии и/или сократить последовательности, которые вы используете для обучения?

Re (2), чтобы использовать несколько графических процессоров, для которых вам необходимо вручную назначить операционные системы на устройства GPU. Правильный путь - разместить ops на конкретных графических процессорах, выполнив

with g.Device("/gpu:0"): 
    ... 
with g.Device("/gpu:1"): 
    ... 
Смежные вопросы