Pipcook1.0 позволяет веб-разработчикам начать путь машинного обучения с относительно низким порогом, открывая и ускоряя эру интерфейсного интеллекта. В процессе практики мы также обнаружили некоторые проблемы.Среди них, наиболее часто сообщаемая пользователями проблема заключается в том, что установка Pipcook сложна и вероятность успеха относительно низкая.Установка часто завершается сбоем из-за проблем с сетью.Даже если сеть гладкая, время установки займет не менее 3 минут, а во-вторых, Pipcook установит плагин при первом запуске обучения, что также отнимет у пользователей много времени.

В ответ на проблемы 1.0 мы сделали много рефакторинга и оптимизации в 2.0.Давайте посмотрим на скорость установки Pipcook 2.0:

Уменьшено с минут на 1,0 до менее чем 20 секунд! больше не нужно проходитьpipcook initкоманда для установки демона. Из-за разделения тяжелой среды машинного обучения размер пакета эффективно контролируется, а вероятность успешной установки близка к 100%.
Давайте еще раз взглянем на время от обучения модели до запуска сервиса для задач классификации текста:

Да, от начала обучения модели до запуска сервиса классификации текстов проходит всего 20 секунд!
Далее давайте сделаем это сами и посмотрим, как использовать Pipcook 2.0 для быстрого обучения модели и развертывания ее в сети.
Введение в конвейеры
Прежде чем мы начнем, нам нужно сначала понять Pipeline. В Pipcook мы используем Pipeline для представления рабочего процесса модели и в настоящее время реализуем 4 Pipeline, соответственно:
| Имя конвейера | тип задачи | Ссылка CDN файла конвейера |
|---|---|---|
| image classification MobileNet | Классификация изображений | image-classification-mobilenet.json |
| image classification ResNet | Классификация изображений | image-classification-resnet.json |
| text classification Bayes | Категоризация текста | text-classification-bayes.json |
| object detection YOLO | Обнаружение цели | object-detection-yolo.json |
что продемонстрировано в начале статьиtext classification BayesМодель.
Так как же выглядит этот Pipeline? Pipeline использует JSON для описания сбора образцов, потока данных, этапов обучения/прогнозирования модели и параметров, связанных с каждым этапом.
{
"specVersion": "2.0",
"type": "ImageClassification",
"datasource": "https://cdn.jsdelivr.net/gh/imgcook/pipcook-script@5ec4cdf/scripts/image-classification/build/datasource.js?url=http://ai-sample.oss-cn-hangzhou.aliyuncs.com/image_classification/datasets/imageclass-test.zip",
"dataflow": [
"https://cdn.jsdelivr.net/gh/imgcook/pipcook-script@5ec4cdf/scripts/image-classification/build/dataflow.js?size=224&size=224"
],
"model": "https://cdn.jsdelivr.net/gh/imgcook/pipcook-script@5ec4cdf/scripts/image-classification/build/model.js",
"artifacts": [],
"options": {
"framework": "tfjs@3.8",
"train": {
"epochs": 10
}
}
}
Как показано в приведенном выше JSON, конвейер состоит из версии, типа конвейера иdataSource,dataflowиmodelЭти три типа скриптов и сборка плагиновartifacts, параметр Конвейерoptionsсочинение.
В настоящее время поддерживаемые типы конвейеров включаютImageClassification(классификация изображений),TextClassification(категоризация текста),ObjectDetection(обнаружение цели), а поддержка других типов задач будет добавляться в последующих версиях Pipcook.
Каждый скрипт передает параметры через запрос URI, и параметры модельных скриптов также могут передаваться черезoptions.trainопределение.artifactsОпределен набор подключаемых модулей сборки, каждый подключаемый модуль сборки будет вызываться по очереди после обучения, чтобы выходную модель можно было преобразовать, упаковать, развернуть и т. д.optionsСодержит определения структуры и определения параметров обучения.
В этом примере Pipeline тип задачи —ImageClassification, то есть классификация изображений. Мы также определяем сценарии источников данных, сценарии обработки данных и сценарии моделей, необходимые для классификации изображений.Подготовленные нами источники данных хранятся в OSS (Love-sample.OSS-talent-Hangzhou.Alibaba Cloud Killing.com/image_class…), выборка содержит две категории, а именноavatarиblurBackground, вы также можете заменить его пользовательским набором данных для обучения собственной модели классификации. Платформа, определяющая используемые зависимости работы конвейера, — tfjs 3.8, а параметры обучения — 10 эпох.
Далее мы можем запустить его через Pipcook.
Запустить конвейер
Установить
Для установки и запуска Pipcook необходимо выполнить несколько условий:
- Операционная система: MacOS или Linux (Windows имеет базовую поддержку, но не полностью протестирована)
- Node.js v12.17.0 или выше v14.0.0 (v13 не поддерживается)
Затем выполните команду:
$ npm install @pipcook/cli -g
Дождитесь завершения установки.
тренироваться
Мы сохраняем файл Pipeline какimage-classification.json, затем выполните:
$ pipcook train ./image-classification.json -o my-pipcook
ℹ preparing framework
████████████████████████████████████████ 100% 133 MB/133 MB
ℹ preparing scripts
████████████████████████████████████████ 100% 1.12 MB/231 kB
████████████████████████████████████████ 100% 11.9 kB/3.29 kB
████████████████████████████████████████ 100% 123 kB/23.2 kB
ℹ preparing artifact plugins
ℹ initializing framework packages
ℹ running data source script
downloading dataset ...
unzip and collecting data...
ℹ running data flow script
ℹ running model script
Platform node has already been set. Overwriting the platform with [object Object].
2021-08-29 23:32:08.647853: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
loading model ...
Epoch 0/10 start
Iteration 0/20 result --- loss: 0.8201805353164673 accuracy: 0.5
Iteration 2/20 result --- loss: 0.03593956679105759 accuracy: 1
.....
Epoch 9/10 start
Iteration 0/20 result --- loss: 1.1920930376163597e-7 accuracy: 1
Iteration 2/20 result --- loss: 2.0116573296036222e-7 accuracy: 1
Iteration 4/20 result --- loss: 2.5331991082566674e-7 accuracy: 1
Iteration 6/20 result --- loss: 2.123416322774574e-7 accuracy: 1
Iteration 8/20 result --- loss: 1.937151523634384e-7 accuracy: 1
Iteration 10/20 result --- loss: 0.000002644990900080302 accuracy: 1
Iteration 12/20 result --- loss: 0.000003799833848461276 accuracy: 1
Iteration 14/20 result --- loss: 2.8312223321336205e-7 accuracy: 1
Iteration 16/20 result --- loss: 1.49011640360186e-7 accuracy: 1
Iteration 18/20 result --- loss: 5.438936341306544e-7 accuracy: 1
ℹ pipeline finished, the model has been saved at /Users/pipcook-playground/my-pipcook/model
У нас также есть этот пример в репозитории, вы также можете запустить его прямо из URL:
$ pipcook train https://cdn.jsdelivr.net/gh/alibaba/pipcook@main/example/pipelines/image-classification-mobilenet.json -o my-pipcook
параметр-oозначает, что наше учебное рабочее пространство определено в./my-pipcookсередина.
Из лога мы видим, что на этапе подготовки Pipcook скачает некоторые необходимые зависимости, а именно:
- Платформа: Платформа относится к набору сжатых пакетов, каждый из которых предоставляет зависимости, необходимые для работы конвейера для различных операционных сред, таких как операционные системы, версии узлов и т. д. Наша операционная среда — MacOS, узел 12.22, опираясь на фреймворк tfjs 3.8, Pipcook автоматически выберет соответствующий файл фреймворка в соответствии с текущей средой. Этот файл фреймворка поддерживается Pipcook, а изображение по умолчанию — внутреннее OSS Alibaba Cloud, поэтому учащимся с плохой сетью не нужно беспокоиться о загрузке. в то же время
us-westКопия также сохраняется, и иностранные студенты также могут легко ее скачать. Файл для каждого URL-адреса кадра будет загружен только один раз, а затем извлечен из кэша при повторном использовании. - Скрипты: модельные задачи Pipcook состоят из набора связанных скриптов, в этом примере скрипты хранятся вgithubВышеупомянутое ускорение CDN можно выполнить через jsdelivr, а скрипты могут импортировать пакеты в фреймворк для обработки данных или выполнения обучения модели.
- Артефакты: создавайте плагины для обработки обученной модели, например загрузки OSS и других операций после обучения. Поскольку эти плагины сами по себе относительно легкие, и каждый плагин будет кэшироваться после установки, они разработаны как пакеты npm и устанавливаются через клиент npm. В этом примере не настроен плагин сборки, поэтому он игнорируется.
После того, как подготовительные работы будут завершены, они будут запущены последовательно.datasource,dataflowиmodel, начните извлекать обучающие данные, обрабатывать образцы и передавать модель для обучения.
Мы определяем параметр обучения Pipeline равным 10 эпохам, поэтому обучение модели останавливается после 10 эпох.
На данный момент наш обучающий продукт сохранен в рабочей области../my-pipcookсерединаmodelвнутри папки.
my-pipcook
├── cache
├── data
├── framework -> /Users/pipcook-playground/.pipcook/framework/c4903fcee957e1dbead6cc61e52bb599
├── image-classification.json
├── model
└── scripts
Видно, что рабочая область содержит весь контент, необходимый для этого обучения, в котором фреймворк мягко связан с рабочей областью после завершения загрузки.frameworkв каталоге.
предсказывать
Далее мы подготавливаем изображение аватара.

