В машинном обучении всё то же самое.
Кодинг, ожидание результатов, их интерпретация, возвращение к кодингу. Плюс несколько промежуточных презентаций прогресса. Но то, что в основном всё одинаково, не означает, что учиться нечему. Скорее наоборот! Два-три года назад у меня появилась привычка ежедневно записывать уроки, которые я извлёк из своей работы в сфере машинного обучения. Просматривая некоторые из уроков этого месяца, я нашёл три практических урока, которые выделяются:
- Использование документов README для себя.
- Запрос срезов MIG вместо полных GPU.
- Распределение движений в течение дня.
Ведите README — для себя в будущем
Большинство документов README написаны для других людей. Они нужны для того, чтобы привлечь новых сотрудников или сделать репозиторий с открытым исходным кодом пригодным для использования незнакомцами.
Напишите один и для себя — особенно для себя в будущем.
Когда вы находитесь в середине проекта, все пути, команды и тонкие настройки живут в вашей голове. После паузы — уже не так. Недавно я столкнулся с этим, когда мне пришлось подготовить обновление для статьи. В исследованиях машинного обучения обзоры часто занимают месяцы. За это время вы переходите к следующему проекту с новыми наборами данных, новым кодом, новыми соглашениями. Когда наконец приходит отзыв, вы возвращаетесь к старому проекту и… тратите полдня на восстановление того, какой скрипт создал какую фигуру.
Это большой стресс, если скоро приближается дедлайн.
Подготовка к собственному забыванию — часть работы. Небольшой README избавит от большой головной боли.
Что нужно зафиксировать (для вас)
Будьте практичны. Ваше будущее «я» не хочет прозы; им нужно «как»:
- Быстрый старт проекта. Настройка среды, точная версия Python, файл env или команды
conda/pip. - Расположение данных. Где находятся необработанные и обработанные данные; как загружать, кэшировать и проверять контрольные суммы. Обратите внимание на любые подводные камни (например, «плитки NDVI переворачиваются с юга на север после повторной выборки», как указано в моих старых постах).
- Воспроизведение результатов. Одна команда на артефакт: фигуры, таблицы и контрольные точки.
- Обучение и оценка. Точные команды для запуска основных экспериментов; как возобновить; как установить начальные числа.
- Поиск гиперпараметров. Команда, которую вы фактически использовали, с диапазонами; где регистрируются результаты.
- Распространённые ошибки. Всё, что вы знаете, что забудете (необходимые переменные среды, флаги GPU, соглашения об именах файлов).
- Журнал изменений. Однострочные пули значимых изменений.
Минимальный общий шаблон, который вы можете адаптировать для всех проектов:
# <Название проекта>
## Быстрый старт
# env
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 для быстрого планирования
Для обучения текущему поколению больших языковых моделей требуются сотни (или тысячи) высокопроизводительных графических процессоров. Но большинство повседневных задач в сфере машинного обучения не требуют моделей масштаба LLM. Многие проблемы решаются с помощью компактных CNN или небольших MLP — и им не нужен полный GPU A100/H100.
Запрос целого GPU для крошечной модели приводит к нерациональному использованию ресурсов и ставит вас в конец очереди. Я заново выучил это на собственном горьком опыте в этом месяце: я обучал четырёхслойный MLP и ждал очень долго, чтобы попасть в расписание. В своих запросах на планирование я запрашивал полный высокопроизводительный GPU. Конечно, они пользуются большим спросом у тех заданий, которые действительно в них нуждаются (например, тонкая настройка LLM).
Как только я переключился на срез MIG, задания начали выполняться немедленно, и скорость моих итераций резко возросла.
Что такое MIG и зачем его использовать?
MIG (Multi-Instance GPU) позволяет вам разделить недавний графический процессор NVIDIA на несколько изолированных «срезов». Один большой GPU становится до семи меньших виртуальных GPU, и полная оперативная память распределяется между этими срезами. По сути, каждый срез — это меньший GPU. И для многих рабочих нагрузок этих небольших срезов более чем достаточно.
Есть дополнительное преимущество: меньшее количество людей запрашивают срезы (потому что они не знают о такой возможности), поэтому планировщики могут сразу же поместить вашу работу в очередь. Это позволяет вам быстрее перебирать свои модели, сокращая время на получение хороших результатов.
Чтобы применить это на практике
- Проверьте доступность. Спросите своих администраторов кластера или посмотрите в документации планировщика имена разделов MIG (например,
1g.10gb,2g.20gb). - Подберите размер вашего запроса. Начните с малого. Если VRAM переполняется, увеличьте размер на один. Не устанавливайте по умолчанию полные GPU.
- Профилируйте память заранее. Запустите небольшую партию, чтобы прочитать пиковую VRAM; выберите наименьший срез, который оставляет ~10–20% запаса.
- Оформите шаблон вашего задания. Ведите скрипт задания для MIG и один для полных GPU; переключайтесь по флагу.
Борьба с длительным сидением с помощью движений
Большинство компьютерных работ выполняется перед компьютером. Мы все заметили, что чем больше времени мы проводим, тем более сутулой становится наша осанка. Мы округляемся вперёд; вся работа выполняется перед нами.
Это не лучшая позиция для длительного удержания, но в наши дни она довольно распространена. Для специалистов по машинному обучению компьютеры — это наш набор инструментов, и мы (должны) проводить значительное время с этим набором инструментов.
К счастью, нам не нужно проводить время в плохой позе, когда мы работаем на экране (нет, эти два понятия не связаны по определению).
Я понял это (опять же, потому что, похоже, я возвращаюсь к старым привычкам) в этом месяце: часы чтения, кодирования и встреч выдвинули мои плечи вперёд и заблокировали верхнюю часть спины. Затем, после нескольких дней интенсивного чтения статей, мои плечи напомнили мне, что нужно что-то изменить.
Решением, как оказалось, было легко, и оно не требует спортзала или полноценной тренировки. Оно просто требует чередования поз и кратковременных перекусов движением.
Я собрал небольшую программу, части которой использовал в течение дня (проверьте YouTube, если вы не знаете этих упражнений. Это метазнания, которые могут помочь вам выполнять свою работу лучше, дольше и здоровее):
- Аудиовстречи: встаньте и походите. Если вы должны оставаться у стола, переходите в расщеплённую стойку (одна нога вперёд), чтобы раскрыть бёдра.
- Двухминутные перезагрузки (например, после перерыва на кофе или после возвращения из принтера и т. д.):
- Тяга к аудиодорожке или тяга к лицу (10–15 повторений)
- Растяжка грудных мышц у стены (по 30–45 секунд с каждой стороны)
- Растяжка сгибателей бедра / растяжка на диване (по 30–45 секунд с каждой стороны)
- Блоки чтения стоя: распечатайте статью или читайте на планшете стоя; чередуйте блоки стояния и сидения.
Помимо этого, я обнаружил, что короткая утренняя сессия заставляет мои плечи чувствовать себя лучше и улучшает концентрацию в течение дня — приятный бонус, поскольку работа в сфере машинного обучения требует концентрации:
- 5 мин лёгкого кардио (ходьба или подъём по лестнице)
- 5 мин мобильности (вращения грудного отдела, круги плечами, глубокое приседание)
- 5 мин лёгкой нагрузки (выпады, отжимания от стола, тяги с эспандером)
Часто выдвигаемый аргумент: разве все работы не выполняются перед нами? Или, другими словами: какая работа требует, чтобы мы работали руками за спиной? Верно, за исключением, возможно, гимнастов, практически все работы выполняются перед нами. Ведь именно там находятся наши глаза! Но: некомпьютерные работы разнообразят движения в течение дня: что-то снять с полки, что-то перетащить и т. д. Имеет значение именно чередование.
