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/fa/4-manufacturing/lessons/3-run-fruit-detector-edge/README.md

54 KiB

اجرای آشکارساز میوه در لبه

نمای کلی درس به صورت اسکچ‌نوت

اسکچ‌نوت توسط نیتیا ناراسیمهان. برای مشاهده نسخه بزرگ‌تر روی تصویر کلیک کنید.

این ویدیو نمای کلی از اجرای دسته‌بندی‌کننده‌های تصویر بر روی دستگاه‌های IoT را ارائه می‌دهد، موضوعی که در این درس پوشش داده شده است.

Custom Vision AI on Azure IoT Edge

آزمون پیش از درس

آزمون پیش از درس

مقدمه

در درس قبلی، از دسته‌بندی‌کننده تصویر خود برای تشخیص میوه‌های رسیده و نارس استفاده کردید و تصویری که توسط دوربین دستگاه IoT شما گرفته شده بود را از طریق اینترنت به یک سرویس ابری ارسال کردید. این تماس‌ها زمان‌بر هستند، هزینه دارند و بسته به نوع داده‌های تصویری که استفاده می‌کنید، ممکن است مسائل مربوط به حریم خصوصی را به همراه داشته باشند.

در این درس، یاد خواهید گرفت که چگونه مدل‌های یادگیری ماشین (ML) را در لبه اجرا کنید - یعنی بر روی دستگاه‌های IoT که در شبکه خودتان اجرا می‌شوند، نه در فضای ابری. شما مزایا و معایب محاسبات لبه در مقابل محاسبات ابری، نحوه استقرار مدل هوش مصنوعی در لبه و نحوه دسترسی به آن از دستگاه IoT خود را خواهید آموخت.

در این درس موارد زیر را پوشش خواهیم داد:

محاسبات لبه

محاسبات لبه شامل داشتن کامپیوترهایی است که داده‌های IoT را تا حد ممکن نزدیک به جایی که داده‌ها تولید می‌شوند پردازش می‌کنند. به جای اینکه این پردازش در فضای ابری انجام شود، به لبه فضای ابری - شبکه داخلی شما - منتقل می‌شود.

یک نمودار معماری که خدمات اینترنتی در فضای ابری و دستگاه‌های IoT در یک شبکه محلی را نشان می‌دهد

در درس‌های قبلی، شما دستگاه‌هایی داشتید که داده‌ها را جمع‌آوری کرده و برای تجزیه و تحلیل به فضای ابری ارسال می‌کردند، و در آنجا توابع بدون سرور یا مدل‌های هوش مصنوعی اجرا می‌شدند.

یک نمودار معماری که دستگاه‌های IoT در یک شبکه محلی را نشان می‌دهد که به دستگاه‌های لبه متصل می‌شوند، و این دستگاه‌های لبه به فضای ابری متصل می‌شوند

محاسبات لبه شامل انتقال برخی از خدمات ابری به کامپیوترهایی است که در همان شبکه دستگاه‌های IoT اجرا می‌شوند و فقط در صورت نیاز با فضای ابری ارتباط برقرار می‌کنند. به عنوان مثال، می‌توانید مدل‌های هوش مصنوعی را بر روی دستگاه‌های لبه اجرا کنید تا میوه‌ها را از نظر رسیده بودن تحلیل کنید و فقط تحلیل‌ها را به فضای ابری ارسال کنید، مانند تعداد میوه‌های رسیده در مقابل نارس.

به برنامه‌های IoT که تاکنون ساخته‌اید فکر کنید. کدام بخش‌های آن‌ها می‌توانند به لبه منتقل شوند؟

مزایا

