Подтвердить что ты не робот

Использование Keras & Tensorflow с графическим процессором AMD

Я начинаю изучать Keras, и я считаю, что это слой поверх Tensorflow и Theano. Тем не менее, у меня есть только доступ к графическим процессорам AMD, таким как AMD R9 280X.

Как настроить мою среду Python, чтобы я мог использовать свои графические процессоры AMD через поддержку Keras/Tensorflow для OpenCL?

Я работаю на OSX.

4b9b3361

Ответ 1

Я пишу бэкэнд OpenCL 1.2 для Tensorflow на https://github.com/hughperkins/tensorflow-cl

Эта вилка тензорного потока для OpenCL имеет следующие характеристики:

  • он предназначен для любых/всех устройств OpenCL 1.2. Он не нуждается в OpenCL 2.0, не нуждается в SPIR-V или SPIR. Не нужна общая виртуальная память. И так далее...
  • он основан на базовой библиотеке под названием 'cuda-on-cl', https://github.com/hughperkins/cuda-on-cl
    • cuda-on-cl цели, чтобы иметь возможность использовать любой код NVIDIA® CUDA ™ и скомпилировать его для устройств OpenCL 1.2. Это очень общая цель и очень общий компилятор
  • в настоящее время реализованы следующие функции:
    • для каждого элемента, используя Eigen over OpenCL, (подробнее на https://bitbucket.org/hughperkins/eigen/src/eigen-cl/unsupported/test/cuda-on-cl/?at=eigen-cl)
    • blas/matrix-multipication, используя Cedric Nugteren CLBlast https://github.com/cnugteren/CLBlast
    • сокращения, argmin, argmax, снова используя Eigen, согласно более ранней информации и ссылкам
    • обучение, тренеры, градиенты. По крайней мере, StochasticGradientDescent тренер работает, а остальные совершаются, но еще не тестировались.
  • он разработан на Ubuntu 16.04 (с использованием графических процессоров Intel HD5500 и NVIDIA) и Mac Sierra (с использованием Intel HD 530 и Radeon Pro 450).

Это не единственная версия OpenCL for Tensorflow. Существует также вилка, разработанная Codeplay https://www.codeplay.com, используя Computecpp, https://www.codeplay.com/products/computesuite/computecpp Их вилка имеет более высокие требования, чем мои собственные, насколько я знаю, с точки зрения конкретных устройств GPU, над которыми он работает. Вам нужно будет проверить Notes поддержки платформы (внизу страницы hte computecpp), чтобы определить, поддерживается ли ваше устройство. Вилка кодекса на самом деле является официальной вилкой Google, которая находится здесь: https://github.com/benoitsteiner/tensorflow-opencl

Ответ 2

Первоначальный вопрос на этом посту: Как заставить Keras и Tensorflow работать с графическим процессором AMD.

Ответ на этот вопрос следующий:

1.) Keras будет работать, если вы можете корректно работать с Tensorflow (возможно, в вашей виртуальной/кондской среде).

2.) Чтобы заставить Tensorflow работать на графическом процессоре AMD, как утверждают другие, одним из способов, которым это может работать, является компиляция Tensorflow для использования OpenCl. Для этого прочитайте ссылку ниже. Но для краткости я приведу здесь необходимые шаги:

  • Вам понадобятся проприетарные драйверы AMD. В настоящее время они доступны только на Ubuntu 14.04 (версия до того, как Ubuntu решила изменить способ отображения пользовательского интерфейса). Поддержка Ubuntu 16.04 заключается в написании этого сообщения, ограниченного несколькими графическими процессорами через AMDProDrivers. Читатели, которые хотят глубоко изучать графические процессоры AMD, должны знать об этом!

  • Компиляция Tensorflow с поддержкой OpenCl также требует, чтобы вы получили и установили следующие предварительные условия: заголовки OpenCl, ComputeCpp.

  • После выполнения необходимых условий настройте свою сборку. Обратите внимание, что существует 3 варианта компиляции Tensorflow: Std Tensorflow (стабильный), Benoits Steiner Tensorflow-opencl (developmental) и Luke Iwanski Tensorflow-opencl (очень экспериментальный), который вы можете извлечь из github. Также обратите внимание, что если вы решите построить из любой из версий opencl, вопрос об использовании opencl будет отсутствовать, поскольку предполагается, что вы его используете. И наоборот, это означает, что если вы настроите стандартный поток тензоров, вам нужно будет выбрать "Да", когда configure script попросит вас использовать opencl и "NO" для CUDA.

  • Затем выполните тесты следующим образом:

    $bazel test --config = sycl -k --test_timeout 1600 -//tensorflow/... -//tensorflow/contrib/... -//tensorflow/java/... -//tensorflow /компилятор/...

