Ретроспектива GitHub Янника Килчера: от мониторинга GPU до самодельных библиотек

Yannic Kilcher 19,3 тыс. 10 мин 4 мин 08.06.2021
Главное

После успешного завершения обучения в аспирантуре и защиты докторской диссертации (PhD) известный исследователь искусственного интеллекта Янник Килчер (Yannic Kilcher) решил оглянуться на пройденный путь через призму своего профиля на GitHub. Автор критически и с юмором оценивает созданные им утилиты, называя большую часть своего старого кода «мусором», который, тем не менее, решал реальные задачи его лаборатории. Этот ретроспективный разбор позволяет понять, как молодые ученые самостоятельно автоматизировали свои рабочие процессы до появления современных коммерческих платформ.

🛠️ Инструменты на каждый день: от мониторинга GPU до автоматической синхронизации 0:14

Среди ранних проектов автора можно найти весьма разнообразные решения, начиная от генератора музыкальных клипов Clip music video и заканчивая нейросетью для игры в Minecraft, под которую Килчер специально готовил игровой мир. Однако среди множества мелких утилий выделяется проект GPU stat. По признанию исследователя, это самый популярный репозиторий, созданный им за время PhD, поскольку им до сих пор активно пользуются коллеги по лаборатории для мониторинга загрузки видеокарт и серверов.

Другой важной вехой автоматизации рутины стала утилита SRun. Ее логика работы проста:

Несмотря на ежедневное использование SRun, Килчер признается, что на момент написания кода не знал о существовании встроенных инструментов для создания временных директорий (temp dir). Из-за этого утилита обладала критической UX-проблемой: если пользователь случайно запускал команду не из папки с кодом, а из домашнего каталога, скрипт полностью синхронизировал всю домашнюю директорию пользователя на удаленный сервер.

👑 RAT — «корона» академической инженерии Килчера 2:31

Главным и наиболее сложным своим проектом времен аспирантуры Янник Килчер считает систему RAT (Research Automation Tool), предназначенную для комплексного управления экспериментами. Архитектура RAT включала в себя воркера, развернутого на сервере, базу данных MongoDB для хранения кода и очередь задач на базе Redis.

Ключевой особенностью воркера была проверка доступности графического процессора (GPU). Если видеокарта была занята, задача возвращалась обратно в очередь. По словам Килчера, это позволяло не только избегать конфликтов с коллегами, но и эффективно «перехватывать» освобождающиеся ресурсы: как только чужая задача завершалась, воркер RAT мгновенно занимал освободившийся GPU.

Помимо распределения задач, RAT обладал продвинутым функционалом:

Автор отмечает, что добавил в систему флаг подтверждения (confirm) и команду полной очистки базы данных (delete all), чтобы защитить себя от случайных критических ошибок. Сегодня RAT, по мнению Килчера, скорее всего, не запустится из-за изменения зависимостей в Redis queue. Он подчеркивает, что создавал RAT вынужденно, так как в те годы популярных сегодня коммерческих платформ вроде Weights & Biases попросту не существовало.

📦 Велосипеды прошлого: YPlot, YPack и библиотека Fountain 5:31

Многие утилиты Килчера создавались для компенсации недостатков существовавшего тогда инструментария. Например, YPlot служила для построения графиков на основе данных из Tensorboard, хотя сейчас от нее осталась полезной лишь функция сглаживания из библиотеки SciPy. Набор рутинных функций для работы с фреймворками Torch и TensorFlow под названием YPack, а также библиотека Deep pool, по оценке автора, сегодня полностью утратили актуальность, так как их возможности стали частью стандартных библиотек.

Для генерации кросс-продуктов конфигураций экспериментов Килчер написал отдельный модуль ConfProd, снабдив его документацией и юнит-тестами. Еще одним амбициозным проектом была Fountain — собственная библиотека для работы с датасетами (по аналогии с CIFAR-10), которая автоматически скачивала и распаковывала данные. Килчер иронично называет ее «бесполезной вещью», поскольку современные экосистемы TorchVision и Hugging Face давно стандартизировали этот процесс.

В эпоху TensorFlow 1 управление чекпоинтами было нетривиальной задачей. Чтобы решить проблему несовпадения размерностей при восстановлении моделей, Килчер написал специальную утилиту, которая автоматически применяла случайную проекцию (random projection) для подгонки шейпов весов, если они не совпадали с новой архитектурой графа.

🔍 Парсеры arXiv и студенческая ностальгия 8:11

Помимо тяжелого ML-инструментария, Килчер разрабатывал мелкие утилиты для повышения личной продуктивности. К ним относится плагин для браузера Chrome, который автоматизировал сбор библиографических данных: он забирал BibTeX-записи из Google Scholar и интегрировал их прямо в интерфейс arXiv. Был написан и собственный парсер arXiv. Исследователь вспоминает, что в свое время задался целью прочитывать аннотации вообще всех новых статей по интересующим его направлениям каждое утро во время поездок в поезде.

Финальной точкой обзора стал самый первый публичный репозиторий Килчера, созданный еще во времена бакалавриата для курса по распознаванию образов. Это был классический классификатор на базе метода опорных векторов (SVM) с поддержкой линейного, полиномиального и RBF-ядер. С улыбкой автор критикует свой прошлый стиль программирования:

Этот первый коммит, по словам автора, предопределил его дальнейшую карьеру в сфере машинного обучения, превратив разбор старых репозиториев в приятное ностальгическое путешествие.

💬 Цитаты

«Я написал много кода, который по большей части является мусором.»

Янник Килчер 00:00

«В те годы популярных сегодня коммерческих платформ вроде Weights & Biases попросту не существовало.»

Янник Килчер 05:18
👥 Спикер
🔗 Упомянутые сайты и проекты
📖 Термины
MongoDB
Документоориентированная база данных, используемая для хранения гибких структур данных.
Redis
Высокопроизводительное хранилище данных в оперативной памяти, часто используемое как брокер очередей сообщений.
Tensorboard
Инструмент визуализации для отслеживания и анализа метрик машинного обучения.
SVM (Метод опорных векторов)
Классический алгоритм машинного обучения, используемый для задач классификации и регрессии.
📊 Цифры
🗓 Хронология
  1. Бакалавриат Создание первого публичного коммита на GitHub — классификатора SVM для курса по распознаванию образов.
  2. Магистратура Разработка учебных репозиториев, предшествующих обучению в аспирантуре.
  3. Аспирантура (PhD) Создание систем RAT, GPU stat, SRun и парсеров научной литературы для автоматизации исследований.
⚖️ Другая сторона
Технологии и IT Yannic Kilcher GitHub MongoDB Weights & Biases