К такому нас на ЕГЭ не готовили, поэтому давайте разберём.
1. Результат тренировки — это какие-то артефакты. Например, чекпоинт модели. А Docker-контейнеры эфемерны, т.е. после конца тренировки всё, что сохранялось в контейнере, будет удалено. Поэтому нужно добавить volume, в который будет писать наш контейнер, чтобы после тренировки не потерять нужные артефакты: `-v /path/to/local/dir:/dir/in/container`. Если вы сохраняете все артефакты на удалённом хранилище при помощи, например, `clearml`, `dvc`, `wandb` и т.п. и вас не страшит эфемерность контейнера, то вы всё делаете правильно и следующий пункт как раз для вас.
2. Если артефакты сохраняются при помощи систем по типу `clearml`, то они обычно требуют секретов, чтобы всё заработало (пароли, access/secret-ключи для s3 и т.п.). В нашем примере всё будет работать только если эти секреты уже находятся внутри образа, а это не очень хорошо. Можно передать нужные секреты, например, через переменные окружения `-e S3_ACCESS_KEY=...` . Или примонтировать файлик с ними: `-v ./secret_config.yml:/app/config.yml`. Также можно использовать специальные тулы для секретов, например, vault.
3. Если мы тренируем модель на gpu, то нужно не забыть их прокинуть: `--gpus '"device=0,1"'` — ели хотим, чтоб было видно 0 и 1 карточки, `--gpus all` — чтобы было видно все.
4. Не выставлен `--shm-size`. Shm (shared memory) — общая память между процессами. Когда мы используем, например, `DataLoader` из PyTorch с, то данные загружаются не одним (главным) процессом, а несколькими воркерами. Чтобы данными мог воспользоваться главный процесс, воркеры записывают их не через диск/сокеты/pipe-ы — было бы слишком долго/неудобно — а сразу в общую память (shared memory). Если размер `--shm-size` слишком маленький (а по умолчанию он всего 64 мб), то могут происходить разные спецэффекты: тормозить сбор батча, фризы, ошибки и т.п. Такое часто может встречаться в CV, потому что изображения могут много весить. Поэтому обычно этот параметр лучше сделать побольше. Например, передать `--shm-size=1g`.
5. Лучше лишний раз не захватывать терминал и запускать тренировку в демоне, для этого нужно добавить флаг `-d`.
Артём Кравчук