Обновление. Выполнение этого при моей настройке занимает очень много времени в моей настройке. Часть, которая занимает много времени, - это все тесты. Я не уверен, что это значит, но многие мои тесты заканчиваются на 1600 секунд. Длительность, вероятно, может быть сокращена за счет большего количества тестов. Кроме того, вы можете просто построить тензорный поток без тестов. На момент написания этой статьи запуск тестов занял 2 дня.

Или просто создайте пакет pip так:

bazel build --local_resources 2048,.5,1.0 -c opt --config=sycl //tensorflow/tools/pip_package:build_pip_package

Пожалуйста, на самом деле прочитайте сообщение в блоге на Codeplay: Lukas Iwansky опубликовал всеобъемлющий учебный пост о том, как заставить Tensorflow работать с OpenCl только 30 марта 2017 года. Так что это очень недавняя публикация. Есть также некоторые подробности, о которых я не писал здесь.

Как указано во многих поставленных выше сообщениях, небольшие фрагменты информации распространяются по всем сетям. То, что добавляет Lukas в отношении стоимости, состоит в том, что вся информация была объединена в одно место, которое должно сделать настройку Tensforflow и OpenCl немного менее сложной. Я приведу только ссылку:

https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

Здесь была размещена чуть более полная прогулка:

http://deep-beta.co.uk/setting-up-tensorflow-with-opencl-using-sycl/

Он отличается главным образом тем, что он явно говорит пользователю, что ему нужно:

  • создать символические ссылки в подпапку
  • а затем фактически установите shadoworflow с помощью команды python setup.py develop.

Обратите внимание, что альтернативный подход был упомянут выше, используя tensorflow-cl:

https://github.com/hughperkins/tensorflow-cl

Я не могу понять, какой подход лучше в это время, хотя кажется, что этот подход менее активен. Меньше вопросов публикуется, и происходит меньше разговоров для решения этих проблем. В прошлом году был большой толчок. Дополнительные толчки отступили с ноября 2016 года, хотя Хью, похоже, несколько раз обновил некоторые обновления с момента написания этого сообщения. (Обновление: если вы прочитали часть документа readme, эта версия tenorflowo теперь зависит только от поддержки сообщества, поскольку главный разработчик занят жизнью.)

UPDATE (2017-04-25): У меня есть несколько заметок, основанных на тестировании tenorflow-opencl ниже.

  • Будущий пользователь этого пакета должен отметить, что использование opencl означает, что весь тяжелый подъем с точки зрения вычислений смещается на GPU. Я упоминаю об этом, потому что лично я думал, что вычислительная рабочая нагрузка будет распределяться между моим процессором и iGPU. Это означает, что мощность вашего GPU очень важна (в частности, пропускная способность и доступный VRAM).

Ниже приведены некоторые цифры для расчета 1 эпохи с использованием набора данных CIFAR10 для MY SETUP (A10-7850 с iGPU). Ваш пробег почти наверняка изменится!

  • Tensorflow (через установку pip): ~ 1700 с/эпоха
  • Tensorflow (w/SSE + AVX): ~ 1100 с/эпоха
  • Tensorflow (w/opencl и iGPU): ~ 5800 с/эпоха

Вы можете видеть, что в этом конкретном случае производительность хуже. Я отношу это к следующим факторам:

  • iGPU имеет только 1 ГБ. Это приводит к большому количеству копий между процессором и графическим процессором. (Opencl 1.2 не имеет возможности передавать данные через указатели, вместо этого данные должны быть скопированы взад и вперед.)
  • iGPU имеет только 512 потоковых процессоров (и пропускную способность памяти 32 Гбит/с), которые в этом случае медленнее, чем 4 процессора с использованием наборов инструкций SSE4 + AVX.
  • Разработка tenorflow-opencl находится на начальных этапах, и много оптимизаций в SYCL и т.д. еще не сделано.

Если вы используете AMD GPU с большим количеством VRAM и более потоковых процессоров, вы наверняка получите намного лучшие показатели производительности. Мне было бы интересно узнать, какие цифры люди достигают, чтобы знать, что возможно.

Я буду продолжать поддерживать этот ответ, если/когда обновления будут нажаты.

3.) В настоящее время намекают на альтернативный вариант, в котором используется инициатива AMD RocM и библиотека miOpen (cuDNN). Это/будут библиотеки с открытым исходным кодом, которые обеспечивают глубокое обучение. Суть в том, что поддержка RocM в настоящее время существует только для Linux, и что miOpen еще не выпущен в дикую природу, но Raja (глава AMD GPU) сказал в AMA, что, используя вышеизложенное, должно быть возможно сделать глубокое обучение на графических процессорах AMD. Фактически, поддержка запланирована не только для Tensorflow, но также для Cafe2, Cafe, Torch7 и MxNet.

Ответ 3

Theano имеет поддержку для OpenCL, но все еще находится на ранней стадии. Сам Theano не заинтересован в OpenCL и полагается на поддержку .

Большинство операций уже реализованы, и это в основном вопрос настройки и оптимизации данных операций.

Чтобы использовать бэкэнд OpenCL, вы должны построить libgpuarray самостоятельно.

Из личного опыта я могу сказать вам, что вы получите производительность процессора, если вам повезет. Распределение памяти, по-видимому, очень наивно реализовано (поэтому вычисление будет медленным) и сработает, когда закончится память. Но я рекомендую вам попробовать и, возможно, даже оптимизировать код или помочь сообщать об ошибках.

Ответ 4

Это старый вопрос, но поскольку я провел последние несколько недель, пытаясь понять это самостоятельно:

  • Поддержка OpenCL для Theano - это поражение и промах. Они добавили backg end libgpuarray, который по-прежнему остается неисправным (т.е. процесс выполняется на графическом процессоре, но ответ неверен), например 8 % на MNIST для модели DL, которая получает точность ~ 95 +% от CPU или nVidia CUDA). Кроме того, из-за того, что ~ 50-80% повышения производительности в стеке nVidia поступает из библиотек CUDNN, OpenCL просто останется в пыли. (СМОТРИТЕ НИЖЕ!):)
  • ROCM выглядит очень круто, но документация (и даже четкое выражение о том, что ROCM есть/что она делает) трудно понять. Они делают все возможное, за 4 года. Он НЕ НЕ работает на RX550 (начиная с этой записи). Так что не тратьте свое время (это то, где прошли 1 недели:)). Сначала появляется ROCM - новое дополнение к набору драйверов (замена AMDGPU-Pro или его увеличение), но на самом деле это модуль ядра и набор библиотек, которые существенно заменяют AMDGPU-Pro. (Подумайте об этом как о эквиваленте драйвера Nvidia-381 + CUDA в некоторых библиотеках). https://rocm.github.io/dl.html (Честно говоря, я все еще не тестировал производительность или пытался заставить ее работать с более новыми драйверами Mesa. это когда-то.
  • Добавить MiOpen в ROCM, и это по существу CUDNN. У них также есть довольно четкие руководства для миграции. Но еще лучше.
  • Они создали "HIP", который является автоматическим переводчиком из CUDA/CUDNN в MiOpen.. Он работает очень хорошо, так как они выровняли API напрямую, чтобы быть переводимым. Есть понятия, которые не являются совершенными картами, но в целом это выглядит хорошо.

Теперь, наконец, через 3-4 недели, пытаясь выяснить OpenCL и т.д., я нашел этот учебник, чтобы помочь вам начать работу быстро. Это шаг за шагом, чтобы запустить hipCaffe. В отличие от nVidia,  пожалуйста, убедитесь, что вы поддерживали оборудование!!!! https://rocm.github.io/hardware.html. Думаете, вы можете заставить его работать без их поддерживаемого оборудования? Удачи. Вас предупредили. После того, как вы запустите ROCM (И ПРОВЕРЬТЕ ПРОВЕРКИ ПРОВЕРКИ), вот учебник hipCaffe - если у вас есть ROCM, вы будете проходить тест проверки MNIST в течение 10 минут - сладкий!  https://rocm.github.io/ROCmHipCaffeQuickstart.html

Ответ 5

Если у вас есть доступ к другим AMD gpu, см. здесь: https://github.com/ROCmSoftwarePlatform/hiptensorflow/tree/hip/rocm_docs

Это должно заставить вас двигаться в правильном направлении для тензорного потока на платформе ROCm, но сообщение Selly о https://rocm.github.io/hardware.html - это сделка с этот маршрут. Эта страница не является исчерпывающим списком, я сам по себе обнаружил, что Xeon E5 v2 Ivy Bridge отлично работает с ROCm, хотя они перечисляют v3 или новее, однако графические карты немного более придирчивы. gfx8 или новее с несколькими небольшими исключениями, поляризацией и, возможно, другими с течением времени.

UPDATE - Похоже, что hiptensorflow имеет опцию поддержки opencl во время настройки. Я бы сказал, исследовать ссылку, даже если у вас нет gfx8 + или polaris gpu, если реализация opencl работает. Это длительный процесс, но час или три (в зависимости от оборудования), следуя хорошо написанной инструкции, не так много, чтобы проиграть, чтобы узнать.