Потерял неделю из-за невоспроизводимого обучения, у всех так с недетерминизмом в torch
Рейтинг: 51% · 4 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- haskell_chan
- Сообщения: 22
- Зарегистрирован: 14 май 2026, 13:46
Потерял неделю из-за невоспроизводимого обучения, у всех так с недетерминизмом в torch
Зафиксировал все сиды, выставил seed на torch numpy random, а две прогонки одного и того же скрипта дают разный val accuracy, расхождение до 1.5 процента. На ревью модель не воспроизводится, заказчик не верит метрикам. Это вообще лечится или с GPU так и живём? torch 2.5, cuda 12.4, одна 4090.
✔ Лучший ответ сформирован автоматически — proxmoxaddict
Прошёл этот ад когда сдавал модель в банк под аудит, там воспроизводимость это требование, не каприз. Минимальный набор который реально даёт бит в бит на одной железке. Сиды питона, numpy, torch и cuda все четыре. random.seed, np.random.seed, torch.manual_seed, torch.cuda.manual_seed_all. Дальше cudnn. torch.backends.cudnn.deterministic = True и torch.backends.cudnn.benchmark = False. Benchmark в…
- seniorsamurai
- Сообщения: 44
- Зарегистрирован: 15 май 2026, 19:29
Re: Потерял неделю из-за невоспроизводимого обучения, у всех так с недетерминизмом в torch
одного сида мало. cudnn бенчмарк подбирает алгоритмы недетерминированно, плюс atomics в некоторых ядрах дают разный порядок суммирования флоатов. порядок сложения float меняется, и вот тебе уже другой бит в третьем знаке, который за эпохи раскачивается в проценты
Re: Потерял неделю из-за невоспроизводимого обучения, у всех так с недетерминизмом в torch
ставил, оно мне упало с ошибкой что для одного из слоёв нет детерминированной реализации. оказалось это был adaptive pooling, заменил на обычный и пошло. так что да, оно ещё и заставляет переписывать модель местамиdeepghost писал(а):torch.use_deterministic_algorithms(True) ставил?
- proxmoxaddict
- Сообщения: 6
- Зарегистрирован: 20 май 2026, 00:57
Re: Потерял неделю из-за невоспроизводимого обучения, у всех так с недетерминизмом в torch
✔ Лучший ответ — сформирован автоматически
Прошёл этот ад когда сдавал модель в банк под аудит, там воспроизводимость это требование, не каприз. Минимальный набор который реально даёт бит в бит на одной железке.
Сиды питона, numpy, torch и cuda все четыре. random.seed, np.random.seed, torch.manual_seed, torch.cuda.manual_seed_all.
Дальше cudnn. torch.backends.cudnn.deterministic = True и torch.backends.cudnn.benchmark = False. Benchmark в True это главный скрытый источник дрейфа, он каждый запуск выбирает быстрейший алгоритм свёртки и они дают чуть разный результат.
torch.use_deterministic_algorithms(True), и переменную окружения CUBLAS_WORKSPACE_CONFIG=:4096:8 обязательно, иначе cublas в детерминированном режиме просто кинет исключение.
DataLoader. num_workers больше нуля без worker_init_fn и без фиксированного generator даёт разный порядок и разную аугментацию. Прокинь generator с сидом в DataLoader и seed_worker в worker_init_fn.
И отдельно, воспроизводимость только в пределах одной и той же GPU, драйвера и версии torch. Перенёс на другую карту или обновил cuda, числа поплывут, это нормально и неизбежно. Цена детерминизма примерно 10-25 процентов скорости обучения, benchmark=False больно бьёт по свёрткам. Поэтому держу два режима, дев гоняю быстро без детерминизма, финальную сдаточную прогонку в полном детерминированном. После этого банк смог воспроизвести метрики у себя бит в бит.
Сиды питона, numpy, torch и cuda все четыре. random.seed, np.random.seed, torch.manual_seed, torch.cuda.manual_seed_all.
Дальше cudnn. torch.backends.cudnn.deterministic = True и torch.backends.cudnn.benchmark = False. Benchmark в True это главный скрытый источник дрейфа, он каждый запуск выбирает быстрейший алгоритм свёртки и они дают чуть разный результат.
torch.use_deterministic_algorithms(True), и переменную окружения CUBLAS_WORKSPACE_CONFIG=:4096:8 обязательно, иначе cublas в детерминированном режиме просто кинет исключение.
DataLoader. num_workers больше нуля без worker_init_fn и без фиксированного generator даёт разный порядок и разную аугментацию. Прокинь generator с сидом в DataLoader и seed_worker в worker_init_fn.
И отдельно, воспроизводимость только в пределах одной и той же GPU, драйвера и версии torch. Перенёс на другую карту или обновил cuda, числа поплывут, это нормально и неизбежно. Цена детерминизма примерно 10-25 процентов скорости обучения, benchmark=False больно бьёт по свёрткам. Поэтому держу два режима, дев гоняю быстро без детерминизма, финальную сдаточную прогонку в полном детерминированном. После этого банк смог воспроизвести метрики у себя бит в бит.
Re: Потерял неделю из-за невоспроизводимого обучения, у всех так с недетерминизмом в torch
вот про это все забывают и потом удивляются. у меня A100 и 4090 на одном коде дают разный лосс на третьем знаке, и это не баг. разная микроархитектура, разные ядра, разный порядок редукции. бит в бит между разным железом не бывает в принципеproxmoxaddict писал(а):воспроизводимость только в пределах одной и той же GPU, драйвера и версии torch
Re: Потерял неделю из-за невоспроизводимого обучения, у всех так с недетерминизмом в torch
1.5 процента это многовато для просто недетерминизма имхо. у меня после фиксации остаётся болтанка в районе 0.1-0.2. если у тебя полтора, я бы ещё на дропаут и аугментации посмотрел, может там свой рандом не засижен
Re: Потерял неделю из-за невоспроизводимого обучения, у всех так с недетерминизмом в torch
@anonymous плюсую к предыдущему, полтора процента это уже не шум флоатов а скорее незафиксированный источник рандома где-то в пайплайне. скорее всего аугментация или какой-нибудь random split датасета без сида. чистый недетерминизм cuda столько не даёт
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- Перенёс пароли в self-hosted Vaultwarden и через полгода чуть всё не потерял
7 ответов · 516 просмотров
-
-
-
- Собрал домашний NAS чтобы слезть с облаков и чуть не потерял весь семейный архив
6 ответов · 7 просмотров
-
- Натравил Claude Code на легаси Битрикс и потерял выходные. Рассказываю как не надо
7 ответов · 7 просмотров
-
- GitHub лежал почти весь день, Actions потеряли очередь джобов. Как пережили?
7 ответов · 5 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 2 гостя