# اجرای آشکارساز میوه در لبه ![نمای کلی درس به صورت اسکچ‌نوت](../../../../../translated_images/lesson-17.bc333c3c35ba8e42cce666cfffa82b915f787f455bd94e006aea2b6f2722421a.fa.jpg) > اسکچ‌نوت توسط [نیتیا ناراسیمهان](https://github.com/nitya). برای مشاهده نسخه بزرگ‌تر روی تصویر کلیک کنید. این ویدیو نمای کلی از اجرای دسته‌بندی‌کننده‌های تصویر بر روی دستگاه‌های IoT را ارائه می‌دهد، موضوعی که در این درس پوشش داده شده است. [![Custom Vision AI on 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) را در لبه اجرا کنید - یعنی بر روی دستگاه‌های IoT که در شبکه خودتان اجرا می‌شوند، نه در فضای ابری. شما مزایا و معایب محاسبات لبه در مقابل محاسبات ابری، نحوه استقرار مدل هوش مصنوعی در لبه و نحوه دسترسی به آن از دستگاه IoT خود را خواهید آموخت. در این درس موارد زیر را پوشش خواهیم داد: * [محاسبات لبه](../../../../../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) ## محاسبات لبه محاسبات لبه شامل داشتن کامپیوترهایی است که داده‌های IoT را تا حد ممکن نزدیک به جایی که داده‌ها تولید می‌شوند پردازش می‌کنند. به جای اینکه این پردازش در فضای ابری انجام شود، به لبه فضای ابری - شبکه داخلی شما - منتقل می‌شود. ![یک نمودار معماری که خدمات اینترنتی در فضای ابری و دستگاه‌های IoT در یک شبکه محلی را نشان می‌دهد](../../../../../translated_images/cloud-without-edge.b4da641f6022c95ed6b91fde8b5323abd2f94e0d52073ad54172ae8f5dac90e9.fa.png) در درس‌های قبلی، شما دستگاه‌هایی داشتید که داده‌ها را جمع‌آوری کرده و برای تجزیه و تحلیل به فضای ابری ارسال می‌کردند، و در آنجا توابع بدون سرور یا مدل‌های هوش مصنوعی اجرا می‌شدند. ![یک نمودار معماری که دستگاه‌های IoT در یک شبکه محلی را نشان می‌دهد که به دستگاه‌های لبه متصل می‌شوند، و این دستگاه‌های لبه به فضای ابری متصل می‌شوند](../../../../../translated_images/cloud-with-edge.1e26462c62c126fe150bd15a5714ddf0be599f09bacbad08b85be02b76ea1ae1.fa.png) محاسبات لبه شامل انتقال برخی از خدمات ابری به کامپیوترهایی است که در همان شبکه دستگاه‌های IoT اجرا می‌شوند و فقط در صورت نیاز با فضای ابری ارتباط برقرار می‌کنند. به عنوان مثال، می‌توانید مدل‌های هوش مصنوعی را بر روی دستگاه‌های لبه اجرا کنید تا میوه‌ها را از نظر رسیده بودن تحلیل کنید و فقط تحلیل‌ها را به فضای ابری ارسال کنید، مانند تعداد میوه‌های رسیده در مقابل نارس. ✅ به برنامه‌های IoT که تاکنون ساخته‌اید فکر کنید. کدام بخش‌های آن‌ها می‌توانند به لبه منتقل شوند؟ ### مزایا مزایای محاسبات لبه عبارتند از: 1. **سرعت** - محاسبات لبه برای داده‌های حساس به زمان ایده‌آل است، زیرا اقدامات در همان شبکه دستگاه انجام می‌شود، نه از طریق تماس‌های اینترنتی. این امر سرعت بالاتری را امکان‌پذیر می‌کند، زیرا شبکه‌های داخلی می‌توانند با سرعت بسیار بیشتری نسبت به اتصالات اینترنتی اجرا شوند و داده‌ها مسافت کوتاه‌تری را طی می‌کنند. > 💁 با وجود استفاده از کابل‌های نوری برای اتصالات اینترنتی که امکان انتقال داده‌ها با سرعت نور را فراهم می‌کنند، داده‌ها ممکن است زمان‌بر باشند تا در سراسر جهان به ارائه‌دهندگان فضای ابری برسند. به عنوان مثال، اگر داده‌ها را از اروپا به خدمات ابری در ایالات متحده ارسال کنید، حداقل 28 میلی‌ثانیه طول می‌کشد تا داده‌ها از طریق کابل نوری اقیانوس اطلس عبور کنند، و این زمان شامل انتقال داده‌ها به کابل اقیانوس اطلس، تبدیل سیگنال‌های الکتریکی به نوری و بالعکس در طرف دیگر، و سپس از کابل نوری به ارائه‌دهنده فضای ابری نمی‌شود. محاسبات لبه همچنین به ترافیک شبکه کمتری نیاز دارد، که خطر کاهش سرعت داده‌ها به دلیل ازدحام در پهنای باند محدود اتصال اینترنت را کاهش می‌دهد. 1. **دسترسی از راه دور** - محاسبات لبه زمانی کار می‌کند که اتصال محدود یا وجود ندارد، یا اتصال بسیار گران است که نمی‌توان به طور مداوم از آن استفاده کرد. به عنوان مثال، هنگام کار در مناطق بحران انسانی که زیرساخت‌ها محدود هستند یا در کشورهای در حال توسعه. 1. **هزینه‌های کمتر** - جمع‌آوری، ذخیره‌سازی، تحلیل داده‌ها و انجام اقدامات بر روی دستگاه لبه، استفاده از خدمات ابری را کاهش می‌دهد که می‌تواند هزینه کلی برنامه IoT شما را کاهش دهد. اخیراً افزایش دستگاه‌هایی که برای محاسبات لبه طراحی شده‌اند، مانند بردهای شتاب‌دهنده هوش مصنوعی مانند [Jetson Nano از NVIDIA](https://developer.nvidia.com/embedded/jetson-nano-developer-kit)، مشاهده شده است که می‌توانند بارهای کاری هوش مصنوعی را با استفاده از سخت‌افزار مبتنی بر GPU بر روی دستگاه‌هایی که کمتر از 100 دلار هزینه دارند اجرا کنند. 1. **حریم خصوصی و امنیت** - با محاسبات لبه، داده‌ها در شبکه شما باقی می‌مانند و به فضای ابری آپلود نمی‌شوند. این امر اغلب برای اطلاعات حساس و قابل شناسایی شخصی ترجیح داده می‌شود، به ویژه به این دلیل که داده‌ها پس از تحلیل نیازی به ذخیره شدن ندارند، که خطر نشت داده‌ها را به شدت کاهش می‌دهد. مثال‌ها شامل داده‌های پزشکی و فیلم‌های دوربین‌های امنیتی هستند. 1. **مدیریت دستگاه‌های ناامن** - اگر دستگاه‌هایی با نقص‌های امنیتی شناخته‌شده دارید که نمی‌خواهید مستقیماً به شبکه یا اینترنت متصل شوند، می‌توانید آن‌ها را به یک شبکه جداگانه متصل کنید که به یک دستگاه IoT Edge به عنوان دروازه متصل است. این دستگاه لبه سپس می‌تواند به شبکه گسترده‌تر شما یا اینترنت نیز متصل شود و جریان داده‌ها را مدیریت کند. 1. **پشتیبانی از دستگاه‌های ناسازگار** - اگر دستگاه‌هایی دارید که نمی‌توانند به IoT Hub متصل شوند، به عنوان مثال دستگاه‌هایی که فقط می‌توانند از طریق اتصالات HTTP متصل شوند یا دستگاه‌هایی که فقط بلوتوث دارند، می‌توانید از یک دستگاه IoT Edge به عنوان دستگاه دروازه استفاده کنید که پیام‌ها را به IoT Hub ارسال می‌کند. ✅ تحقیق کنید: چه مزایای دیگری ممکن است برای محاسبات لبه وجود داشته باشد؟ ### معایب معایب محاسبات لبه، جایی که ممکن است فضای ابری گزینه ترجیحی باشد: 1. **مقیاس‌پذیری و انعطاف‌پذیری** - محاسبات ابری می‌تواند به نیازهای شبکه و داده‌ها در زمان واقعی با افزودن یا کاهش سرورها و منابع دیگر تنظیم شود. برای افزودن کامپیوترهای لبه بیشتر نیاز به افزودن دستی دستگاه‌های بیشتر است. 1. **قابلیت اطمینان و انعطاف‌پذیری** - محاسبات ابری سرورهای متعدد را اغلب در مکان‌های مختلف برای افزونگی و بازیابی از فاجعه فراهم می‌کند. برای داشتن همان سطح افزونگی در لبه نیاز به سرمایه‌گذاری‌های بزرگ و کار پیکربندی زیادی است. 1. **نگهداری** - ارائه‌دهندگان خدمات ابری نگهداری سیستم و به‌روزرسانی‌ها را ارائه می‌دهند. ✅ تحقیق کنید: چه معایب دیگری ممکن است برای محاسبات لبه وجود داشته باشد؟ معایب در واقع مخالف مزایای استفاده از فضای ابری هستند - شما باید این دستگاه‌ها را خودتان بسازید و مدیریت کنید، به جای اینکه به تخصص و مقیاس ارائه‌دهندگان فضای ابری تکیه کنید. برخی از خطرات با ماهیت محاسبات لبه کاهش می‌یابند. به عنوان مثال، اگر یک دستگاه لبه در یک کارخانه دارید که داده‌ها را از ماشین‌آلات جمع‌آوری می‌کند، نیازی به فکر کردن در مورد برخی سناریوهای بازیابی از فاجعه ندارید. اگر برق کارخانه قطع شود، نیازی به دستگاه لبه پشتیبان ندارید، زیرا ماشین‌هایی که داده‌هایی را تولید می‌کنند که دستگاه لبه پردازش می‌کند نیز بدون برق خواهند بود. برای سیستم‌های IoT، اغلب ترکیبی از محاسبات ابری و لبه را می‌خواهید، و هر سرویس را بر اساس نیازهای سیستم، مشتریان و نگهدارندگان آن استفاده می‌کنید. ## Azure IoT Edge ![لوگوی Azure IoT Edge](../../../../../translated_images/azure-iot-edge-logo.c1c076749b5cba2e8755262fadc2f19ca1146b948d76990b1229199ac2292d79.fa.png) Azure IoT Edge یک سرویس است که می‌تواند به شما کمک کند تا بارهای کاری را از فضای ابری به لبه منتقل کنید. شما یک دستگاه را به عنوان دستگاه لبه تنظیم می‌کنید و از فضای ابری می‌توانید کد را به آن دستگاه لبه مستقر کنید. این امکان را به شما می‌دهد تا قابلیت‌های فضای ابری و لبه را ترکیب کنید. > 🎓 *بارهای کاری* اصطلاحی است برای هر سرویسی که نوعی کار انجام می‌دهد، مانند مدل‌های هوش مصنوعی، برنامه‌ها یا توابع بدون سرور. به عنوان مثال، می‌توانید یک دسته‌بندی‌کننده تصویر را در فضای ابری آموزش دهید، سپس از فضای ابری آن را به یک دستگاه لبه مستقر کنید. دستگاه IoT شما سپس تصاویر را برای دسته‌بندی به دستگاه لبه ارسال می‌کند، به جای اینکه تصاویر را از طریق اینترنت ارسال کند. اگر نیاز به استقرار یک نسخه جدید از مدل دارید، می‌توانید آن را در فضای ابری آموزش دهید و از IoT Edge برای به‌روزرسانی مدل در دستگاه لبه به نسخه جدید خود استفاده کنید. > 🎓 نرم‌افزاری که به IoT Edge مستقر می‌شود به عنوان *ماژول‌ها* شناخته می‌شود. به طور پیش‌فرض، IoT Edge ماژول‌هایی را اجرا می‌کند که با IoT Hub ارتباط برقرار می‌کنند، مانند ماژول‌های `edgeAgent` و `edgeHub`. هنگامی که یک دسته‌بندی‌کننده تصویر را مستقر می‌کنید، این به عنوان یک ماژول اضافی مستقر می‌شود. IoT Edge در IoT Hub ساخته شده است، بنابراین می‌توانید دستگاه‌های لبه را با استفاده از همان سرویسی که برای مدیریت دستگاه‌های IoT استفاده می‌کنید مدیریت کنید، با همان سطح امنیت. IoT Edge کد را از *کانتینرها* اجرا می‌کند - برنامه‌های خودکفایی که به صورت جداگانه از سایر برنامه‌های کامپیوتر شما اجرا می‌شوند. هنگامی که یک کانتینر اجرا می‌شود، مانند یک کامپیوتر جداگانه است که در داخل کامپیوتر شما اجرا می‌شود، با نرم‌افزار، خدمات و برنامه‌های خاص خود. بیشتر اوقات کانتینرها نمی‌توانند به چیزی در کامپیوتر شما دسترسی داشته باشند مگر اینکه انتخاب کنید چیزی مانند یک پوشه را با کانتینر به اشتراک بگذارید. کانتینر سپس خدمات را از طریق یک پورت باز ارائه می‌دهد که می‌توانید به آن متصل شوید یا آن را به شبکه خود ارائه دهید. ![یک درخواست وب که به یک کانتینر هدایت شده است](../../../../../translated_images/container-web-browser.4ee81dd4f0d8838ce622b2a0d600b6a4322b5d4fe43159facd87b7b34f84d66a.fa.png) به عنوان مثال، می‌توانید یک کانتینر با یک وب‌سایت که بر روی پورت 80 اجرا می‌شود، پورت پیش‌فرض HTTP، داشته باشید و سپس آن را از کامپیوتر خود نیز بر روی پورت 80 ارائه دهید. ✅ تحقیق کنید: درباره کانتینرها و خدماتی مانند Docker یا Moby مطالعه کنید. می‌توانید از Custom Vision برای دانلود دسته‌بندی‌کننده‌های تصویر و مستقر کردن آن‌ها به عنوان کانتینرها استفاده کنید، یا به صورت مستقیم بر روی یک دستگاه یا از طریق IoT Edge مستقر کنید. هنگامی که آن‌ها در یک کانتینر اجرا می‌شوند، می‌توان به آن‌ها با استفاده از همان API REST نسخه ابری دسترسی داشت، اما با نقطه پایانی که به دستگاه لبه‌ای که کانتینر را اجرا می‌کند اشاره دارد. ## ثبت یک دستگاه 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-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 پس از ایجاد ثبت دستگاه لبه در IoT Hub خود، می‌توانید دستگاه لبه را راه‌اندازی کنید. ### وظیفه - نصب و راه‌اندازی IoT Edge Runtime **IoT Edge Runtime فقط کانتینرهای لینوکس را اجرا می‌کند.** این می‌تواند بر روی لینوکس اجرا شود یا بر روی ویندوز با استفاده از ماشین‌های مجازی لینوکس. * اگر از Raspberry Pi به عنوان دستگاه IoT خود استفاده می‌کنید، این دستگاه نسخه پشتیبانی‌شده‌ای از لینوکس را اجرا می‌کند و می‌تواند IoT Edge Runtime را میزبانی کند. راهنمای [نصب Azure IoT Edge برای لینوکس در مستندات مایکروسافت](https://docs.microsoft.com/azure/iot-edge/how-to-install-iot-edge?WT.mc_id=academic-17441-jabenn) را دنبال کنید تا IoT Edge را نصب کرده و رشته اتصال را تنظیم کنید. > 💁 به یاد داشته باشید، سیستم عامل Raspberry Pi یک نسخه از لینوکس Debian است. * اگر از Raspberry Pi استفاده نمی‌کنید، اما یک کامپیوتر لینوکس دارید، می‌توانید IoT Edge Runtime را اجرا کنید. راهنمای [نصب Azure IoT Edge برای لینوکس در مستندات مایکروسافت](https://docs.microsoft.com/azure/iot-edge/how-to-install-iot-edge?WT.mc_id=academic-17441-jabenn) را دنبال کنید تا IoT Edge را نصب کرده و رشته اتصال را تنظیم کنید. * اگر از ویندوز استفاده می‌کنید، می‌توانید IoT Edge Runtime را در یک ماشین مجازی لینوکس نصب کنید با دنبال کردن بخش [نصب و راه‌اندازی IoT Edge Runtime در بخش سریع شروع استقرار اولین ماژول IoT Edge در دستگاه ویندوز در مستندات مایکروسافت](https://docs.microsoft.com/azure/iot-edge/quickstart?WT.mc_id=academic-17441-jabenn#install-and-start-the-iot-edge-runtime). می‌توانید زمانی که به بخش *استقرار یک ماژول* رسیدید متوقف شوید. * اگر از macOS استفاده می‌کنید، می‌توانید یک ماشین مجازی (VM) در فضای ابری ایجاد کنید تا برای دستگاه IoT Edge خود استفاده کنید. این‌ها کامپیوترهایی هستند که می‌توانید در فضای ابری ایجاد کنید و از طریق اینترنت به آن‌ها دسترسی داشته باشید. می‌توانید یک VM لینوکس ایجاد کنید که IoT Edge نصب شده باشد. راهنمای [ایجاد یک ماشین مجازی که IoT Edge اجرا می‌کند](vm-iotedge.md) را دنبال کنید تا دستورالعمل‌های مربوط به این کار را دریافت کنید. ## صادرات مدل شما برای اجرای دسته‌بندی‌کننده در لبه، باید از Custom Vision صادر شود. Custom Vision می‌تواند دو نوع مدل تولید کند - مدل‌های استاندارد و مدل‌های فشرده. مدل‌های فشرده از تکنیک‌های مختلفی برای کاهش اندازه مدل استفاده می‌کنند، که آن را به اندازه‌ای کوچک می‌کند که بتوان آن را دانلود و بر روی دستگاه‌های IoT مستقر کرد. هنگامی که دسته‌بندی‌کننده تصویر را ایجاد کردید، از دامنه *غذا* استفاده کردید، نسخه‌ای از مدل که برای آموزش بر روی تصاویر غذا بهینه شده است. در Custom Vision، می‌توانید دامنه پروژه خود را تغییر دهید و از داده‌های آموزشی خود برای آموزش یک مدل جدید با دامنه جدید استفاده کنید. همه دامنه‌هایی که توسط Custom Vision پشتیبانی می‌شوند به صورت استاندارد و فشرده در دسترس هستند. ### وظیفه - آموزش مدل خود با استفاده از دامنه غذا (فشرده) 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** را انتخاب کنید و آخرین نسخه‌ای که با دامنه compact آموزش داده شده است را پیدا کنید. 1. دکمه **Export** را در بالا انتخاب کنید. 1. گزینه **DockerFile** را انتخاب کنید و نسخه‌ای که با دستگاه edge شما مطابقت دارد را انتخاب کنید: * اگر IoT Edge را روی یک کامپیوتر لینوکس، کامپیوتر ویندوز یا ماشین مجازی اجرا می‌کنید، نسخه *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.fa.png) پس از دانلود مدل، باید آن را به یک کانتینر تبدیل کنید و سپس به یک رجیستری کانتینر ارسال کنید - مکانی آنلاین که می‌توانید کانتینرها را ذخیره کنید. IoT Edge سپس کانتینر را از رجیستری دانلود کرده و به دستگاه شما ارسال می‌کند. ![لوگوی Azure Container Registry](../../../../../translated_images/azure-container-registry-logo.09494206991d4b295025ebff7d4e2900325e527a59184ffbc8464b6ab59654be.fa.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 را نصب کنید. پس از نصب، مطمئن شوید که در حال اجرا است. ### وظیفه - ایجاد یک منبع رجیستری کانتینر 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 ` را حذف کنید زیرا به‌طور پیش‌فرض به پلتفرم فعلی تنظیم می‌شود. `` را با نامی که برای رجیستری کانتینر خود استفاده کرده‌اید جایگزین کنید. > 💁 اگر روی لینوکس یا 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 ``` `` را با نامی که برای رجیستری کانتینر خود استفاده کرده‌اید جایگزین کنید. > 💁 اگر روی لینوکس اجرا می‌کنید ممکن است نیاز به استفاده از `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 شما مستقر شود. برای استقرار، باید یک manifest استقرار تعریف کنید - یک سند JSON که ماژول‌هایی که به دستگاه edge مستقر خواهند شد را لیست می‌کند. ### وظیفه - ایجاد manifest استقرار 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` است، دو مورد دیگر در بخش `registryCredentials` هستند. `` را در بخش `registryCredentials` با رمز عبور رجیستری کانتینر خود جایگزین کنید. 1. از پوشه‌ای که manifest استقرار شما در آن قرار دارد، دستور زیر را اجرا کنید: ```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 را در یک کانتینر لینوکس روی ویندوز اجرا می‌کنید، مراحل موجود در [راهنمای تأیید پیکربندی موفقیت‌آمیز](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 را روی یک ماشین مجازی اجرا می‌کنید، می‌توانید با استفاده از `adminUsername` و `password` که هنگام ایجاد VM تنظیم کرده‌اید و با استفاده از آدرس IP یا نام DNS به ماشین SSH کنید: ```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` به‌عنوان نام میزبان استفاده کنید. * اگر از یک ماشین مجازی استفاده می‌کنید، می‌توانید از آدرس IP یا نام DNS ماشین مجازی استفاده کنید. * در غیر این صورت می‌توانید آدرس IP ماشینی که IoT Edge روی آن اجرا می‌شود را پیدا کنید: * در ویندوز 10، راهنمای [پیدا کردن آدرس IP خود](https://support.microsoft.com/windows/find-your-ip-address-f21a9bbc-c582-55cd-35e0-73431160a1b9?WT.mc_id=academic-17441-jabenn) را دنبال کنید. * در macOS، راهنمای [چگونه آدرس IP خود را روی مک پیدا کنید](https://www.hellotech.com/guide/for/how-to-find-ip-address-on-mac) را دنبال کنید. * در لینوکس، بخش پیدا کردن آدرس IP خصوصی در [چگونه آدرس IP خود را در لینوکس پیدا کنید](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": "" } ``` > 💁 نیازی به ارائه کلید پیش‌بینی نیست، زیرا این از یک منبع 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 حفظ حریم خصوصی است، اطمینان از اینکه تصاویر شبکه شما را ترک نمی‌کنند، دیگری امکان کار آفلاین است، بنابراین نیازی به آپلود تصاویر زمانی که دستگاه اتصال اینترنت ندارد نیست. عیب این است که مدل خود را بهبود دهید - شما باید روش دیگری برای ذخیره تصاویر پیاده‌سازی کنید که بتواند به‌صورت دستی دوباره طبقه‌بندی شود تا طبقه‌بند تصویر را بهبود داده و دوباره آموزش دهد. ✅ به روش‌هایی برای آپلود تصاویر برای آموزش مجدد طبقه‌بند فکر کنید. --- ## 🚀 چالش اجرای مدل‌های هوش مصنوعی روی دستگاه‌های edge می‌تواند سریع‌تر از اجرا در ابر باشد - پرش شبکه کوتاه‌تر است. همچنین ممکن است کندتر باشد زیرا سخت‌افزاری که مدل را اجرا می‌کند ممکن است به‌اندازه ابر قدرتمند نباشد. زمان‌بندی انجام دهید و مقایسه کنید که آیا فراخوانی دستگاه edge شما سریع‌تر یا کندتر از فراخوانی ابر است؟ به دلایل تفاوت یا عدم تفاوت فکر کنید. روش‌هایی برای اجرای سریع‌تر مدل‌های هوش مصنوعی روی edge با استفاده از سخت‌افزار تخصصی تحقیق کنید. ## آزمون پس از درس [آزمون پس از درس](https://black-meadow-040d15503.1.azurestaticapps.net/quiz/34) ## مرور و مطالعه خود * درباره کانتینرها بیشتر بخوانید در [صفحه مجازی‌سازی سطح سیستم‌عامل در ویکی‌پدیا](https://wikipedia.org/wiki/OS-level_virtualization) * درباره محاسبات لبه بیشتر بخوانید، با تأکید بر اینکه چگونه 5G می‌تواند به گسترش محاسبات لبه کمک کند، در [مقاله "محاسبات لبه چیست و چرا اهمیت دارد؟" در سایت NetworkWorld](https://www.networkworld.com/article/3224893/what-is-edge-computing-and-how-its-changing-the-network.html) * اطلاعات بیشتری درباره اجرای خدمات هوش مصنوعی در IoT Edge کسب کنید با تماشای [قسمت "یاد بگیرید چگونه از Azure IoT 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) ## تکلیف [اجرای خدمات دیگر در لبه](assignment.md) **سلب مسئولیت**: این سند با استفاده از سرویس ترجمه هوش مصنوعی [Co-op Translator](https://github.com/Azure/co-op-translator) ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.