пройти черезpipcook predictМодель ввода команд выполняет прогнозирование категорий, а двумя параметрами являются рабочее пространство и адрес изображения, которые необходимо прогнозировать:
$ pipcook predict ./my-pipcook -s ./avatar.jpg
ℹ preparing framework
ℹ preparing scripts
ℹ preparing artifact plugins
ℹ initializing framework packages
ℹ prepare data source
ℹ running data flow script
ℹ running model script
Platform node has already been set. Overwriting the platform with [object Object].
2021-08-30 00:08:28.070916: I tensorflow/core/platform/cpu_feature_guard.cc:142] This TensorFlow binary is optimized with oneAPI Deep Neural Network Library (oneDNN) to use the following CPU instructions in performance-critical operations: AVX2 FMA
To enable them in other operations, rebuild TensorFlow with the appropriate compiler flags.
predict result: [{"id":0,"category":"avatar","score":0.9999955892562866}]
✔ Origin result:[{"id":0,"category":"avatar","score":0.9999955892562866}]
Прогнозирование аналогично обучению, также подготавливаются необходимые зависимости, такие как Framework, Scripts и Artifacts, которые игнорируются, если зависимости уже существуют. Таким образом, даже если мы переместим модель на другие устройства, ее можно будет запустить напрямую, и Pipcook автоматически подготовит рабочую среду.
Из выходного журнала модель предсказывает, что тип этого изображенияavatar, с доверительной вероятностью 0,999.
развертывать
Команда для развертывания модели машинного обучения через Pipcook:pipcook serve <workspace-path>.
$ pipcook serve ./my-pipcook
ℹ preparing framework
ℹ preparing scripts
ℹ preparing artifact plugins
ℹ initializing framework packages
Pipcook has served at: http://localhost:9091
Порт по умолчанию — 9091, к которому также можно получить доступ через-pспецификация параметра.
Затем открываем его через браузерhttp://localhost:9091Вы можете получить доступ к интерактивному интерфейсу задачи классификации изображений для тестирования.