مزایای محاسبات لبه عبارتند از:

  1. سرعت - محاسبات لبه برای داده‌های حساس به زمان ایده‌آل است، زیرا اقدامات در همان شبکه دستگاه انجام می‌شود، نه از طریق تماس‌های اینترنتی. این امر سرعت بالاتری را امکان‌پذیر می‌کند، زیرا شبکه‌های داخلی می‌توانند با سرعت بسیار بیشتری نسبت به اتصالات اینترنتی اجرا شوند و داده‌ها مسافت کوتاه‌تری را طی می‌کنند.

    💁 با وجود استفاده از کابل‌های نوری برای اتصالات اینترنتی که امکان انتقال داده‌ها با سرعت نور را فراهم می‌کنند، داده‌ها ممکن است زمان‌بر باشند تا در سراسر جهان به ارائه‌دهندگان فضای ابری برسند. به عنوان مثال، اگر داده‌ها را از اروپا به خدمات ابری در ایالات متحده ارسال کنید، حداقل 28 میلی‌ثانیه طول می‌کشد تا داده‌ها از طریق کابل نوری اقیانوس اطلس عبور کنند، و این زمان شامل انتقال داده‌ها به کابل اقیانوس اطلس، تبدیل سیگنال‌های الکتریکی به نوری و بالعکس در طرف دیگر، و سپس از کابل نوری به ارائه‌دهنده فضای ابری نمی‌شود.

    محاسبات لبه همچنین به ترافیک شبکه کمتری نیاز دارد، که خطر کاهش سرعت داده‌ها به دلیل ازدحام در پهنای باند محدود اتصال اینترنت را کاهش می‌دهد.

  2. دسترسی از راه دور - محاسبات لبه زمانی کار می‌کند که اتصال محدود یا وجود ندارد، یا اتصال بسیار گران است که نمی‌توان به طور مداوم از آن استفاده کرد. به عنوان مثال، هنگام کار در مناطق بحران انسانی که زیرساخت‌ها محدود هستند یا در کشورهای در حال توسعه.

  3. هزینه‌های کمتر - جمع‌آوری، ذخیره‌سازی، تحلیل داده‌ها و انجام اقدامات بر روی دستگاه لبه، استفاده از خدمات ابری را کاهش می‌دهد که می‌تواند هزینه کلی برنامه IoT شما را کاهش دهد. اخیراً افزایش دستگاه‌هایی که برای محاسبات لبه طراحی شده‌اند، مانند بردهای شتاب‌دهنده هوش مصنوعی مانند Jetson Nano از NVIDIA، مشاهده شده است که می‌توانند بارهای کاری هوش مصنوعی را با استفاده از سخت‌افزار مبتنی بر GPU بر روی دستگاه‌هایی که کمتر از 100 دلار هزینه دارند اجرا کنند.

  4. حریم خصوصی و امنیت - با محاسبات لبه، داده‌ها در شبکه شما باقی می‌مانند و به فضای ابری آپلود نمی‌شوند. این امر اغلب برای اطلاعات حساس و قابل شناسایی شخصی ترجیح داده می‌شود، به ویژه به این دلیل که داده‌ها پس از تحلیل نیازی به ذخیره شدن ندارند، که خطر نشت داده‌ها را به شدت کاهش می‌دهد. مثال‌ها شامل داده‌های پزشکی و فیلم‌های دوربین‌های امنیتی هستند.

  5. مدیریت دستگاه‌های ناامن - اگر دستگاه‌هایی با نقص‌های امنیتی شناخته‌شده دارید که نمی‌خواهید مستقیماً به شبکه یا اینترنت متصل شوند، می‌توانید آن‌ها را به یک شبکه جداگانه متصل کنید که به یک دستگاه IoT Edge به عنوان دروازه متصل است. این دستگاه لبه سپس می‌تواند به شبکه گسترده‌تر شما یا اینترنت نیز متصل شود و جریان داده‌ها را مدیریت کند.

  6. پشتیبانی از دستگاه‌های ناسازگار - اگر دستگاه‌هایی دارید که نمی‌توانند به IoT Hub متصل شوند، به عنوان مثال دستگاه‌هایی که فقط می‌توانند از طریق اتصالات HTTP متصل شوند یا دستگاه‌هایی که فقط بلوتوث دارند، می‌توانید از یک دستگاه IoT Edge به عنوان دستگاه دروازه استفاده کنید که پیام‌ها را به IoT Hub ارسال می‌کند.

تحقیق کنید: چه مزایای دیگری ممکن است برای محاسبات لبه وجود داشته باشد؟

معایب

معایب محاسبات لبه، جایی که ممکن است فضای ابری گزینه ترجیحی باشد:

  1. مقیاس‌پذیری و انعطاف‌پذیری - محاسبات ابری می‌تواند به نیازهای شبکه و داده‌ها در زمان واقعی با افزودن یا کاهش سرورها و منابع دیگر تنظیم شود. برای افزودن کامپیوترهای لبه بیشتر نیاز به افزودن دستی دستگاه‌های بیشتر است.

  2. قابلیت اطمینان و انعطاف‌پذیری - محاسبات ابری سرورهای متعدد را اغلب در مکان‌های مختلف برای افزونگی و بازیابی از فاجعه فراهم می‌کند. برای داشتن همان سطح افزونگی در لبه نیاز به سرمایه‌گذاری‌های بزرگ و کار پیکربندی زیادی است.

  3. نگهداری - ارائه‌دهندگان خدمات ابری نگهداری سیستم و به‌روزرسانی‌ها را ارائه می‌دهند.

