После изучения этой темы в течение нескольких месяцев я вижу 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:
- Tensorflow (через pip ak неоптимизированный): 1700 секунд в эпоху при загрузке ЦП на 390%.
- Tensorflow (SSE4, AVX): 1100 секунд в эпоху при загрузке ЦП на 390%.
- 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