Выберите изображение и нажмите кнопку Predict:

Конечно, мы также можем напрямую получить доступ к интерфейсу предсказания:
$ curl http://localhost:9091/predict -F "image=@/Users/pipcook-playground/avatar.jpg" -v
* Trying ::1...
* TCP_NODELAY set
* Connected to localhost (::1) port 9091 (#0)
> POST /predict HTTP/1.1
> Host: localhost:9091
> User-Agent: curl/7.64.1
> Accept: */*
> Content-Length: 60452
> Content-Type: multipart/form-data; boundary=------------------------6917c53e808d414f
> Expect: 100-continue
>
< HTTP/1.1 100 Continue
* We are completely uploaded and fine
< HTTP/1.1 200 OK
< X-Powered-By: Express
< Content-Type: application/json; charset=utf-8
< Content-Length: 64
< ETag: W/"40-kCOJxkKqWqcndfPNbdrICzIiW+A"
< Date: Mon, 30 Aug 2021 03:59:49 GMT
< Connection: keep-alive
< Keep-Alive: timeout=5
<
* Connection #0 to host localhost left intact
{"success":true,"data":[{"id":0,"category":"avatar","score":1}]}* Closing connection 0
Pipcook предоставит различные интерактивные интерфейсы и интерфейсы в зависимости от типа конвейера.
Эпилог
Знакомство с Pipcook 2.0 завершено. Добро пожаловать заинтересованным друзьям.star,Добро пожаловатьissueИ PR, вы также можете присоединиться к групповому обсуждению DingTalk.

Адрес склада Pipcook:GitHub.com/alibaba/criticism…Адрес хранилища скриптов:GitHub.com/IMG cook/Критика…