تحقیق کنید: چه معایب دیگری ممکن است برای محاسبات لبه وجود داشته باشد؟

معایب در واقع مخالف مزایای استفاده از فضای ابری هستند - شما باید این دستگاه‌ها را خودتان بسازید و مدیریت کنید، به جای اینکه به تخصص و مقیاس ارائه‌دهندگان فضای ابری تکیه کنید.

برخی از خطرات با ماهیت محاسبات لبه کاهش می‌یابند. به عنوان مثال، اگر یک دستگاه لبه در یک کارخانه دارید که داده‌ها را از ماشین‌آلات جمع‌آوری می‌کند، نیازی به فکر کردن در مورد برخی سناریوهای بازیابی از فاجعه ندارید. اگر برق کارخانه قطع شود، نیازی به دستگاه لبه پشتیبان ندارید، زیرا ماشین‌هایی که داده‌هایی را تولید می‌کنند که دستگاه لبه پردازش می‌کند نیز بدون برق خواهند بود.

برای سیستم‌های IoT، اغلب ترکیبی از محاسبات ابری و لبه را می‌خواهید، و هر سرویس را بر اساس نیازهای سیستم، مشتریان و نگهدارندگان آن استفاده می‌کنید.

Azure IoT Edge

لوگوی Azure IoT Edge

Azure IoT Edge یک سرویس است که می‌تواند به شما کمک کند تا بارهای کاری را از فضای ابری به لبه منتقل کنید. شما یک دستگاه را به عنوان دستگاه لبه تنظیم می‌کنید و از فضای ابری می‌توانید کد را به آن دستگاه لبه مستقر کنید. این امکان را به شما می‌دهد تا قابلیت‌های فضای ابری و لبه را ترکیب کنید.

🎓 بارهای کاری اصطلاحی است برای هر سرویسی که نوعی کار انجام می‌دهد، مانند مدل‌های هوش مصنوعی، برنامه‌ها یا توابع بدون سرور.

به عنوان مثال، می‌توانید یک دسته‌بندی‌کننده تصویر را در فضای ابری آموزش دهید، سپس از فضای ابری آن را به یک دستگاه لبه مستقر کنید. دستگاه 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 مستقر کنید. هنگامی که آن‌ها در یک کانتینر اجرا می‌شوند، می‌توان به آن‌ها با استفاده از همان API REST نسخه ابری دسترسی داشت، اما با نقطه پایانی که به دستگاه لبه‌ای که کانتینر را اجرا می‌کند اشاره دارد.

ثبت یک دستگاه 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 فقط کانتینرهای لینوکس را اجرا می‌کند. این می‌تواند بر روی لینوکس اجرا شود یا بر روی ویندوز با استفاده از ماشین‌های مجازی لینوکس.

  • اگر از Raspberry Pi به عنوان دستگاه IoT خود استفاده می‌کنید، این دستگاه نسخه پشتیبانی‌شده‌ای از لینوکس را اجرا می‌کند و می‌تواند IoT Edge Runtime را میزبانی کند. راهنمای نصب Azure IoT Edge برای لینوکس در مستندات مایکروسافت را دنبال کنید تا IoT Edge را نصب کرده و رشته اتصال را تنظیم کنید.

    💁 به یاد داشته باشید، سیستم عامل Raspberry Pi یک نسخه از لینوکس Debian است.

  • اگر از Raspberry Pi استفاده نمی‌کنید، اما یک کامپیوتر لینوکس دارید، می‌توانید IoT Edge Runtime را اجرا کنید. راهنمای نصب Azure IoT Edge برای لینوکس در مستندات مایکروسافت را دنبال کنید تا IoT Edge را نصب کرده و رشته اتصال را تنظیم کنید.

  • اگر از ویندوز استفاده می‌کنید، می‌توانید IoT Edge Runtime را در یک ماشین مجازی لینوکس نصب کنید با دنبال کردن بخش نصب و راه‌اندازی IoT Edge Runtime در بخش سریع شروع استقرار اولین ماژول IoT Edge در دستگاه ویندوز در مستندات مایکروسافت. می‌توانید زمانی که به بخش استقرار یک ماژول رسیدید متوقف شوید.

  • اگر از macOS استفاده می‌کنید، می‌توانید یک ماشین مجازی (VM) در فضای ابری ایجاد کنید تا برای دستگاه IoT Edge خود استفاده کنید. این‌ها کامپیوترهایی هستند که می‌توانید در فضای ابری ایجاد کنید و از طریق اینترنت به آن‌ها دسترسی داشته باشید. می‌توانید یک VM لینوکس ایجاد کنید که IoT Edge نصب شده باشد. راهنمای ایجاد یک ماشین مجازی که IoT Edge اجرا می‌کند را دنبال کنید تا دستورالعمل‌های مربوط به این کار را دریافت کنید.

