Рубрики
Без рубрики

Как плохо настроен Tensorflow в Docker может быть 10x медленнее, чем ожидалось

Автор оригинала: FreeCodeCapm Team.

Pierre Paci

TL: DR: Tensorflow считывает количество логических сердечников ЦП, чтобы настроить сам, что может быть не так, если у вас есть контейнер с ограничением процессора.

Давайте сделаем простой ориентир, сравнивающий вывод на GPU, CPU на хосте, CPU на Docker и CPU на Docker с ограничением.

KERAS/TENSORFLOW, кажется, выполняет некоторую работу в графическом процессе при первом звонке к .Pedict (), поэтому не будет времени первого звонка, но второй.

Бег, что на моей NVIDIA 1080 приведет к Время вывода ~ 0,01с на изображение.

На этот раз, на моем процессоре, без контейнера Это занимает ~ 0,12с Отказ 12x медленнее находятся в порядке величины чего ожидать между процессором и графическим процессором. Обратите внимание, что мой Tensorflow не составляется должным образом с компиляцией AVX или MKL. GPU был сделан не видимым с использованием переменной среды Cuda_visible_devices Отказ

Давайте добавим контейнер.

Примечание. Подушка – это библиотека обработки изображений, необходимая KERA, чтобы загрузить изображение.

Запуск этого контейнера приведет к Время вывода ~ 0,15с Отказ Может быть, некоторые накладные расходы из докера или некоторые версии TF отличаются от моего хоста, но это не точка этой статьи. Настоящая точка придет сейчас.

Решение

Я использую I7 7700K с 8 логическими сердечками, 4 физического. Поэтому, если мы установим контейнер для использования только 2 логического ядра (1 физического), он должен быть примерно в 4 раза медленнее, так что около 0,6. Ограничения будут сделаны Docker API Отказ Это на самом деле приводит к тому, что вывод 2,5-х годов – 4 раза медленнее, чем ожидалось!

На самом деле, Tensorflow использует количество логических сердечников для вычисления некоторых внутренних номеров производительности. Здесь возникает накладные расходы, поскольку количество сообщенных ядер отличается от того, что доступно. На вашем производственном сервере он может быть еще больше. На наших серверах это было в 10 раз медленнее, так как в Xeon больше сердечников.

Так что мы можем сделать ?

Руководство по производительности Tensorflow Имеет ответ!

Используя эти новые параметры, мы получаем следующий код:

И теперь, только займет ~ 0,6с Отказ И это именно то, что ожидалось!

Так что в заключение, даже если докер, кажется, упрощает производственную среду, всегда будьте осторожны! И не забудьте использовать руководство по производительности в документации.