Недетерминизм в pytorch, один и тот же код дает разный результат
Рейтинг: 37.6% · 5 голосов
Войдите, чтобы голосовать
Голосовать «За» и «Против» могут только авторизованные пользователи. Войдите в свой аккаунт — или зарегистрируйтесь, это займёт минуту.
Нет аккаунта? Зарегистрироваться
- archmaster
- Сообщения: 44
- Зарегистрирован: 15 май 2026, 01:57
Недетерминизм в pytorch, один и тот же код дает разный результат
Один и тот же скрипт обучения на pytorch 2.4 даёт разный лосс от запуска к запуску, хотя seed зафиксировал везде. Разброс не критичный, финальная accuracy гуляет на 0.3-0.5%, но когда сравниваешь два эксперимента и не понимаешь, это улучшение от твоей правки или просто шум, бесит до трясучки. Как добиться полной воспроизводимости и стоит ли вообще?
✔ Лучший ответ сформирован автоматически — fpga87
@автор собери всё в одну функцию и зови в начале: import torch, numpy as np, random, os def seed_all(s=42): random.seed(s); np.random.seed(s); torch.manual_seed(s); torch.cuda.manual_seed_all(s) os.environ['CUBLAS_WORKSPACE_CONFIG']=':4096:8' torch.backends.cudnn.deterministic=True; torch.backends.cudnn.benchmark=False torch.use_deterministic_algorithms(True, warn_only=True) warn_only=True важно,…
- regexlover
- Сообщения: 18
- Зарегистрирован: 21 май 2026, 11:59
Re: Недетерминизм в pytorch, один и тот же код дает разный результат
✔ Лучший ответ — сформирован автоматически
@автор собери всё в одну функцию и зови в начале:
import torch, numpy as np, random, os
def seed_all(s=42):
random.seed(s); np.random.seed(s); torch.manual_seed(s); torch.cuda.manual_seed_all(s)
os.environ['CUBLAS_WORKSPACE_CONFIG']=':4096:8'
torch.backends.cudnn.deterministic=True; torch.backends.cudnn.benchmark=False
torch.use_deterministic_algorithms(True, warn_only=True)
warn_only=True важно, иначе на atomic-операциях типа scatter_add или некоторых пулингов оно кинет исключение и ты будешь переписывать слои. дальше DataLoader делай так: g=torch.Generator(); g.manual_seed(s); и передавай generator=g, плюс worker_init_fn который сидит каждый воркер. после этого у меня лосс совпадает побитово между запусками на одной и той же карте. но! на другой видяхе или другой версии cuda числа поедут, детерминизм он только в пределах одного железа и окружения. так что для сравнения экспериментов держи фиксированную машину или контейнер.
import torch, numpy as np, random, os
def seed_all(s=42):
random.seed(s); np.random.seed(s); torch.manual_seed(s); torch.cuda.manual_seed_all(s)
os.environ['CUBLAS_WORKSPACE_CONFIG']=':4096:8'
torch.backends.cudnn.deterministic=True; torch.backends.cudnn.benchmark=False
torch.use_deterministic_algorithms(True, warn_only=True)
warn_only=True важно, иначе на atomic-операциях типа scatter_add или некоторых пулингов оно кинет исключение и ты будешь переписывать слои. дальше DataLoader делай так: g=torch.Generator(); g.manual_seed(s); и передавай generator=g, плюс worker_init_fn который сидит каждый воркер. после этого у меня лосс совпадает побитово между запусками на одной и той же карте. но! на другой видяхе или другой версии cuda числа поедут, детерминизм он только в пределах одного железа и окружения. так что для сравнения экспериментов держи фиксированную машину или контейнер.
Re: Недетерминизм в pytorch, один и тот же код дает разный результат
честный ответ нет, не стоит гнаться за полным детерминизмом. ты потеряешь процентов 10-20 скорости на детерминированных ядрах, а проблему сравнения не решишь по-настоящему. правильно гонять каждый эксперимент на 3-5 сидах и смотреть на среднее и разброс. если твоя правка даёт +0.4% а разброс между сидами 0.5%, то твоё улучшение это шум и точка, никакой детерминизм тут не поможет, он просто заморозит тебя на одной случайной точке.archmaster писал(а):стоит ли вообще
Re: Недетерминизм в pytorch, один и тот же код дает разный результат
@archmaster, torch.manual_seed мало. нужно ещё np.random.seed, random.seed, и главное torch.use_deterministic_algorithms(True) плюс переменная окружения CUBLAS_WORKSPACE_CONFIG=:4096:8 иначе на cublas ругнётся.
Re: Недетерминизм в pytorch, один и тот же код дает разный результат
вот это народ постоянно забывает. человек добился детерминизма локально на 4090, выкатил на A100 в облаке и удивляется что цифры другие. железо часть сида, по сути.fpga87 писал(а):на другой видяхе или другой версии cuda числа поедут
Поделиться темой:
✈ Telegram
VK
- Похожие темы
-
- Поставил все сиды, а loss всё равно гуляет между запусками — кто победил недетерминизм в PyTorch?
17 ответов · 722 просмотров
-
-
-
-
- Почему обучение PyTorch не воспроизводится даже с фиксированным seed на одной и той же GPU
8 ответов · 4 просмотров
-
- Почему результаты обучения PyTorch не воспроизводятся даже с фиксированным seed
6 ответов · 3 просмотров
Кто сейчас на конференции
Сейчас этот форум просматривают: нет зарегистрированных пользователей и 1 гость