Почему loss скачет при обучении трансформера на одной и той же конфигурации
Рейтинг: 56.6% · 5 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
Почему loss скачет при обучении трансформера на одной и той же конфигурации
Запускаю файнтюн небольшого энкодера на pytorch 2.5, две прогонки с абсолютно одинаковым конфигом дают разный loss на 3-4 эпохе, расхождение уже к концу заметное по eval. Seed зафиксирован везде где знаю: torch.manual_seed, numpy, random, даже PYTHONHASHSEED выставил. Карта одна, A100 в аренде у селектела. Откуда берётся рандом если всё засидено. Хочу понять это норма или у меня где-то течёт.
✔ Лучший ответ сформирован автоматически — 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) если ю…
Re: Почему loss скачет при обучении трансформера на одной и той же конфигурации
seed это не вся история. На gpu куча операций недетерминированы по дефолту, atomicAdd в свёртках и в некоторых reduce кернелах даёт разный порядок суммирования флоатов, а float сложение не ассоциативно. Поставь torch.use_deterministic_algorithms(True) и переменную CUBLAS_WORKSPACE_CONFIG=:4096:8, тогда часть кернелов переключится на детерминированные варианты или кинет ошибку что детерминированной версии нет. Готовься что станет медленнее процентов на 10-20.
Re: Почему loss скачет при обучении трансформера на одной и той же конфигурации
вот это ключевое что народ пропускает. даже на одной карте если порядок редукции плавает, ты получаешь разные младшие биты, а на 4 эпохе они уже разъехались в видимую разницу. детерминизм на гпу это не бесплатно и не всегда полныйtwoos60 писал(а):float сложение не ассоциативно
- smith_zhenya
- Сообщения: 32
- Зарегистрирован: 11 май 2026, 02:02
- nixos_andy
- Сообщения: 61
- Зарегистрирован: 11 май 2026, 03:44
Re: Почему loss скачет при обучении трансформера на одной и той же конфигурации
✔ Лучший ответ — сформирован автоматически
по делу. собери так. 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 скачет при обучении трансформера на одной и той же конфигурации
tf32 это прям больное место, мы пол дня искали почему ноут на 3090 и кластер на A100 дают разные числа, оказалось tf32 на ампере по дефолту в матмулах включён и мантисса 10 бит против 23. отключили, числа сошлись, скорость просела
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- Раздул CLAUDE.md до 400 строк, и стало ХУЖЕ — кто-нибудь объяснит почему
10 ответов · 1260 просмотров
-
- Священная война: Traefik vs Nginx Proxy Manager vs Caddy — кто на чём сидит и почему
18 ответов · 972 просмотров
-
-
-
- Полдня тупил почему телефон не заряжается быстро — а это кабель из коробки от наушников
10 ответов · 434 просмотров
-
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя