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

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

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

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

  • Получить последний результат dynamic_rnn в TensorFlow
  • Ошибка при импорте Tensorflow в python2.7 в версии Red Hat 6.6. 'GLIBC_2.17 не найден'
  • Питон тензора: доступ к отдельным элементам в тензоре
  • Каковы сценарии, для которых применяются различные идиомы загрузки данных TensorFlow?
  • Поток больших обучающих и тестовых файлов в DNNClassifier от Tensorflow
  • Tensorflow GMM ERROR: тензорный поток: модель расходится с потерей = NaN.
  • Tensorflow Deep MNIST: ресурс исчерпан: OOM при распределении тензора с формой
  • Как обернуть Tensorflow Cython и разрешить C ++ называть его?
  • 4 Solutions collect form web for “Использование Keras & Tensorflow с графическим процессором AMD”

    Я пишу бэкэнд 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, используя CLBlast Cedric Nugteren https://github.com/cnugteren/CLBlast
      • сокращения, argmin, argmax, снова используя Eigen, согласно предыдущей информации и ссылкам
      • обучения, тренеров, градиентов. По крайней мере, StochasticGradientDescent trainer работает, а остальные совершаются, но еще не тестировались
    • он разработан на 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

    Первоначальный вопрос на этом посту: Как заставить 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's Tensorflow-opencl (developmental) и Lens Iwanski's Tensorflow-opencl (очень экспериментальный), который вы можете извлечь из github. Также обратите внимание, что если вы решите построить из любой из версий opencl, вопрос об использовании opencl будет отсутствовать, поскольку предполагается, что вы его используете. И наоборот, это означает, что если вы настроите стандартный поток тензоров, вам нужно будет выбрать «Да», когда скрипт configure попросит вас использовать 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: Лукас Ивански опубликовал всеобъемлющий учебный пост о том, как заставить 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».

    Обратите внимание на альтернативный подход, упомянутый выше, с использованием тензорного потока-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). Ваш пробег почти наверняка изменится!

    • Тензорный поток (через установку 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.

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

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

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

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

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

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

    Python - лучший язык программирования в мире.