DL4J работает (не обучается) нейронные сети LSTM на графических процессорах с Apache Spark? - PullRequest
0 голосов
/ 22 мая 2018

Мне нужно запустить несколько (сотни) уже обученных нейронных сетей LSTM с данными в реальном времени (на которых очень часто вводятся новые временные шаги).Эти нейронные сети LSTM реализованы с использованием deeplearining4j.Для эффективного выполнения всех этих задач мне бы хотелось, чтобы они использовали графические процессоры для выполнения своих вычислений, чтобы я мог запускать сотни из них с большим потоком данных в реальном времени.

Я знаю, что могу обучать нейронной среде.сети, использующие графические процессоры.

Мой вопрос таков: можно ли выполнить их для данных в реальном времени, используя rnnTimeStep() на графических процессорах? Хорошо?

Любые указатели очень ценятся, я потратилмного часов в поисках, но ничего не могу найти по этому поводу.Только материал, описывающий обучение на графических процессорах.

Не беспокойтесь о накладных расходах графического процессора, я это объясняю, и я знаю, что это необычное занятие.Просто нужно знать, возможно ли это и есть ли указания, как это сделать.

Спасибо!

Ответы [ 2 ]

0 голосов
/ 02 июня 2018

Ответ Адама на самом деле не рассказывает всей истории.Вы можете сделать вывод в реальном времени на графических процессорах с помощью Spark Streaming, но Spark делает это немного сложнее, чем могло бы быть.Кроме того, поскольку у вас есть сто моделей, для которых вам необходимо сделать вывод, это становится довольно сложной задачей.

Одно большое препятствие заключается в том, что, если вы не используете последние версии YARN, в действительности он не имеет представления о графических процессорах как ресурсах.Таким образом, вам придется использовать кластер, который вы можете контролировать конфигурацию, чтобы вы могли сохранить количество исполнителей на узел, сопоставленное с количеством графических процессоров.Если вам нужен этот кластер для других вещей, то вам придется использовать метки размещения.

Предполагая, что конфигурация готова к работе, следующая проблема - количество моделей сдвига.В общем, при использовании DL4J в spark вам нужно использовать RDD # mapPartitions, чтобы вы могли получать данные целого раздела в одном рабочем потоке (который должен = 1 GPU).Задача карты - загрузить модель (кэшировать ее в локальном потоке), а затем разбить раздел на мини-пакеты и передать их на выход Model #.(DL4J / ND4J будет обрабатывать сопоставление каждого потока на 1 GPU.) Карты в Spark по умолчанию являются «целым кластером», поэтому все данные будут разделены равномерно.Таким образом, каждый узел будет загружать и выгружать каждую из ста моделей в серии.Что было бы неэффективно и не совсем в режиме реального времени.

Если все 100 моделей являются независимыми, один (не очень хороший) вариант - усилить данные, создав PairRDD [ModelId, DataSet] (скопировав DataSet 100 раз) и выполнив необычный ReduceByKey в одном задании Spark.,Чтобы уменьшить случайность (или если модели не являются независимыми), вам нужно создать N потоковых заданий с ограниченным максимальным числом исполнителей, слушающих тему Кафки.Если модели больше похожи на DAG, то вы действительно начнете бороться с моделью Spark, и в этой ситуации вам нужно что-то большее, чем Apache Storm.

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

0 голосов
/ 23 мая 2018

Это не совсем то, как работает gpus .... вам не хватает тонны контекста о том, как на самом деле работают устройства.

Графические процессоры не предназначены для вывода в реальном времени из-за накладных расходов на связь с графическим процессором.Это верно, независимо от того, какую систему глубокого обучения вы используете.

Вы можете использовать cpus и делать это хорошо здесь.Вы должны иметь пакетный вариант использования, чтобы gpus даже стоил того.

...