Я наблюдал странное поведение конечной точности, когда я запускаю точно такой же эксперимент (тот же код для обучения нейронной сети для классификации изображений) с одним и тем же случайным семенем на разных графических процессорах (машинах). Я использую только один GPU. Точнее, когда я провожу эксперимент на одной машине_1, точность составляет 86,37. Когда я провожу эксперимент на machine_2, точность составляет 88,0. Когда я провожу эксперимент несколько раз на одной машине, вариативности нет. Версии PyTorch и CUDA одинаковы. Не могли бы вы помочь мне выяснить причину и исправить?
Machine_1: NVIDIA-SMI 440.82 Версия драйвера: 440.82 Версия CUDA: 10.2
Machine_2: NVIDIA-SMI 440.100 Версия драйвера: 440.100 Версия CUDA: 10.2
Чтобы исправить случайное семя, я использую следующий код:
random.seed(args.seed)
os.environ['PYTHONHASHSEED'] = str(args.seed)
np.random.seed(args.seed)
torch.manual_seed(args.seed)
torch.cuda.manual_seed(args.seed)
torch.backends.cudnn.benchmark = False
torch.backends.cudnn.deterministic = True
Отвечает ли это на ваш вопрос? Обучение моделей PyTorch на разных машинах приводит к разным результатам </ а> — person Evgeny Krivosheev schedule 18.05.2021
Вот что я использую:
Убедитесь, что у вас есть единственная функция, которая устанавливает семена с одного раза. Если вы используете Jupyter notebooks, время выполнения ячейки может вызвать это. Также может быть важен порядок функций внутри. У меня никогда не было проблем с этим кодом. Вы можете часто вызывать
set_seed()
в коде.