Переход от одного GPU к нескольким GPU. Выдает ошибку TypeError: '<' не поддерживается между экземплярами 'list' и 'int' - PullRequest
0 голосов
/ 13 июня 2019

Я перешел с использования одного графического процессора на несколько графических процессоров.Код выдает ошибку

    epoch       main/loss   validation/main/loss  elapsed_time
   Exception in main training loop: '<' not supported between instances of 
    'list' and 'int'
       Traceback (most recent call last):
   File "/home/ubuntu/anaconda3/envs/chainer_p36/lib/python3.6/site- 
       packages/chainer/training/trainer.py", line 318, in run
       entry.extension(self)
   File "/home/ubuntu/anaconda3/envs/chainer_p36/lib/python3.6/site- 
        packages/chainer/training/extensions/evaluator.py", line 157, in 
        __call__
         result = self.evaluate()
    File "/home/ubuntu/anaconda3/envs/chainer_p36/lib/python3.6/site- 
         packages/chainer/training/extensions/evaluator.py", line 206, in evaluate
       in_arrays = self.converter(batch, self.device)
    File "/home/ubuntu/anaconda3/envs/chainer_p36/lib/python3.6/site- 
       packages/chainer/dataset/convert.py", line 150, in concat_examples
       return to_device(device, _concat_arrays(batch, padding))
    File "/home/ubuntu/anaconda3/envs/chainer_p36/lib/python3.6/site- 
       packages/chainer/dataset/convert.py", line 35, in to_device
          elif device < 0:

Завершит работу расширений тренера и средства обновления перед повторным вызовом исключения.

Я пытался без использования GPU, он работал нормально.Но при использовании одного gpu выдается ошибка out of memory.so, смещен экземпляр p28xlarge, и теперь он выдает вышеуказанную ошибку. Где проблема и как ее решить?

изменение сделано с использованием 8 gpu

     num_gpus = 8
     chainer.cuda.get_device_from_id(0).use()

3. # Updater

     if num_gpus > 0:

        updater = training.updater.ParallelUpdater(
        train_iter,
        optimizer,
        devices={('main' if device == 0 else str(device)): device for 
                 device in range(num_gpus)},
    )
    else:
        updater = training.updater.StandardUpdater(train_iter, optimizer, 
                    device=args.gpus)

4. и сын на .. 5.Подготовка:

       trainer.run()

выход - эпоха main / проверка потерь / main/ loss elapsed_time Исключение в основном цикле обучения: «<» не поддерживается между экземплярами «list» и «int» </p>

Я ожидал, что результат будет

          epoch       main/loss   validation/main/loss  elapsed_time
           1.         
           2. 
           3. and so on till it converge's.

1 Ответ

0 голосов
/ 17 июня 2019

Это похоже на ошибку, вызванную расширением Evaluator при передаче данных в указанный device.Как вы указываете от device до Evalutor.__init__?Обратите внимание, что это должно быть одно устройство.Может быть, этот пример может быть ссылкой https://github.com/chainer/chainer/blob/master/examples/mnist/train_mnist_data_parallel.py

...