документация указывает:
Deterministic mode can have a performance impact, depending on your model.
Мой вопрос в том, что здесь подразумевается под производительностью. Скорость обработки или качество модели (т.е. минимальные потери)? Другими словами, при задании начальных значений вручную и обеспечении детерминированной работы модели увеличивается время обучения до тех пор, пока не будут обнаружены минимальные потери, или эти минимальные потери хуже, чем когда модель недетерминирована?
Для полноты картины я вручную делаю модель детерминированной, устанавливая все эти свойства:
def set_seed(seed):
torch.manual_seed(seed)
torch.cuda.manual_seed_all(seed)
torch.backends.cudnn.deterministic = True
torch.backends.cudnn.benchmark = False
np.random.seed(seed)
random.seed(seed)
os.environ['PYTHONHASHSEED'] = str(seed)
«производительность» в этом контексте относится к времени выполнения
При включении случайных изменений между разными тренировочными сеансами вы, очевидно, не получите точно такие же веса и, следовательно, не точно с той же потерей/точностью. Однако эти различия незначительны (см., например, это). С другой стороны, требуя точно таких же численных результатов, необходимо проводить процесс обучения точно так же. Это занимает время: Фиксация порядка параллельных вычислений не позволяет вам наслаждаться балансировкой нагрузки и т. д. Таким образом, с точки зрения точности/потери вы находитесь примерно в том же месте, но за более длительное время. @Bra
Интересно, что здесь утверждается, что случайные семена могут иметь огромные последствия. Здесь вы увидите, что та же модель с другим начальным числом имеет разницу в точности 10%. linkedin.com/posts/…
Производительность относится к времени выполнения; У CuDNN есть несколько способов реализации, когда для cudnn.deterministic
установлено значение true, вы говорите CuDNN, что вам нужны только детерминированные реализации (или то, что мы считаем ими). Короче говоря, когда вы делаете это, вы должны ожидать те же результаты на ЦП или GPU на та же система при подаче те же входы. Почему это может повлиять на производительность? CuDNN использует эвристику для выбора реализации. Итак, на самом деле от вашей модели зависит, как будет вести себя CuDNN; выбор его как детерминированного может повлиять на время выполнения, потому что это мог быть, скажем, более быстрый способ выбора их в одной и той же точке запуска.
Что касается вашего фрагмента, я делаю точный посев, он работает хорошо (с точки зрения воспроизводимости) для 100+ экспериментов DL.
У вас есть какие-либо источники для этого? Как вы можете быть уверены?