0% found this document useful (0 votes)
84 views52 pages

Final Project (Docker) - Afzali

Uploaded by

amirhosein
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
84 views52 pages

Final Project (Docker) - Afzali

Uploaded by

amirhosein
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 52

1

‫دانشکده مهندسی برق و کامپیوتر ‪ -‬گروه مهندسی کامپیوتر‬

‫پایاننامه پروژه کارشناسی‬

‫رشته ‪ :‬مهندسی کامپیوتر‬

‫عنوان ‪:‬‬

‫استفاده از ابزار "داکر" برای پیادهسازی مدل های یادگیری عمیق‬

‫استاد راهنما ‪:‬‬


‫دکتر راضیه راستگو‬

‫دانشجو ‪:‬‬

‫محمدنوید افضلی‬

‫شماره دانشجویی‪:‬‬

‫‪9711126012‬‬

‫نیمسال اول سال تحصیلی ‪01-02‬‬

‫‪2‬‬
‫فهرست مطالب‬
‫چکیده ‪7 ................................ ................................ ................................ ................................‬‬
‫فصل اول ‪8 ............................ ................................ ................................ ................................‬‬
‫مقدمه ‪8 ................................. ................................ ................................ ................................‬‬
‫‪ 1-1‬داکر چیست؟ ‪9 ........... ................................ ................................ ................................‬‬
‫‪1-1-1‬تاریخچه کوتاهی از داکر ‪9 .............. ................................ ................................ :‬‬
‫‪ 2 -1-1‬نگهدارنده چیست؟ ‪10 ...................... ................................ ................................‬‬
‫‪ 3 -1-1‬ماشین مجازی چیست؟ ‪10 ............. ................................ ................................‬‬
‫‪ 4-1-1‬تفاوت داکر و ماشین مجازی در چیست؟ ‪11 ................... ................................‬‬
‫‪ 2-1‬دلیل نیاز به استفاده از ابزار داکر چیست؟ ‪11 .................... ................................‬‬
‫‪ 3-1‬کاربرد های داکر ‪13 ................................. ................................ ................................‬‬
‫‪ 4-1‬مزایا و معایب داکر ‪14 .............................. ................................ ................................‬‬
‫‪ 1 -4-1‬مزایا‪14 ............. ................................ ................................ ................................ :‬‬
‫‪ 2 -4-1‬معایب‪14 ......... ................................ ................................ ................................ :‬‬
‫‪ 5-1‬دلیل محبوبیت داکر ‪15 .......................... ................................ ................................‬‬
‫‪ 6-1‬اجزای اصلی داکر ‪15 .................................. ................................ ................................‬‬
‫‪ 1-6-1‬موتور داکر ‪15 ...................................... ................................ ................................‬‬
‫‪ 2-6-1‬کلینت داکر ‪16 .................................. ................................ ................................‬‬
‫‪ 3-6-1‬داکر دیمون ‪16 .................................... ................................ ................................‬‬
‫‪ 5-6-1‬داکر ایمیج ‪17 .................................... ................................ ................................‬‬
‫‪ 6-6-1‬داکر کانتینر ‪18 .................................. ................................ ................................‬‬
‫‪ 7-6-1‬داکر هاب ‪19 ........ ................................ ................................ ................................‬‬

‫‪3‬‬
‫‪ 8-6-1‬سی گروپ ها ‪19 ................................ ................................ ................................‬‬
‫‪ 9-6-1‬نیم اسپیس ها ‪20 .............................. ................................ ................................‬‬
‫‪ 7-1‬مهم ترین دستورات داکر ‪20 ..................... ................................ ................................‬‬
‫‪ 1-7-1‬دستور ‪20 ............... ................................ ................................ : DOCKER INFO‬‬
‫‪ 3-7-1‬دستور ‪22 ......... ................................ ................................ : DOCKER IMAGES‬‬
‫‪ 4-7-1‬دستور ‪22 ............... ................................ ................................ : DOCKER PULL‬‬
‫‪ 5-7-1‬دستور ‪23 .............. ................................ ................................ : DOCKER PUSH‬‬
‫‪ 6-7-1‬دستور ‪23 ............... ................................ ................................ : DOCKER RUN‬‬
‫‪ 7-7-1‬دستور ‪23 ............. ................................ ................................ : DOCKER BUILD‬‬
‫‪ 8-7-1‬دستور ‪24 ....................................... ................................ : DOCKER COMMIT‬‬
‫فصل دوم ‪25 ......................... ................................ ................................ ................................‬‬
‫داکر و یادگیری عمیق ‪25 ................................... ................................ ................................‬‬
‫‪ 1-2‬هوش مصنوعی چیست؟ ‪26 ....................... ................................ ................................‬‬
‫‪ 2-2‬یادگیری ماشین ‪27 .................................... ................................ ................................‬‬
‫‪ 3-2‬یادگیری عمیق ‪28 ...................................... ................................ ................................‬‬
‫‪ 4-2‬تفاوت های یادگیری ماشین و یادگیری عمیق ‪29 ................. ................................‬‬
‫‪ 5-2‬شبکه های عصبی ‪29 ................................. ................................ ................................‬‬
‫‪1-5-2‬شبکه های عصبی کانولوشن ‪30 ............ ................................ ................................‬‬
‫‪ 7-2‬کانولوشن ‪31 ................ ................................ ................................ ................................‬‬
‫‪ 8-2‬انواع شبکه های عصبی کانولوشن ‪32 ....................................... ................................‬‬
‫‪ 9-2‬کاربرد های شبکه های عصبی کانولوشن ‪32 ........................... ................................‬‬
‫‪ 10-2‬چرا از کانتینر های داکر در یادگیری عمیق استفاده میکنیم؟ ‪33 .....................‬‬

‫‪4‬‬
‫‪ -1-10-2‬ساخت نگهدارنده ‪34 ..................... ................................ ................................‬‬
‫فصل سوم ‪36 ........................ ................................ ................................ ................................‬‬
‫پیاده سازی یادگیری ماشین(عمیق) با استفاده از داکر ‪36 ............ ................................‬‬
‫‪ 1-3‬پروژه یادگیری ماشین ‪37 .......................... ................................ ................................‬‬
‫‪ 1-1-3‬مقدمات لزم برای ساخت تصویر داکر ‪37 ......................... ................................‬‬
‫‪ 2-1-3‬شروع ساخت تصویر ‪38 ........................ ................................ ................................‬‬
‫‪ 3-1-3‬اجرای تصویر روی نگهدارنده ‪41 ......... ................................ ................................‬‬
‫‪ 2-3‬پروژه یادگیری عمیق ‪42 ............................ ................................ ................................‬‬
‫‪ 1-2-3‬مقدمه ‪42 ............. ................................ ................................ ................................‬‬
‫‪ 2-2-3‬شروع ساخت تصویر ‪42 ..................... ................................ ................................‬‬
‫‪ 3-3‬جمع بندی و نتیجه گیری ‪47 ................... ................................ ................................‬‬
‫سخن پایانی ‪48 .................... ................................ ................................ ................................‬‬
‫منابع ‪49 ................................ ................................ ................................ ................................‬‬
‫‪51 ................. ................................ ................................ ................................ ABSTRACT‬‬

‫‪5‬‬
‫فهرست اشکال‬
‫شکل ‪ 1-1‬تفاوت عملکرد داکر و ماشین مجازی ‪11 ....................... ................................‬‬
‫شکل ‪ 2-1‬معماری داخلی داکر ‪12 ................... ................................ ................................‬‬
‫شکل ‪ 3-1‬عملکرد داکر ؛ از ساخت نگهدارنده تا ذخیره سازی و استفاده از آن ‪13 ...‬‬
‫شکل ‪ 4-1‬تعریف داکر رجیستری ‪17 ............... ................................ ................................‬‬
‫شکل ‪ 5-1‬تعریف و نحوه عملکرد داکر ایمیج ‪18 ............................ ................................‬‬
‫شکل ‪ 6-1‬تعریف و نحوه عملکرد نگهدارنده داکر ‪19 ..................... ................................‬‬
‫شکل ‪ - 7-1‬دستور ‪21 ........... ................................ ................................ docker info‬‬
‫شکل ‪ - 8-1‬دستور ‪21 ............... ................................ ................................ docker ps‬‬
‫شکل ‪ - 9-1‬دستور ‪22 ................................... ................................ docker images‬‬
‫شکل ‪ - 10-1‬دستور ‪22 ........ ................................ ................................ docker pull‬‬
‫شکل ‪ - 11-1‬دستور ‪23 ......... ................................ ................................ docker run‬‬
‫شکل ‪ 1-2‬نمودار ون هوش مصنوعی‪،‬یادگیری ماشین و یادگیری عمیق ‪27 ..............‬‬
‫شکل ‪ 2-2‬عمل کانولوشن ‪31 ............................ ................................ ................................‬‬
‫شکل ‪ 3-2‬پارامتر های اصلی کانولوشن ‪32 ...................................... ................................‬‬
‫شکل ‪ 1-3‬داکرفایل ‪38 ....................................... ................................ ................................‬‬
‫شکل ‪ 2-3‬مراحل ساخت تصویر ‪40 ................ ................................ ................................‬‬
‫شکل ‪ 3-3‬تصویر های موجود در مخزن محلی (دریافت شده ‪40) Docker hub‬‬
‫شکل ‪ 4-3‬اجرای تصویر روی نگهدارنده ‪41 ................................... ................................‬‬
‫شکل ‪ 5-3‬محتویات داکرفایل ‪43 .................... ................................ ................................‬‬
‫شکل ‪ 6-3‬اجرای تصویر‪44 ........................... ................................ ................................ 2‬‬
‫شکل ‪ 7-3‬اجرای برنامه با کانتینر ‪45 ............... ................................ ................................‬‬
‫شکل ‪ 8-3‬تصویر نمونه ‪45 ................................. ................................ ................................‬‬
‫شکل ‪ 9-3‬خروجی کانتینر تحت وب ‪46 .......... ................................ ................................‬‬

‫‪6‬‬
‫چکیده‬
‫در طی سالیان اخیر و به ویژه امروزه‪ ،‬از داکر به عنوان یکی از ابزارهای مهم و کاربردی در حوزه‬
‫برنامهنویسی یاد می شود‪ .‬داکر به عنوان ابزاری برای ساخت و اجرای برنامهها در محیطهای‬
‫نگهدارندهای باعث افزایش سرعت و بهرهوری قابل توجه برنامهها گردیدهاست‪ .‬با ابزار داکر دیگر‬
‫نگرانی بابت تفاوت نسخههای متعلقات برنامه و کتابخانههای آن وجود نخواهد داشت‪ .‬هماکنون این‬
‫ابزار در توسعهی برنامه های مربوط به هوش مصنوعی و یادگیری ماشین‪/‬عمیق نیز قابل استفاده‬
‫است و توسعهدهندگان این حوزه میتوانند برنامه های خود را بدون دغدغه از طریق داکر با همکاران‬
‫خود به اشتراک بگذارند‪.‬‬

