Ответ Адама на самом деле не рассказывает всей истории.Вы можете сделать вывод в реальном времени на графических процессорах с помощью 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, это толькопредставлены вещи по одному, поэтому вам нужно будет правильно настроить их, чтобы вы могли создавать мини-пакеты, которые максимизируют использование графического процессора.