Почему обучение PyTorch не воспроизводится даже с фиксированным seed на одной и той же GPU

Рейтинг: 54.8% · 15 голосов
Machine learning и deep learning: обучение и дообучение моделей, датасеты, PyTorch, TensorFlow, эксперименты, метрики, MLOps и аналитика данных.
Ответить
Аватара пользователя
jownby
Сообщения: 23
Зарегистрирован: 21 май 2026, 03:42

Почему обучение PyTorch не воспроизводится даже с фиксированным seed на одной и той же GPU

Сообщение jownby »

Не могу добиться воспроизводимости обучения в PyTorch: запускаю один и тот же скрипт дважды на одной 3090, seed зафиксирован везде, а loss на 100 шаге отличается в 4-5 знаке и дальше расходится всё сильнее. Ставлю torch.manual_seed, np.random.seed, random.seed, плюс CUDA seed. Модель небольшая, CNN на классификацию. Бесит что не могу сравнить два эксперимента честно, потому что разброс между запусками сопоставим с эффектом от изменения гиперпараметра. Это вообще лечится полностью или забить и усреднять по нескольким сидам.
👍2 ❤️ 🔥2 😄1 🤔
✔ Лучший ответ сформирован автоматически — maja33
@jownby, короче полный чеклист чтобы закрыть тему, я через это прошёл когда нам нужна была бит-в-бит воспроизводимость для регуляторки. Делаешь функцию seed_everything и зовёшь в самом начале: - random.seed, np.random.seed, torch.manual_seed, torch.cuda.manual_seed_all - os.environ CUBLAS_WORKSPACE_CONFIG = :4096:8 (ставить ДО импорта/инициализации куда, иначе игнорится) - torch.use_deterministic…
Перейти к ответу →
Аватара пользователя
seniorsamurai
Сообщения: 44
Зарегистрирован: 15 май 2026, 19:29

Re: Почему обучение PyTorch не воспроизводится даже с фиксированным seed на одной и той же GPU

Сообщение seniorsamurai »

@jownby, забей и усредняй по 3-5 сидам, это единственный честный путь. полный детерминизм на гпу стоит тебе 20-40 процентов скорости и всё равно ломается на новом железе
👍2 ❤️ 🔥1 😄 🤔1
Аватара пользователя
Bill2001
Сообщения: 86
Зарегистрирован: 16 май 2026, 20:24

Re: Почему обучение PyTorch не воспроизводится даже с фиксированным seed на одной и той же GPU

Сообщение Bill2001 »

@seniorsamurai, ты torch.use_deterministic_algorithms(True) поставил? без него куча cudnn кернелов выбирают алгоритм недетерминированно. плюс CUBLAS_WORKSPACE_CONFIG=:4096:8 в переменные окружения, иначе матмул на новых куда недетерминирован
👍 ❤️2 🔥2 😄 🤔
Аватара пользователя
markcack
Сообщения: 22
Зарегистрирован: 12 май 2026, 01:49

Re: Почему обучение PyTorch не воспроизводится даже с фиксированным seed на одной и той же GPU

Сообщение markcack »

jownby писал(а):seed зафиксирован везде, а loss на 100 шаге отличается в 4-5 знаке
ты dataloader с num_workers>0 используешь? если да то порядок выборок плавает, нужен worker_init_fn и generator с фиксированным seed в самом DataLoader. это чаще всего и есть причина, а не cudnn
👍1 ❤️ 🔥 😄 🤔
Аватара пользователя
docker13
Сообщения: 23
Зарегистрирован: 12 май 2026, 16:43

Re: Почему обучение PyTorch не воспроизводится даже с фиксированным seed на одной и той же GPU

Сообщение docker13 »

DataLoader(shuffle=True) без generator= это классический прострел себе в ногу да. но даже после этого atomic операции на гпу (scatter_add, index_add, всякие пулинги) недетерминированы by design, порядок сложения флоатов плавает
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
maja33
Сообщения: 38
Зарегистрирован: 12 май 2026, 10:17

Re: Почему обучение PyTorch не воспроизводится даже с фиксированным seed на одной и той же GPU

Сообщение maja33 »

✔ Лучший ответ — сформирован автоматически
@jownby, короче полный чеклист чтобы закрыть тему, я через это прошёл когда нам нужна была бит-в-бит воспроизводимость для регуляторки.

Делаешь функцию seed_everything и зовёшь в самом начале:
- random.seed, np.random.seed, torch.manual_seed, torch.cuda.manual_seed_all
- os.environ CUBLAS_WORKSPACE_CONFIG = :4096:8 (ставить ДО импорта/инициализации куда, иначе игнорится)
- torch.use_deterministic_algorithms(True)
- torch.backends.cudnn.deterministic = True, torch.backends.cudnn.benchmark = False

DataLoader: shuffle через свой generator=torch.Generator с seed, num_workers фиксируешь, worker_init_fn выставляет seed по worker id. persistent_workers тоже влияет.

После use_deterministic_algorithms(True) PyTorch начнёт КИДАТЬ ошибку на тех операциях у которых нет детерминированной реализации, типа некоторых upsample и нестабильного pooling. Это фича, заменяешь их на детерминированные аналоги. Пока все ошибки не разгребёшь, детерминизма нет.

По скорости: benchmark=False один уже отнимает прилично на свёртках, потому что cudnn не подбирает быстрый алгоритм. У нас обучение замедлилось процентов на 25.

И главное: всё это даёт воспроизводимость только на ТОЙ ЖЕ версии куда, cudnn, драйвера и модели гпу. Перенёс на A100 вместо 3090, числа поедут, и это нормально. Так что для сравнения экспериментов в исследованиях честнее всё равно гонять несколько сидов и смотреть на среднее с разбросом, а бит-в-бит включать только когда реально надо для аудита.
👍1 ❤️1 🔥 😄 🤔
Аватара пользователя
ceph7
Сообщения: 33
Зарегистрирован: 13 май 2026, 08:39

Re: Почему обучение PyTorch не воспроизводится даже с фиксированным seed на одной и той же GPU

Сообщение ceph7 »

maja33 писал(а):benchmark=False один уже отнимает прилично на свёртках
плюс на динамических размерах входа benchmark=True наоборот может замедлить (перебор алгоритмов на каждый новый размер). так что не всегда это про детерминизм, иногда его и так выключают
👍 ❤️ 🔥 😄 🤔
Аватара пользователя
jpearce
Сообщения: 47
Зарегистрирован: 11 май 2026, 23:34

Re: Почему обучение PyTorch не воспроизводится даже с фиксированным seed на одной и той же GPU

Сообщение jpearce »

5 знак на 100 шаге это вообще ни о чём, ты серьёзно из за этого экспериментировать не можешь? если у тебя гиперпараметр даёт эффект меньше чем шум по сидам, значит эффекта нет, а не воспроизводимость плохая. ты сам ответил на свой вопрос
👍1 ❤️1 🔥1 😄 🤔
Аватара пользователя
misguide
Сообщения: 2
Зарегистрирован: 20 май 2026, 00:49

Re: Почему обучение PyTorch не воспроизводится даже с фиксированным seed на одной и той же GPU

Сообщение misguide »

@maja33, @автор перейди на bf16 вместо fp16 если ещё нет, кстати, разброс между запусками станет меньше потому что bf16 стабильнее по динамике лосса. не детерминизм но дисперсию срежет
👍 ❤️ 🔥 😄 🤔
Ответить
Поделиться темой: ✈ Telegram VK

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

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

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