Как ускорить глубокое обучение на установке, отличной от NVIDIA?

Поскольку у меня есть только APU AMD A10-7850, и у меня нет средств, чтобы потратить на видеокарту NVIDIA за 800–1200 долларов, я пытаюсь использовать имеющиеся у меня ресурсы, чтобы ускорить глубокое обучение с помощью tensorflow/keras. .

Изначально я использовал предварительно скомпилированную версию Tensorflow. InceptionV3 потребовалось бы около 1000-1200 секунд для вычисления 1 эпохи. Это было мучительно медленно.

Чтобы ускорить вычисления, я сначала самостоятельно скомпилировал Tensorflow с оптимизаторами (используя инструкции AVX и SSE4). Это привело к сокращению времени вычислений примерно на 40%. Те же самые вычисления, которые выполнялись выше, теперь занимают около 600 секунд. Это почти терпимо — вроде как можно смотреть, как сохнет краска.

Я ищу способы дальнейшего сокращения времени вычислений. У меня есть только встроенная видеокарта AMD, которая является частью APU. (Как) (C/c)я могу использовать этот ресурс, чтобы еще больше ускорить вычисления?

В более общем плане допустим, что есть другие люди с аналогичными денежными ограничениями и установками Intel. Как кто-либо может БЕЗ дискретных карт NVIDIA использовать свои интегрированные графические чипы или другие настройки, отличные от NVIDIA, для достижения более высокой производительности, чем только процессор? Это возможно? Почему, почему нет? Что необходимо сделать для достижения этой цели? Или это будет возможно в ближайшее время (2-6 месяцев)? Как?


person Thornhale    schedule 31.03.2017    source источник


Ответы (2)


После изучения этой темы в течение нескольких месяцев я вижу 3,5 возможных пути вперед:

1.) Tensorflow + OpenCl, как указано в комментариях выше:

Кажется, в этой области происходит какое-то движение. В Codeplay Лукаш Ивански только что опубликовал исчерпывающий ответ о том, как заставить tensorflow работать с opencl здесь (я предоставлю только ссылку, как указано выше, потому что там информация может измениться): https://www.codeplay.com/portal/03-30-17-setting-up-tensorflow-with-opencl-using-sycl

Возможность использования встроенной графики заманчива. Также стоит изучить использование этой комбинации с APU. Но я не уверен, насколько хорошо это будет работать, так как поддержка OpenCl все еще находится на ранней стадии разработки, а аппаратная поддержка очень ограничена. Кроме того, OpenCl — это не то же самое, что созданная вручную библиотека оптимизированного кода. (ОБНОВЛЕНИЕ 2017-04-24: я получил код для компиляции после некоторых проблем здесь!) К сожалению, надежды на улучшение скорости НА МОИХ НАСТРОЙКАХ (iGPU) не оправдались.

Набор данных CIFAR 10:

  1. Tensorflow (через pip ak неоптимизированный): 1700 секунд в эпоху при загрузке ЦП на 390%.
  2. Tensorflow (SSE4, AVX): 1100 секунд в эпоху при загрузке ЦП на 390%.
  3. Tensorflow (opencl + iGPU): 5800 секунд в эпоху при 150% загрузке ЦП и 100% ГП.

Ваш пробег может значительно отличаться. Итак, мне интересно, что другие люди получают, относительно говоря (неоптимизированное, оптимизированное или opencl) на ваших установках?

Что следует отметить: реализация opencl означает, что все тяжелые вычисления должны выполняться на GPU. (Обновлено 29.04.2017) Но на самом деле это пока не так, потому что некоторые функции еще не реализованы. Это приводит к ненужному копированию данных между CPU и GPU. Опять же, неизбежные изменения должны улучшить ситуацию. И, кроме того, для тех, кто заинтересован в помощи и тех, кто хочет ускорить процесс, мы можем сделать что-то, что окажет ощутимое влияние на производительность tensorflow с помощью opencl.

Но на данный момент: 1 iGPU ‹‹ 4 CPUS с SSE+AVX. Возможно, более мощные графические процессоры с большей оперативной памятью и/или реализацией opencl 2.0 могли бы иметь большее значение.

На данный момент я должен добавить, что аналогичные усилия предпринимаются по крайней мере с Caffe и/или Theano + OpenCl. Ограничивающим шагом во всех случаях является ручной перенос функциональности CUDA/cuDNN на парадигму openCl.

