Эссе о разработке игр, мышлении и книгах

Нельзя просто так взять и запустить Deep Learning

Очень известный мем с Боромиром.

Продолжаю разбираться с Deep Learning.

Решил попробовать его на практике: сам придумал лабу, сам сделал, сам себя похвалил.

Целью было построить простейшую, но более-менее полную цепочку обучения модели с помощью Keras+TensorFlow и запустить её на своей машине.

Публикую notebook с выполненной лабой, комментариями о базовых штуках, костылях и нюансах. Надеюсь, будет полезна новичкам. Может быть меня даже поругает кто-нибудь из опытных датасаентистов.

А в этом посте покритикую инфраструктуру всего этого.

Почему TensorFlow

Погуглив про PyTorch & TensorFlow, я пришёл к следующей картине:

  • Сначала был низкоуровневый TensorFlow 1.0.
  • Потом появился PyTorch, который некоторые вещи сделал «правильнее» и проще.
  • Поэтому TensorFlow переписали: получили версию 2.0 и догнали PyTorch по фичам.
  • Сейчас они, если не смотреть на специализированные задачи и детали реализации, примерно одинаково популярны, имеют примерно одинаковые фичи, удобство и производительность.
  • Поскольку TensorFlow старше, для него есть больше обвеса: дебаг, визуализация, деплой на разные штуки. То есть новичку немного удобнее TensorFlow. Наверно :-)
  • PyTorch потихоньку догоняет TensorFlow по обвесу и в целом нельзя сказать, что в среднесрочной перспективе один фреймворк сделает другой.
  • PyTorch & TensorFlow — два топовых фреймворка, остальные до них не дотягивают или занимают более специализированные ниши.

Поскольку я новичок, решил от добра добра не искать.

Запуск на «голом» железе

Первая попытка запустить полный pipeline закончилась убийством графической оболочки и переустановкой системы. Заодно винду снёс — давно хотел.

Оказывается, в 21 году XXI века куча неглупых людей из ведущей корпорации не в состоянии реализовать поддержку актуальной LTS Ubuntu, которая вышла больше года назад. Драйвера NVidia для ML доступны максимум для Ubuntu 18.04.

Поставить их можно, если осторожно. Но я был неосторожен, за что и поплатился.

По правде я не особо старался — это была последняя система с неавтоматизированной подготовкой рабочего окружения, за годы в ней скопилось много мусора и я давно ждал, когда ж ей придёт конец.

Но ситуация всё равно не радует, как-то не по-людски такие задержки с обновлениями делать.

Запуск через Docker

Поскольку откатывать версию операционной системы я не хотел, решил воспользоваться вторым вариантом — готовыми docker контейнерами с TensorFlow и Python 3.6… Ну, чем богаты, не страшно.

Тут тоже не всё просто.

Во-первых, всё равно нужны драйвера NVidia, на этот раз для Docker.

Во-вторых, необходимо наладить взаимодействие Jupyter с контейнером.

Официальный вариант — контейнер с предустановленным Jupyter. Мне этот путь не нравится — как хочу иметь единственную кастомизированную версию Jupyter, вместо зоопарка.

К сожалению, пришлось остановиться на нём — унаследовал собственный контейнер от официального,  доставив необходимые пакеты.

Альтернативный путь — научить Jupyter работать со своими ядрами в контейнерах. Для этого недавно появилась утилита dockernel и она даже работает, но не для контейнеров с поддержкой GPU.

Потому что поддержка включается отдельно при запуске контейнера, а dockernel пока не умеет пробрасывать опции запуска. Но автор говорит, что может быть научится.