Процессы в области машинного обучения в целом одинаковы. Кодирование, ожидание результатов, их анализ, возврат к кодированию. Кроме того, бывают промежуточные отчеты о прогрессе. Однако то, что все остается в основном неизменным, не означает отсутствие новых знаний. Напротив! Два-три года назад сформировалась привычка ежедневно фиксировать уроки, извлеченные из работы с машинным обучением. Оглядываясь на заметки за этот месяц, выделяются три практических урока:
- Использование файлов README для себя самого
- Запрос MIG-сегментов вместо полных GPU
- Распределение движений в течение дня
Ведите README — для себя в будущем
Обычно файлы README создаются с учетом других людей. Они помогают новым коллегам освоиться или делают репозиторий с открытым исходным кодом доступным для посторонних.
Создавайте такой файл и для себя — в особенности для себя в будущем.
В разгар проекта все пути, команды и тонкие настройки хранятся в памяти. После перерыва — уже не так. Недавно это проявилось при подготовке обновления для статьи. В исследованиях по машинному обучению рецензирование занимает месяцы. За это время переходят к следующему проекту с новыми наборами данных, кодом и соглашениями. Когда рецензия наконец приходит, возвращаются к старому проекту и... тратят полдня на восстановление, какой скрипт генерировал какую фигуру.
Это вызывает значительный стресс, если дедлайн приближается.
Подготовка к собственному забыванию — часть профессиональной рутины. Краткий README избавляет от серьезных проблем.
Что фиксировать (для себя)
Делайте акцент на практичности. Будущему себе не нужны описательные тексты; нужны инструкции «как»:
- Быстрый запуск проекта. Настройка окружения, точная версия Python, файл окружения или команды
conda/pip. - Места хранения данных. Где находятся сырые и обработанные данные; как скачивать, кэшировать и проверять контрольные суммы. Укажите подводные камни (например, «тайлы NDVI перевернуты с севера на юг после ресэмплинга», как отмечалось в предыдущих материалах).
- Воспроизведение результатов. Одна команда на артефакт: фигуры, таблицы и чекпоинты.
- Обучение и оценка. Точные команды для ключевых экспериментов; как возобновлять; как устанавливать сиды.
- Поиск гиперпараметров. Команда, которая реально использовалась, с диапазонами; где логируются результаты.
- Распространенные ошибки. Все, что может быть забыто (обязательные переменные окружения, флаги GPU, конвенции именования файлов).
- Журнал изменений. Однострочные пункты значимых обновлений.
Минимальный универсальный шаблон, адаптируемый для любых проектов:
# <Название проекта> ## Быстрый запуск # окружение conda create -n proj python=3.10 -y conda activate proj pip install -r requirements.txt ## Данные # скачивание и предобработка python tools/download_data.py --out data/raw python tools/preprocess.py --in data/raw --out data/processed ## Обучение python train.py --cfg cfgs/base.yaml --seed 42 ## Оценка python eval.py --ckpt runs/exp123/best.ckpt --split test ## Воспроизведение фигур python scripts/fig_1.py # выводит в figs/fig_1.png python scripts/tab_2.py # записывает в tables/tab_2.csv ## Поиск гиперпараметров python sweep.py --study local.pkl --n-trials 100 ## Заметки / Ошибки - Требует CUDA 12.1 - Установите `WANDB_MODE=offline` без интернетаMIG-сегменты для быстрого планирования
Обучение современных больших языковых моделей требует сотен (или тысяч) высокопроизводительных GPU. Но повседневная работа с машинным обучением редко нуждается в моделях масштаба LLM. Многие задачи решаются компактными CNN или небольшими MLP — и для них не требуется полный A100/H100 GPU.
Запрос полного GPU для маленькой модели приводит к неэффективному использованию ресурсов и задержкам в очереди. Этот урок пришлось усвоить заново в этом месяце: при обучении 4-слойной MLP ожидание расписания затянулось. В запросах на планирование указывался полный высококлассный GPU. Естественно, такие ресурсы востребованы задачами, которые действительно их требуют (например, дообучением LLM).
После перехода на MIG-сегмент задания запускались мгновенно, а скорость итераций резко возросла.
Что такое MIG и зачем его применять?
MIG (Multi-Instance GPU) позволяет разделить современный GPU NVIDIA на несколько изолированных «сегментов». Один большой GPU превращается до семи меньших виртуальных GPU, а вся VRAM распределяется между сегментами. По сути, каждый сегмент — это уменьшенный GPU. Для многих нагрузок таких сегментов более чем достаточно.
Есть дополнительное преимущество: меньше людей запрашивают сегменты (из-за незнания возможности), поэтому планировщики размещают задачу сразу. Это ускоряет итерации над моделями, сокращая время до получения качественных результатов.
Практическое применение
- Проверьте доступность. Обратитесь к администраторам кластера или изучите документацию планировщика на наличие имен MIG-разбиений (например,
1g.10gb,2g.20gb). - Подберите размер запроса. Начните с малого. Если VRAM заканчивается, увеличьте на шаг. Не используйте полные GPU по умолчанию.
- Профилируйте память заранее. Запустите малую партию для замера пикового VRAM; выберите минимальный сегмент с запасом ~10–20%.
- Шаблонизируйте задания. Храните скрипт для MIG и для полных GPU; переключайтесь флагом.
Борьба с длительным сидением через движение
Большинство работ за компьютером выполняются перед... компьютером. Все замечают, что чем дольше сидеть, тем хуже осанка. Плечи сутулятся; вся деятельность происходит спереди*.
Такую позу нельзя поддерживать долго, но она стала обыденностью. Для специалистов по машинному обучению компьютеры — основной инструмент, и значительное время уходит на работу с ним.
К счастью, плохая осанка не является неизбежным спутником работы за экраном (нет, эти два аспекта не связаны по определению).
В этом месяце это осознали заново (старые привычки возвращаются): часы чтения, кодирования и встреч сдвинули плечи вперед и зафиксировали верхнюю часть спины. После нескольких дней интенсивного изучения статей плечи напомнили о необходимости изменений.
Решение оказалось простым и не требующим спортзала или полноценной тренировки. Оно сводится к чередованию поз и коротким перерывам на движение.
Собрана небольшая программа, элементы которой применялись в течение дня (поиск упражнений на YouTube, если они незнакомы. Это метазнание, которое помогает лучше и дольше выполнять работу — и здоровее):
- Звонки только с аудио: вставайте и ходите. Если нужно оставаться у стола, перейдите в расставленную стойку (одна нога вперед) для раскрытия бедер.
- Двухминутные перезапуски (например, после кофе или возвращения с принтера и т.д.):
- Разведения с резиной или тяги к лицу (10–15 повторений)
- Растяжка грудных у стены (30–45 с на сторону)
- Растяжка сгибателей бедра / растяжка на диване (30–45 с на сторону)
- Блоки чтения стоя: распечатайте статью или читайте на планшете стоя; чередуйте стояние и сидение.
Кроме того, короткая утренняя сессия улучшает состояние плеч и повышает концентрацию на весь день — приятный бонус, поскольку работа с машинным обучением требует внимания:
- 5 мин легкой кардио (прогулка или подъем по лестнице)
- 5 мин подвижности (вращения в грудном отделе, круги плечами, удержание глубокого приседа)
- 5 мин легкой силы (выпады, отжимания от стола, тяги с резиной)
* Часто звучит аргумент: разве не все работы выполняются спереди? Или иначе: какая профессия требует действий руками за спиной? Верно, кроме, пожалуй, гимнастов, почти все занятия происходят спереди. Ведь именно там наши глаза! Но: в некомпьютерных профессиях движения разнообразны в течение дня: взять что-то с полки, потащить предмет и т.д. Важна именно смена.