Последние инновации в TensorFlow Serving

машинное обучение искусственный интеллект TensorFlow глубокое обучение Нейронные сети
Последние инновации в TensorFlow Serving
Авторы: научный сотрудник Крис Олстон и инженер-программист TensorFlow Serving Ноа Фидель

так как вфевраль 2016 г.Открытый исходный код впервыеTensorFlow ServingС тех пор мы внесли несколько существенных улучшений. Давайте взглянем на первоначальную работу, проанализируем наш прогресс и поделимся с вами тем, куда мы движемся в будущем.

До запуска TensorFlow Serving пользователям TensorFlow в Google приходилось создавать свои собственные системы обслуживания с нуля. Хотя поначалу услуги могут показаться простыми, сложность одноразовых сервисных решений быстро возрастает. Обслуживающая система машинного обучения (ML) должна не только поддерживать управление версиями моделей (для обновлений моделей с возможностью отката) и несколько моделей (эксперименты с помощью A/B-тестирования), но также обеспечивать доступность параллельных моделей на аппаратных ускорителях (GPU и TPU). ) для высокой пропускной способности и низкой задержки. Поэтому мы решили создать автономный, универсальный Программный стек TensorFlow Serving.

Мы решили с самого начала открыть исходный код, и разработка началась в сентябре 2015 года. Мы создали начальную сквозную рабочую систему всего за несколько месяцев и выпустили версию с открытым исходным кодом в феврале 2016 года.

За последний год с помощью пользователей и партнеров внутри и за пределами компании Tensorflow Serving добилась значительного прогресса в производительности, лучших практиках и стандартах:
  • Готовые услуги по оптимизации и возможности настройки: теперь мы предоставляем предварительно созданный канонический двоичный файл службы, оптимизированный для современных процессоров с AVX, поэтому разработчикам не нужно самостоятельно собирать двоичные файлы из нашей библиотеки, если у них нет особых потребностей. В то же время мы также добавили платформу на основе реестра, которая позволяет использовать нашу библиотеку в пользовательских (даже не TensorFlow) сценариях обслуживания.
  • Мультимодельный сервис: при переходе от одной модели к нескольким моделям параллельного обслуживания возникают некоторые проблемы с производительностью. Мы бесперебойно обслуживаем несколько моделей за счет: (1) загрузки в изолированные пулы потоков, чтобы не вызывать всплесков задержки для других моделей, которым требуется трафик; (2) ускорения начальной загрузки всех моделей параллельно при запуске сервера; (3) использованияМногомодельное пакетное чередованиеМультиплексированные аппаратные ускорители (GPU/TPU).
  • Формат модели стандартизации: мы добавили в TensorFlow 1.0SavedModel, тем самым предоставляя сообществу единый стандартный формат модели, который может работать как при обучении, так и при обслуживании.
  • Простой в использовании API вывода: ставим общую задачу вывода (Классификация,возвращение) выпустил простой в использовании API, которые подходят для широкого спектра наших приложений. Для поддержки более продвинутых вариантов использования мы представляем низкоуровневый API на основе тензора (предсказывать) и новый API для множественного вывода, поддерживающий многозадачное моделирование.
Вся наша работа достигается благодаря тесному сотрудничеству с: (а) машинным обучением GoogleSREкоманды, которые помогают обеспечить работоспособность нашей команды и соответствие требованиям внутреннего соглашения об уровне обслуживания (SLA); (б) другие команды инфраструктуры машинного обучения Google (включая показ рекламы иTFX); (с) команды приложений, такие как Google Play; (d) мы находимся вЛаборатория RISE Калифорнийского университета в Берклипартнеров, они исследовалиClipperДополнительные исследовательские вопросы для систем обслуживания; (e) наша база пользователей с открытым исходным кодом и участники.

В настоящее время TensorFlow Serving обслуживает более 1100 собственных проектов в секунду (включая проекты Google).Прогнозы облачного машинного обучения) обрабатывает десятки миллионов выводов. Код нашего основного сервиса имеет открытый исходный код.ВерсияДоступно для всех.

В будущем наша работа далека от завершения, и мы продолжим исследовать многочисленные возможности для инноваций. Сегодня мы очень рады поделиться нашими первыми достижениями в двух экспериментальных областях:
  • Тонкая пакетная обработка: ключевой метод, который мы используем для достижения высокой пропускной способности на выделенном оборудовании (GPU и TPU), — это «пакетная обработка», при которой несколько примеров обрабатываются одновременно для повышения эффективности. Мы разрабатываем методы и лучшие практики для улучшения пакетной обработки, чтобы достичь двух целей: (а) максимизировать эффективность, ориентируясь только на часть вычислений GPU/TPU; (б) включить пакетную обработку в рекуррентных нейронных сетях Обработка для работы с последовательностью данные, такие как текст и последовательности событий. мы используемBatch/UnbatchУправляйте парами для выполнения пакетных экспериментов на произвольных подграфах.
  • Служба распределенной модели: мы изучаем сегментирование моделей как способ работы с моделями, которые слишком велики для размещения на одном серверном узле или не могут совместно использовать подмодели с эффективным использованием памяти. Недавно мы запустили в производство модель емкостью более 1 ТБ с хорошими результатами и надеемся вскоре открыть исходный код этой функции.
Еще раз спасибо всем пользователям и партнерам, которые предоставили отзывы, код и идеи. Приглашаем присоединиться к проекту, ссылкаGitHub.com/tensorflow/….