Как создать высокоуровневый интерфейс машинного обучения на основе tfjs-node

внешний интерфейс

Текст/Отсутствие Луны

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

Однако на этом пути развитию интеллекта мешали несколько проблем:

  • У инженеров-алгоритмистов, знакомых с машинным обучением, нет физического смысла фронтенд-бизнеса, а также они не понимают данных, накапливаемых во фронтенде, и возможной ценности этих данных, поэтому им сложно участвовать в этом процессе.
  • Традиционные фронтенд-инженеры не понимают языки, обычно используемые в машинном обучении, такие как python, c++ и т. д., а стоимость обучения и конвертации высока.
  • Традиционные фронтенд-инженеры не понимают алгоритмов и принципов самого глубокого обучения, что затрудняет прямое использование некоторых существующих фреймворков машинного обучения (tensorflow, pytorch и т. д.) для обучения.

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

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

Зачем использовать Tensorflow.js в качестве основы алгоритма

Tensorflow.js — это фреймворк машинного обучения на основе js, выпущенный Google в 2018 году, и у Google также есть соответствующий код с открытым исходным кодом. pipcook использует tfjs-node в качестве базовой структуры для обработки данных и обучения модели, разрабатывает плагины pipcook поверх Tensorflow.js и собирает их в конвейеры. Мы используем Tensorflow.js по нескольким причинам:

  • pipcook позиционируется как разработчик сервисного интерфейса, поэтому он в основном разработан на языке JS, поэтому мы предпочитаем использовать вычислительную среду JS, чтобы избежать потери производительности и рисков ошибок, вызванных соединением других языков.
  • По сравнению с некоторыми другими средами машинного обучения JS, Tensorflow сам по себе очень популярен в C ++ и Python, Версия js также повторно использует базовые возможности C ++ и многих операторов и поддерживает большое количество сетевых слоев, функций активации, оптимизаторов и других компонентов. , и имеет хорошую производительность и поддержку графического процессора.
  • Предоставляются официальные инструменты, такие как tfjs-converter, которые могут преобразовывать такие модели, как SavedModel или Keras, в модели JS, чтобы можно было повторно использовать многие зрелые модели Python.
  • Экология JS с точки зрения математических операций еще не созрела: не существует такой библиотеки для научных вычислений, как numpy, и некоторым подобным библиотекам сложно беспрепятственно интегрироваться с другими вычислительными фреймворками. И сам tfjs обеспечивает инкапсуляцию тензора, что эквивалентно способности numpy arary, и может быть напрямую передано в модель tfjs для обучения, и производительность очень эффективна.
  • tfjs предоставляет API набора данных, который может абстрагировать данные, инкапсулировать простой и эффективный интерфейс для данных и выполнять пакетную обработку данных. Метод потока данных Dataset API также можно эффективно комбинировать с конвейерным методом pipcook.

Обработка данных с помощью Tensorflow.js

Доступ и обработка больших объемов данных — ключевая проблема машинного обучения. Для некоторых традиционных сценариев с небольшим объемом данных мы можем считывать данные в память за один раз для работы, но для глубокого обучения данные часто выходят далеко за пределы памяти, поэтому нам нужно сегментировать из источника данных по мере необходимости Возможность доступа к данным. API набора данных, предоставляемый tfjs, завершает обработку этого сценария.


В стандартном конвейере pipcook мы будем использовать API набора данных для переноса и обработки данных. Как показано на рисунке, это типичный процесс потока данных.

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

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

Обучите модель

TensorFlow.js разделен на две группы низкоуровневых и высокоуровневых API. Низкоуровневый API является производным от deeplearn.js, включая оператор (OP), необходимый для построения модели, который отвечает за обработку некоторых низкоуровневых операций с данными, таких как линейная алгебра и т. д., чтобы помочь нам справиться с математическими задачами. операционная часть машинного обучения. Высокоуровневый API-интерфейс Layers используется для обертывания некоторых часто используемых алгоритмов машинного обучения, позволяя нам загружать обученные модели, такие как модели, изученные Keras, и т. д.