2.) RocM + MIOpen

RocM означает Radeon Open Compute и, похоже, представляет собой набор инициатив, которые делают возможным глубокое обучение. на устройствах, отличных от NVIDIA (в основном на устройствах Radeon). Он включает в себя 3 основных компонента:

  • HIP: инструмент, который преобразует код CUDA в код, который может использоваться графическими процессорами AMD.
  • ROCk: 64-битный драйвер ядра Linux для устройств AMD CPU+GPU.
  • HCC: компилятор C/C++, который компилирует код в код для среды с гетерогенной системной архитектурой (HSA).

Судя по всему, RocM разработан, чтобы использовать сильные стороны AMD, используя как процессор, так и технологию графического процессора. Их подход к ускорению глубокого обучения использует оба компонента. Меня, как владельца APU, эта возможность особенно интересует. Но в качестве предостережения: APU Kaveri имеют ограниченную поддержку (поддерживаются только встроенные графические процессоры). Будущие APU еще не выпущены. И, похоже, здесь предстоит еще много работы, чтобы довести этот проект до зрелого состояния. Надеемся, что в течение года этот подход станет жизнеспособным благодаря проделанной работе, учитывая, что AMD объявила, что их карты Radeon Instinct будут выпущены в этом (2017) году.

Проблема здесь для меня в том, что RocM предоставляет инструменты для создания библиотек глубокого обучения. Сами по себе они не представляют библиотеки глубокого обучения. Как специалист по данным, который не занимается разработкой инструментов, я просто хочу что-то, что работает. и я не обязательно заинтересован в создании того, что я хочу, чтобы потом учиться. В сутках не хватает часов, чтобы хорошо работать в компании, в которой я работаю.

У NVIDIA, конечно же, есть CUDA и cuDNN, которые представляют собой библиотеки созданного вручную ассемблерного кода, оптимизированного для графических процессоров NVIDIA. Все основные фреймворки глубокого обучения строятся на основе этих проприетарных библиотек. У AMD на данный момент вообще нет ничего подобного.

Я не уверен, насколько успешно AMD доберется до уровня NVIDIA в этом отношении. Но некоторый свет на намерения AMD проливается в статье, опубликованной Карлосом Пересом 03.04.2017 здесь. В недавней лекции в Стэнфорде также в общих чертах говорится о том, что процессоры Ryzen, Vega и глубокое обучение совместимы друг с другом. . По сути, в статье говорится, что MIOpen будет представлять эту созданную вручную библиотеку оптимизированных функций глубокого обучения для устройств AMD. Эта библиотека должна быть выпущена в первом полугодии 2017 года. Я не уверен, как скоро эти библиотеки будут включены в основные фреймворки глубокого обучения и каков будет объем функциональной реализации в это время.

Но, видимо, AMD уже работала с разработчиков Caffe «модифицировать» кодовую основу. По сути, код CUDA автоматически преобразуется в код C через HIP. Автоматизация берет на себя большую часть кода, оставляя лишь менее 0,5% кода, который нужно было изменить и который требовал ручного вмешательства. Сравните это с ручным переводом в код openCl, и начинаешь чувствовать, что этот подход может быть более устойчивым. Что мне не ясно, так это то, где появляется оптимизация языка ассемблера более низкого уровня.

(обновление 19 мая 2017 г.) Но в связи с неизбежным выпуском карт AMD Vega (первой будет профессиональная карта Frontier Edition, не предназначенная для потребителей), есть намеки на то, что основные платформы глубокого обучения будут поддерживаться через платформу MIOpen. A Статья Forbes, опубликованная сегодня, показывает прогресс, достигнутый MiOpen за последние пару месяцев с точки зрения производительности: он кажется значительным. (Обновление 2017-08-25) MiOpen официально выпущен. Мы больше не говорим здесь гипотетически. Теперь нам просто нужно проверить, насколько хорошо работает этот фреймворк.

3.) Неон

