Во время ответа я немного исследовал и нашел этот вопрос интересным.Во-первых, если эффективность действительно важна, потратьте немного времени на перекодировку всего без Кереса.Вы по-прежнему можете использовать высокоуровневый API для тензорного потока (Модели) и без особых усилий извлечь параметры и назначить их новой модели.Несмотря на то, что из всех массовых реализаций в рамках оболочек неясно (разве TensorFlow не является достаточно богатой платформой?), Вы, скорее всего, столкнетесь с проблемами обратной совместимости при обновлении.Действительно не рекомендуется для производства.
Сказав это, вы можете проверить, в чем конкретно проблема, например, используете ли вы графические процессоры?может они перегружены?Можете ли вы обернуть все это, чтобы не превысить некоторую емкость и использовать систему приоритетов?Вы можете использовать простую очередь, если нет приоритетов.Вы также можете проверить, действительно ли вы прекращаете сеансы tenorflow или на той же машине работает много моделей, которые мешают другим.Есть много проблем, которые могут быть причиной этого явления, было бы здорово иметь больше деталей.
Относительно параллельных вычислений - вы не реализовали ничего, что действительно открывает поток или процесс для этих моделейтак что я подозреваю, что pyspark просто не может справиться со всем этим самостоятельно.Возможно, реализация (если честно, я не читал всю документацию pyspark) предполагает, что отправленные функции работают достаточно быстро и не распределяются должным образом. PySpark - это просто сложная реализация принципов сокращения карт .Отправленные функции играют роль функции отображения за один шаг, что может быть проблематично для вашего случая.Хотя оно передается как лямбда-выражение, вы должны более тщательно проверить, какие экземпляры работают медленно и на каких машинах они работают.
Я настоятельно рекомендую вам сделать следующее:
Перейдите на Tensorflow, разверните официальные документы и прочитайте, как действительно развернуть модель.Существует протокол для связи с развернутыми моделями, который называется RPC , а также API-интерфейс restful.Затем, используя свой pyspark, вы можете обернуть вызовы и подключиться к обслуживаемой модели.Вы можете создать пул, сколько моделей вы хотите, управлять им в pyspark, распределять вычисления по сети, и отсюда небо и cpus / gpus / tpus являются пределами (я все еще скептически отношусь к небу).
Было бы здорово получить от вас обновление о результатах :) Вы заинтересовали меня.
Надеюсь, вам удастся решить эту проблему, отличный вопрос.