pipcook разрабатывает и запускает модели через плагины.Каждый плагин загрузки модели отвечает за загрузку конкретной модели.Большинство моделей реализовано на основе tfjs. В то же время tfjs-node также предоставляет такие функции, как ускорение GPU, что может повысить скорость обучения модели. Конечно, по экологическим и другим причинам на данном этапе стоимость реализации некоторых конкретных моделей в tfjs относительно высока.Для этой части проблемы pipcook также предоставляет такие методы, как мосты python, которые могут напрямую вызывать python в js. среда выполнения для обучения, подробности этой части моста мы подробно представим в последующих главах.

развертывать

Для конвейера машинного обучения промышленного уровня после завершения модели обучения должен быть способ развернуть вашу модель, чтобы модель могла служить реальному бизнесу.В настоящее время существуют в основном следующие решения для развертывания pipcook.Эти решения все делается через плагин развертывания модели

  • Схема быстрой проверки: часто вам может понадобиться провести быстрые эксперименты с вашими данными и моделями, например, используя небольшие пакеты данных и небольшое количество эпох, для этого сценария нам не нужно развертывать модель на удаленном компьютере для проверки. . В связи с этим у pipcook есть встроенные плагины для локального развертывания.После завершения обучения на машине pipcook локально запустит сервер прогнозирования для предоставления услуг прогнозирования.
  • Образ докера сервера: pipcook предоставляет официальный образ, этот официальный образ содержит необходимую среду для обучения и прогнозирования pipcook, вы можете напрямую развернуть этот образ на хосте развертывания или использовать k8s и другие кластерные решения для управления образами докеров.
  • Подключение к облачному сервису: pipcook будет постепенно открывать службы развертывания машинного обучения различных поставщиков облачных услуг в последующей разработке.На самом деле, Gcloud уже предоставил комбинацию tfjs и automl на этом этапе, и pipcook будет постепенно поддерживать Alibaba Cloud , AWS и другие сервисы.

Сравнение с TFX (расширенный Tensorflow)

Нашей конечной целью является зрелый конвейер машинного обучения промышленного уровня, который может применять отличные модели в производственной среде. Фактически, чтобы удовлетворить этот спрос, Google официально выпустила TFX на основе многолетней практики и открыла исходный код этого проекта. Тогда у внешнего мира могут возникнуть некоторые вопросы, в чем разница между тем, что мы делаем, и TFX, на самом деле ядро ​​pipcook не в том, чтобы заменить какой-либо другой фреймворк, тем более продукты, основанные на экосистеме python, потому что миссия pipcook состоит в том, чтобы продвигать передовую интеллектуальную разработку, поэтому технологический стек и методы производства, используемые pipcook, ориентированы на переднюю часть, например

  • TFX использует метод DAG, потому что он включает в себя генерацию данных, статистический анализ данных, проверку данных, преобразование данных и другие операции, и эти операции можно свободно комбинировать.На самом деле, для многих сценариев внешнего интерфейса нам не нужен много сложных комбинированных операций.Поэтому pipcook использует конвейерный метод, который абстрагирует операции с данными в простые подключаемые модули в конвейерах, что может снизить стоимость использования интерфейсных инженеров.
  • TFX использует Apache Airfow для планирования, в то время как pipcook использует для таких операций стек технологий внешнего интерфейса.Например, мы используем адаптивные фреймворки, такие как Rxjs, для ответа и подключения к различным плагинам, что удобно для внешнего интерфейса, чтобы понимать и вносить свой вклад. код
  • В то же время разработанный нами API также основан на привычках JS, а стоимость обучения и начала работы низкая для внешнего интерфейса.

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

перспективы на будущее

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

  • Сотрудничайте с различными поставщиками облачных услуг (Alibaba Cloud, AWS, Gcloud и т. д.), чтобы открыть pipcook для каждой ссылки на развертывание машинного обучения облачных служб.
  • Экология идеальна, и установлена ​​демонстрационная площадка pipcook, чтобы снизить начальные затраты пользователя.
  • Улучшенная поддержка распределенного обучения
  • Богатые плагины, совершенные модели и поддержка большего количества конвейеров

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

Как внести свой вклад?

Если вы заинтересованы в нашем проекте и хотите внести свой вклад в развитие интеллектуального анализа, приглашаем вас посетить нашрепозиторий с открытым исходным кодом на гитхабе