You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
IoT-For-Beginners/translations/ru/4-manufacturing/lessons/3-run-fruit-detector-edge/README.md

57 KiB

Запустите детектор фруктов на периферийных устройствах

Обзор урока в виде скетчноута

Скетчноут от Nitya Narasimhan. Нажмите на изображение, чтобы увидеть его в большем размере.

Это видео дает обзор работы классификаторов изображений на устройствах Интернета вещей (IoT), тема, которая рассматривается в этом уроке.

Custom Vision AI на Azure IoT Edge

Викторина перед лекцией

Викторина перед лекцией

Введение

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

В этом уроке вы узнаете, как запускать модели машинного обучения (ML) на периферийных устройствах — на IoT-устройствах, работающих в вашей собственной сети, а не в облаке. Вы узнаете о преимуществах и недостатках периферийных вычислений по сравнению с облачными вычислениями, как развернуть вашу AI-модель на периферии и как получить к ней доступ с вашего IoT-устройства.

В этом уроке мы рассмотрим:

Периферийные вычисления

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

Диаграмма архитектуры, показывающая интернет-сервисы в облаке и IoT-устройства в локальной сети

В предыдущих уроках вы использовали устройства для сбора данных и отправки их в облако для анализа, где выполнялись серверные функции или AI-модели.

Диаграмма архитектуры, показывающая IoT-устройства в локальной сети, подключенные к периферийным устройствам, которые затем подключаются к облаку

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

Подумайте о приложениях IoT, которые вы уже создали. Какие их части можно перенести на периферию?

Преимущества

Преимущества периферийных вычислений:

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

    💁 Несмотря на использование оптических кабелей для интернет-соединений, позволяющих данным перемещаться со скоростью света, передача данных по всему миру к облачным провайдерам может занимать время. Например, если вы отправляете данные из Европы в облачные сервисы в США, это занимает минимум 28 мс для пересечения Атлантики через оптический кабель, не учитывая время на доставку данных к кабелю, преобразование электрических сигналов в световые и обратно, а также передачу данных от кабеля к облачному провайдеру.

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

  2. Удаленная доступность — периферийные вычисления работают при ограниченном или отсутствии подключения, либо если подключение слишком дорого для постоянного использования. Например, в гуманитарных зонах бедствий, где инфраструктура ограничена, или в развивающихся странах.

  3. Снижение затратсбор, хранение, анализ данных и выполнение действий на периферийных устройствах снижает использование облачных сервисов, что может уменьшить общую стоимость вашего IoT-приложения. В последнее время наблюдается рост устройств, предназначенных для периферийных вычислений, таких как платы ускорения AI, например Jetson Nano от NVIDIA, которые могут выполнять AI-задачи с использованием аппаратного обеспечения на базе GPU на устройствах стоимостью менее 100 долларов США.

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

  5. Работа с небезопасными устройствами — если у вас есть устройства с известными уязвимостями, которые вы не хотите подключать напрямую к вашей сети или интернету, вы можете подключить их к отдельной сети через шлюзовое периферийное устройство IoT Edge. Это периферийное устройство может также иметь подключение к вашей основной сети или интернету и управлять потоками данных туда и обратно.

  6. Поддержка несовместимых устройств — если у вас есть устройства, которые не могут подключаться к IoT Hub, например устройства, которые могут подключаться только через HTTP или имеют только Bluetooth, вы можете использовать периферийное устройство IoT Edge в качестве шлюза, пересылающего сообщения в IoT Hub.

Проведите исследование: Какие еще преимущества могут быть у периферийных вычислений?

Недостатки

Недостатки периферийных вычислений, где облако может быть предпочтительным вариантом:

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

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

  3. Обслуживание — облачные провайдеры предоставляют системное обслуживание и обновления.

Проведите исследование: Какие еще недостатки могут быть у периферийных вычислений?

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

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

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

Azure IoT Edge

Логотип 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

  1. Создайте IoT Hub в группе ресурсов fruit-quality-detector. Дайте ему уникальное имя, основанное на fruit-quality-detector.

  2. Зарегистрируйте периферийное устройство 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.

  3. Получите строку подключения для вашего устройства, используя следующую команду:

    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.

Экспорт вашей модели

Чтобы запустить классификатор на периферии, его нужно экспортировать из Custom Vision. Custom Vision может генерировать два типа моделей — стандартные модели и компактные модели. Компактные модели используют различные техники для уменьшения размера модели, делая ее достаточно маленькой для загрузки и развертывания на IoT-устройствах.

Когда вы создавали классификатор изображений, вы использовали домен Food, версию модели, оптимизированную для обучения на изображениях еды. В Custom Vision вы можете изменить домен вашего проекта, используя ваши данные для обучения новой модели с новым доменом. Все домены, поддерживаемые Custom Vision, доступны как в стандартной, так и в компактной версии.

Задача — обучение вашей модели с использованием домена Food (compact)

  1. Откройте портал Custom Vision на CustomVision.ai и войдите в систему, если он еще не открыт. Затем откройте ваш проект fruit-quality-detector.

  2. Нажмите кнопку Settings (значок ⚙).

  3. В списке Domains выберите Food (compact).

  4. В разделе Export Capabilities убедитесь, что выбрано Basic platforms (Tensorflow, CoreML, ONNX, ...).

  5. Внизу страницы настроек нажмите Save Changes.

  6. Перетренируйте модель, нажав кнопку Train и выбрав Quick training.

Задача - экспорт модели

