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

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

При внедрении моделей глубокого обучения в производство есть две основные проблемы:

  1. Нам необходимо поддерживать несколько различных фреймворков и моделей, что усложняет разработку, и здесь возникает проблема рабочего процесса. Специалисты по обработке данных разрабатывают новые модели на основе новых алгоритмов и данных, и нам необходимо постоянно обновлять производство.
  2. Если мы используем графические процессоры NVIDIA для обеспечения меняющих игру уровней производительности логического вывода, нужно помнить о нескольких вещах. Во-первых, графические процессоры являются мощными вычислительными ресурсами, и запуск одной модели на каждый графический процессор может быть неэффективным. Запуск нескольких моделей на одном графическом процессоре не приведет к их автоматическому запуску одновременно для максимального использования графического процессора.

Тогда что мы можем сделать? Давайте посмотрим, как мы можем использовать такое приложение, как NVIDIA TensorRT Inference Server, для решения этих проблем. Вы можете скачать TensorRT Inference Server в виде контейнера из реестра NVIDIA NGC или в виде открытого исходного кода из GitHub.

Сервер вывода TensorRT: упрощение развертывания

Сервер TensorRT Inference упрощает развертывание обученных нейронных сетей за счет сочетания функций:

Поддержка нескольких моделей инфраструктуры: мы можем решить первую проблему, используя репозиторий моделей TensorRT Inference Server, который является местом хранения, где модели, разработанные на основе любой платформы, такой как TensorFlow, TensorRT, ONNX, PyTorch, Caffe, Chainer, MXNet или даже пользовательский фреймворк могут быть сохранены. Сервер вывода TensorRT может развертывать модели, построенные на всех этих платформах, и когда контейнер сервера вывода запускается на сервере графического процессора или процессора, он загружает все модели из репозитория в память. Затем приложение использует API для вызова сервера вывода для выполнения вывода модели. Если у нас много моделей, которые не помещаются в памяти, мы можем разбить один репозиторий на несколько репозиториев и запустить разные экземпляры TensorRT Inference Server, каждый из которых указывает на другой репозиторий. Мы можем легко обновлять, добавлять или удалять модели, изменяя репозиторий моделей, даже когда сервер вывода и наше приложение работают.

Максимальное использование графического процессора:. Теперь, когда мы успешно запустили приложение и сервер логического вывода, мы можем решить вторую проблему. Использование графического процессора часто является ключевым показателем производительности (KPI) для менеджеров инфраструктуры. Сервер вывода TensorRT может одновременно планировать несколько моделей (одинаковых или разных) на графических процессорах; он автоматически максимизирует использование графического процессора. Таким образом, нам как разработчику не нужно предпринимать особых действий, и требования к ИТ-операциям также выполняются. Вместо развертывания одной модели на каждом сервере ИТ-операции будут запускать один и тот же контейнер TensorRT Inference Server на всех серверах. Поскольку он поддерживает несколько моделей, он может поддерживать использование графического процессора и серверы более сбалансированным, чем одна модель для каждого сценария сервера. Вот демонстрационное видео, которое объясняет балансировку нагрузки и использование сервера.

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

Когда мы разрабатываем наше приложение, хорошо понимать требования в реальном времени. Сервер вывода TensorRT имеет параметр для установки порога задержки для приложений реального времени, а также поддерживает динамическое пакетирование, которое может быть установлено на ненулевое число для реализации пакетных запросов. Мы должны тесно сотрудничать с ИТ-отделами, чтобы эти параметры были установлены правильно.

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

Сервер вывода TensorRT поддерживает вывод данных как на GPU, так и на CPU.

Давайте посмотрим, как перейти с вывода CPU на GPU.

  1. Наш текущий кластер представляет собой набор серверов, работающих только на ЦП, на всех которых запускается приложение TensorRT Inference Server.
  2. Мы вводим в кластер серверы GPU, запускаем на этих серверах ПО TensorRT Inference Server.
  3. Мы добавляем модели с ускорением на GPU в репозиторий моделей.
  4. Используя файл конфигурации, мы инструктируем сервер вывода TensorRT на этих серверах использовать графические процессоры для вывода.
  5. Мы можем либо исключить серверы, работающие только на ЦП, из кластера, либо использовать оба в гетерогенном режиме.
  6. Приложение, вызывающее сервер вывода TensorRT, не требует изменения кода.

Интеграция с инфраструктурой DevOps. Последний пункт более актуален для наших ИТ-специалистов. Соблюдает ли ваша организация практику DevOps? Для тех, кто не знаком с этим термином, это набор процессов и практик, используемых для сокращения общего цикла разработки и развертывания программного обеспечения. Организации, практикующие DevOps, обычно используют контейнеры для упаковки своих приложений для развертывания. TensorRT Inference Server - это контейнер Docker, которым ИТ-специалисты могут использовать Kubernetes для управления и масштабирования. Они также могут сделать сервер логического вывода частью конвейеров Kubeflow для сквозного рабочего процесса ИИ . Метрики использования GPU / CPU с сервера логического вывода сообщают Kubernetes, когда запускать новый экземпляр на новый сервер для масштабирования.

TensorRT Inference Server легко интегрировать в код нашего приложения, установив файл конфигурации модели и интегрировав клиентскую библиотеку.

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

Хотите узнать больше? Обязательно присоединяйтесь к нашему предстоящему вебинару по TensorRT Inference Server. Вы также можете скачать TensorRT Inference Server в виде контейнера из реестра NVIDIA NGC или в виде открытого исходного кода из GitHub.

Автор: Шанкар Чандрасекаран, NVIDIA Product Marketing