Почему loss скачет при обучении трансформера на одной и той же конфигурации

Рейтинг: 56.6% · 5 голосов
Machine learning и deep learning: обучение и дообучение моделей, датасеты, PyTorch, TensorFlow, эксперименты, метрики, MLOps и аналитика данных.
Ответить
Аватара пользователя
hogan20
Сообщения: 71
Зарегистрирован: 13 май 2026, 12:49

Почему loss скачет при обучении трансформера на одной и той же конфигурации

Сообщение hogan20 »

Запускаю файнтюн небольшого энкодера на pytorch 2.5, две прогонки с абсолютно одинаковым конфигом дают разный loss на 3-4 эпохе, расхождение уже к концу заметное по eval. Seed зафиксирован везде где знаю: torch.manual_seed, numpy, random, даже PYTHONHASHSEED выставил. Карта одна, A100 в аренде у селектела. Откуда берётся рандом если всё засидено. Хочу понять это норма или у меня где-то течёт.
👍1 ❤️ 🔥1 😄 🤔
✔ Лучший ответ сформирован автоматически — mparker8
по делу. собери так. 1) torch.use_deterministic_algorithms(True). 2) CUBLAS_WORKSPACE_CONFIG=:4096:8 в окружении до старта python. 3) в dataloader generator с manual_seed плюс worker_init_fn который сидит numpy и random внутри воркера от id. 4) выключи tf32 если хочешь стабильности, torch.backends.cuda.matmul.allow_tf32=False, иначе матмулы режут мантиссу и это ещё источник расхождений. 5) если ю…
Перейти к ответу →
Аватара пользователя
twoos60
Сообщения: 6
Зарегистрирован: 13 май 2026, 03:58

Re: Почему loss скачет при обучении трансформера на одной и той же конфигурации

Сообщение twoos60 »

seed это не вся история. На gpu куча операций недетерминированы по дефолту, atomicAdd в свёртках и в некоторых reduce кернелах даёт разный порядок суммирования флоатов, а float сложение не ассоциативно. Поставь torch.use_deterministic_algorithms(True) и переменную CUBLAS_WORKSPACE_CONFIG=:4096:8, тогда часть кернелов переключится на детерминированные варианты или кинет ошибку что детерминированной версии нет. Готовься что станет медленнее процентов на 10-20.
👍 ❤️ 🔥 😄2 🤔1
Аватара пользователя
johnmal
Сообщения: 22
Зарегистрирован: 21 май 2026, 18:40

Re: Почему loss скачет при обучении трансформера на одной и той же конфигурации

Сообщение johnmal »

а dataloader с num_workers>0 ты засидил? worker_init_fn никто не помнит, а там свой рандом на аугментациях
👍1 ❤️ 🔥1 😄 🤔
Аватара пользователя
Marijuan
Сообщения: 7
Зарегистрирован: 13 май 2026, 13:08

Re: Почему loss скачет при обучении трансформера на одной и той же конфигурации

Сообщение Marijuan »

twoos60 писал(а):float сложение не ассоциативно
вот это ключевое что народ пропускает. даже на одной карте если порядок редукции плавает, ты получаешь разные младшие биты, а на 4 эпохе они уже разъехались в видимую разницу. детерминизм на гпу это не бесплатно и не всегда полный
👍 ❤️1 🔥 😄 🤔
Аватара пользователя
smith_zhenya
Сообщения: 32
Зарегистрирован: 11 май 2026, 02:02

Re: Почему loss скачет при обучении трансформера на одной и той же конфигурации

Сообщение smith_zhenya »

серьёзно, кто-то ещё ждёт бит в бит от gpu обучения? забей и меряй разброс по 3 сидам, если eval метрика гуляет в пределах шума это твой реальный результат а не цифра с одного запуска
👍1 ❤️1 🔥2 😄 🤔
Аватара пользователя
nixos_andy
Сообщения: 61
Зарегистрирован: 11 май 2026, 03:44

Re: Почему loss скачет при обучении трансформера на одной и той же конфигурации

Сообщение nixos_andy »

smith_zhenya писал(а):меряй разброс по 3 сидам
плюсую, но 3 мало. для статьи мы гоняли 5 сидов и репортили mean плюс std, ревьюеры именно это и просят. один запуск это не результат это анекдот
👍 ❤️ 🔥2 😄1 🤔
Аватара пользователя
mparker8
Сообщения: 8
Зарегистрирован: 18 май 2026, 21:19

Re: Почему loss скачет при обучении трансформера на одной и той же конфигурации

Сообщение mparker8 »

✔ Лучший ответ — сформирован автоматически
по делу. собери так. 1) torch.use_deterministic_algorithms(True). 2) CUBLAS_WORKSPACE_CONFIG=:4096:8 в окружении до старта python. 3) в dataloader generator с manual_seed плюс worker_init_fn который сидит numpy и random внутри воркера от id. 4) выключи tf32 если хочешь стабильности, torch.backends.cuda.matmul.allow_tf32=False, иначе матмулы режут мантиссу и это ещё источник расхождений. 5) если юзаешь amp, помни что динамический loss scaling сам по себе адаптивный и меняет траекторию, для воспроизводимости фиксируй. после этого два запуска совпадут почти бит в бит на одной карте и одной версии cuda. на другой карте или другом драйвере совпадения не жди, кернелы другие. и да, медленнее будет, у нас вышло минус 15 процентов к скорости эпохи на A100.
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
grumpylurker
Сообщения: 63
Зарегистрирован: 15 май 2026, 01:41

Re: Почему loss скачет при обучении трансформера на одной и той же конфигурации

Сообщение grumpylurker »

tf32 это прям больное место, мы пол дня искали почему ноут на 3090 и кластер на A100 дают разные числа, оказалось tf32 на ампере по дефолту в матмулах включён и мантисса 10 бит против 23. отключили, числа сошлись, скорость просела
👍1 ❤️ 🔥 😄1 🤔
Ответить
Поделиться темой: ✈ Telegram VK

Вернуться в «Машинное обучение и Data Science»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость