百科问答小站 logo
百科问答小站 font logo



为什么我用相同的模型,数据,超参,随机种子,在两台服务器会得到不同的结果? 第1页

  

user avatar   meta-tabchen 网友的相关建议: 
      

在科研中最怕的事之一:就是自己的模型结果无法复现,有时哪怕设置了随机种子也无法复现结果。这篇文档介绍一些常用的方法。

设置随机种子

下面是一个设置随机数的函数,对于 pytorch 下面的函数就够用了。

       def set_seed(seed):     try:         import tensorflow as tf         tf.random.set_random_seed(seed)     except Exception as e:         print("Set seed failed,details are ", e)     try:         import torch         torch.manual_seed(seed)         if torch.cuda.is_available():             torch.cuda.manual_seed_all(seed)             torch.backends.cudnn.deterministic = True             torch.backends.cudnn.benchmark = False     except Exception as e:         print("Set seed failed,details are ", e)         pass     import numpy as np     np.random.seed(seed)     import random as python_random     python_random.seed(seed)     # cuda env     import os     os.environ["CUDA_LAUNCH_BLOCKING"] = "1"     os.environ["CUBLAS_WORKSPACE_CONFIG"] = ":16:8"      

后面分别对 pytorch 和tensorflow 介绍特殊的情况。

Pytorch

官方的文档提到,对于 RNN 类模型会因为 cuDNN 和 CUDA 的原因导致结果无法复现,可以通过设置环境变量来解决。(之前的代码已经设置)

  • CUDA 10.1:设置环境变量 CUDA_LAUNCH_BLOCKING=1
  • CUDA 10.2 或者更高版本:设置环境变量 (注意两个冒号)CUBLAS_WORKSPACE_CONFIG=:16:8 或者 CUBLAS_WORKSPACE_CONFIG=:4096:2.

原文如下:

There are known non-determinism issues for RNN functions on some versions of cuDNN and CUDA. You can enforce deterministic behavior by setting the following environment variables:
On CUDA 10.1, set environment variable CUDA_LAUNCH_BLOCKING=1. This may affect performance.
On CUDA 10.2 or later, set environment variable (note the leading colon symbol)CUBLAS_WORKSPACE_CONFIG=:16:8 or CUBLAS_WORKSPACE_CONFIG=:4096:2.
See the cuDNN 8 Release Notes for more information.

Tensorflow

除了之前的 set_seed(seed) 外还需要设置 PYTHONHASHSEED 环境变量为 0 ,即PYTHONHASHSEED=0。但注意 (不要在代码里设置),应该在外部执行时加上,例如:

       CUDA_VISIBLE_DEVICES="" PYTHONHASHSEED=0 python your_program.py      

以上就是 Pytorch/Tensorflow 确保结果可复现结果的方法,有问题可以评论,看到会立即回复。

参考




  

相关话题

  CNN网络的pooling层有什么用? 
  如何评价Hinton在加拿大多伦多大学关于用“capsule”作为下一代CNN的演讲? 
  如何用最简单的语言统一描述多元函数求导(对向量求导、对矩阵求导等)? 
  神经网络中如果一个重要特征C等于特征A+特征B(算数意义上的相加),选特征的时候还有必要选特征C吗? 
  TensorFlow 中 padding 的 SAME 和 VALID 两种方式有何异同? 
  如何看待swin transformer成为ICCV2021的 best paper? 
  什么是人工智能?人工智能、机器学习、深度学习三者之间有什么关系吗? 
  有没有必要把机器学习算法自己实现一遍? 
  如何系统学习机器学习? 
  当初的生物热,和如今的全民CS全民AI,让你想到了什么? 

前一个讨论
如何看待网传上海大学研究生延毕1/3?
下一个讨论
哪些 APP 的流氓操作让你忍无可忍?





© 2024-05-20 - tinynew.org. All Rights Reserved.
© 2024-05-20 - tinynew.org. 保留所有权利