صادرات مدل شما

برای اجرای دسته‌بندی‌کننده در لبه، باید از Custom Vision صادر شود. Custom Vision می‌تواند دو نوع مدل تولید کند - مدل‌های استاندارد و مدل‌های فشرده. مدل‌های فشرده از تکنیک‌های مختلفی برای کاهش اندازه مدل استفاده می‌کنند، که آن را به اندازه‌ای کوچک می‌کند که بتوان آن را دانلود و بر روی دستگاه‌های IoT مستقر کرد.

هنگامی که دسته‌بندی‌کننده تصویر را ایجاد کردید، از دامنه غذا استفاده کردید، نسخه‌ای از مدل که برای آموزش بر روی تصاویر غذا بهینه شده است. در Custom Vision، می‌توانید دامنه پروژه خود را تغییر دهید و از داده‌های آموزشی خود برای آموزش یک مدل جدید با دامنه جدید استفاده کنید. همه دامنه‌هایی که توسط Custom Vision پشتیبانی می‌شوند به صورت استاندارد و فشرده در دسترس هستند.

وظیفه - آموزش مدل خود با استفاده از دامنه غذا (فشرده)

  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 را انتخاب کنید و آخرین نسخه‌ای که با دامنه compact آموزش داده شده است را پیدا کنید.

  2. دکمه Export را در بالا انتخاب کنید.

  3. گزینه DockerFile را انتخاب کنید و نسخه‌ای که با دستگاه edge شما مطابقت دارد را انتخاب کنید:

    • اگر IoT Edge را روی یک کامپیوتر لینوکس، کامپیوتر ویندوز یا ماشین مجازی اجرا می‌کنید، نسخه 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 را نصب کنید. پس از نصب، مطمئن شوید که در حال اجرا است.

وظیفه - ایجاد یک منبع رجیستری کانتینر

  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> را با نامی که برای رجیستری کانتینر خود استفاده کرده‌اید جایگزین کنید.

    💁 اگر روی لینوکس یا 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> را با نامی که برای رجیستری کانتینر خود استفاده کرده‌اید جایگزین کنید.

    💁 اگر روی لینوکس اجرا می‌کنید ممکن است نیاز به استفاده از 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 شما مستقر شود. برای استقرار، باید یک manifest استقرار تعریف کنید - یک سند JSON که ماژول‌هایی که به دستگاه edge مستقر خواهند شد را لیست می‌کند.

وظیفه - ایجاد manifest استقرار

  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. از پوشه‌ای که manifest استقرار شما در آن قرار دارد، دستور زیر را اجرا کنید:

    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 را در یک کانتینر لینوکس روی ویندوز اجرا می‌کنید، مراحل موجود در راهنمای تأیید پیکربندی موفقیت‌آمیز را دنبال کنید تا به دستگاه IoT Edge متصل شوید.

    • اگر IoT Edge را روی یک ماشین مجازی اجرا می‌کنید، می‌توانید با استفاده از adminUsername و password که هنگام ایجاد VM تنظیم کرده‌اید و با استفاده از آدرس IP یا نام DNS به ماشین SSH کنید:

      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 را پیدا کنید:

    • اگر روی همان ماشینی هستید که IoT Edge روی آن اجرا می‌شود، می‌توانید از localhost به‌عنوان نام میزبان استفاده کنید.
    • اگر از یک ماشین مجازی استفاده می‌کنید، می‌توانید از آدرس IP یا نام DNS ماشین مجازی استفاده کنید.
    • در غیر این صورت می‌توانید آدرس IP ماشینی که IoT Edge روی آن اجرا می‌شود را پیدا کنید:
  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 ترجمه شده است. در حالی که ما تلاش می‌کنیم دقت را حفظ کنیم، لطفاً توجه داشته باشید که ترجمه‌های خودکار ممکن است شامل خطاها یا نادرستی‌ها باشند. سند اصلی به زبان اصلی آن باید به عنوان منبع معتبر در نظر گرفته شود. برای اطلاعات حساس، توصیه می‌شود از ترجمه حرفه‌ای انسانی استفاده کنید. ما مسئولیتی در قبال سوء تفاهم‌ها یا تفسیرهای نادرست ناشی از استفاده از این ترجمه نداریم.