‫همچنین داکر برای این پروژهها بسیار مفید است؛ زیرا پروژه های یادگیری ماشین‪/‬عمیق دارای‬
‫کتابخانههای زیادی با چندین نسخه هستند‪ .‬از طرف دیگر‪ ،‬آنها در اکثر دستگاهها یکسان نیستند‪،‬‬
‫بنابراین در این موارد داکر به ما کمک شایانی میکند‪ .‬در این پروژه قصد داریم با استفاده از ابزارهای‬
‫موجود در داکر‪ ،‬یک نگهدارنده روی مدل یادگیری ماشین‪/‬عمیق خود ساخته و پیادهسازی کنیم‪.‬‬
‫در واقع ایدهی این پروژه ساخت سریع و آسان نگهدارنده داکر با یک مدل یادگیری عمیق ساده و‬
‫اجرای آن است‪ .‬پیادهسازی این پروژه در ‪https://github.com/NavidAfzali/Docker-‬‬
‫‪ for-deep-learning/tree/master‬موجود است‪.‬‬

‫‪7‬‬
‫فصل اول‬
‫مقدمه‬

‫‪8‬‬
‫‪ 1-1‬داکر‪ 1‬چیست؟‬
‫داکر پروژهای متن باز‪ 2‬برای توسعه و اجرای برنامهها بر مبنای نگهدارندهها میباشد و عملیات‬
‫ساخت‪ ،3‬اجرا‪ 4‬و مدیریت برنامه را تسهیل میبخشد‪ .‬داکر میتواند یک برنامه و متعلقات آن را‬
‫(کتابخانهها و ‪ )...‬در یک نگهدارنده مجازی اجرا کند‪ .‬این ابزار توسط زبان برنامهنویسی ‪ GO‬توسعه‬
‫است‪[3] .‬‬ ‫یافته‬
‫‪1-1-1‬تاریخچه کوتاهی از داکر‬
‫در سال ‪ 2006‬پروسس نگهدارنده‪ 5‬ارائه شد‪ .‬در سال ‪ LXC6 2008‬ارائه شد که این موضوع مقدمهای‬
‫مناسب و خوب برای استفاده از نگهدارندهها بود‪ .‬در سال ‪ 2013‬سرویس داکر ارائه شد‪ .‬در همین‬
‫سال شرکت بزرگ رد هت‪ 7‬اعلم کرد که پروژههای لینوکس‪ ،8‬اوپن شیفت‪ 9‬و فدورا‪ 10‬را به سمت‬
‫این پروژه خواهد برد و از این پروژه حمایت کرد‪ .‬در سال ‪ 2014‬شرکت مایکروسافت اعلم کرد که‬
‫نسخهی آینده ویندوز سرو ر خودش را به سمتی خواهد برد که بتواند داکر کلینت‪11‬را پشتیبانی‬
‫کند‪ .‬شرکت ‪ IBM‬نیز در همین سال اعلم کرد که برنامهریزی خواهد کرد تا در ‪ IBM CLOUD‬از‬
‫این سرویس استفاده کند و در همین سال شراکت خودش را با سرویس داکر اعلم کرد‪ .‬در سال‬
‫‪ 2016‬شرکت داکر سرویس تجاری‪ 12‬خود را ارائه کرد‪ .‬در حال حاضر سرویس داکر دارای جامعهی‬
‫متن باز بسیار پویا و کاملی میباشد که بسیار فعال بوده و همواره در حال رشد و شکوفایی بیشتر‬
‫میباشد ]‪. [4‬‬

‫در ادامه به تعریف نگهدارنده و ماشین مجازی میپردازیم‪.‬‬

‫‪1‬‬
‫‪Docker‬‬
‫‪2‬‬
‫‪Open source‬‬
‫‪3‬‬
‫‪build‬‬
‫‪4‬‬
‫‪run‬‬
‫‪5‬‬
‫‪Process container‬‬
‫‪6‬‬
‫‪Linux container‬‬
‫‪7‬‬
‫‪Red hat‬‬
‫‪8‬‬
‫‪Linux‬‬
‫‪9‬‬
‫‪Open Shift‬‬
‫‪10‬‬
‫‪Fedora‬‬
‫‪11‬‬
‫‪Docker client‬‬
‫‪12‬‬
‫‪Commercial‬‬

‫‪9‬‬
‫‪ 2-1-1‬نگهدارنده چیست؟‬
‫نگهدارنده‪ 1‬یک واحد نرمافزاری استاندارد است که کدها و تمام متعلقات آن را بستهبندی میکند‪.‬‬
‫به این ترتیب‪ ،‬اپلیکیشن در محیطهای محاسباتی مختلف‪ ،‬سریعتر و با اطمینان بیشتر اجرا میشود‪.‬‬
‫هر نگهدارنده یک محیط ایزوله شده را مشابه یک ماشین مجازی‪ 2‬فراهم میکند‪ .‬برخلف‬
‫هسته‪3‬‬ ‫ماشینهای مجازی‪ ،‬نگهدارندههای داکر یک سیستمعامل کامل را اجرا نمیکنند‪ ،‬بلکه‬
‫میزبان را به اشتراک میگذارند و مجازیسازی را در یک سطح نرمافزاری انجام میدهند‪.‬‬
‫برای درک بهتر نگهدارندهها‪ ،‬بهتر است از یک مثال استفاده کنیم‪ .‬فرض کنید در شرکتی مشغول‬
‫به کار هستید و ناهار خود را هر روز در خانه درست کرده و آن را داخل یک ظرف به شرکت میبرید‬
‫تا آنجا میل بفرمایید‪ .‬دیگر لزم نیست داخل شرکت شروع به پختن غذا کنید چون احتمال زمان‬
‫زیادی را از شما میگیرد‪ .‬کار نگهدارنده هم تا حدودی شبیه به این است‪ .‬شما پروژه خود را (غذا)‬
‫داخل نگهدارنده (ظرف غذا) قرار داده و آن را هر کجا که دوست داشتید (مثل شرکت) میبرید‪.‬‬
‫به لطف این تکنیک‪ ،‬برنامهنویس خیالش راحت است که برنامه او میتواند در سیستمهای دیگر‬
‫بدون نیاز به تنظیمات خاص یا ابزارهای جانبی اجرا شود‪.‬‬
‫‪ 3-1-1‬ماشین مجازی چیست؟‬
‫ماشین مجازی برنامهای است که به عنوان یک رایانه مجازی عمل میکند‪ .‬این برنامه بر روی‬
‫سیستمعامل فعلی شما اجرا میشود و سختافزاری مجازی برای یک سیستمعامل میهمان ارائه‬
‫میکند‪ .‬از نگاه سیستمعامل مهمان‪ ،‬ماشین مجازی مشابه یک رایانه واقعی عمل میکند‪ .‬ماشینهای‬
‫مجازی از سختافزار های سیستم همچون ‪ ، CPU‬حافظه ‪ RAM‬و سایر سختافزار ها استفاده‬
‫می کند‪ .‬البته نحوه عملکرد داکر با ماشین مجازی متفاوت است که در ادامه شرح داده می شود‪.‬‬

‫‪1‬‬
‫‪Container‬‬
‫‪2‬‬
‫‪Virtual machine‬‬
‫‪3‬‬
‫‪Kernel‬‬

‫‪10‬‬
‫‪ 4-1-1‬تفاوت داکر و ماشین مجازی در چیست؟‬

‫شکل ‪ 2-1‬تفاوت عملکرد داکر و ماشین مجازی‬

‫در ماشین مجازی‪ ،‬قسمتی از سخت افزار سیستم به ماشین مجازی اختصاص داده میشود و روی‬
‫آن یک سیستمعامل کامل نصب و اجرا میشود‪ .‬در واقع میتوان گفت در ماشین مجازی امکانات‬
‫سختافزاری سیستم تقسیم میشود و بر روی هر قسمت‪ ،‬سیستمعامل بخصوصی به اجرا در می‬
‫آید‪ ،‬اما در داکر این طور نیست‪ .‬در داکر امکانات سختافزاری به تناسب نیاز هر نگهدارنده به صورت‬
‫موقت اختصاص داده میشود و داکر این امکان را فراهم میآورد که برنامهها روی کرنل سیستمعامل‬
‫اجرا شوند‪ .‬این عمل‪ ،‬بازدهی و کارایی سیستم را تا حد زیادی بال میبرد‪ .‬در این حالت دیگر نیازی‬
‫به نصب پیشنیازها و نیازمندیهایی که برنامهی ما میخواهد و به طور پیشفرض روی سیستم‬
‫وجود ندارد‪ ،‬نیست‪ .‬این سرویس به شما کمک می کند یک محیط را به چند بخش تقسیم کرده و‬
‫و در هر بخش یک برنامه مجزا را اجرا کنید‪.‬‬
‫در ادامه به دلیل نیاز به استفاده از داکر میپردازیم‪.‬‬

‫‪ 2-1‬دلیل نیاز به استفاده از ابزار داکر چیست؟‬


‫با ذکر یک مثال‪ ،‬دلیل نیاز به این ابزار را نشان میدهیم‪ .‬برای مثال‪ ،‬سه اپلیکیشن مختلف مبتنی‬

‫‪11‬‬
‫بر پایتون‪ 1‬وجود دارد که قرار است روی یک سرور میزبانی شوند (چه فیزیکی چه مجازی)‪ .‬همچنین‪،‬‬
‫فرض میکنیم که در هر یک از این برنامهها نسخههای متفاوتی از پایتون استفاده شده‬
‫و کتابخانهها و متعلقات به کار گرفته شده نیز در هر اپلیکیشن با دیگری فرق دارد‪ .‬با توجه به اینکه‬
‫نمیتوان نسخه های مختلفی از پایتون را روی یک ماشین نصب کرد‪ ،‬امکان میزبانی از این سه‬
‫اپلیکیشن روی یک کامپیوتر واحد وجود نخواهد داشت‪ .‬اینجاست که فناوری داکر به کار میآید‪.‬‬
‫دیگر نیاز نیست که چند ماشین مجازی مختلف را برای نسخههای مختلف پایتون اجرا کنیم و‬
‫قسمت زیادی از سختافزار خود را از دست دهیم‪ .‬تنها یک بار داکر را نصب میکنیم؛ داکر‪ ،‬خود‬
‫نگهدارندههای مجزا را ایجاد میکند‪ .‬بدین ترتیب یک محیط را به چند بخش تقسیم کرده و در هر‬
‫قسمت‪ ،‬یک برنامه مجزا را اجرا میکنیم‪.‬‬

‫شکل ‪ 1-1‬معماری داخلی داکر‬

‫‪1‬‬
‫زبان برنامه نویسی ‪Python‬‬

‫‪12‬‬
‫شکل ‪ 2-1‬عملکرد داکر ؛ از ساخت نگهدارنده تا ذخیره سازی و استفاده از آن‬

‫داکر]‪[6‬‬ ‫‪ 3-1‬کاربردهای‬
‫✓ تولید برنامههای سریع و پایدار‬
‫داکر منجر به سادهسازی چرخه حیات توسعه میشود‪ .‬این سادهسازی به وسیله‬
‫فراهم کردن امکان کار در محیطهای استانداردسازی شده برای توسعهدهندگان با‬
‫استفاده از نگهدارندههای محلی فراهم شده است که اپلیکیشنها و خدمات لزم را‬
‫ارائه میدهند‪.‬‬
‫✓ اجرای حجم کاری بیش تر بدون نیاز به ارتقای سختافزار‬
‫داکر کمحجم و سریع است‪ .‬داکر جایگزینی مقرون به صرفه برای ماشینهای‬
‫مجازی مبتنی بر لیه نرمافزاری‪ 1‬به حساب میآید‪ .‬با داکر میتوان ظرفیت‬
‫محاسباتی بیشتری را برای دستیابی به اهداف کسب و کار به کار گرفت‪ .‬داکر‬

‫‪1‬‬
‫‪Hypervisor-Based‬‬

‫‪13‬‬
‫برای محیطهایی با تراکم بال و همچنین برای استقرار نرمافزارهای کوچک و‬
‫متوسط یعنی جایی مناسب است که نیاز به اجرای وظایف بیشتر با منابع کمتر‬
‫وجود داشته باشد‪.‬‬
‫✓ مقیاسپذیری‬
‫نگهدارنده در داکر امکان ایجاد حجم کاری‪1‬قابل حمل را فراهم میسازد‪.‬‬
‫نگهدارندههای داکر میتوانند روی لپتاپ توسعهدهنده‪ ،‬ماشینهای فیزیکی یا‬
‫مجازی در یک مرکز داده‪ ،‬ارائه دهندگان فضای ابری یا روی محیطهای تلفیقی‬
‫اجرا شوند‪.‬‬

‫‪ 4-1‬مزایا و معایب داکر‬


‫در ادامه به مزایا و معایب داکر میپردازیم‪[6] :‬‬

‫‪ 1-4-1‬مزایا‪:‬‬
‫✓ ثبات و پایداری‬
‫✓ صرفهجویی در فضای ذخیرهسازی‬
‫✓ وسعت و انعطاف جامعه توسعهدهندگان‬
‫✓ امکان استفاده در مک و ویندوز‬
‫✓ خودکارسازی‬
‫‪ 2-4-1‬معایب‪:‬‬
‫✓ کمبود در مستندات‬
‫✓ در حال حاضر مشکلت کارکردی برای ‪ Mac‬وجود دارد‬
‫✓ بروز مشکلت در محیطهای غیر بومی‬

‫‪1‬‬
‫‪Workload‬‬

‫‪14‬‬
‫‪ 5-1‬دلیل محبوبیت داکر‬
‫داکر به دلیل راهاندازی بر بستر نگهدارنده کیفیت برنامهها را بالتر برده و همچنین به دلیل قابل‬
‫حمل بودن آن‪ ،‬شرایط استفاده در هر مکانی را داراست‪.‬‬
‫امکان محفظه سازی تنها برای یک بار و اجرا در همه محیطها‪ ،‬منجر به کاهش فاصله میان محیط‬
‫توسعه و سرورهای تولید محصول میشود‪ .‬استفاده از نگهدارندهها این اطمینان و اعتماد را به وجود‬
‫میآورد که همه محیط ها برابر هستند‪ .‬در صورتی که عضو جدیدی به تیم توسعه اضافه شود‪ ،‬این‬
‫فرد تنها لزم است از دستور »‪ «docker run‬برای راهاندازی نمونه توسعه خود استفاده کند(این‬
‫دستورات در ادامه معرفی خواهند شد)‪.‬‬
‫داکر نسبت به یک ماشین مجازی بسیار سادهتر است‪ .‬ماشینهای مجازی ابزارهایی همهمنظوره‬
‫هستند که برای پشتیبانی از هر میزان حجم کاری ممکن طراحی شدهاند‪ .‬در مقابل آن‪ ،‬نگهدارنده‪-‬‬
‫های کم حجم داکر‪ ،‬خودکفا و برای کاربردهای یک بار مصرف مناسبتر هستند‪ .‬با توجه به اینکه‬
‫داکر کرنل میزبان را به اشتراک میگذارد‪ ،‬نگهدارندهها تاثیر قابل چشمپوشی در کاهش عملکرد و‬
‫کارایی سیستم دارند‪ .‬زمان اجرای نگهدارندهها تقریباً لحظهای و بلفصل‪ 1‬است‪.‬‬

‫‪ 6-1‬اجزای اصلی داکر]‪[1‬‬


‫داکر‪2‬‬ ‫‪ 1-6-1‬موتور‬
‫موتور داکر هسته شروع تمام کار ها در این ابزار است‪ .‬تا زمانی که موتور داکر آغاز به کار نکند‬
‫استفاده از داکر ممکن نیست‪ .‬این موتور حکم اتصال اینترنت را برای این ابزار دارد‪ .‬در سیستم‪-‬‬
‫عاملهای ویندوز این موتور به وسیله برنامه ‪ docker desktop‬آغاز به کار میکند‪.‬‬

‫‪1‬‬
‫‪real time‬‬
‫‪2‬‬
‫‪Docker engine‬‬

‫‪15‬‬
‫داکر‪1‬‬ ‫‪ 2-6-1‬کلینت‬
‫کلینت داکر جزئی ا ست که کاربر نهایی با آن در ارتباط خواهد بود‪ .‬برای درک بهتر میتوانید آن‬
‫را یک رابطکاربری‪ 2‬برای داکر بنامید‪ .‬هر چند که فاصله آن از واژه کاربرپسند‪ 3‬بسیار زیاد است‪ .‬شما‬
‫به عنوان کاربر نهایی با کلینت داکر ارتباط خواهید داشت و کلینت داکر دستورات شما را به داکر‬
‫دیمون منتقل می نماید‪.‬‬
‫دیمون‪4‬‬ ‫‪ 3-6-1‬داکر‬
‫داکر دیمون جزئی است که دستورات ارسال شده به کلینت داکر را اجرا مینماید‪ .‬دستوراتی مانند‬
‫ساختن‪ ،‬راهاندازی و یا توزیع نگهدارندهها‪.‬‬
‫داکر دیمون‪ ،‬خود بر روی هاست اجرا میشود‪ .‬اما به عنوان کاربر شما هیچگاه به صورت مستقیم با‬
‫آن در ارتباط نخواهید بود‪ .‬همان طور که در قسمت قبل در توضیح کلینت داکر گفته شد‪ ،‬کلینت‬
‫داکر انتقالدهنده دستورات شما به داکر دیمون خواهد بود‪.‬‬
‫رجیستری‪5‬‬ ‫‪ 4-6-1‬داکر‬
‫داکر رجیستتری فضتای ذخیرهستازی تصتویرهای داکری میباشتد‪( .‬تصتویرهای داکر در ادامه توضتیح‬
‫داده خواهد شتد)‪ .‬مخزن ‪ Docker Hub‬یک مخزن عمومی داکر استت که تمام کاربران میتوانند‬
‫تصتتتویرهتایی کته برای برنتامته خود ایجتاد میکننتد را در آن ذخیره کننتد تتا دیگران هم بتواننتد از آن‬
‫استفاده کنند‪.‬‬

‫‪1‬‬
‫‪Docker client‬‬
‫‪2‬‬
‫‪User interface‬‬
‫‪3‬‬
‫‪User friendly‬‬
‫‪4‬‬
‫‪Docker deamon‬‬
‫‪5‬‬
‫‪Docker registry‬‬

‫‪16‬‬
‫شکل ‪ 3-1‬تعریف داکر رجیستری؛ ]‪[4‬‬

‫ایمیج‪1‬‬ ‫‪ 5-6-1‬داکر‬
‫داکر ایمج یک فایل غیر قابل تغییر است که شامل کد منبع‪ ،‬کتابخانهها‪ ،2‬وابستگیها‪ ،‬ابزارها و سایر‬
‫فایلهای مورد نیاز برای اجرای یک برنامه است‪.‬‬
‫از آنجا که تصویرها به نوعی فقط الگو یا قالب‪ 3‬هستند‪ ،‬نمیتوانید آنها را شروع یا اجرا کنید‪ .‬کاری‬
‫که میتوانید انجام دهید این است که از آن الگو به عنوان پایه برای ساخت نگهدارنده استفاده کنید‪.‬‬

‫‪1‬‬
‫‪Docker image‬‬
‫‪2‬‬
‫‪Libraries‬‬
‫‪3‬‬
‫‪Template‬‬

‫‪17‬‬
‫شکل ‪ 4-1‬تعریف و نحوه عملکرد داکر ایمیج ؛ ]‪[4‬‬

‫‪ 6-6-1‬داکر کانتینر‬
‫نگهتدارنتده داکر یتک محیط مجتازی ‪ run-time‬استتتت کته در آن کتاربران میتواننتد برنتامته هتا را از‬
‫ستیستتم اصتلی جدا کنند‪ .‬این نگهدارندهها واحدهای قابلحمل و فشتردهای هستتند که میتوانید در‬
‫آنهتا بته راحتی یتک برنتامته را راهانتدازی کنیتد‪ .‬یتک ویژگی مهم دیگر‪ ،‬استتتتتانتداردستتتازی محیط‬
‫محتاستتتبات و رایانش در حال اجرا در داخل نگهدارنده استتتت‪ .‬این نه تنها از این که برنامه شتتتما‬
‫در شتترایط یکستتانی در حال کار استتت اطمینان حاصتتل می کند‪ ،‬بلکه اشتتتراکگذاری با ستتایر‬
‫همتیمیها را نیز ساده میسازد‪.‬‬

‫‪18‬‬
‫شکل ‪ 5-1‬تعریف و نحوه عملکرد نگهدارنده داکر؛]‪[4‬‬

‫هاب‪1‬‬ ‫‪ 7-6-1‬داکر‬
‫داکر هاب سرور ذخیرهساز‪ 2‬مبتنی بر ابر است که مصرفکنندگان و کاربران داکر میتوانند در آن‬
‫ایمیجهای نگهدارنده را ایجاد‪ ،‬آزمون‪ ،‬ذخیرهسازی و توزیع کنند‪.‬‬
‫داکر هاب نسخهای از داکر رجیستری می باشد که میزبانی آن مبتنی بر ابر‪ 3‬است‪.‬‬
‫ها‪4‬‬ ‫‪ 8-6-1‬سیگروپ‬
‫سی گروپها اجازه تخصیص منابع را به ما میدهند‪ .‬منظور از منابع‪ ،‬به طور کلی سختافزار که‬
‫شامل سیپییو‪ ،5‬حافظه‪ ،‬شبکه‪ ،‬دیسک ورودی و خروجی‪ 6‬و ‪ ...‬میباشد‪ .‬منابع در داکر توسط‬
‫سیگروپها مدیریت میشوند‪.‬‬

‫‪1‬‬
‫‪Docker hub‬‬
‫‪2‬‬
‫‪Repository‬‬
‫‪3‬‬
‫‪cloud -hosted‬‬
‫‪4‬‬
‫‪Cgroups‬‬
‫‪5‬‬
‫‪CPU‬‬
‫‪6‬‬
‫‪I/O disk‬‬

‫‪19‬‬
‫سیگروپها به موتور داکر ‪1‬اجازه میدهند تا منابع سختافزاری موجود را به نگهدارندهها اختصاص‬
‫دهند و به صورت اختیاری میتوانند محدودیتهای لزم را به اجرا درآورند؛ برای مثال‪ ،‬شما میتوانید‬
‫حافظهی موجود را برای نگهدارندهی خاصی محدود کنید‪.‬‬
‫ها‪2‬‬ ‫‪ 9-6-1‬نیم اسپیس‬
‫داکر از نیماسپیسها برای تهیه فضاهای مجزا به نام نگهدارنده استفاده میکند‪ .‬از طرف دیگر نیم‪-‬‬
‫اسپیس مکانیزم دیگری در کرنل برای محدود کردن دید گرهی از فرآیندها‪ ،‬نسبت به بقیه سیستم‬
‫ها است‪ .‬برای مثال میتواند یک یا چند فرآیند را محدود کرد تا امکان دیدن و تعامل با بقیه‬
‫فرآیند های در حال اجرا روی سیستم یا مثل امکان دسترسی به فایل سیستمهای مانت ‪3‬شده را‬
‫نداشتهباشد‪.‬‬

‫‪ 7-1‬مهم ترین دستورات داکر‬


‫در ادامه به برخی از مهمترین دستورات داکر که از آنها به صورت متداول در خطفرمان‪ 4‬استفاده‬
‫می شود‪ ،‬میپردازیم‪:‬‬

‫‪ 1-7-1‬دستور ‪: docker info‬‬


‫این دستور توضیح کامل و جامعی از سرویس داکری که بر روی سیستم ما قرار دارد‪ ،‬در اختیار ما‬
‫قرار میدهد‪ .‬اطلعاتی مانند تعداد نگهدارندهها و وضعیت هر کدام از آنها‪ ،‬تعداد تصویرها‪ ،‬نسخهی‬
‫کرنل سیستمعامل‪ ،‬میزان منابعی که در اختیار دارید و ‪...‬‬

‫‪1‬‬
‫‪Docker engine‬‬
‫‪2‬‬
‫‪Namespaces‬‬
‫‪3‬‬
‫‪Mount‬‬
‫‪4‬‬
‫‪Command line‬‬

‫‪20‬‬
‫شکل ‪ - 6-1‬دستور ‪docker info‬‬

‫‪ 2-7-1‬دستور ‪: docker ps‬‬


‫تنظیمات‪1‬‬ ‫این دستور لیست نگهدارندهها روی سرویسدهنده داکر شما را ارائه میدهد‪ .‬شامل‬
‫بسیاری میباشد‪ .‬در حالت کلی و بدون تنظیمات‪ ،‬فقط نگهدارندههای در حال کار‪ 2‬را نمایش می‪-‬‬
‫دهد‪.‬‬

‫شکل ‪ - 7-1‬دستور ‪docker ps‬‬

‫‪1‬‬
‫‪Options‬‬
‫‪2‬‬
‫‪Running‬‬

‫‪21‬‬
‫‪ 3-7-1‬دستور ‪: docker images‬‬
‫این دستور لیست تصویرهای ما را نمایش میدهد‪ .‬همانند دستور قبل شامل تنظیمات زیادی است‪.‬‬
‫برای مثال‪ ،‬با تنظیم ‪ -q‬تنها شناسه تصویر‪1‬های موجود را برمیگرداند‪.‬‬

‫شکل ‪ - 8-1‬دستور ‪docker images‬‬

‫‪ 4-7-1‬دستور ‪: docker pull‬‬


‫توسط این دستور‪ ،‬شما تصویرهای مورد نیاز خود را از مخازن مختلف (به طور پیشفرض‬
‫‪ ) hub.docker.com‬دانلود و دریافت میکنید‪ .‬تنظیمات خاصی ندارد و برای دریافت تصویر مورد‬
‫نیاز خود‪ ،‬نام تصویر و برچسب‪ 2‬مورد نظر را وارد میکنید‪ .‬اگر برچسبی وارد نکنید‪ ،‬داکر به صورت‬
‫پیشفرض برچسب ‪ latest‬را در نظر میگیرد‪.‬‬

‫شکل ‪ - 9-1‬دستور ‪docker pull‬‬

‫‪1‬‬
‫‪Images ID‬‬
‫‪2‬‬
‫‪Tag‬‬

‫‪22‬‬
‫‪ 5-7-1‬دستور ‪: docker push‬‬
‫برعکس دستور قبلی عمل میکند‪ .‬به طوری که با این دستور میتوانید تصویر خود را در داخل‬
‫مخازن مختلف داکر قرار دهید‪ .‬تنظیمات خاصی ندارد‪ ،‬فقط باید توجه داشت که برای قرار دادن‬
‫تصویر درون مخزن‪ ،‬باید از قبل وارد‪ 1‬یک مخزن شده باشید‪.‬‬

‫‪ 6-7-1‬دستور ‪: docker run‬‬


‫به وسیلهی این دستور میتوانید از روی تصویرهای موجود در سرویس داکر‪ ،‬یک نگهدارنده راهاندازی‬
‫کرد‪ .‬دارای تنظیمات بسیار زیادی میباشد که توضیح آنها از حوصلهی این پروژه خارج است‪.‬‬
‫(دستورات مهم در ادامه پروژه شرح داده خواهند شد)‬

‫شکل ‪ - 10-1‬دستور ‪docker run‬‬

‫‪ 7-7-1‬دستور ‪: docker build‬‬


‫ساخت‪3‬‬ ‫به وسیلهی این دستور‪ ،‬قادر خواهیم بود از روی داکرفایل‪ ،2‬تصویر داکر ایجاد کنیم‪ .‬فرآیند‬
‫به این صورت است که از روی یک تصویر پایه‪ 4‬مابقی تغییرات در آن داده میشود تا تصویر مد نظر‬
‫شما ایجاد شود‪ .‬نکته این که در این مسیر ممکن است چندین تصویر ایجاد شود تا به تصویر نهایی‬
‫‪1‬‬
‫‪login‬‬
‫‪2‬‬
‫‪Dockerfile‬‬
‫‪3‬‬
‫‪Build‬‬
‫‪4‬‬
‫‪Base image‬‬

‫‪23‬‬
‫برسیم‪ .‬این قابلیت لیهای بودن بسیار به کم حجم شدن تصویر نهایی میتواند کمک کند‪ .‬ممکن‬
‫است در لیهی آخر تصویر شما مشکلی رخ دهد که مجبور باشید بعد از اصلح آن از ابتدا فرآیند‬
‫ساخت را انجام دهید‪ .‬قابلیت کش‪ 1‬که از همین روش لیهای بودن تصویرها فراهم شده است به‬
‫شما کمک میکند که تمام لیههای درست و صحیح را مجدد دریافت نکنید و تنها از همان لیهای‬
‫که خطا داشته است ادامه دهید‪.‬‬

‫‪ 8-7-1‬دستور ‪: docker commit‬‬


‫به کمک این دستور‪ ،‬میتوانیم از نگهدارندهی در حال اجرا‪ ،‬یک تصویر ایجاد کنیم؛ این دستور زمانی‬
‫موثر است که تغییراتی که در نگهدارنده ایجاد کردهایم‪ ،‬مهم است و در آینده بارها به آن نیاز میشود‪.‬‬
‫پس مطلوب است که این تغییرات در تصویر جدیدی ثبت شود‪.‬‬

‫دستوراتی که تاکنون ذکر شدند دستورات اصلی داکر هستند‪ .‬داکر شامل دستورات زیادی است که‬
‫مابقی آنها دستورات پیشرفته داکر محسوب میشوند و فراتر از این پروژه هستند‪ .‬بنابراین به معرفی‬
‫این دسته از دستورات نمیپردازیم‪ .‬همچنین داکر به دلیل تحریم به صورت مستقیم قابل استفاده‬
‫نمیباشد]‪. [10‬‬

‫فصل اول در اینجا به پایان میرسد‪ .‬در فصل دوم به معرفی هوش مصنوعی و توضیحاتی پیرامون‬
‫یادگیری ماشین و یادگیری عمیق و کاربرد داکر در آنها خواهیم پرداخت‪.‬‬

‫‪1‬‬
‫‪Cache‬‬

‫‪24‬‬
‫فصل دوم‬
‫داکر و یادگیری عمیق‬

‫‪25‬‬
‫‪ 1-2‬هوش مصنوعی چیست؟‬
‫هوش مصنوعی به هوشمندی گفته می شود که از ماشینها حاصل میشود‪ .‬به عبارتی‪ ،‬هر ماشینی‬
‫که میتواند محیط را درک کند و فعالیتهای وابسته به فکر و ذهن انسان را به خوبی انجام دهد‪[11].‬‬

‫آلن تورینگ یکی از تاثیرگذارترین افراد در حوزه هوش مصنوعی است و بسیاری مقالهای که او در‬
‫سال ‪ 1950‬منتشر کرد را تولد هوش مصنوعی میدانند‪ .‬او همچنین تست تورینگ‪ 1‬را پیشنهاد داد‬
‫که معیاری برای تشخیص هوشمندی ماشین است‪.‬‬

‫یکی از اولین پروژههای عملی هوش مصنوعی‪ ،‬ایده گرفتن از مفهوم شبکه عصبی و نورونها بود‪ .‬دو‬
‫نفر از دانشجویان دانشگاه هاروارد در سال ‪ 1950‬اولین شبکه عصبی مصنوعی را که شامل ‪ 40‬نورون‬
‫بود ساختند‪ .‬نورونها واحدهایی یک شکل در مغز هستند که پیامهای عصبی را منتقل میکنند‪.‬‬
‫جالب است بدانید شبکههای عصبی مصنوعی جدید که از آنها برای طبقهبندی تصاویر استفاده‬
‫میشود دارای هزاران نورون هستند!‬

‫باخت کاسپاروف‪ ،‬قهرمان شطرنج جهان‪ ،‬از سیستم ‪ deep blue‬باعث شد تا هوش مصنوعی در‬
‫کانون توجه قرار گیرد‪ .‬این سیستم توسط ‪ IBM‬طراحی شده بود‪ .‬در اولین مسابقه در سال ‪1996‬‬
‫کاسپاروف پیروز شد اما در رقابت بعدی که در سال ‪ 1997‬اتفاق افتاد‪ deep blue ،‬توانست‬
‫کاسپاروف را شکست دهد‪.‬‬

‫این حوزه دارای شاخههایی است که در زمینههای مختلف نیز مورد استفاده قرار میگیرند‪ .‬در ادامه‬
‫ما یادگیری ماشین را به عنوان زیرمجموعهای از هوش مصنوعی بررسی میکنیم‪.‬‬

‫‪ 1‬این آزمون در مقاله معروف تورینگ دستگاه محاسباتی و هوشمندی مطرح شد و هدف این تست بررسی هوشمندی ماشین بود‪.‬‬

‫در این آزمون شخص ‪C‬به شکلی غیر مستقیم با شخص ‪B‬و یک ماشین )‪ (A‬در ارتباط است و نمیداند کدامشان ماشین است‪ .‬او‬

‫از آنها سوالتی میپرسد و اگر از روی جوابها نتواند شخص ‪B‬را از ماشین تشخیص دهد‪ ،‬میگوییم که ماشین تست تورینگ را‬

‫قبول شده است‪.‬‬

‫‪26‬‬
‫‪1‬‬
‫‪ 2-2‬یادگیری ماشین‬
‫یادگیری ماشین بعد از هوش مصنوعی موضوعیت پیدا کرد و آن را میتوان زیرمجموعه هوش‬
‫مصنوعی در نظر گرفت‪ .‬یادگیری ماشین ویژگیهایی دارد که آن را از دیگر روشهای هوش مصنوعی‬
‫متمایز میکند‪.‬‬

‫یکی از مهمترین ویژگی های یادگیری ماشین‪ ،‬یادگیری با استفاده از داده و بدون استفاده از دستورات‬
‫مستقیم است‪ .‬در انواع دیگر هوش مصنوعی ممکن است شاهد نوعی از هوشمندی باشیم که از‬
‫دادهها استفاده نمی کند‪ .‬ویژگی دیگر یادگیری ماشین‪ ،‬تغییر خود با دیدن دادههای جدید است؛‬
‫میدهد‪[7] .‬‬ ‫یعنی همانند انسان با کسب تجربیات جدید رفتار خود را تغییر‬

‫شکل ‪ 1-2‬نمودار ون مربوط به هوش مصنوعی‪،‬یادگیری ماشین و یادگیری عمیق‬

‫در یادگیری ماشین به طراحی ماشینهایی پرداخته میشود که با توجه به دیتاهای داده شده به آن‬
‫ماشین و تجربیات ماشین‪ ،‬بیاموزند‪ .‬به عبارتی‪ ،‬یادگیری ماشین کامپیوترها را قادر میسازد بدون‬
‫این که صریحا برنامهریزی شده باشند‪ ،‬به روشی خودآموز تبدیل شوند‪.‬‬

‫‪1‬‬
‫‪Machine learning‬‬

‫‪27‬‬
‫"یک برنامه یادگیرنده برنامه رایانهای است که به آن گفته شده تا از تجربه ‪ E‬مطابق با برخی وظایف‬
‫‪ ،T‬و کارایی عملکرد ‪ P‬برای وظیفه ‪ T‬که توسط ‪ P‬سنجیده میشود‪ ،‬یاد بگیرد که تجربه ‪ E‬را بهبود‬
‫ببخشد‪( ".‬تام میشل)‬

‫یافتن الگوها در دادههای موجود در سیاره زمین‪ ،‬تنها برای مغز انسان ممکن است‪ .‬اما هنگامی که‬
‫حجم دادهها بسیار زیاد میشود و زمان لزم برای انجام محاسبات افزایش مییابد‪ ،‬نیاز به یادگیری‬
‫ماشین به عنوان علمی مطرح میشود که به افراد در کار با دادههای انبوه در حداقل زمان کمک‬
‫میکند]‪ .[6‬امروزه یادگیری ماشینی در بسیاری زمینهها از جمله مهندسی‪ ،‬کسب و کار‪ ،‬زبانشناسی‬
‫و پزشکی کاربرد دارد‪.‬‬

‫استفاده از یادگیریماشین به دلیل زیر خیلی آسانتر و فراگیرتر شده است‪:‬‬

‫افزایش بی حد و حصر دادهها‬ ‫•‬

‫ذخیره سازی مقرون به صرفه دادهها‬ ‫•‬

‫افزایش قدرت پردازندهها و کاهش هزینههای آنها‬ ‫•‬

‫در ادامه به توضیح مختصر یادگیری عمیق‪ ،‬یکی از مهم ترین زیرمجموعههای یادگیری ماشین‬
‫میپردازیم‪:‬‬

‫‪ 3-2‬یادگیری عمیق‬
‫شاید در مورد یادگیری عمیق هم چیزهایی شنیده باشید‪ .‬یادگیری عمیق عمری بسیار کوتاهتر از‬
‫یادگیری ماشین دارد‪ .‬استفاده از شبکههای عصبی مصنوعی یکی از انواع روشهای یادگیری ماشین‬
‫است که از سالها پیش در حال گسترش است‪ .‬این شبکهها از ساختار ذهن انسان الگوبرداری‬
‫شده اند و ساختاری لیه لیه دارند‪ .‬با پیشرفت تکنولوژی و افزایش توان محاسباتی کامپیوترها‪،‬‬
‫مهندسان توانستند تعداد لیههای این شبکه ها را افزایش دهند و این شروعی برای یادگیری عمیق‬
‫بود‪ .‬یادگیری عمیق میتواند الگوهای پیچیدهتری را در داده پیدا کند و امروزه به یکی از جذابترین‬
‫]‪[2‬‬ ‫بخشهای یادگیری ماشین تبدیل شده است‪.‬‬

‫‪28‬‬
‫یادگیری عمیق اشاره به مجموعه ای از الگوریتمهای یادگیری ماشین دارد؛ که معمول مبتنی بر‬
‫شبکههای عصبی مصنوعی اند و تلش دارند تا انتزاعات سطح بالی موجود در دادهها را مدل نمایند‪.‬‬
‫یادگیری عمیق دقت بالتری نسبت به سایر مدلهای یادگیری ماشین دارا میباشد‪.‬‬

‫یادگیری عمیق کاربردهای زیادی دارد همچون ‪ :‬بازسازی تصاویر‪ ،‬حذف نویز در تصاویر‪ ،‬تشخیص‬
‫گفتار‪ ،‬تبدیل متن به گفتار و ‪...‬‬

‫عمیق]‪[2‬‬ ‫‪ 4-2‬تفاوت های یادگیری ماشین و یادگیری‬


‫• استخراج ویژگیها ‪ :‬استخراج ویژگیها در یادگیری ماشین به صورت دستی انجام میشود؛‬
‫در حالی که در یادگیری عمیق به صورت خودکار انجام میپذیرد‪.‬‬
‫• دقت‪ :‬یادگیری عمیق دقت بالتری نسبت به یادگیری ماشین دارد‪.‬‬
‫• زمان آموزش ‪ :‬یادگیری ماشین زمان کوتاهتری برای آموزش نیاز دارد؛ در حالی که در‬
‫یادگیری عمیق این زمان طولنیتر است‪.‬‬
‫• نیازمندی داده ‪ :‬یادگیری عمیق نیازمند دادههای زیاد و کلن است؛ یادگیری ماشین با‬
‫دادههای کم نیز قابل آموزش است‪.‬‬
‫• شکل پیادهسازی ‪ :‬یادگیری عمیق از شبکههای عصبی استفاده میکند؛ درحالی که یادگیری‬
‫ماشین از الگوریتمهایی مانند خوشهبندی و رگرسیون بهره میبرد‪.‬‬

‫‪1‬‬
‫‪ 5-2‬شبکه های عصبی‬
‫وقتی به یادگیری عمیق که حیطهای از یادگیری ماشین است‪ ،‬اشاره میشود‪ ،‬احتمالً پای شبکههای‬
‫عصبی در میان است‪ .‬شبکههای عصبی از مغز ما الگو گرفتهاند‪ .‬گره‪2‬هایی وجود دارند که لیهها را‬
‫در شبکه تشکیل میدهند و دقیقاً مانند نورونهای مغز ما‪ ،‬نواحی مختلف را به هم متصل میکنند‪.‬‬
‫به ورودیهای گرهها در یک لیه‪ ،‬وزنی اختصاص مییابد که تأثیری را که پارامتر بر نتیجه پیشبینی‬

‫‪1‬‬
‫‪Neural Network‬‬
‫‪2‬‬
‫‪node‬‬

‫‪29‬‬
‫کلی دارد‪ ،‬تغییر میدهد‪ .‬از آنجا که وزنها به پیوندهای بین نودها اختصاص داده میشوند‪ ،‬ممکن‬
‫گیرد]‪[6‬‬ ‫است هر گره تحتتأثیر وزنهای مختلف قرار‬

‫کانولوشن‪1‬‬ ‫‪ 1-5-2‬شبکههای عصبی‬


‫شبکههای عصبی کانولوشن‪ ،‬دستهای از شبکه های عصبی هستند که به طول معمول برای تحلیل‬
‫تصاویر و گفتار در یادگیری ماشین و به طور جزئیتر در یادگیری عمیق استفاده میشوند‪ .‬این نوع‬
‫شبکه دارای چندین لیه است که دادهها را پردازش کرده و ویژگیهای مهم آنها را استخراج میکنند‪.‬‬
‫فیلترهای این شبکه بر اساس روشهای اکتشافی‪ 2‬بدست میآیند‪ .‬شبکههای عصبی کانولوشن‬
‫میتوانند مهمترین ویژگی فیلترها را بیاموزند و چون به پارامترهای زیادی احتیاج نیست‪ ،‬صرفهجویی‬
‫زیادی در وقت و عملیات آزمون و خطا صورت میگیرد‪.‬‬

‫تا زمانی که با تصاویر با ابعاد بال که هزاران پیکسل دارند کار نکنید‪ ،‬این صرفهجویی چندان به چشم‬
‫نمیآید‪ .‬هدف اصلی این الگوریتمها این است که با حفظ ویژگیهایی که برای فهم آنچه دادهها‬
‫نشان میدهند مهم هستند‪ ،‬دادهها را به فرمهایی که پردازش آنها آسانتر است‪ ،‬درآورد‪.‬‬

‫شبکههای عصبی کانولوشن بر خلف شبکههای عصبی معمولی‪ ،‬به جای ضرب ماتریس از کانولوشن‬
‫استفاده میکند‪ .‬این شبکهها با اعمال فیلتر روی دادههای ورودی شما پردازش خود را انجام می‪-‬‬
‫دهند‪ .‬چیزی که آنها را بسیار خاص میکند‪ ،‬این است که شبکههای عصبی کانولوشن میتوانند‬
‫فیلترها را همزمان با فرایند آموزش‪ ،‬تنظیم کنند‪ .‬بنابراین‪ ،‬حتی وقتی مجموعه دادههای عظیمی‬
‫مانند تصاویر داشته باشید‪ ،‬نتایج بهخوبی و درلحظه دقیقتر میشوند‪.‬‬

‫از آنجا که میتوان فیلترها را برای آموزش بهتر شبکههای عصبی کانولوشن بهروزرسانی کرد‪ ،‬نیاز به‬
‫فیلترهای دستی از بین میرود و این انعطافپذیری بیشتری در تعداد و ارتباط فیلترهایی که بر روی‬
‫مجموعه دادهها اعمال میشوند‪ ،‬به ما میدهد‪ .‬با استفاده از این الگوریتم‪ ،‬میتوانیم روی مسائل‬
‫پیچیدهتری مانند تشخیص چهره کار کنیم‪.‬‬

‫‪1‬‬
‫)‪Convolutional Neural Network (CNN‬‬
‫‪2‬‬
‫‪Heuristic‬‬

‫‪30‬‬
‫‪ 7-2‬کانولوشن‬

‫شکل ‪ 2-2‬عمل کانولوشن‬

‫در عمل کانولوشن چند پارامتر اساسی وجود دارد که عبارتند از‪:‬‬

‫• ماتریس ورودی‬
‫• فیلتر کانولوشن‬
‫• عملگر کانولوشن‬
‫• ویژگی خروجی کانولوشن‬

‫کارکرد اصلی کانولوشن به این صورت است که عملگر کانولوشن‪ ،‬فیلتر کانولوشنی را برمیدارد و‬
‫]‪[8‬‬ ‫روی ماتریس ورودی میلغزاند‪(.‬فیلتر روی تصویر حرکت میکند‪).‬‬

‫‪31‬‬
‫شکل ‪ 3-2‬پارامتر های اصلی کانولوشن‬

‫اعدادی که در ماتریس خروجی ذخیره میشوند‪ ،‬تابعی از ورودی و فیلتر هستند‪ .‬فیلتر به دنبال پیدا‬
‫کردن نواحی مشابه خود در تصویر است و هرجایی ناحیه مشابهِ خود را پیدا کرد بلند فریاد میزند‬
‫(عدد بزرگ)‪ .‬پس کانولوشن منجر به یافتن الگوهای خاص در تصویر با توجه به فیلتر میشود‪ .‬اعداد‬
‫موجود در فیلتر بسیار مهم هستند‪.‬‬

‫‪ 8-2‬انواع شبکه های عصبی کانولوشن‬


‫• شبکه عصبی کانولوشن یکبعدی‪ :‬در این حالت‪ ،‬کرنل ‪ CNN‬در یک جهت حرکت میکند‪.‬‬
‫‪CNN‬های یکبعدی معمولً روی دادههای سری زمانی استفاده میشوند‪.‬‬
‫• شبکه عصبی کانولوشن دوبعدی‪ :‬در این نوع از ‪ ،CNN‬کرنلها در دو جهت حرکت میکنند‪.‬‬
‫‪CNN‬های دوبعدی در برچسبگذاری و پردازش تصویر کاربرد دارند‪.‬‬
‫• شبکه عصبی کانولوشن سهبعدی‪ :‬این نوع ‪ CNN‬دارای کرنلی است که در سه جهت حرکت‬
‫میکند‪ .‬محققان از این نوع ‪ CNN‬در تصاویر سهبعدی مانند سیتیاسکن و ‪ MRI‬استفاده‬
‫میکنند‪.‬‬

‫‪ 9-2‬کاربرد های شبکه های عصبی کانولوشن‬


‫• تشخیص دستخطهای مختلف‬

‫‪32‬‬
‫• تشخیص تصاویر با پیشپردازش کم‬
‫• استفاده در سرویسهای پستی برای خواندن کدپستی‬
‫• استفاده در بانکداری برای خواندن ارقام در چک‬
‫کامپیوتر‪1‬‬ ‫• کاربردهای بینایی‬
‫• و ‪...‬‬

‫‪ 10-2‬چرا از نگهدارندههای داکر در یادگیری عمیق استفاده میکنیم؟‬


‫میکروسرویس‪2‬‬ ‫اولین چیزی که قبل از صحبت در مورد ساخت نگهدارنده باید درک کرد‪ ،‬مفهوم‬
‫است‪ .‬اگر یک برنامه بزرگ به سرویسهای کوچکتر تقسیم شود‪ ،‬هر یک از آن سرویسها یا‬
‫فرآیندهای کوچک را می توان سرویسهای میکرو نامید که از طریق یک شبکه با یکدیگر ارتباط‬
‫برقرار میکنند‪ .‬رویکرد میکروسرویسها برعکس رویکرد یکپارچه است که مقیاسبندی آن دشوار‬
‫است‪ .‬اگر یک ویژگی خاص دارای برخی مشکلت یا خرابی باشد‪ ،‬همه ویژگیهای دیگر مشابه آن‬
‫مشکل را تجربه خواهند کرد‪ .‬مثال دیگر این است که وقتی تقاضا برای یک ویژگی خاص به طور‬
‫جدی در حال افزایش است‪ ،‬ما مجبور میشویم منابعی مانند سختافزار را نه تنها برای این ویژگی‬
‫خاص بلکه برای کل برنامه افزایش دهیم و هزینههای اضافی را ایجاد کنیم که ضروری نیستند‪ .‬این‬
‫هزینه میتواند به حداقل برسد اگر رویکرد خدمات خرد با تقسیم برنامه به گروهی از خدمات‬
‫کوچکتر در نظر گرفته شود‪ .‬هر سرویس یا ویژگیهای برنامه به گونهای ایزوله شده است که میتوانیم‬
‫بدون تأثیر بر سایر ویژگیهای برنامه‪ ،‬آن را مقیاسبندی یا بروزرسانی کنیم‪ .‬برای وارد کردن‬
‫یادگیری ماشین به چرخه تولید‪ ،‬بیایید در نظر بگیریم که برنامه باید به سرویسهای خرد کوچکتری‬
‫مانند مصرف‪ ،‬آمادهسازی‪ ،‬ترکیب‪ ،‬جداسازی‪ ،‬آموزش‪ ،‬ارزیابی‪ ،‬استنتاج‪ ،‬پسپردازش و نظارت تقسیم‬
‫شود‪[9].‬‬

‫‪1‬‬
‫‪Computer vision‬‬
‫‪2‬‬
‫‪Micro-service‬‬

‫‪33‬‬
‫‪ -1-10-2‬ساخت نگهدارنده‬
‫معماری میکرو سرویس نیز دارای اشکالتی است‪ .‬هنگامی که برنامه یادگیری ماشین خود را در یک‬
‫سرور توسعه میدهید‪ ،‬به همان تعداد ماشین مجازی نیاز خواهید داشت که میکروسرویس حاوی‬
‫وابستگی است‪ .‬هر ماشین مجازی به یک سیستمعامل‪ ،‬کتابخانهها و باینریها نیاز دارد و منابع‬
‫سختافزاری بیشتری مانند پردازنده‪ ،‬حافظه و فضای دیسک را مصرف میکند‪ ،‬حتی اگر میکرو‬
‫سرویس واقعاً در حال اجرا نباشد‪ .‬به همین دلیل است که داکر وارد میشود‪ .‬اگر یک نگهدارنده در‬
‫حال اجرا نباشد‪ ،‬منابع باقی مانده به منابع مشترک تبدیل میشوند و برای سایر نگهدارندهها قابل‬
‫دسترسی هستند‪ .‬شما نیازی به اضافه کردن سیستمعامل در یک ظرف ندارید‪ .‬بیایید یک راه حل‬
‫کامل متشکل از برنامه های کاربردی ‪ 1‬و ‪( 2‬مثل ‪ APP1‬و ‪ )APP2‬را در نظر بگیریم‪ .‬اگر‬
‫میخواهید ‪ APP1‬را کوچک کنید یا برنامههای کاربردی دیگری را اضافه کنید‪ ،‬میتوانید با استفاده‬
‫از منابع در دسترس از ماشینهای مجازی به جای نگهدارندهها محدود شوید‪ .‬اگر تصمیم دارید فقط‬
‫‪ APP1‬و نه ‪ APP2‬را کوچک کنید (فقط یک مورد را نگه دارید)‪ APP2 ،‬تبدیل به سهمی از‬
‫همه فرآیندهای نگهدارنده میشود‪.‬‬

‫ایجاد یک مدل یادگیری ماشینی که در رایانه ما کار می کند واقعاً پیچیده نیست‪ .‬اما وقتی برای‬
‫مثال با مشتری کار میکنید که میخواهد از مدل در مقیاس استفاده کند‪ ،‬مدلی که میتواند در‬
‫همه انواع سرورها در سراسر جهان کار کند‪ ،‬چالشبرانگیز است‪ .‬پس از توسعه مدل شما‪ ،‬ممکن‬
‫است در لپتاپ یا سرور شما به خوبی اجرا شود‪ ،‬اما واقعاً در سیستم های دیگر مانند زمانی که مدل‬
‫را به مرحله تولید یا سرور دیگری منتقل میکنید‪ ،‬کار نمیکند‪ .‬بسیاری از چیزها ممکن است رخ‬
‫دهد مانند مشکلت عملکردی‪ ،‬از کار افتادن برنامه یا بهینه نبودن برنامه‪ .‬موقعیت چالش برانگیز‬
‫دیگر این است که مدل یادگیری ماشین ما مطمئناً می تواند با یک زبان برنامهنویسی منفرد مانند‬
‫پایتون نوشته شود‪ ،‬اما برنامه مطمئناً نیاز به تعامل با برنامههای کاربردی دیگر نوشته شده در زبان‬
‫های برنامه نویسی دیگر برای جذب داده‪ ،‬آماده سازی داده‪ ،‬فرانتاند و غیره دارد‪ .‬داکر اجازه میدهد‬
‫تا همه این تعاملت را بهتر مدیریت کنید زیرا هر میکرو سرویس را می توان به زبانی متفاوت نوشت‬
‫که امکان مقیاسپذیری و افزودن یا حذف آسان سرویسهای مستقل را فراهم میکند‪ .‬داکر‬
‫تکرارپذیری‪ ،‬قابلیت حمل‪ ،‬استقرار آسان‪ ،‬بروزرسانی‪ ،‬سبکی و سادگی را به ارمغان میآورد‪[9].‬‬

‫‪34‬‬
‫فصل دوم به پایان رسید‪ .‬فصل بعدی پیرامون پیادهسازی پروژهها به وسیله ابزار داکر است‪ .‬در فصل‬
‫بعدی‪ ،‬چند پروژه یادگیری ماشین و یادگیری عمیق را با استفاده از ابزار داکر پیاده سازی میکنیم‬
‫و برای پروژههای خود تصویر ساخته و از آن در پیادهسازی پروژه خود استفاده میکنیم‪.‬‬

‫‪35‬‬
‫فصل سوم‬
‫پیاده سازی یادگیری‬
‫ماشین‪/‬عمیق با استفاده از داکر‬

‫‪36‬‬
‫‪ 1-3‬پروژه یادگیری ماشین‬

‫‪ 1-1-3‬مقدمات لزم برای ساخت تصویر داکر‬


‫تصویر‪ 1‬بر روی مجموعهای از کدها و متعلقات ساخته میشود‪ .‬بنابراین در ابتدا باید پروژهای که‬
‫قصد ساخت تصویر آن را داریم‪ ،‬انتخاب و فایلها و اسناد مربوط به پروژه را جمعآوری کنیم‪.‬‬

‫نوار مغزی‪ ،‬الکتروانسفالوگرافی‪ 2‬یا ‪ EEG‬ثبت فعالیت الکتریکی مغز از طریق نصب الکترودهای‬
‫سطحی بر روی سر و به صورت غیر تهاجمی میباشد‪ .‬به طور کلی‪ ،‬در یک سیستم ‪ ،EEG‬اثر‬
‫الکتریکی فعالیت نورون های مغز از طریق الکترودهای نصب شده بر روی سر به دستگاه انتقال داده‬
‫شده و پس از تقویت و حذف نویز به صورت سیگنال زمانی ثبت و نمایش داده میشود‪ .‬سیگنال‬
‫ثبت شده می تواند مستقیماً و یا پس از پردازش کامپیوتری توسط پزشک و یا متخصص علوم اعصاب‬
‫مورد تحلیل قرار بگیرد]‪.[12‬‬

‫پروژه فرضی ما حاوی اسناد زیر میباشد‪:‬‬

‫• فایل ‪ : train.py‬یک فایل به زبان برنامهنویسی پایتون است که دادههای ‪ EEG3‬را از یک‬
‫فایل به نام ‪ train.csv‬دریافت و نرمالسازی‪ 4‬میکند‪ .‬همچنین دو مدل را برای طبقهبندی‬
‫دادهها آموزش میدهد ‪ :‬تحلیل تشخیصی خطی و مدل چند لیه شبکههای عصبی‪.‬‬
‫• فایل ‪ : inference.py‬این فایل هم که به زبان برنامهنویسی پایتون نوشته شده‪ ،‬برای‬
‫استنتاج دسته ای با بارگذاری دو مدلی که در فایل قبلی ایجاد و آموزش داده شدند‪ ،‬فراخوانی‬
‫میشود‪ .‬این برنامه دادههای ‪ EEG‬جدید را که از یک دیتاست میآید‪ ،‬نرمالسازی میکند‪.‬‬
‫همچنین استنتاج روی مجموعه داده انجام داده و دقت طبقهبندی و پیشبینیها را چاپ‬
‫میکند‪.‬‬
‫• فایل ‪ : train.csv‬دیتاستی که توسط فایل ‪ train.py‬دریافت و آموزش داده میشود‪.‬‬

‫‪1‬‬
‫‪Image‬‬
‫‪2‬‬
‫‪Electroencephalography‬‬
‫‪ EEG 3‬نوسانات ولتاژ ناشی از جریان یونی در نورون های مغز را اندازه گیری میکند‪ .‬از نظر بالینی‪EEG ،‬به ثبت فعالیت الکتریکی خود به خودی مغز در‬
‫طی یک دوره زمانی اشاره دارد‪ ،‬همانطور که از چندین الکترود قرار داده شده بر روی پوست سر ثبت میشود‪(.‬ویکی پدیا)‬
‫‪4‬‬
‫‪Normalize‬‬

‫‪37‬‬
‫• فایل ‪ : test.csv‬دیتاستی که توسط ‪ inference.py‬نرمالسازی میشود‪.‬‬

‫‪ 2-1-3‬شروع ساخت تصویر‬


‫حال ساخت تصویر را آغاز میکنیم‪ .‬ساخت تصویر بر روی داکرفایل صورت میگیرد‪ .‬برای ساخت‬
‫متن‪1‬‬ ‫تصویر ابتدا یک فایل تحت نام داکرفایل در مسیر پروژه ایجاد کرده و آن را با یک ویرایشگر‬
‫باز میکنیم‪ .‬حال دستورات لزم در داکرفایل نوشته میشود تا تصویر طبق این دستورات ساخته‬
‫شود‪.‬‬

‫قالب یک داکرفایل به شکل زیر است‪:‬‬

‫شکل ‪ 1-3‬داکرفایل‬
‫• خط ‪ : 1‬شروع ساخت تصویر از یک تصویر پایه ‪ :‬ما از تصویر ‪jupyter/scipy-notebook‬‬
‫استفاده کردهایم‪ .‬این تصویر از مجموعه ای از تصویر های آمادهی اجراست که شامل برنامه‬
‫های کاربردی ‪ jupyter‬و ابزارهای محاسباتی تعاملی میباشد‪.‬‬
‫• خط ‪ : 3‬ساخت یک دایرکتوری‪ 2‬به نام ‪ my-model‬برای استفاده در ادامه کار‪.‬‬

‫‪1‬‬
‫‪Text editor‬‬
‫‪2‬‬
‫‪Directory-Repository‬‬

‫‪38‬‬
‫• خط ‪ : 6-5-4‬برای آینده توسعه ی پروژه خود‪ ،‬میتوان متغیرهای محیطی را از ابتدا‪ ،‬فقط‬
‫یک بار در زمان ساخت‪ ،‬برای تداوم مدل آموزشدیده تنظیم کرد و شاید دادهها یا‬
‫ابردادههای‪ 1‬اضافی را به یک مکان خاص اضافه کرد‪ .‬مزیت تنظیم متغیرهای محیطی این‬
‫است که کار خود را بهتر با دیگران در یک ساختار دایرکتوری توافق شده به اشتراک بگذارید‪.‬‬
‫• خط ‪ : 8‬اجرای دستور به منظور نصب پکیج ‪ Joblib . joblib‬مجموعهای از ابزارها برای‬
‫ارائه خط لوله‪ 2‬سبک در پایتون است‪ Joblib .‬به گونه ای بهینه سازی شده است که به‬
‫ویژه در دادههای بزرگ سریع و قوی باشد و دارای بهینهسازیهای خاصی برای آرایههای‬
‫‪ numpy‬است‪ .‬ما باید ‪ joblib‬را نصب کنیم تا سریالسازی‪ 3‬و سریالزدایی‪4‬مدل‬
‫آموزشدیدهمان را امکانپذیر کنیم‪.‬‬
‫• خطوط ‪ 10‬تا ‪ : 14‬کپی کردن اسناد و فایلهای پروژه و انتقال آنها به تصویر‪ .‬این‬
‫دستورالعمل برای کپی کردن فایل های جدید‪ ،‬از قسمت منابع‪ 5‬به فایل سیستمهایی که‬
‫در نگهدارنده قرار دارند است‪.‬‬
‫• خط ‪ : 16‬اجرای دستور پایتون بر روی فایل ‪ train.py‬جهت نمایش خروجی هنگام اجرای‬
‫تصویر‪ .‬ما ‪ train.py‬را اجرا میکنیم که مدلهای یادگیری ماشین را به عنوان بخشی از‬
‫فرآیند ساخت تصویر ما متناسب و سریال میکند‪.‬‬

‫در ادامه پس از نوشتن داکرفایل‪ ،‬وارد خطفرمان سیستم عامل خود شده و در مسیر فایلهای پروژه‪،‬‬
‫با دستور زیر شروع به ساخت تصویر از پروژه یادگیری ماشین خود میکنیم‪:‬‬

‫‪1‬‬
‫‪Meta data‬‬
‫‪2‬‬
‫‪Pipeline‬‬
‫‪3‬‬
‫‪Serialization‬‬
‫‪4‬‬
‫‪Deserializaiton‬‬
‫‪5‬‬
‫‪Source‬‬

‫‪39‬‬
‫با اجرای این دستور‪ ،‬داکر شروع به ساخت تصویر برای مدل یادگیری ماشین میکند و با توجه به‬
‫دستورات داکرفایل‪ ،‬تصویر پایه و متعلقات آن را در صورت نیاز از مخزن داکر‪1‬دریافت میکند‪.‬‬
‫خروجی نهایی به شکل زیر است‪:‬‬

‫شکل ‪ 2-3‬مراحل ساخت تصویر‬

‫حال تصویر ما ساختهشده و در مخزن سیستمعامل میزبان موجود است‪:‬‬

‫شکل ‪ 3-3‬تصویر های موجود در مخزن محلی (دریافت شده از مخزن ‪) Docker hub‬‬

‫‪1‬‬
‫‪Docker Hub‬‬

‫‪40‬‬
‫‪ 3-1-3‬اجرای تصویر روی نگهدارنده‬
‫حال میتوانیم استنتاج‪ 1‬خود از مدلها را روی دادههای جدید یعنی دادههای موجود در ‪test.csv‬‬
‫اجرا کنیم‪ .‬به صورت زیر‪:‬‬

‫شکل ‪ 4-3‬اجرای تصویر روی نگهدارنده‬

‫همانطور که مشاهده میشود تصویر ساختهشده روی یک نگهدارنده اجرا شده و خروجی کد‬
‫‪ inference.py‬که طبقه بندی‪ 2‬و دقت مدل ها را نمایش میدهد‪ ،‬به نمایش در آمده است‪.‬‬
‫میبینیم که مدل ها از دقت نسبتا خوبی برخوردارند‪ .‬همچنین مسیر اجرای تصویر را هم مشاهده‬
‫میکنید‪.‬‬

‫در ادامه یک پروژه یادگیری عمیق را مورد بررسی قرار میدهیم و تصویر مربوط به برنامه را ایجاد‬
‫میکنیم‪.‬‬

‫‪1‬‬
‫‪Inference‬‬
‫‪2‬‬
‫‪Classification‬‬

‫‪41‬‬
‫‪ 2-3‬پروژه یادگیری عمیق‬
‫‪ 1-2-3‬مقدمه‬
‫در این پروژه یک مدل ‪ CNN‬که تصاویر مربوط به غذاها را دستهبندی میکند‪ ،‬را در قالب یک‬
‫سرویس ‪ API‬پیادهسازی میکنیم‪.‬‬

‫همانطور که در فصل دوم شرح دادهشد‪ ،‬شبکه عصبی کانولوشن نوع خاصی از شبکه عصبی با چندین‬
‫لیه است که دادههایی را که آرایش شبکهای دارند‪ ،‬پردازش کرده و سپس ویژگیهای مهم آنها را‬
‫استخراج میکند‪ .‬یک مزیت بزرگ استفاده از‪ CNN‬ها این است که نیازی به انجام پیشپردازش‬
‫زیادی روی تصاویر نیست‪.‬‬

‫‪ FastAPI‬یک چهارچوب تحت وب به زبان پایتون است و به وسیله آن برنامههای ‪ api‬را با سرعت‬
‫بال ایجاد میکنند‪.‬‬

‫پروژه حاوی اسناد زیر است‪:‬‬

‫• ‪ : Main.py‬فایل اصلی پروژه به زبان پایتون که یادگیری روی مدل را انجام میدهد؛ در‬
‫نهایت روی یک پورت محلی سرویس ‪ fastAPI‬را اجرا میکند‪.‬‬
‫• ‪ : Requirments.txt‬یک فایل متنی است که در آن پکیجهای مورد نیاز پروژه نوشته شده‬
‫است‪ .‬از آن در داکرفایل هنگام دریافت پکیجها به وسیله دستور ‪ pip‬استفاده میشود‪.‬‬
‫• داکرفایل ‪ :‬یک فایل داکر که در آن نحوه ساخت تصویر نوشته شدهاست و تصویر طبق این‬
‫فایل ساخته میشود‪.‬‬

‫‪ 2-2-3‬شروع ساخت تصویر‬


‫محتویات داکرفایل به شکل زیر است (تصویر در صفحه بعد) ‪:‬‬

‫‪42‬‬
‫شکل ‪ 5-3‬محتویات داکرفایل‬

‫• خط ‪ :1‬تصویر پایه را نام میبریم؛ در این پروژه ما از تصویر پایتون نسخه ‪ 3.7‬استفاده کرده‬
‫ایم‪ .‬کل پروژه روی این تصویر بنا میشود‪.‬‬
‫• خط‪4‬و‪ :5‬مانند پروژه قبل ساخت دایرکتوری برای ادامه کار را انجام میدهد‪.‬‬
‫• خط ‪ :8‬یک دستور پایتون است که پکیج ‪ pip‬را بروزرسانی میکند‪.‬‬
‫• خط ‪ :11‬فایل متنی پروژه یعنی ‪ requirments.txt‬را کپی میکند و در دایکتوریای که‬
‫در خطوط قبلی ساختیم قرار میدهد(دایرکتوری در نگهدارنده ساخته میشود)‪.‬‬
‫• خط ‪ :14‬دستور پایتون است که با دستور ‪ pip‬محتویات فایل ‪ requirments.txt‬را دریافت‬
‫میکند‪.‬‬
‫• خط ‪ :17‬تمام فایلهای پروژه را کپی میکند و در دایرکتوری ساخته شده قرار میدهد‪.‬‬

‫‪43‬‬
‫• خط ‪ :20‬یک دستور اجرایی است که فایل ‪ main.py‬را اجرا میکند؛ معادل دستور زیر در‬
‫خطفرمان است‪:‬‬
‫‪Python main.py‬‬
‫در ادامه پس از نوشتن داکرفایل‪ ،‬وارد خطفرمان یا ترمینال سیستمعامل خود شده و در مسیر‬
‫فایلهای پروژه‪ ،‬با دستور زیر شروع به ساخت تصویر از پروژه خود میکنیم‪:‬‬

‫‪docker build -t <your-image-name> .‬‬


‫نحوه ساخت همانند شکل ‪ 16‬است‪.‬‬

‫پس از ساخت تصویر با دستور زیر آن را در یک نگهدارنده اجرا میکنیم‪:‬‬

‫>‪docker run -p 5000:5000 -d <your-image-name‬‬


‫با تنظیمات ‪ -p‬پورت ‪ 5000‬سیستم خود را به پورت ‪ 5000‬نگهدارنده متصل میکنیم؛ همچنین با‬
‫تنظیمات ‪ -d‬نگهدارنده را به صورت ‪ detached mode‬اجرا میکنیم؛ به این معنی که در پسزمینه‬
‫اجرا میشود‪ .‬در صورت موفقیتآمیز بودن اجرا‪ ،‬شناسه نگهدارنده در خطفرمان به عنوان خروجی‬
‫برمیگردد‪.‬‬

‫شکل ‪ 6-3‬اجرای تصویر‪2‬‬

‫اکنون با باز کردن صفحه ‪ /http://localhost:5000‬در رایانه خود میتوانیم مشاهده کنیم که‬
‫آیا نگهدارنده با موفقیت اجرا شده است یا خیر‪:‬‬

‫‪44‬‬
‫شکل ‪ 7-3‬اجرای برنامه با نگهدارنده‬

‫با وارد کردن دستور ‪ http://localhost:5000/docs‬به صفحه ‪ fastAPI‬هدایت میشویم؛ در‬


‫آنجا میتوانیم با متد ‪ POST‬یک تصویر ارسال کنیم و نتیجه طبقهبندی تصویر را در قالب ‪JSON‬‬
‫تماشا کنیم‪.‬‬

‫برای مثال ما از تصویر زیر استفاده می کنیم‪:‬‬

‫شکل ‪ 8-3‬تصویر نمونه‬

‫‪45‬‬
‫خروجی ‪ fastAPI‬پس از تزریق یک ورودی در قالب تصویر‪ ،‬به صورت زیر میباشد‪:‬‬

‫شکل ‪ 9-3‬خروجی نگهدارنده تحت وب‬

‫بدین ترتیب موفق به ساخت یک تصویر از پروژه یادگیری عمیق شدیم‪ .‬حال میتوانیم پروژه خود‬
‫را در ریپازیتوری عمومی خود در‪ hub.docker.com‬با سایرین به اشتراک بگذاریم‪.‬‬

‫‪46‬‬
‫‪ 3-3‬جمعبندی و نتیجهگیری‬
‫همانطور که در بخشهای قبل مشاهده کردید‪ ،‬ساختن تصویر برای یک پروژه یادگیری ماشین و‬
‫یادگیری عمیق با نوشتن داکرفایل برای آن و اجرای دستور ‪ docker build‬امکانپذیر است‪.‬‬

‫حال ما با پوش کردن تصویر خود در مخزن ‪ Docker hub‬میتوانیم پروژه یادگیری ماشین‪/‬عمیق‬
‫خود را در دسترس عموم قرار دهیم تا سایر کاربران با دریافت آن تصویر و اجرای آن روی یک‬
‫نگهدارنده در سرور میزبان خود‪ ،‬بتوانند بدون آشنایی با کتابخانهها و متعلقات آن پروژه‪ ،‬پروژه را‬
‫اجرا و نتیجه آن را مشاهده نمایند‪ .‬فرضا پروژه با زبان پایتون‪ 3‬نوشته شده و فرد دریافت کننده‬
‫تصویر روی سیستم خود پایتون‪ 2‬را دارد‪ .‬با داکر دیگر مشکلی برای اجرا وجود نخواهد داشت و‬
‫دریافت کننده نیازی به تغییر نسخه پایتون خود نیز ندارد؛ همچنین به تبع رفع این مشکل‪ ،‬فرد‬
‫نیازی به استفاده از ماشین مجازی نیز ندارد و در نتیجه سرعت و فضای سیستم را از دست نخواهد‬
‫داد‪.‬‬

‫در این پروژه دیدیم که علوه بر سایر برنامهها ‪ ،‬برای برنامههای یادگیری ماشین نیز میتوان ایمیج‬
‫داکر ساخت و از آن استفاده کرد‪ .‬این تنها یک مثال از ساخت تصویر و اجرای آن برای پروژه یادگیری‬
‫ماشین است‪ .‬برای سایر برنامههای یادگیری ماشین نیز به همین ترتیب عمل میشود‪ .‬استفاده از‬
‫تصویر داکر برای پروژههای یادگیری ماشین‪ ،‬باعث راحتی‪ ،‬افزایش سرعت و اتلف وقت بسیار کمتر‬
‫توسعهدهندگان در استفاده از آن در سایر سرورها و سیستمهای خارجی است‪.‬‬

‫‪47‬‬
‫سخن پایانی‬
‫در پایان تشکر میکنم از استاد محترم دکتر راستگو که بنده را در نوشتن این پایاننامه کمک کردند‬
‫و باعث شدند که بنده با این ابزار کاربردی و خوب و همچنین با مفاهیم جالب یادگیری عمیق آشنا‬
‫شوم‪ .‬موفقیتهای روز افزون را برای ایشان از ایزد منان خواهانم‪.‬‬

‫و تشکر میکنم از همه شما خوانندگان گرامی بابت صبر و شکیبایی که در خواندن این پایاننامه از‬
‫خود نشان دادید‪.‬‬

‫‪48‬‬
‫منابع‬
[1]. Docker (n d) . Docker Documentation. https://docs.docker.com

‫ شبکه‬:‫ راضیه ؛ "لذت آموزش گام به کام یادگیری عمیق با مثال عددی(کتاب دوم‬،‫ کوروش ؛ راستگو‬،‫ کیانی‬.]2[

1400 ‫عصبی کانولوشن)"؛ سمنان ؛ دانشگاه سمنان ؛ بهار‬

[3]. Docker (n d) . Docker:Accelerated,Containerized Application Development.

https://docker.com/

https://dockerme.ir/ .‫ آموزش داکر و پلتفرم به زبان فارسی‬.)‫احمد رفیعی (بیتا‬.]4[

[5]. https://youtube.com/

. ‫ از صفر تا صد‬-‫ آموزش داکر به زبان ساده‬. )1400 ‫فرادرس (آذر‬ .]6[

https://blog.faradars.org/%D8%A2%D9%85%D9%88%D8%B2%D8%B4-

%D8%AF%D8%A7%DA%A9%D8%B1-docker-

%D8%B1%D8%A7%DB%8C%DA%AF%D8%A7%D9%86/

. https://quera.org/blog/what-is-a- .‫ شبکه عصبی کانولوشن چیست؟‬. )1400 ‫ کوئرا (آبان‬.]7[

convolutional-neural-network/

. https://howsam.org/convolutional-‫ شبکه عصبی کانولوشن‬. )1400 ‫ هوسم (اردیبهشت‬.]8[

neural-network/

[9]. Xavier vazques (Apr 2021) . why use Docker containers for machine

learning? . https://towardsdatascience.com/why-using-docker-for-machine-

learning-74c927ceb6c4

49
. ‫روش‬ ‫چند‬ ‫با‬ ‫داکر‬ ‫تحریم‬ ‫از‬ ‫گریز‬ . )1397( ‫ ویرگول‬.]10[

https://virgool.io/DockerMe/%DA%AF%D8%B1%DB%8C%D8%B2-

%D8%A7%D8%B2-%D8%AA%D8%AD%D8%B1%DB%8C%D9%85-

%D8%AF%D8%A7%DA%A9%D8%B1-%D8%A8%D8%A7-

%DA%86%D9%86%D8%AF-%D8%B1%D9%88%D8%B4-z6czoxibqnyk

[11]. Wikipedia (n d) . ‫ هوش مصنوعی‬. https://wikipedia.org

. https://negand.com/fa/35-2/. ‫ نوار مغزی چیست؟‬. )‫ شرکت طراحی نگاراندیشان (بیتا‬.]12[

.‫( همان بیتا یا "بدون تاریخ" میباشد‬n d) ‫ منظور از‬:‫پیشنویس‬

50
Abstract
Nowadays, “Docker” is mentioned as one of the important and practical
tools in the field of programming. Docker as a tool for building and
running programs in container environments has significantly increased
the speed and productivity of these programs. With Docker, we will no
longer worry about the difference between the versions of the program's
components and its libraries. Currently, this tool can be used in the
development of programs related to artificial intelligence and
machine/deep learning, and developers in this field can share their
programs with public or their colleagues without worry through Docker.
Also Docker is so helpful for these projects because machine/deep
learning projects have many libraries with several versions. On the other
hand, they’re not same in most devices, so in these cases Docker help us!
In this project, we are going to build and implement a container (explained
in the introduction) on our machine/deep learning model using the tools
available in Docker. In fact, the idea of this project is to build a quick and
easy Docker container with a simple machine/deep learning model and
run it. Implementation is available at
https://github.com/NavidAfzali/Docker-for-deep-learning/tree/master .

51
Faculty of Electrical and Computer Engineering
Department of Computer Engineering

Bachelor project thesis

Title:
Using Docker to implement deep learning projects

Supervisor:
Dr.Rastgoo

Student:
Mohammad navid afzali

Student number:
9711126012

first semester of 01-02

52

You might also like