Я получаю следующую ошибку (см. Трассировку стека), когда запускаю свой код в другом графическом процессоре (Tesla K-20, установлена cuda 7.5, 6 ГБ памяти). Код работает нормально, если я использую GeForce 1080 или Titan X GPU.

< Сильный > StackTrace :

File "code/source/main.py", line 68, in <module>
    train.train_epochs(train_batches, dev_batches, args.epochs)
  File "/gpfs/home/g/e/geniiexe/BigRed2/code/source/train.py", line 34, in train_epochs
    losses = self.train(train_batches, dev_batches, (epoch + 1))
  File "/gpfs/home/g/e/geniiexe/BigRed2/code/source/train.py", line 76, in train
    self.optimizer.step()
  File "/gpfs/home/g/e/geniiexe/BigRed2/anaconda3/lib/python3.5/site-packages/torch/optim/adam.py", line 70, in step
    bias_correction1 = 1 - beta1 ** state['step']
OverflowError: (34, 'Numerical result out of range')

Итак, что может быть причиной появления такой ошибки в другом графическом процессоре (Tesla K-20), пока он отлично работает в графических процессорах GeForce или Titan X? Более того, что означает ошибка? Связано ли это с переполнением памяти, что я так не думаю.

1
Wasi Ahmad 28 Май 2017 в 21:48

2 ответа

Лучший ответ

Один из обходных путей, который предлагается в discuss.pytorch.org, заключается в следующем.

Замена следующих строк в adam.py: -

bias_correction1 = 1 - beta1 ** state['step']
bias_correction2 = 1 - beta2 ** state['step']

ОТ

bias_correction1 = 1 - beta1 ** min(state['step'], 1022)
bias_correction2 = 1 - beta2 ** min(state['step'], 1022)
0
Wasi Ahmad 2 Июн 2017 в 02:37

В случае, если кто-то пришел сюда, как я, в поисках той же ошибки, но с процессором, использующим MLPClassifier scikit-learn, вышеприведенное исправление по совпадению является достаточно хорошим советом для исправления кода sklearn.

Исправление было: в файле ... / site-packages / sklearn / neural_network / _stochastic_optimizers.py

Изменить это:

self.learning_rate = (self.learning_rate_init *
                      np.sqrt(1 - self.beta_2 ** self.t) /
                      (1 - self.beta_1 ** self.t))

К тому, что:

orig_self_t = self.t
new_self_t = min(orig_self_t, 1022)
self.learning_rate = (self.learning_rate_init *
                          np.sqrt(1 - self.beta_2 ** new_self_t) /
                          (1 - self.beta_1 ** new_self_t))
0
Brandon Barclay 13 Сен 2018 в 04:35