Выпуск Tensorflow 0.6 GPU
Я использую Nvidia Digits Box с графическим процессором (Nvidia GeForce GTX Titan X) и Tensorflow 0.6 для обучения нейронной сети, и все работает. Тем не менее, когда я проверяю Volatile GPU Util
с помощью nvidia-smi -l 1
Я заметил, что это всего лишь 6%, и я думаю, что большая часть вычислений выполняется на CPU, так как я заметил, что процесс, который запускает Tensorflow, использует процессор примерно на 90%. В результате тренировочный процесс идет очень медленно. Интересно, есть ли способы в полной мере использовать GPU вместо CPU, чтобы ускорить процесс обучения. Спасибо!
1 ответ
Я подозреваю, что у вас есть узкое место где-то (как в этом выпуске github) - у вас есть какая-то операция, которая не имеет реализации GPU, поэтому она помещается в CPU, и GPU работает на холостом ходу из-за передачи данных. Например, до недавнего времени reduce_mean
не был реализован на GPU, а до этого Rank
не был реализован на GPU, и он неявно использовался многими операциями.
В какой-то момент я увидел, что сеть из файла full_connected_preloaded.py работает медленно, потому что Rank
оп, который был помещен в CPU, и, следовательно, запускает передачу всего набора данных из GPU в CPU на каждом шаге.
Чтобы решить эту проблему, я бы сначала рекомендовал обновить систему до 0.8, поскольку в ней было реализовано еще несколько операций для GPU (reduce_prod
для целочисленных входов, reduce_mean
и другие).
Затем вы можете создать сеанс с log_device_placement=True
и посмотрите, есть ли какие-либо операции, размещенные на CPU или GPU, которые вызвали бы чрезмерные передачи за шаг
Во входном конвейере часто бывают операции (такие как parse_example
), в которых нет реализаций графического процессора, иногда полезно связать весь входной конвейер с процессором, используя with tf.device("/cpu:0"):
блок