Можете ли вы ускорить обучение torch DL на чем-либо, кроме «cuda», например «hip» или «OpenCL»?

#deep-learning #pytorch #gpu #opencl

#глубокое обучение #pytorch #графический процессор #opencl

Вопрос:

Я заметил, что torch.device может принять ряд аргументов, а именно cpu , cuda , mkldnn , opengl , opencl , ideep , hip , msnpu .

Однако при обучении моделям глубокого обучения я только когда-либо видел cuda или cpu использовался. Очень часто код выглядит примерно так

 if torch.cuda.is_available():
    device = torch.device("cuda")
else:
    device = torch.device("cpu")
  

Я никогда не видел, чтобы кто-либо из других использовался, и мне было интересно, можно ли их использовать и как. Я считаю, что последние MacBook с графической картой AMD должны быть в состоянии использовать "hip" , но так ли это? И будет ли скорость обучения такой же, как при использовании одного графического процессора CUDA? Если нет, то какой смысл torch.device принимать так много вариантов, если они на самом деле не могут быть использованы?

Ответ №1:

Если вы хотите использовать графический процессор для глубокого обучения, есть выбор между CUDA и CUDA…

Более общий ответ: да, есть hip от AMD и некоторая реализация OpenCL:

  1. Интерфейс hip от AMD — CUDA-подобный интерфейс с портами pytorch, hipCaffe, tensorflow, но
    • HIP / rocm от AMD поддерживается только в Linux — поддержка Windows или Mac OS со стороны rocm не предусмотрена
    • Даже если вы хотите использовать Linux с AMD GPU ROCM, вам придется использовать устройства GCN desrete (например, такие карты, как rx 580, Vega 56/64 или Radeon VII), поддержка hip / rocm для устройств RDNA отсутствует (год с момента выпуска), и это не похоже на какие-либоскоро APU перестанут поддерживаться hip.
  2. Только одни популярные фреймворки, поддерживающие OpenCL, — это Caffe и Keras PlaidML. Но
    • Проблемы Caffe:
      • Caffe, похоже, больше не разрабатывается и несколько устарел по сегодняшнему стандарту
      • Производительность реализации Caffe OpenCL составляет примерно 1/2 от того, что обеспечивается cuDNN от nVidia и MIOpen от AMD, но она работает вполне нормально, и я использовал ее во многих случаях.
      • В последней версии производительность снизилась еще больше https://github.com/BVLC/caffe/issues/6585 но, по крайней мере, вы можете запустить версию, которая работает с несколькими изменениями позади
      • Кроме того, в Caffe / OpenCL все еще есть некоторые ошибки, которые я исправил вручную для OpenCL поверх AMD. https://github.com/BVLC/caffe/issues/6239
    • Keras / Plaid-ML
      • Keras сам по себе является гораздо более слабой платформой с точки зрения возможности доступа к функциональности более низкого уровня
      • Производительность PlaidML по-прежнему составляет от 1/2 до 1/3 оптимизированного cuDNN от NVidia и MIOpen-ROCM от AMD — и медленнее, чем у caffe OpenCL в тестах, которые я проводил
      • Будущее бэкэндов, не связанных с TF, для keras неясно, поскольку для версии 2.4 требуется TF…

Итог:

  1. Если у вас есть GCN дискретный графический процессор AMD и вы используете Linux, вы можете использовать ROCM Hip. Тем не менее, он не так стабилен, как CUDA
  2. Вы можете попробовать OpenCL Caffe или Keras-PlaidML — это может быть медленнее и не так оптимально, как другие решения, но с более высокими шансами заставить его работать.

Редактировать 2021-09-14: появился новый проект dlprimitives:

https://github.com/artyom-beilis/dlprimitives

это имеет лучшую производительность, чем Caffe-OpenCL и Keras — это ~ 75% производительности для обучения по сравнению с Keras / TF2, однако он находится на ранней стадии разработки и на данный момент имеет гораздо более ограниченный набор слоев, чем Caffe / Keras-PlaidML

Подключение к pytorch находится в стадии разработки с некоторыми начальными результатами: https://github.com/artyom-beilis/pytorch_dlprim

Отказ от ответственности: Я автор этого проекта