
Продолжаю разбираться с 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 пока не умеет пробрасывать опции запуска. Но автор говорит, что может быть научится.