|
4 weeks ago | |
---|---|---|
.. | ||
README.md | 4 weeks ago | |
assignment.md | 4 weeks ago | |
single-board-computer.md | 4 weeks ago | |
vm-iotedge.md | 4 weeks ago | |
wio-terminal.md | 4 weeks ago |
README.md
Запустите детектор фруктов на периферийных устройствах
Скетчноут от Nitya Narasimhan. Нажмите на изображение, чтобы увидеть его в большем размере.
Это видео дает обзор работы классификаторов изображений на устройствах Интернета вещей (IoT), тема, которая рассматривается в этом уроке.
Викторина перед лекцией
Введение
В прошлом уроке вы использовали свой классификатор изображений для определения спелости фруктов, отправляя изображение, сделанное камерой вашего IoT-устройства, через интернет в облачный сервис. Такие запросы занимают время, стоят денег, а в зависимости от типа данных изображения могут иметь последствия для конфиденциальности.
В этом уроке вы узнаете, как запускать модели машинного обучения (ML) на периферийных устройствах — на IoT-устройствах, работающих в вашей собственной сети, а не в облаке. Вы узнаете о преимуществах и недостатках периферийных вычислений по сравнению с облачными вычислениями, как развернуть вашу AI-модель на периферии и как получить к ней доступ с вашего IoT-устройства.
В этом уроке мы рассмотрим:
- Периферийные вычисления
- Azure IoT Edge
- Регистрация периферийного устройства IoT Edge
- Настройка периферийного устройства IoT Edge
- Экспорт вашей модели
- Подготовка контейнера для развертывания
- Развертывание контейнера
- Использование вашего устройства IoT Edge
Периферийные вычисления
Периферийные вычисления предполагают наличие компьютеров, которые обрабатывают данные IoT как можно ближе к месту их генерации. Вместо обработки данных в облаке она переносится на периферию облака — вашу внутреннюю сеть.
В предыдущих уроках вы использовали устройства для сбора данных и отправки их в облако для анализа, где выполнялись серверные функции или AI-модели.
Периферийные вычисления предполагают перенос некоторых облачных сервисов из облака на компьютеры, работающие в той же сети, что и IoT-устройства, с обращением к облаку только при необходимости. Например, вы можете запускать AI-модели на периферийных устройствах для анализа спелости фруктов и отправлять в облако только аналитические данные, такие как количество спелых и неспелых фруктов.
✅ Подумайте о приложениях IoT, которые вы уже создали. Какие их части можно перенести на периферию?
Преимущества
Преимущества периферийных вычислений:
-
Скорость — периферийные вычисления идеально подходят для обработки данных, чувствительных ко времени, так как действия выполняются в той же сети, что и устройство, вместо вызовов через интернет. Это обеспечивает более высокую скорость, так как внутренние сети могут работать значительно быстрее, чем интернет-соединения, а данные проходят гораздо меньшие расстояния.
💁 Несмотря на использование оптических кабелей для интернет-соединений, позволяющих данным перемещаться со скоростью света, передача данных по всему миру к облачным провайдерам может занимать время. Например, если вы отправляете данные из Европы в облачные сервисы в США, это занимает минимум 28 мс для пересечения Атлантики через оптический кабель, не учитывая время на доставку данных к кабелю, преобразование электрических сигналов в световые и обратно, а также передачу данных от кабеля к облачному провайдеру.
Периферийные вычисления также требуют меньшего объема сетевого трафика, снижая риск замедления передачи данных из-за перегрузки ограниченной пропускной способности интернет-соединения.
-
Удаленная доступность — периферийные вычисления работают при ограниченном или отсутствии подключения, либо если подключение слишком дорого для постоянного использования. Например, в гуманитарных зонах бедствий, где инфраструктура ограничена, или в развивающихся странах.
-
Снижение затрат — сбор, хранение, анализ данных и выполнение действий на периферийных устройствах снижает использование облачных сервисов, что может уменьшить общую стоимость вашего IoT-приложения. В последнее время наблюдается рост устройств, предназначенных для периферийных вычислений, таких как платы ускорения AI, например Jetson Nano от NVIDIA, которые могут выполнять AI-задачи с использованием аппаратного обеспечения на базе GPU на устройствах стоимостью менее 100 долларов США.
-
Конфиденциальность и безопасность — при использовании периферийных вычислений данные остаются в вашей сети и не загружаются в облако. Это часто предпочтительно для чувствительной и персонально идентифицируемой информации, особенно потому, что данные не нужно хранить после анализа, что значительно снижает риск утечек данных. Примеры включают медицинские данные и записи с камер видеонаблюдения.
-
Работа с небезопасными устройствами — если у вас есть устройства с известными уязвимостями, которые вы не хотите подключать напрямую к вашей сети или интернету, вы можете подключить их к отдельной сети через шлюзовое периферийное устройство IoT Edge. Это периферийное устройство может также иметь подключение к вашей основной сети или интернету и управлять потоками данных туда и обратно.
-
Поддержка несовместимых устройств — если у вас есть устройства, которые не могут подключаться к IoT Hub, например устройства, которые могут подключаться только через HTTP или имеют только Bluetooth, вы можете использовать периферийное устройство IoT Edge в качестве шлюза, пересылающего сообщения в IoT Hub.
✅ Проведите исследование: Какие еще преимущества могут быть у периферийных вычислений?
Недостатки
Недостатки периферийных вычислений, где облако может быть предпочтительным вариантом:
-
Масштабируемость и гибкость — облачные вычисления могут адаптироваться к сетевым и данным потребностям в реальном времени, добавляя или уменьшая серверы и другие ресурсы. Для добавления периферийных компьютеров требуется ручное добавление новых устройств.
-
Надежность и устойчивость — облачные вычисления предоставляют множество серверов, часто в разных местах, для резервирования и восстановления после сбоев. Для обеспечения такого же уровня резервирования на периферии требуются большие инвестиции и значительные усилия по настройке.
-
Обслуживание — облачные провайдеры предоставляют системное обслуживание и обновления.
✅ Проведите исследование: Какие еще недостатки могут быть у периферийных вычислений?
Недостатки в основном противоположны преимуществам использования облака — вам нужно самостоятельно создавать и управлять этими устройствами, вместо того чтобы полагаться на экспертизу и масштаб облачных провайдеров.
Некоторые риски смягчаются самой природой периферийных вычислений. Например, если у вас есть периферийное устройство, работающее на фабрике, собирающее данные с оборудования, вам не нужно думать о некоторых сценариях восстановления после сбоев. Если на фабрике отключится электричество, вам не нужен резервный периферийный компьютер, так как машины, генерирующие данные, которые обрабатывает периферийное устройство, также останутся без питания.
Для систем IoT часто требуется сочетание облачных и периферийных вычислений, использование каждого сервиса в зависимости от потребностей системы, ее клиентов и обслуживающего персонала.
Azure IoT Edge
Azure IoT Edge — это сервис, который помогает перенести рабочие нагрузки из облака на периферию. Вы настраиваете устройство как периферийное, и из облака можете развернуть код на этом устройстве. Это позволяет сочетать возможности облака и периферии.
🎓 Рабочие нагрузки — это термин, обозначающий любой сервис, выполняющий какую-либо работу, например AI-модели, приложения или серверные функции.
Например, вы можете обучить классификатор изображений в облаке, а затем развернуть его на периферийном устройстве из облака. Ваше IoT-устройство затем отправляет изображения на периферийное устройство для классификации, вместо того чтобы отправлять их через интернет. Если вам нужно развернуть новую версию модели, вы можете обучить ее в облаке и использовать IoT Edge для обновления модели на периферийном устройстве.
🎓 Программное обеспечение, развернутое на IoT Edge, называется модулями. По умолчанию IoT Edge запускает модули, которые взаимодействуют с IoT Hub, такие как модули
edgeAgent
иedgeHub
. Когда вы развертываете классификатор изображений, он развертывается как дополнительный модуль.
IoT Edge встроен в IoT Hub, поэтому вы можете управлять периферийными устройствами с помощью того же сервиса, который используется для управления IoT-устройствами, с тем же уровнем безопасности.
IoT Edge запускает код из контейнеров — автономных приложений, которые работают изолированно от остальных приложений на вашем компьютере. Когда вы запускаете контейнер, он действует как отдельный компьютер внутри вашего компьютера, со своим собственным программным обеспечением, сервисами и приложениями. Обычно контейнеры не имеют доступа к вашему компьютеру, если вы специально не предоставите доступ, например к папке. Контейнер затем предоставляет сервисы через открытый порт, к которому можно подключиться или сделать доступным для вашей сети.
Например, вы можете иметь контейнер с веб-сайтом, работающим на порту 80, стандартном порту HTTP, и затем сделать его доступным на вашем компьютере также на порту 80.
✅ Проведите исследование: Ознакомьтесь с контейнерами и сервисами, такими как Docker или Moby.
Вы можете использовать Custom Vision для загрузки классификаторов изображений и их развертывания в виде контейнеров, либо напрямую на устройство, либо через IoT Edge. После запуска в контейнере они могут быть доступны через тот же REST API, что и облачная версия, но с конечной точкой, указывающей на периферийное устройство, на котором работает контейнер.
Регистрация периферийного устройства IoT Edge
Чтобы использовать периферийное устройство IoT Edge, его нужно зарегистрировать в IoT Hub.
Задача — регистрация периферийного устройства IoT Edge
-
Создайте IoT Hub в группе ресурсов
fruit-quality-detector
. Дайте ему уникальное имя, основанное наfruit-quality-detector
. -
Зарегистрируйте периферийное устройство IoT Edge с именем
fruit-quality-detector-edge
в вашем IoT Hub. Команда для этого похожа на команду регистрации обычного устройства, но с использованием флага--edge-enabled
.az iot hub device-identity create --edge-enabled \ --device-id fruit-quality-detector-edge \ --hub-name <hub_name>
Замените
<hub_name>
на имя вашего IoT Hub. -
Получите строку подключения для вашего устройства, используя следующую команду:
az iot hub device-identity connection-string show --device-id fruit-quality-detector-edge \ --output table \ --hub-name <hub_name>
Замените
<hub_name>
на имя вашего IoT Hub.Скопируйте строку подключения, которая будет показана в выводе.
Настройка периферийного устройства IoT Edge
После создания регистрации периферийного устройства в вашем IoT Hub вы можете настроить периферийное устройство.
Задача — Установка и запуск IoT Edge Runtime
IoT Edge Runtime поддерживает только контейнеры Linux. Он может быть запущен на Linux или на Windows с использованием виртуальных машин Linux.
-
Если вы используете Raspberry Pi в качестве вашего IoT-устройства, то оно работает на поддерживаемой версии Linux и может размещать IoT Edge Runtime. Следуйте руководству по установке Azure IoT Edge для Linux на Microsoft Docs, чтобы установить IoT Edge и настроить строку подключения.
💁 Помните, Raspberry Pi OS — это вариант Debian Linux.
-
Если вы не используете Raspberry Pi, но у вас есть компьютер с Linux, вы можете запустить IoT Edge Runtime. Следуйте руководству по установке Azure IoT Edge для Linux на Microsoft Docs, чтобы установить IoT Edge и настроить строку подключения.
-
Если вы используете Windows, вы можете установить IoT Edge Runtime в виртуальной машине Linux, следуя разделу установки и запуска IoT Edge Runtime в быстром старте по развертыванию первого модуля IoT Edge на устройстве Windows на Microsoft Docs. Вы можете остановиться, когда дойдете до раздела Развертывание модуля.
-
Если вы используете macOS, вы можете создать виртуальную машину (VM) в облаке для использования в качестве вашего периферийного устройства IoT Edge. Это компьютеры, которые вы можете создать в облаке и получить к ним доступ через интернет. Вы можете создать Linux VM с установленным IoT Edge. Следуйте руководству по созданию виртуальной машины с IoT Edge для получения инструкций.
Экспорт вашей модели
Чтобы запустить классификатор на периферии, его нужно экспортировать из Custom Vision. Custom Vision может генерировать два типа моделей — стандартные модели и компактные модели. Компактные модели используют различные техники для уменьшения размера модели, делая ее достаточно маленькой для загрузки и развертывания на IoT-устройствах.
Когда вы создавали классификатор изображений, вы использовали домен Food, версию модели, оптимизированную для обучения на изображениях еды. В Custom Vision вы можете изменить домен вашего проекта, используя ваши данные для обучения новой модели с новым доменом. Все домены, поддерживаемые Custom Vision, доступны как в стандартной, так и в компактной версии.
Задача — обучение вашей модели с использованием домена Food (compact)
-
Откройте портал Custom Vision на CustomVision.ai и войдите в систему, если он еще не открыт. Затем откройте ваш проект
fruit-quality-detector
. -
Нажмите кнопку Settings (значок ⚙).
-
В списке Domains выберите Food (compact).
-
В разделе Export Capabilities убедитесь, что выбрано Basic platforms (Tensorflow, CoreML, ONNX, ...).
-
Внизу страницы настроек нажмите Save Changes.
-
Перетренируйте модель, нажав кнопку Train и выбрав Quick training.
Задача - экспорт модели
После тренировки модель необходимо экспортировать как контейнер.
-
Перейдите на вкладку Performance и найдите последнюю итерацию, обученную с использованием компактного домена.
-
Нажмите кнопку Export в верхней части страницы.
-
Выберите DockerFile, затем выберите версию, соответствующую вашему устройству edge:
- Если вы используете IoT Edge на компьютере с Linux, Windows или виртуальной машине, выберите версию Linux.
- Если вы используете IoT Edge на Raspberry Pi, выберите версию ARM (Raspberry Pi 3).
🎓 Docker — один из самых популярных инструментов для управления контейнерами, а DockerFile — это набор инструкций по настройке контейнера.
-
Нажмите Export, чтобы Custom Vision создал соответствующие файлы, затем Download, чтобы скачать их в виде zip-архива.
-
Сохраните файлы на своем компьютере и распакуйте папку.
Подготовка контейнера к развертыванию
После загрузки модели ее необходимо собрать в контейнер, а затем отправить в реестр контейнеров — онлайн-хранилище для контейнеров. IoT Edge затем может загрузить контейнер из реестра и отправить его на ваше устройство.
Реестр контейнеров, который вы будете использовать в этом уроке, — это Azure Container Registry. Это платная услуга, поэтому, чтобы сэкономить деньги, убедитесь, что вы очистили проект после завершения работы.
💁 Вы можете ознакомиться с ценами на использование Azure Container Registry на странице цен Azure Container Registry.
Задача - установка Docker
Чтобы собрать и развернуть классификатор, возможно, потребуется установить Docker.
Это нужно сделать только в том случае, если вы планируете собирать контейнер на устройстве, отличном от того, на котором установлен IoT Edge — при установке IoT Edge Docker устанавливается автоматически.
- Если вы собираете контейнер Docker на устройстве, отличном от вашего устройства IoT Edge, следуйте инструкциям по установке Docker на странице установки Docker, чтобы установить Docker Desktop или Docker engine. Убедитесь, что он работает после установки.
Задача - создание ресурса реестра контейнеров
-
Выполните следующую команду в терминале или командной строке, чтобы создать ресурс Azure Container Registry:
az acr create --resource-group fruit-quality-detector \ --sku Basic \ --name <Container registry name>
Замените
<Container registry name>
уникальным именем для вашего реестра контейнеров, используя только буквы и цифры. Основывайте имя наfruitqualitydetector
. Это имя станет частью URL-адреса для доступа к реестру контейнеров, поэтому оно должно быть уникальным глобально. -
Войдите в Azure Container Registry с помощью следующей команды:
az acr login --name <Container registry name>
Замените
<Container registry name>
именем, которое вы использовали для вашего реестра контейнеров. -
Включите режим администратора для реестра контейнеров, чтобы можно было сгенерировать пароль, используя следующую команду:
az acr update --admin-enabled true \ --name <Container registry name>
Замените
<Container registry name>
именем, которое вы использовали для вашего реестра контейнеров. -
Сгенерируйте пароли для вашего реестра контейнеров с помощью следующей команды:
az acr credential renew --password-name password \ --output table \ --name <Container registry name>
Замените
<Container registry name>
именем, которое вы использовали для вашего реестра контейнеров.Скопируйте значение
PASSWORD
, так как оно понадобится вам позже.
Задача - сборка контейнера
То, что вы загрузили из Custom Vision, — это DockerFile, содержащий инструкции по сборке контейнера, а также код приложения, который будет выполняться внутри контейнера для размещения вашей модели Custom Vision и REST API для вызова этой модели. Вы можете использовать Docker для сборки контейнера с тегом из DockerFile, а затем отправить его в реестр контейнеров.
🎓 Контейнеры получают тег, который определяет их имя и версию. Когда вам нужно обновить контейнер, вы можете собрать его с тем же тегом, но с новой версией.
-
Откройте терминал или командную строку и перейдите в распакованную папку с моделью, которую вы загрузили из Custom Vision.
-
Выполните следующую команду для сборки и добавления тега к изображению:
docker build --platform <platform> -t <Container registry name>.azurecr.io/classifier:v1 .
Замените
<platform>
платформой, на которой будет работать этот контейнер. Если вы используете IoT Edge на Raspberry Pi, установите значениеlinux/armhf
, в противном случае установите значениеlinux/amd64
.💁 Если вы выполняете эту команду на устройстве, на котором работает IoT Edge, например, на Raspberry Pi, вы можете опустить часть
--platform <platform>
, так как она по умолчанию соответствует текущей платформе.Замените
<Container registry name>
именем, которое вы использовали для вашего реестра контейнеров.💁 Если вы используете Linux или Raspberry Pi OS, возможно, вам потребуется использовать
sudo
для выполнения этой команды.Docker соберет изображение, настроив все необходимое программное обеспечение. Затем изображение будет помечено как
classifier:v1
.➜ d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux docker build --platform linux/amd64 -t fruitqualitydetectorjimb.azurecr.io/classifier:v1 . [+] Building 102.4s (11/11) FINISHED => [internal] load build definition from Dockerfile => => transferring dockerfile: 131B => [internal] load .dockerignore => => transferring context: 2B => [internal] load metadata for docker.io/library/python:3.7-slim => [internal] load build context => => transferring context: 905B => [1/6] FROM docker.io/library/python:3.7-slim@sha256:b21b91c9618e951a8cbca5b696424fa5e820800a88b7e7afd66bba0441a764d6 => => resolve docker.io/library/python:3.7-slim@sha256:b21b91c9618e951a8cbca5b696424fa5e820800a88b7e7afd66bba0441a764d6 => => sha256:b4d181a07f8025e00e0cb28f1cc14613da2ce26450b80c54aea537fa93cf3bda 27.15MB / 27.15MB => => sha256:de8ecf497b753094723ccf9cea8a46076e7cb845f333df99a6f4f397c93c6ea9 2.77MB / 2.77MB => => sha256:707b80804672b7c5d8f21e37c8396f319151e1298d976186b4f3b76ead9f10c8 10.06MB / 10.06MB => => sha256:b21b91c9618e951a8cbca5b696424fa5e820800a88b7e7afd66bba0441a764d6 1.86kB / 1.86kB => => sha256:44073386687709c437586676b572ff45128ff1f1570153c2f727140d4a9accad 1.37kB / 1.37kB => => sha256:3d94f0f2ca798607808b771a7766f47ae62a26f820e871dd488baeccc69838d1 8.31kB / 8.31kB => => sha256:283715715396fd56d0e90355125fd4ec57b4f0773f306fcd5fa353b998beeb41 233B / 233B => => sha256:8353afd48f6b84c3603ea49d204bdcf2a1daada15f5d6cad9cc916e186610a9f 2.64MB / 2.64MB => => extracting sha256:b4d181a07f8025e00e0cb28f1cc14613da2ce26450b80c54aea537fa93cf3bda => => extracting sha256:de8ecf497b753094723ccf9cea8a46076e7cb845f333df99a6f4f397c93c6ea9 => => extracting sha256:707b80804672b7c5d8f21e37c8396f319151e1298d976186b4f3b76ead9f10c8 => => extracting sha256:283715715396fd56d0e90355125fd4ec57b4f0773f306fcd5fa353b998beeb41 => => extracting sha256:8353afd48f6b84c3603ea49d204bdcf2a1daada15f5d6cad9cc916e186610a9f => [2/6] RUN pip install -U pip => [3/6] RUN pip install --no-cache-dir numpy~=1.17.5 tensorflow~=2.0.2 flask~=1.1.2 pillow~=7.2.0 => [4/6] RUN pip install --no-cache-dir mscviplib==2.200731.16 => [5/6] COPY app /app => [6/6] WORKDIR /app => exporting to image => => exporting layers => => writing image sha256:1846b6f134431f78507ba7c079358ed66d944c0e185ab53428276bd822400386 => => naming to fruitqualitydetectorjimb.azurecr.io/classifier:v1
Задача - отправка контейнера в реестр контейнеров
-
Используйте следующую команду, чтобы отправить контейнер в реестр контейнеров:
docker push <Container registry name>.azurecr.io/classifier:v1
Замените
<Container registry name>
именем, которое вы использовали для вашего реестра контейнеров.💁 Если вы используете Linux, возможно, вам потребуется использовать
sudo
для выполнения этой команды.Контейнер будет отправлен в реестр контейнеров.
➜ d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux docker push fruitqualitydetectorjimb.azurecr.io/classifier:v1 The push refers to repository [fruitqualitydetectorjimb.azurecr.io/classifier] 5f70bf18a086: Pushed 8a1ba9294a22: Pushed 56cf27184a76: Pushed b32154f3f5dd: Pushed 36103e9a3104: Pushed e2abb3cacca0: Pushed 4213fd357bbe: Pushed 7ea163ba4dce: Pushed 537313a13d90: Pushed 764055ebc9a7: Pushed v1: digest: sha256:ea7894652e610de83a5a9e429618e763b8904284253f4fa0c9f65f0df3a5ded8 size: 2423
-
Чтобы проверить отправку, вы можете перечислить контейнеры в вашем реестре с помощью следующей команды:
az acr repository list --output table \ --name <Container registry name>
Замените
<Container registry name>
именем, которое вы использовали для вашего реестра контейнеров.➜ d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux az acr repository list --name fruitqualitydetectorjimb --output table Result ---------- classifier
Вы увидите ваш классификатор в списке.
Развертывание контейнера
Теперь ваш контейнер можно развернуть на устройстве IoT Edge. Для развертывания необходимо определить манифест развертывания — JSON-документ, который перечисляет модули, которые будут развернуты на edge-устройстве.
Задача - создание манифеста развертывания
-
Создайте новый файл с именем
deployment.json
где-нибудь на вашем компьютере. -
Добавьте в этот файл следующее:
{ "content": { "modulesContent": { "$edgeAgent": { "properties.desired": { "schemaVersion": "1.1", "runtime": { "type": "docker", "settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "ClassifierRegistry": { "username": "<Container registry name>", "password": "<Container registry password>", "address": "<Container registry name>.azurecr.io" } } } }, "systemModules": { "edgeAgent": { "type": "docker", "settings": { "image": "mcr.microsoft.com/azureiotedge-agent:1.1", "createOptions": "{}" } }, "edgeHub": { "type": "docker", "status": "running", "restartPolicy": "always", "settings": { "image": "mcr.microsoft.com/azureiotedge-hub:1.1", "createOptions": "{\"HostConfig\":{\"PortBindings\":{\"5671/tcp\":[{\"HostPort\":\"5671\"}],\"8883/tcp\":[{\"HostPort\":\"8883\"}],\"443/tcp\":[{\"HostPort\":\"443\"}]}}}" } } }, "modules": { "ImageClassifier": { "version": "1.0", "type": "docker", "status": "running", "restartPolicy": "always", "settings": { "image": "<Container registry name>.azurecr.io/classifier:v1", "createOptions": "{\"ExposedPorts\": {\"80/tcp\": {}},\"HostConfig\": {\"PortBindings\": {\"80/tcp\": [{\"HostPort\": \"80\"}]}}}" } } } } }, "$edgeHub": { "properties.desired": { "schemaVersion": "1.1", "routes": { "upstream": "FROM /messages/* INTO $upstream" }, "storeAndForwardConfiguration": { "timeToLiveSecs": 7200 } } } } } }
💁 Вы можете найти этот файл в папке code-deployment/deployment.
Замените три экземпляра
<Container registry name>
именем, которое вы использовали для вашего реестра контейнеров. Один находится в разделе модуляImageClassifier
, два других — в разделеregistryCredentials
.Замените
<Container registry password>
в разделеregistryCredentials
паролем вашего реестра контейнеров. -
Из папки, содержащей ваш манифест развертывания, выполните следующую команду:
az iot edge set-modules --device-id fruit-quality-detector-edge \ --content deployment.json \ --hub-name <hub_name>
Замените
<hub_name>
именем вашего IoT Hub.Модуль классификатора изображений будет развернут на вашем edge-устройстве.
Задача - проверка работы классификатора
-
Подключитесь к устройству IoT Edge:
-
Если вы используете Raspberry Pi для работы IoT Edge, подключитесь через ssh либо из вашего терминала, либо через удаленную сессию SSH в VS Code.
-
Если вы используете IoT Edge в контейнере Linux на Windows, следуйте шагам в руководстве по проверке успешной конфигурации, чтобы подключиться к устройству IoT Edge.
-
Если вы используете IoT Edge на виртуальной машине, вы можете подключиться к машине через SSH, используя
adminUsername
иpassword
, которые вы установили при создании виртуальной машины, а также IP-адрес или DNS-имя:ssh <adminUsername>@<IP address>
Или:
ssh <adminUsername>@<DNS Name>
Введите ваш пароль, когда будет предложено.
-
-
После подключения выполните следующую команду, чтобы получить список модулей IoT Edge:
iotedge list
💁 Возможно, вам потребуется выполнить эту команду с
sudo
.Вы увидите работающие модули:
jim@fruit-quality-detector-jimb:~$ iotedge list NAME STATUS DESCRIPTION CONFIG ImageClassifier running Up 42 minutes fruitqualitydetectorjimb.azurecr.io/classifier:v1 edgeAgent running Up 42 minutes mcr.microsoft.com/azureiotedge-agent:1.1 edgeHub running Up 42 minutes mcr.microsoft.com/azureiotedge-hub:1.1
-
Проверьте журналы модуля классификатора изображений с помощью следующей команды:
iotedge logs ImageClassifier
💁 Возможно, вам потребуется выполнить эту команду с
sudo
.jim@fruit-quality-detector-jimb:~$ iotedge logs ImageClassifier 2021-07-05 20:30:15.387144: I tensorflow/core/platform/cpu_feature_guard.cc:142] Your CPU supports instructions that this TensorFlow binary was not compiled to use: AVX2 FMA 2021-07-05 20:30:15.392185: I tensorflow/core/platform/profile_utils/cpu_utils.cc:94] CPU Frequency: 2394450000 Hz 2021-07-05 20:30:15.392712: I tensorflow/compiler/xla/service/service.cc:168] XLA service 0x55ed9ac83470 executing computations on platform Host. Devices: 2021-07-05 20:30:15.392806: I tensorflow/compiler/xla/service/service.cc:175] StreamExecutor device (0): Host, Default Version Loading model...Success! Loading labels...2 found. Success! * Serving Flask app "app" (lazy loading) * Environment: production WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead. * Debug mode: off * Running on http://0.0.0.0:80/ (Press CTRL+C to quit)
Задача - тестирование классификатора изображений
-
Вы можете использовать CURL для тестирования классификатора изображений, используя IP-адрес или имя хоста компьютера, на котором работает агент IoT Edge. Найдите IP-адрес:
- Если вы находитесь на том же устройстве, где работает IoT Edge, вы можете использовать
localhost
в качестве имени хоста. - Если вы используете виртуальную машину, вы можете использовать либо IP-адрес, либо DNS-имя виртуальной машины.
- В противном случае вы можете получить IP-адрес устройства, на котором работает IoT Edge:
- На Windows 10 следуйте руководству по поиску IP-адреса.
- На macOS следуйте руководству по поиску IP-адреса на Mac.
- На Linux следуйте разделу о поиске частного IP-адреса в руководстве по поиску IP-адреса в Linux.
- Если вы находитесь на том же устройстве, где работает IoT Edge, вы можете использовать
-
Вы можете протестировать контейнер с локальным файлом, выполнив следующую команду curl:
curl --location \ --request POST 'http://<IP address or name>/image' \ --header 'Content-Type: image/png' \ --data-binary '@<file_Name>'
Замените
<IP address or name>
IP-адресом или именем хоста компьютера, на котором работает IoT Edge. Замените<file_Name>
именем файла для тестирования.Вы увидите результаты предсказания в выводе:
{ "created": "2021-07-05T21:44:39.573181", "id": "", "iteration": "", "predictions": [ { "boundingBox": null, "probability": 0.9995615482330322, "tagId": "", "tagName": "ripe" }, { "boundingBox": null, "probability": 0.0004384400090202689, "tagId": "", "tagName": "unripe" } ], "project": "" }
💁 Здесь нет необходимости предоставлять ключ предсказания, так как это не использует ресурс Azure. Вместо этого безопасность будет настроена на внутренней сети в зависимости от внутренних потребностей, а не полагаться на публичную конечную точку и API-ключ.
Использование устройства IoT Edge
Теперь, когда ваш классификатор изображений развернут на устройстве IoT Edge, вы можете использовать его с вашего IoT-устройства.
Задача - использование устройства IoT Edge
Пройдите соответствующее руководство, чтобы классифицировать изображения с помощью классификатора IoT Edge:
Повторное обучение модели
Одним из недостатков использования классификаторов изображений на IoT Edge является то, что они не подключены к вашему проекту Custom Vision. Если вы посмотрите на вкладку Predictions в Custom Vision, вы не увидите изображения, классифицированные с помощью классификатора на Edge.
Это ожидаемое поведение — изображения не отправляются в облако для классификации, поэтому они не будут доступны в облаке. Одним из преимуществ использования IoT Edge является конфиденциальность, обеспечивающая, что изображения не покидают вашу сеть, другое — возможность работать офлайн, без необходимости загружать изображения при отсутствии интернет-соединения. Недостатком является улучшение вашей модели — вам нужно будет реализовать другой способ хранения изображений, которые можно вручную переклассифицировать для улучшения и повторного обучения классификатора изображений.
✅ Подумайте о способах загрузки изображений для повторного обучения классификатора.
🚀 Задание
Запуск моделей ИИ на edge-устройствах может быть быстрее, чем в облаке — сетевой переход короче. Однако они могут быть медленнее, так как оборудование, на котором работает модель, может быть менее мощным, чем облако.
Проведите измерения времени и сравните, является ли вызов вашего edge-устройства быстрее или медленнее, чем вызов облака? Подумайте о причинах, объясняющих разницу или ее отсутствие. Исследуйте способы ускорения работы моделей ИИ на edge-устройствах с использованием специализированного оборудования.
Тест после лекции
Обзор и самостоятельное изучение
- Узнайте больше о контейнерах на странице виртуализации уровня ОС в Википедии.
- Узнайте больше о периферийных вычислениях, с акцентом на то, как 5G может помочь расширить их возможности, в статье что такое периферийные вычисления и почему это важно? на сайте NetworkWorld
- Узнайте больше о запуске AI-сервисов на IoT Edge, посмотрев эпизод узнайте, как использовать Azure IoT Edge на готовом AI-сервисе на Edge для определения языка в программе Learn Live на Microsoft Channel9
Задание
Запустите другие сервисы на периферии
Отказ от ответственности:
Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.