# Стартирайте вашия детектор на плодове на edge ![Скица на преглед на този урок](../../../../../translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.bg.jpg) > Скица от [Nitya Narasimhan](https://github.com/nitya). Кликнете върху изображението за по-голяма версия. Това видео предоставя преглед на стартирането на класификатори на изображения на IoT устройства, темата, която се разглежда в този урок. [![Custom Vision AI на Azure IoT Edge](https://img.youtube.com/vi/_K5fqGLO8us/0.jpg)](https://www.youtube.com/watch?v=_K5fqGLO8us) ## Тест преди лекцията [Тест преди лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/33) ## Въведение В последния урок използвахте вашия класификатор на изображения, за да класифицирате узрели и неузрели плодове, като изпращахте изображение, заснето от камерата на вашето IoT устройство, през интернет към облачна услуга. Тези заявки отнемат време, струват пари и, в зависимост от вида на данните, които използвате, могат да имат последствия за поверителността. В този урок ще научите как да стартирате модели за машинно обучение (ML) на edge - на IoT устройства, работещи във вашата собствена мрежа, вместо в облака. Ще научите за предимствата и недостатъците на edge изчисленията спрямо облачните изчисления, как да разположите вашия AI модел на edge и как да го достъпите от вашето IoT устройство. В този урок ще разгледаме: * [Edge изчисления](../../../../../4-manufacturing/lessons/3-run-fruit-detector-edge) * [Azure IoT Edge](../../../../../4-manufacturing/lessons/3-run-fruit-detector-edge) * [Регистриране на IoT Edge устройство](../../../../../4-manufacturing/lessons/3-run-fruit-detector-edge) * [Настройка на IoT Edge устройство](../../../../../4-manufacturing/lessons/3-run-fruit-detector-edge) * [Експортиране на вашия модел](../../../../../4-manufacturing/lessons/3-run-fruit-detector-edge) * [Подготовка на контейнера за разполагане](../../../../../4-manufacturing/lessons/3-run-fruit-detector-edge) * [Разполагане на контейнера](../../../../../4-manufacturing/lessons/3-run-fruit-detector-edge) * [Използване на вашето IoT Edge устройство](../../../../../4-manufacturing/lessons/3-run-fruit-detector-edge) ## Edge изчисления Edge изчисленията включват използването на компютри, които обработват IoT данни възможно най-близо до мястото, където се генерират данните. Вместо тази обработка да се извършва в облака, тя се премества към ръба на облака - вашата вътрешна мрежа. ![Диаграма на архитектура, показваща интернет услуги в облака и IoT устройства в локална мрежа](../../../../../translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.bg.png) В досегашните уроци вашите устройства събираха данни и ги изпращаха в облака за анализ, като стартираха безсървърни функции или AI модели в облака. ![Диаграма на архитектура, показваща IoT устройства в локална мрежа, свързващи се с edge устройства, които от своя страна се свързват с облака](../../../../../translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.bg.png) Edge изчисленията включват преместване на някои от облачните услуги извън облака и върху компютри, работещи в същата мрежа като IoT устройствата, като се комуникира с облака само при необходимост. Например, можете да стартирате AI модели на edge устройства, за да анализирате зрелостта на плодовете, и да изпращате в облака само аналитични данни, като броя на узрелите спрямо неузрелите плодове. ✅ Помислете за IoT приложенията, които сте изградили досега. Кои части от тях могат да бъдат преместени на edge? ### Предимства Предимствата на edge изчисленията са: 1. **Скорост** - edge изчисленията са идеални за чувствителни към времето данни, тъй като действията се извършват в същата мрежа като устройството, вместо да се правят заявки през интернет. Това позволява по-високи скорости, тъй като вътрешните мрежи могат да работят със значително по-високи скорости от интернет връзките, а данните пътуват на много по-кратко разстояние. > 💁 Въпреки че за интернет връзките се използват оптични кабели, които позволяват данните да пътуват със скоростта на светлината, все пак е необходимо време, за да преминат данните по света до облачните доставчици. Например, ако изпращате данни от Европа до облачни услуги в САЩ, са необходими поне 28ms, за да преминат Атлантическия океан в оптичен кабел, без да се отчита времето за преобразуване на електрически сигнали в светлинни и обратно. Edge изчисленията също така изискват по-малък мрежов трафик, намалявайки риска от забавяне на данните поради претоварване на ограничената честотна лента на интернет връзката. 1. **Достъпност в отдалечени райони** - edge изчисленията работят, когато имате ограничена или липсваща свързаност, или когато свързаността е твърде скъпа за постоянно използване. Например, при работа в хуманитарни зони на бедствия, където инфраструктурата е ограничена, или в развиващи се страни. 1. **По-ниски разходи** - събирането, съхранението, анализът и задействането на действия върху edge устройство намалява използването на облачни услуги, което може да намали общите разходи за вашето IoT приложение. Напоследък се наблюдава ръст на устройства, предназначени за edge изчисления, като AI ускорителни платки като [Jetson Nano от NVIDIA](https://developer.nvidia.com/embedded/jetson-nano-developer-kit), които могат да изпълняват AI задачи с GPU-базирани хардуери на устройства, струващи под 100 USD. 1. **Поверителност и сигурност** - при edge изчисленията данните остават във вашата мрежа и не се качват в облака. Това често е предпочитано за чувствителна и лична информация, особено защото данните не е необходимо да се съхраняват след анализа, което значително намалява риска от изтичане на данни. Примери включват медицински данни и кадри от охранителни камери. 1. **Работа с несигурни устройства** - ако имате устройства с известни уязвимости в сигурността, които не искате да свързвате директно към вашата мрежа или интернет, можете да ги свържете към отделна мрежа чрез gateway IoT Edge устройство. Това edge устройство може също така да има връзка към вашата по-широка мрежа или интернет и да управлява потоците от данни. 1. **Поддръжка на несъвместими устройства** - ако имате устройства, които не могат да се свържат с IoT Hub, например устройства, които могат да се свързват само чрез HTTP или Bluetooth, можете да използвате IoT Edge устройство като gateway устройство, което препраща съобщенията към IoT Hub. ✅ Направете проучване: Какви други предимства може да има edge изчисленията? ### Недостатъци Има и недостатъци на edge изчисленията, при които облакът може да бъде предпочитан вариант: 1. **Мащаб и гъвкавост** - облачните изчисления могат да се адаптират към нуждите от мрежа и данни в реално време, като добавят или намаляват сървъри и други ресурси. За да добавите повече edge компютри, е необходимо ръчно добавяне на устройства. 1. **Надеждност и устойчивост** - облачните изчисления предоставят множество сървъри, често на различни локации, за резервираност и възстановяване при бедствия. За да постигнете същото ниво на резервираност на edge, са необходими големи инвестиции и много работа по конфигурацията. 1. **Поддръжка** - доставчиците на облачни услуги осигуряват поддръжка и актуализации на системите. ✅ Направете проучване: Какви други недостатъци може да има edge изчисленията? Недостатъците всъщност са противоположностите на предимствата на използването на облака - трябва сами да изграждате и управлявате тези устройства, вместо да разчитате на експертизата и мащаба на облачните доставчици. Някои от рисковете се смекчават от самата природа на edge изчисленията. Например, ако имате edge устройство, работещо във фабрика, събиращо данни от машини, не е необходимо да мислите за някои сценарии за възстановяване при бедствия. Ако електрозахранването във фабриката спре, няма нужда от резервно edge устройство, тъй като машините, които генерират данните, също ще бъдат без захранване. За IoT системи често ще искате комбинация от облачни и edge изчисления, използвайки всяка услуга според нуждите на системата, нейните потребители и поддръжници. ## Azure IoT Edge ![Логото на Azure IoT Edge](../../../../../translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.bg.png) Azure IoT Edge е услуга, която може да ви помогне да преместите работни натоварвания извън облака и към edge. Настройвате устройство като edge устройство и от облака можете да разполагате код на това edge устройство. Това ви позволява да комбинирате възможностите на облака и edge. > 🎓 *Работни натоварвания* е термин за всяка услуга, която извършва някаква работа, като AI модели, приложения или безсървърни функции. Например, можете да обучите класификатор на изображения в облака, след което от облака да го разположите на edge устройство. Вашето IoT устройство след това изпраща изображения към edge устройството за класификация, вместо да изпраща изображенията през интернет. Ако трябва да разположите нова итерация на модела, можете да го обучите в облака и да използвате IoT Edge, за да актуализирате модела на edge устройството към новата итерация. > 🎓 Софтуерът, който се разполага на IoT Edge, е известен като *модули*. По подразбиране IoT Edge стартира модули, които комуникират с IoT Hub, като модулите `edgeAgent` и `edgeHub`. Когато разположите класификатор на изображения, той се разполага като допълнителен модул. IoT Edge е вграден в IoT Hub, така че можете да управлявате edge устройства, използвайки същата услуга, която бихте използвали за управление на IoT устройства, със същото ниво на сигурност. IoT Edge стартира код от *контейнери* - самостоятелни приложения, които се изпълняват изолирано от останалите приложения на вашия компютър. Когато стартирате контейнер, той действа като отделен компютър, работещ във вашия компютър, със собствен софтуер, услуги и приложения. В повечето случаи контейнерите не могат да достъпят нищо на вашия компютър, освен ако не изберете да споделите неща като папка с контейнера. Контейнерът след това излага услуги чрез отворен порт, към който можете да се свържете или да го изложите на вашата мрежа. ![Уеб заявка, пренасочена към контейнер](../../../../../translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.bg.png) Например, можете да имате контейнер с уеб сайт, работещ на порт 80, който е стандартният HTTP порт, и след това да го изложите от вашия компютър също на порт 80. ✅ Направете проучване: Прочетете за контейнери и услуги като Docker или Moby. Можете да използвате Custom Vision, за да изтеглите класификатори на изображения и да ги разположите като контейнери, или директно на устройство, или чрез IoT Edge. След като те работят в контейнер, те могат да бъдат достъпени чрез същия REST API като облачната версия, но с крайна точка, насочена към Edge устройството, което изпълнява контейнера. ## Регистриране на IoT Edge устройство За да използвате IoT Edge устройство, то трябва да бъде регистрирано в IoT Hub. ### Задача - регистриране на IoT Edge устройство 1. Създайте IoT Hub в ресурсната група `fruit-quality-detector`. Дайте му уникално име, базирано на `fruit-quality-detector`. 1. Регистрирайте IoT Edge устройство, наречено `fruit-quality-detector-edge`, във вашия IoT Hub. Командата за това е подобна на тази за регистриране на не-edge устройство, с изключение на това, че добавяте флага `--edge-enabled`. ```sh az iot hub device-identity create --edge-enabled \ --device-id fruit-quality-detector-edge \ --hub-name ``` Заменете `` с името на вашия IoT Hub. 1. Вземете връзковия низ за вашето устройство, използвайки следната команда: ```sh az iot hub device-identity connection-string show --device-id fruit-quality-detector-edge \ --output table \ --hub-name ``` Заменете `` с името на вашия IoT Hub. Копирайте връзковия низ, който се показва в изхода. ## Настройка на IoT Edge устройство След като сте създали регистрацията на edge устройството във вашия IoT Hub, можете да настроите edge устройството. ### Задача - Инсталиране и стартиране на IoT Edge Runtime **IoT Edge runtime работи само с Linux контейнери.** Може да се стартира на Linux или на Windows, използвайки Linux виртуални машини. * Ако използвате Raspberry Pi като вашето IoT устройство, то работи с поддържана версия на Linux и може да хоства IoT Edge runtime. Следвайте [ръководството за инсталиране на Azure IoT Edge за Linux в Microsoft Docs](https://docs.microsoft.com/azure/iot-edge/how-to-install-iot-edge?WT.mc_id=academic-17441-jabenn), за да инсталирате IoT Edge и да зададете връзковия низ. > 💁 Помнете, Raspberry Pi OS е вариант на Debian Linux. * Ако не използвате Raspberry Pi, но имате Linux компютър, можете да стартирате IoT Edge runtime. Следвайте [ръководството за инсталиране на Azure IoT Edge за Linux в Microsoft Docs](https://docs.microsoft.com/azure/iot-edge/how-to-install-iot-edge?WT.mc_id=academic-17441-jabenn), за да инсталирате IoT Edge и да зададете връзковия низ. * Ако използвате Windows, можете да инсталирате IoT Edge runtime в Linux виртуална машина, като следвате [секцията за инсталиране и стартиране на IoT Edge runtime от ръководството за разполагане на първия IoT Edge модул на Windows устройство в Microsoft Docs](https://docs.microsoft.com/azure/iot-edge/quickstart?WT.mc_id=academic-17441-jabenn#install-and-start-the-iot-edge-runtime). Можете да спрете, когато достигнете секцията *Deploy a module*. * Ако използвате macOS, можете да създадете виртуална машина (VM) в облака, която да използвате като ваше IoT Edge устройство. Това са компютри, които можете да създадете в облака и да достъпите през интернет. Можете да създадете Linux VM, която има инсталиран IoT Edge. Следвайте [ръководството за създаване на виртуална машина с IoT Edge](vm-iotedge.md) за инструкции как да направите това. ## Експортиране на вашия модел За да стартирате класификатора на edge, той трябва да бъде експортиран от Custom Vision. Custom Vision може да генерира два типа модели - стандартни модели и компактни модели. Компактните модели използват различни техники за намаляване на размера на модела, правейки го достатъчно малък, за да бъде изтеглен и разположен на IoT устройства. Когато създадохте класификатора на изображения, използвахте домейна *Food*, версия на модела, оптимизирана за обучение върху изображения на храни. В Custom Vision можете да промените домейна на вашия проект, използвайки вашите тренировъчни данни, за да обучите нов модел с новия домейн. Всички домейни, поддържани от Custom Vision, са налични като стандартни и компактни. ### Задача - Обучение на вашия модел, използвайки домейна Food (compact) 1. Отворете портала Custom Vision на [CustomVision.ai](https://customvision.ai) и влезте в профила си, ако вече не сте го направили. След това отворете проекта си `fruit-quality-detector`. 1. Изберете бутона **Settings** (иконата ⚙). 1. В списъка *Domains* изберете *Food (compact)*. 1. Под *Export Capabilities* се уверете, че е избрано *Basic platforms (Tensorflow, CoreML, ONNX, ...)*. 1. В долната част на страницата с настройки изберете **Save Changes**. 1. Претренирайте модела с бутона **Train**, като изберете *Quick training*. ### Задача - експортирайте модела си След като моделът е трениран, той трябва да бъде експортиран като контейнер. 1. Изберете таба **Performance** и намерете последната итерация, която е тренирана с компактния домейн. 1. Изберете бутона **Export** в горната част. 1. Изберете **DockerFile**, след което изберете версия, която съответства на вашето edge устройство: * Ако използвате IoT Edge на компютър с Linux, Windows или виртуална машина, изберете версията *Linux*. * Ако използвате IoT Edge на Raspberry Pi, изберете версията *ARM (Raspberry Pi 3)*. > 🎓 Docker е един от най-популярните инструменти за управление на контейнери, а DockerFile е набор от инструкции за настройка на контейнера. 1. Изберете **Export**, за да накарате Custom Vision да създаде съответните файлове, след което **Download**, за да ги изтеглите в zip файл. 1. Запазете файловете на компютъра си и разархивирайте папката. ## Подгответе контейнера си за разгръщане ![Контейнерите се създават, след това се качват в регистър на контейнери и се разгръщат от регистъра към edge устройство чрез IoT Edge](../../../../../translated_images/container-edge-flow.c246050dd60ceefdb6ace026a4ce5c6aa4112bb5898ae23fbb2ab4be29ae3e1b.bg.png) След като изтеглите модела си, той трябва да бъде създаден като контейнер и качен в регистър на контейнери - онлайн място, където можете да съхранявате контейнери. IoT Edge може след това да изтегли контейнера от регистъра и да го разгръща на вашето устройство. ![Логото на Azure Container Registry](../../../../../translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.bg.png) Регистърът на контейнери, който ще използвате за този урок, е Azure Container Registry. Това не е безплатна услуга, затова, за да спестите пари, се уверете, че [почиствате проекта си](../../../clean-up.md), след като приключите. > 💁 Можете да видите разходите за използване на Azure Container Registry на [страницата с цени на Azure Container Registry](https://azure.microsoft.com/pricing/details/container-registry/?WT.mc_id=academic-17441-jabenn). ### Задача - инсталирайте Docker За да създадете и разположите класификатора, може да се наложи да инсталирате [Docker](https://www.docker.com/). Ще трябва да направите това само ако планирате да създадете контейнера си от устройство, различно от това, на което сте инсталирали IoT Edge - като част от инсталирането на IoT Edge, Docker се инсталира автоматично. 1. Ако създавате Docker контейнера на устройство, различно от вашето IoT Edge устройство, следвайте инструкциите за инсталиране на Docker на [страницата за инсталиране на Docker](https://www.docker.com/products/docker-desktop), за да инсталирате Docker Desktop или Docker engine. Уверете се, че Docker работи след инсталацията. ### Задача - създайте ресурс за регистър на контейнери 1. Стартирайте следната команда от вашия терминал или команден ред, за да създадете ресурс за Azure Container Registry: ```sh az acr create --resource-group fruit-quality-detector \ --sku Basic \ --name ``` Заменете `` с уникално име за вашия регистър на контейнери, използвайки само букви и цифри. Базирайте го на `fruitqualitydetector`. Това име става част от URL адреса за достъп до регистъра на контейнери, така че трябва да бъде глобално уникално. 1. Влезте в Azure Container Registry със следната команда: ```sh az acr login --name ``` Заменете `` с името, което сте използвали за вашия регистър на контейнери. 1. Активирайте администраторския режим на регистъра на контейнери, за да можете да генерирате парола със следната команда: ```sh az acr update --admin-enabled true \ --name ``` Заменете `` с името, което сте използвали за вашия регистър на контейнери. 1. Генерирайте пароли за вашия регистър на контейнери със следната команда: ```sh az acr credential renew --password-name password \ --output table \ --name ``` Заменете `` с името, което сте използвали за вашия регистър на контейнери. Копирайте стойността на `PASSWORD`, тъй като ще ви трябва по-късно. ### Задача - създайте контейнера си Това, което изтеглихте от Custom Vision, беше DockerFile, съдържащ инструкции за това как трябва да бъде създаден контейнерът, заедно с приложен код, който ще се изпълнява вътре в контейнера, за да хоства вашия модел за Custom Vision, както и REST API за извикване на модела. Можете да използвате Docker, за да създадете маркиран контейнер от DockerFile, след което да го качите в регистъра на контейнери. > 🎓 Контейнерите получават етикет, който определя име и версия за тях. Когато трябва да актуализирате контейнер, можете да го създадете със същия етикет, но с по-нова версия. 1. Отворете терминала или командния ред и навигирайте до разархивирания модел, който сте изтеглили от Custom Vision. 1. Стартирайте следната команда, за да създадете и маркирате изображението: ```sh docker build --platform -t .azurecr.io/classifier:v1 . ``` Заменете `` с платформата, на която ще работи този контейнер. Ако използвате IoT Edge на Raspberry Pi, задайте това на `linux/armhf`, в противен случай задайте на `linux/amd64`. > 💁 Ако изпълнявате тази команда от устройството, на което работи IoT Edge, като например Raspberry Pi, можете да пропуснете частта `--platform `, тъй като по подразбиране се използва текущата платформа. Заменете `` с името, което сте използвали за вашия регистър на контейнери. > 💁 Ако използвате Linux или Raspberry Pi OS, може да се наложи да използвате `sudo`, за да изпълните тази команда. Docker ще създаде изображението, конфигурирайки целия необходим софтуер. Изображението ще бъде маркирано като `classifier:v1`. ```output ➜ 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. Използвайте следната команда, за да качите контейнера си в регистъра на контейнери: ```sh docker push .azurecr.io/classifier:v1 ``` Заменете `` с името, което сте използвали за вашия регистър на контейнери. > 💁 Ако използвате Linux, може да се наложи да използвате `sudo`, за да изпълните тази команда. Контейнерът ще бъде качен в регистъра на контейнери. ```output ➜ 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 ``` 1. За да проверите качването, можете да изброите контейнерите в регистъра си със следната команда: ```sh az acr repository list --output table \ --name ``` Заменете `` с името, което сте използвали за вашия регистър на контейнери. ```output ➜ d4ccc45da0bb478bad287128e1274c3c.DockerFile.Linux az acr repository list --name fruitqualitydetectorjimb --output table Result ---------- classifier ``` Ще видите вашия класификатор в изхода. ## Разгръщане на контейнера Вашият контейнер вече може да бъде разположен на вашето IoT Edge устройство. За да го разположите, трябва да дефинирате манифест за разгръщане - JSON документ, който изброява модулите, които ще бъдат разположени на edge устройството. ### Задача - създайте манифест за разгръщане 1. Създайте нов файл, наречен `deployment.json`, някъде на компютъра си. 1. Добавете следното към този файл: ```json { "content": { "modulesContent": { "$edgeAgent": { "properties.desired": { "schemaVersion": "1.1", "runtime": { "type": "docker", "settings": { "minDockerVersion": "v1.25", "loggingOptions": "", "registryCredentials": { "ClassifierRegistry": { "username": "", "password": "", "address": ".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": ".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](../../../../../4-manufacturing/lessons/3-run-fruit-detector-edge/code-deployment/deployment). Заменете трите инстанции на `` с името, което сте използвали за вашия регистър на контейнери. Една е в секцията `ImageClassifier` module, а другите две са в секцията `registryCredentials`. Заменете `` в секцията `registryCredentials` с паролата на вашия регистър на контейнери. 1. От папката, съдържаща вашия манифест за разгръщане, стартирайте следната команда: ```sh az iot edge set-modules --device-id fruit-quality-detector-edge \ --content deployment.json \ --hub-name ``` Заменете `` с името на вашия IoT Hub. Модулът за класификация на изображения ще бъде разположен на вашето edge устройство. ### Задача - проверете дали класификаторът работи 1. Свържете се с IoT Edge устройството: * Ако използвате Raspberry Pi за работа с IoT Edge, свържете се чрез ssh от вашия терминал или чрез отдалечена SSH сесия в VS Code. * Ако използвате IoT Edge в Linux контейнер на Windows, следвайте стъпките в [ръководството за проверка на успешна конфигурация](https://docs.microsoft.com/azure/iot-edge/how-to-install-iot-edge-on-windows?WT.mc_id=academic-17441-jabenn&view=iotedge-2018-06&tabs=powershell#verify-successful-configuration), за да се свържете с IoT Edge устройството. * Ако използвате IoT Edge на виртуална машина, можете да влезете в машината чрез SSH, използвайки `adminUsername` и `password`, които сте задали при създаването на VM, и използвайки или IP адреса, или DNS името: ```sh ssh @ ``` Или: ```sh ssh @ ``` Въведете паролата си, когато бъдете подканени. 1. След като сте свързани, стартирайте следната команда, за да получите списък с IoT Edge модулите: ```sh iotedge list ``` > 💁 Може да се наложи да изпълните тази команда с `sudo`. Ще видите работещите модули: ```output 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 ``` 1. Проверете логовете за модула за класификация на изображения със следната команда: ```sh iotedge logs ImageClassifier ``` > 💁 Може да се наложи да изпълните тази команда с `sudo`. ```output 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 адреса: * Ако сте на същата машина, на която работи IoT Edge, можете да използвате `localhost` като име на хоста. * Ако използвате VM, можете да използвате или IP адреса, или DNS името на VM. * В противен случай можете да получите IP адреса на машината, която изпълнява IoT Edge: * На Windows 10, следвайте [ръководството за намиране на вашия IP адрес](https://support.microsoft.com/windows/find-your-ip-address-f21a9bbc-c582-55cd-35e0-73431160a1b9?WT.mc_id=academic-17441-jabenn). * На macOS, следвайте [ръководството за намиране на IP адрес на Mac](https://www.hellotech.com/guide/for/how-to-find-ip-address-on-mac). * На Linux, следвайте секцията за намиране на частния IP адрес в [ръководството за намиране на IP адрес в Linux](https://opensource.com/article/18/5/how-find-ip-address-linux). 1. Можете да тествате контейнера с локален файл, като стартирате следната команда curl: ```sh curl --location \ --request POST 'http:///image' \ --header 'Content-Type: image/png' \ --data-binary '@' ``` Заменете `` с IP адреса или името на хоста на компютъра, който изпълнява IoT Edge. Заменете `` с името на файла за тестване. Ще видите резултатите от предсказанието в изхода: ```output { "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": "" } ``` > 💁 Няма нужда да предоставяте prediction key тук, тъй като това не използва Azure ресурс. Вместо това сигурността ще бъде конфигурирана в рамките на вътрешната мрежа въз основа на вътрешни нужди за сигурност, вместо да разчита на публична крайна точка и API ключ. ## Използвайте вашето IoT Edge устройство Сега, когато вашият класификатор на изображения е разположен на IoT Edge устройство, можете да го използвате от вашето IoT устройство. ### Задача - използвайте вашето IoT Edge устройство Работете през съответното ръководство, за да класифицирате изображения, използвайки класификатора на IoT Edge: * [Arduino - Wio Terminal](wio-terminal.md) * [Едноплатков компютър - Raspberry Pi/Виртуално IoT устройство](single-board-computer.md) ### Претрениране на модела Един от недостатъците на използването на класификатори на изображения на IoT Edge е, че те не са свързани с вашия проект в Custom Vision. Ако погледнете таба **Predictions** в Custom Vision, няма да видите изображенията, които са били класифицирани с класификатора, базиран на Edge. Това е очаквано поведение - изображенията не се изпращат в облака за класификация, така че няма да бъдат налични в облака. Един от плюсовете на използването на IoT Edge е поверителността, като се гарантира, че изображенията не напускат вашата мрежа, а друг е възможността за работа офлайн, без да се разчита на качване на изображения, когато устройството няма интернет връзка. Недостатъкът е подобряването на вашия модел - ще трябва да внедрите друг начин за съхранение на изображения, които могат да бъдат ръчно прекласифицирани, за да подобрите и претренирате класификатора на изображения. ✅ Помислете за начини за качване на изображения за претрениране на класификатора. --- ## 🚀 Предизвикателство Изпълнението на AI модели на edge устройства може да бъде по-бързо, отколкото в облака - мрежовият хоп е по-кратък. Те също могат да бъдат по-бавни, тъй като хардуерът, който изпълнява модела, може да не е толкова мощен, колкото облака. Направете измервания и сравнете дали извикването към вашето edge устройство е по-бързо или по-бавно от извикването към облака? Помислете за причини, които обясняват разликата или липсата на разлика. Проучете начини за по-бързо изпълнение на AI модели на edge устройства, използвайки специализиран хардуер. ## Тест след лекцията [Тест след лекцията](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/34) ## Преглед и самостоятелно обучение * Прочетете повече за контейнерите на [страницата за виртуализация на ниво ОС в Wikipedia](https://wikipedia.org/wiki/OS-level_virtualization). * Прочетете повече за edge computing, с акцент върху това как 5G може да помогне за разширяване на edge computing в [статията "Какво е edge computing и защо е важно?" на NetworkWorld](https://www.networkworld.com/article/3224893/what-is-edge-computing-and-how-its-changing-the-network.html) * Научете повече за изпълнението на AI услуги в IoT Edge, като гледате [епизода "Научете как да използвате Azure IoT Edge на предварително изградена AI услуга на Edge за откриване на език" от Learn Live на Microsoft Channel9](https://channel9.msdn.com/Shows/Learn-Live/Sharpen-Your-AI-Edge-Skills-Episode-4-Learn-How-to-Use-Azure-IoT-Edge-on-a-Pre-Built-AI-Service-on-t?WT.mc_id=academic-17441-jabenn) ## Задача [Изпълнете други услуги на edge](assignment.md) --- **Отказ от отговорност**: Този документ е преведен с помощта на AI услуга за превод [Co-op Translator](https://github.com/Azure/co-op-translator). Въпреки че се стремим към точност, моля, имайте предвид, че автоматичните преводи може да съдържат грешки или неточности. Оригиналният документ на неговия изходен език трябва да се счита за авторитетен източник. За критична информация се препоръчва професионален превод от човек. Ние не носим отговорност за каквито и да е недоразумения или погрешни интерпретации, произтичащи от използването на този превод.