Neon — это платформа глубокого обучения с открытым исходным кодом от Nervana (теперь приобретенная Intel). Причина, по которой я упоминаю эту структуру, заключается в том, что она кажется довольно простой в использовании. Синтаксис такой же простой и интуитивно понятный, как у Keras. Что еще более важно, эта структура достигла скорости в 2 раза быстрее, чем Tensorflow на некоторых тестах из-за некоторых ручная оптимизация языка ассемблера для этих вычислений. Потенциально сократить время вычислений с 500 секунд/эпоху до 300 секунд/эпоху не так уж и сложно. 300 секунд = 5 минут. Таким образом, за час можно получить 15 эпох. и около 50 эпох примерно за 3,5 часа! Но в идеале я хочу делать такие расчеты менее чем за час. Чтобы достичь этих уровней, мне нужно использовать графический процессор, и на данный момент только NVIDIA предлагает полную поддержку в этом отношении: Neon также использует CUDA и cuDNN, когда доступен графический процессор (и, конечно, это должен быть графический процессор NVIDIA). ). Если у вас есть доступ к другому оборудованию Intel, это, конечно, правильный способ. В конце концов, Neon был разработан с целью добиться оптимальной работы даже на установках, отличных от NVIDIA (таких как пользовательские процессоры Nervana, а теперь и Intel FPGA или Xeon Phis).

3.5.) Интел Мовидиус

Обновление от 25 августа 2017 г.: я наткнулся на эта статья. Intel выпустила ускоритель «глубокого обучения» на основе USB 3.0. Судя по всему, он работает с Cafe и позволяет пользователю выполнять обычную тонкую настройку сетей и логических выводов на основе Cafe. Это важно, подчеркнем: если вы хотите обучить собственную сеть с нуля, формулировка здесь весьма неоднозначна. Поэтому я предполагаю, что помимо тонкой настройки сети, само обучение должно выполняться на чем-то с более параллельными вычислениями. Однако настоящий кикер заключается в следующем: когда я проверил цены, эта палка стоит всего 79 долларов. Это ничто по сравнению со стоимостью вашей средней карты NVIDIA 1070-80(ti). Если вы просто хотите решить некоторые проблемы со зрением, используя общие сетевые топологии, уже доступные для некоторых связанных задач, вы можете использовать этот накопитель, чтобы точно настроить его для собственного использования, а затем скомпилировать код и поместить его в этот накопитель, чтобы быстро делать выводы. С помощью этой палки можно охватить множество вариантов использования, и, опять же, за 79 долларов это может стоить того. Поскольку это Intel, они предлагают сделать все возможное для Intel. Их модель заключается в использовании облака (например, Nervana Cloud) для обучения. Затем используйте этот чип для вывода о прототипе или вывода, когда имеет значение энергопотребление. Правильный это подход или нет, решать читателю.

В настоящее время похоже, что глубокое обучение без NVIDIA все еще сложно реализовать. Некоторое ограниченное увеличение скорости затруднено, но потенциально возможно благодаря использованию opencl. Другие инициативы звучат многообещающе, но потребуется время, чтобы понять, какое реальное влияние они окажут.

person Thornhale    schedule 04.04.2017
comment
Не могли бы вы дать мне инструкции о том, как запустить эталонный тест, на который вы ссылаетесь, с помощью набора данных CIFAR 10, пожалуйста? - person Maxim Egorushkin; 07.03.2018
comment
Хорошо, я поигрался с AMD и ROCm. AMD не может использоваться с последней версией Tensorflow, только с версией 1.0.1 от 2017 года. Вместо этого купил карту NVidia, теперь все программное обеспечение с ускорением на GPU просто работает. - person Maxim Egorushkin; 14.03.2018
comment
Могу подтвердить ваши предположения относительно Intel Movidius. Вам нужно будет пройти обучение в другом месте, а затем импортировать обученную модель в OpenVino, чтобы сделать выводы на Movidius. Текущая версия может импортировать обученную модель из Caffe, TensorFlow, MXNet, Kaldi и ONNX. Если вы пойдете по этому пути, вам нужно будет помнить об ограничениях OpenVino при определении вашей модели. Он не поддерживает каждую топологию или операцию. - person Josh Davis; 10.07.2019

Если ваша платформа поддерживает opencl, вы можете использовать его с tensorflow. Для Linux есть экспериментальная поддержка в этом репозитории github. Некоторые предварительные инструкции находятся по адресу раздел документации этого репозитория github.

person etarion    schedule 31.03.2017
comment
Здесь также есть некоторая информация высокого уровня о статусе реализации OpenCL на случай, если это также поможет. Но связанная ветка Бенуа — это правильное место для codeplay.com/portal/ - person Rod Burns; 03.04.2017