После тренировки модель необходимо экспортировать как контейнер.

  1. Перейдите на вкладку Performance и найдите последнюю итерацию, обученную с использованием компактного домена.

  2. Нажмите кнопку Export в верхней части страницы.

  3. Выберите DockerFile, затем выберите версию, соответствующую вашему устройству edge:

    • Если вы используете IoT Edge на компьютере с Linux, Windows или виртуальной машине, выберите версию Linux.
    • Если вы используете IoT Edge на Raspberry Pi, выберите версию ARM (Raspberry Pi 3).

🎓 Docker — один из самых популярных инструментов для управления контейнерами, а DockerFile — это набор инструкций по настройке контейнера.

  1. Нажмите Export, чтобы Custom Vision создал соответствующие файлы, затем Download, чтобы скачать их в виде zip-архива.

  2. Сохраните файлы на своем компьютере и распакуйте папку.

Подготовка контейнера к развертыванию

Контейнеры создаются, затем отправляются в реестр контейнеров, а затем развертываются на edge-устройстве с помощью IoT Edge

После загрузки модели ее необходимо собрать в контейнер, а затем отправить в реестр контейнеров — онлайн-хранилище для контейнеров. IoT Edge затем может загрузить контейнер из реестра и отправить его на ваше устройство.

Логотип Azure Container Registry

Реестр контейнеров, который вы будете использовать в этом уроке, — это Azure Container Registry. Это платная услуга, поэтому, чтобы сэкономить деньги, убедитесь, что вы очистили проект после завершения работы.

💁 Вы можете ознакомиться с ценами на использование Azure Container Registry на странице цен Azure Container Registry.

Задача - установка Docker

Чтобы собрать и развернуть классификатор, возможно, потребуется установить Docker.

Это нужно сделать только в том случае, если вы планируете собирать контейнер на устройстве, отличном от того, на котором установлен IoT Edge — при установке IoT Edge Docker устанавливается автоматически.

  1. Если вы собираете контейнер Docker на устройстве, отличном от вашего устройства IoT Edge, следуйте инструкциям по установке Docker на странице установки Docker, чтобы установить Docker Desktop или Docker engine. Убедитесь, что он работает после установки.

Задача - создание ресурса реестра контейнеров

  1. Выполните следующую команду в терминале или командной строке, чтобы создать ресурс Azure Container Registry:

    az acr create --resource-group fruit-quality-detector \
                  --sku Basic \
                  --name <Container registry name>
    

    Замените <Container registry name> уникальным именем для вашего реестра контейнеров, используя только буквы и цифры. Основывайте имя на fruitqualitydetector. Это имя станет частью URL-адреса для доступа к реестру контейнеров, поэтому оно должно быть уникальным глобально.

  2. Войдите в Azure Container Registry с помощью следующей команды:

    az acr login --name <Container registry name>
    

    Замените <Container registry name> именем, которое вы использовали для вашего реестра контейнеров.

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

    az acr update --admin-enabled true \
                 --name <Container registry name>
    

    Замените <Container registry name> именем, которое вы использовали для вашего реестра контейнеров.

  4. Сгенерируйте пароли для вашего реестра контейнеров с помощью следующей команды:

     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, а затем отправить его в реестр контейнеров.

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

  1. Откройте терминал или командную строку и перейдите в распакованную папку с моделью, которую вы загрузили из Custom Vision.

  2. Выполните следующую команду для сборки и добавления тега к изображению:

    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
    

Задача - отправка контейнера в реестр контейнеров

  1. Используйте следующую команду, чтобы отправить контейнер в реестр контейнеров:

    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
    
  2. Чтобы проверить отправку, вы можете перечислить контейнеры в вашем реестре с помощью следующей команды:

    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-устройстве.

Задача - создание манифеста развертывания

  1. Создайте новый файл с именем deployment.json где-нибудь на вашем компьютере.

  2. Добавьте в этот файл следующее:

    {
        "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 паролем вашего реестра контейнеров.

  3. Из папки, содержащей ваш манифест развертывания, выполните следующую команду:

    az iot edge set-modules --device-id fruit-quality-detector-edge \
                            --content deployment.json \
                            --hub-name <hub_name>
    

    Замените <hub_name> именем вашего IoT Hub.

    Модуль классификатора изображений будет развернут на вашем edge-устройстве.

Задача - проверка работы классификатора

  1. Подключитесь к устройству 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>
      

      Введите ваш пароль, когда будет предложено.

  2. После подключения выполните следующую команду, чтобы получить список модулей 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
    
  3. Проверьте журналы модуля классификатора изображений с помощью следующей команды:

    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)
    

Задача - тестирование классификатора изображений

  1. Вы можете использовать CURL для тестирования классификатора изображений, используя IP-адрес или имя хоста компьютера, на котором работает агент IoT Edge. Найдите IP-адрес:

  2. Вы можете протестировать контейнер с локальным файлом, выполнив следующую команду 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-устройствах с использованием специализированного оборудования.

Тест после лекции

Тест после лекции

Обзор и самостоятельное изучение

Задание

Запустите другие сервисы на периферии


Отказ от ответственности:
Этот документ был переведен с использованием сервиса автоматического перевода Co-op Translator. Несмотря на наши усилия обеспечить точность, автоматические переводы могут содержать ошибки или неточности. Оригинальный документ на его исходном языке следует считать авторитетным источником. Для получения критически важной информации рекомендуется профессиональный перевод человеком. Мы не несем ответственности за любые недоразумения или неправильные интерпретации, возникшие в результате использования данного перевода.