ابزارها

بسم الله الرحمن الرحیم

من اینجا لیست ابزارها و چارچوبهایی (فریم ورک) هایی که برای کار تو حوزه دیپ لرنینگ ازش استفاده میشه رو قرار دادم و میدم .سعی اولیه من اینه که ابزارهای مهم و معروف اینجا قید بشه بعدا به مرور زمان شاید ابزارهای پرکاربرد دیگه هم اینجا بزارم.

 

نکته مهم : 
چیزی که من پیشنهاد میکنم شما یاد بگیرید اول TensorFlow هست و بعد Torch و بعد Deeplearning4J. برای آشنایی caffe رو یادبگیرید. یادگیری و کارکردن باهاش خیلی ساده اس. خیلی قدرتمنده خصوصا تو شبکه های کانولوشن. اما بزرگترین مشکلش نداشتن مستندات درستو حسابیه.(شاید در اینده بهتر بشه) البته من تاجایی که تونستم و میتونم مستندات caffe‌رو تهیه کردم و میکنم. tensorflow توسط گوگل پشتیبانی میشه و بشدت داره رشد میکنه و منابع و مستندات بسیار خوبی براش تهیه شده و داره میشه.هم در لینوکس و هم در ویندوز قابل نصب و اجراست و پروسه نصب فوق العاده ساده ای داره (تنها با یک دستور میتونید عمل نصب رو انجام بدید در ویندوز). Torch هم به همین شکل مستندات بسیار خوبی داره (و قبل از tensorflow بهترین گزینه ای بود که من میتونستم پیشنهاد کنم(البته از لحاظ جامعیت هنوز تورچ بهتره اما چون زبان لوآ نیاز داره و فقط در لینوکس اجرا میشه من اونو بعد از تنسورفلو پیشنهاد میکنم. کسایی که با اینا مشکل ندارن میتونن با تورچ استارت بزنن.) . Deeplearning4J هم خوب داره رشد میکنه و برای سناریوهای جاوا و سیستم های توزیع شده میتونه خیلی خوب باشه. من انشاالله سرفرصت سعی میکنم نکات مثبت این ها رو بگم . مطالب زیر در مورد caffe هم باقی میمونه . اینم یادتون باشه این به معنای این نیست که در حال حاضر caffe گزینه بدیه! نه اتفاقا برای شروع میتونه خیلی خوب باشه. ولی اگر قراره وقت بزارید استارتتون با تنسور فلو یا تورچ باشه بهتره که بعدا اذیت نشید.(من خودم مدتیه استارت کارم رو با تنسورفلو زدم.هرجا نیاز باشه از کفی و هرجا نیاز باشه از تنسورفلو استفاده میکنم.)

 

 


 

از بین اینها من خودم از Caffe استفاده کردم . بطور خیلی محدود هم از Theano . سرعت Caffe خیلی خوبه . قابلیتهای بسیار عالی ای داره و یه مخزن داره که بهش میگن Model Zoo و مدلهای معروف تو مقالات بصورت pre trained شده اماده دانلود و استفاده هستن.(یکی از ویژگی هایی که باعث استفاده زیاد از Caffe میشه دقیقا همین هست.). دانشگاه هایی مثل استنفورد برکلی و …. از این استفاده میکنن. بصورت رسمی Caffe‌ رو اوبونتو ۱۴٫۰۴ پیشتیبانی میشه.(مشکلی با ورژن های جدید نداره البته و پشتیبانی میشه) ولی بصورت جسته گریخته از یکی دو سال پیش ورژنهایی که روی ویندوز هم کامپایل بشن وجود داشتن ولی خب چون بصورت رسمی پشتیبانی نمیشد و معمولا هم توسط افراد معمولی این نسخه ها ارائه میشد هرکدوم یه مشکلی داشتن (حداقل مشکل بروز نبودن نسخه ویندوز نسبت به ورژن رسمی بود و اموزش ها و اسکریپت های مختلفی که فقط برای لینوکس وجود داشت و برای ویندوز پورت نمیشد معمولا خلاصه دردسر داشت.) نسخه ای هم که من گذاشتم پشتیبانی مایکروسافت هست.(من خودم شخصا از دو ورژن تحت ویندوز استفاده کردم قبلا. الان هم رو لینوکس هستم و تحقیقات و کارام رو لینوکس انجام میشه با caffe. ولی سر فرصت اینو تست میکنم و نظر خودم رو میگم).
نسخه OpenCL هم برای کارتهای غیر انویدیا اومده . یعنی کسایی که کارت گرافیک AMD(ATI) یا Intel و یا غیره دارن میتونن از این استفاده کنن.

برای نصب Caffe در لینوکس از این راهنما استفاده کنید. اگر از ورژن ۱۵ یا ۱۶ ابونتو استفاده میکنید از این آموزش استفاده کنید (و اگه نیاز به نصب و کار با رپر متلب در لینوکس دارید این راهنما رو ببنید بخش اخرش )برای ورژن تحت ویندوزش هم فقط کافیه که از پوشه windows فایل solution ویژوال استودیو ۲۰۱۳ رو اجرا کنید و بزنید کامپایل کنید . خودکار هر دیپندنسی داشته باشه از طریق nuget دانلود میکنه. فقط یادتون باشه cuda و cudnn رو قبلش دانلود و نصب کرده باشید. و مسیر cudnn رو تو فایل CommonSettings.props وارد کرده باشید.(یادتون باشه شما فایل CommonSettings.props.examples رو دارید باید پسوندش رو که .example هست حذف کنید.) اگه از پایتون میخوایید استفاده کنید بهترین گزینه دانلود Anaconda2 هست. اگر هم میخوایید wrapper متلب رو استفاده کنید یادتون باشه قبلش یکی از ورژنهای ۲۰۱۵a یا ۲۰۱۴a/b یا ۲۰۱۳a/b یا ۲۰۱۲b متلب نصب باشه و مسیرش رو در فایل CommonSettings.props ویرایش کرده باشید.
نکته بعدی اینکه cudnn رو که دانلود کنید باید یکجایی اکسترکتش کنید (از حالت زیپ خارجش کنید). وقتی اکسترکت شد باید یه پوشه داشته باشید با نام cuda که سه تا پوشه توشه. وقتی دارید مسیر cudnn رو تو فایل CommonSettings.props مشخص میکنید یادتون باشه مسیر جایی رو بدید که این پوشه cuda توشه. مثلا شما cudnn رو تو مسیر D:\yejaee\  اکسترکت کردید. مسیری که باید برای cudnn تو فایل میدید همین باید باشه .دیگه نباید بنویسید D:\yejaee\cuda\  ! من خودم برای راحتی کار پوشه cuda رو تو جایی که cuda toolkit رو نصب کردم کپی میکنم یعنی  تو مسیر C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v7.5\  کپیش میکنم و همین مسیر رو تو تنظیمات وارد میکنم . مثل زیر

نمونه فایل تنظیمات من رو میتونید از اینجا دانلود کنید و ایده بگیرید تنظیمات چطوری باید باشه .(میتونید حتی کپیش کنید و بعد تغییرات خودتون رو توش بدید)

اگه میخوایید به نمونه مثالها و مستندارت Caffe نگاهی بندازید میتونید به اینجا یه نگاهی بندازید.
اگر مشکلی پیش اومد و میخواید جایی سوالی بپرسید از اینجا میتونید اینکارو بکنید
نکته: در مورد پیدا کردن compute capability که برای استفاده از cudnn دونستنش لازمه از لیست پایین استفاده کنید (اگه کارتتون اینجا نیست از اینجا کمک بگیرید . انویدیا مارو تحریم کرده با فیلتر شکن بازش کنید.یا از اینجا که نیازی به فیلتر شکن نداره)
نکته دوم : cudnn v3 و cudnn v4 به بعد همه از کارتهایی که compute capability 3 و بالاتر دارن پشتیبانی میکنن. کارتهایی که compute 2.1  رو پشتیبانی میکنن کلا باید قید استفاده از cudnn رو بزنن چون cudnnv1 و v2 هم حداقل نیاز به compute 3  دارن.
این دسته ازدوستان یا باید کارت گرافیکشون رو عوض کنن یا بدون استفاده از cudnn کامپایل رو انجام بدن.
لیست دانلود Cuda toolkit های قدیمی (کمتر از ۷). برای دانلود جدیدترین ورژن اینجا کلیک کنید

من تعدادی از این ورژن های مربوط به Cuda و cudnn رو اینجا آپلود کردم که اگه فیلترشکن ندارید بتونید دانلود کنید . اگر لینکی از کار افتاد بگید تا دوباره اپلود کنم.(با دانلود منجر میتونید دانلود کنید)

GeForce Notebook Products

GPU Compute Capability
GeForce GTX 980 ۵٫۲
GeForce GTX 980M ۵٫۲
GeForce GTX 970M ۵٫۲
GeForce GTX 965M ۵٫۲
GeForce GTX 960M ۵٫۰
GeForce GTX 950M ۵٫۰
GeForce 940M ۵٫۰
GeForce 930M ۵٫۰
GeForce 920M ۳٫۵
GeForce 910M ۵٫۲
GeForce GTX 880M ۳٫۰
GeForce GTX 870M ۳٫۰
GeForce GTX 860M ۳٫۰/۵٫۰(**)
GeForce GTX 850M ۵٫۰
GeForce 840M ۵٫۰
GeForce 830M ۵٫۰
GeForce 820M ۲٫۱
GeForce 800M ۲٫۱
GeForce GTX 780M ۳٫۰
GeForce GTX 770M ۳٫۰
GeForce GTX 765M ۳٫۰
GeForce GTX 760M ۳٫۰
GeForce GTX 680MX ۳٫۰
GeForce GTX 680M ۳٫۰
GeForce GTX 675MX ۳٫۰
GeForce GTX 675M ۲٫۱
GeForce GTX 670MX ۳٫۰
GeForce GTX 670M ۲٫۱
GeForce GTX 660M ۳٫۰
GeForce GT 750M ۳٫۰
GeForce GT 650M ۳٫۰
GeForce GT 745M ۳٫۰
GeForce GT 645M ۳٫۰
GeForce GT 740M ۳٫۰
GeForce GT 730M ۳٫۰
GeForce GT 640M ۳٫۰
GeForce GT 640M LE ۳٫۰
GeForce GT 735M ۳٫۰
GeForce GT 635M ۲٫۱
GeForce GT 730M ۳٫۰
GeForce GT 630M ۲٫۱
GeForce GT 625M ۲٫۱
GeForce GT 720M ۲٫۱
GeForce GT 620M ۲٫۱
GeForce 710M ۲٫۱
GeForce 705M ۲٫۱
GeForce 610M ۲٫۱
GeForce GTX 580M ۲٫۱
GeForce GTX 570M ۲٫۱
GeForce GTX 560M ۲٫۱
GeForce GT 555M ۲٫۱
GeForce GT 550M ۲٫۱
GeForce GT 540M ۲٫۱
GeForce GT 525M ۲٫۱
GeForce GT 520MX ۲٫۱
GeForce GT 520M ۲٫۱
GeForce GTX 485M ۲٫۱
GeForce GTX 470M ۲٫۱
GeForce GTX 460M ۲٫۱
GeForce GT 445M ۲٫۱
GeForce GT 435M ۲٫۱
GeForce GT 420M ۲٫۱
GeForce GT 415M ۲٫۱
GeForce GTX 480M ۲٫۰
GeForce 710M ۲٫۱
GeForce 410M ۲٫۱

DIGITS هم یه front-end برای caffe هست که کار رو خیلی راحت میکنه . هنوز رسما ورژن مبتنی بر ویندوزش نیومده اما من ورژنی که خودم برای ویندوز پورت کردم رو قرار دادم و تا وقتی که نسخه رسمیش بیاد میتونید از این استفاده کنید. DIGITs رو یه رابط گرافیکی کاربری برای کار با caffe در نظر بگیرید که بشما اجازه میده خیلی راحت دیتاست خودتون رو مشخص کنید و تنظیمات مختلف رو بصورت گرافیکی انجام بدید و نهایتا موقع training نرخ خطا و میزان دقت و… رو بصورت بلادرنگ تو نمودار بهتون نشون میده که خیلی عالیه . بعدش هم میتونید نمونه های دیگه رو تست کنید. مدلهای مبتنی بر caffe با این سازگار هستن.
اگر مشکلی پیش اومد میتونید از اینجا برای رفع اشکال استفاده کنید.

بعدی Torch هست. که سرعت خوبی داره و برخلاف Caffe مستندات خیلی خوبی هم داره . توسط فیس بوک و گوگل استفاده میشه و ویژگی های جدیدی که تو مقالات ارائه میشن معمولا قبل از همه پیاده میکنه . اطلاعات کامل در مورد تورچ و نحوه اجرا و خلاصه همه چیزش بصورت کامل اینجا هست. اگر هم سوالی بود میتونید از اینجا بپرسید. تورچ در ویندوز پشتیبانی نمیشه . برنامه ای هم برای پشتیبانی ازش در ویندوز در حال حاضر ندارن . پس فقط محدود به لینوکس هست. در حال حاضر!

MatConvNet‌ هم یه تولباکس برای متلب هست که اخیرا خوب داره کار میشه روش اما به اندازه دوتای قبلی (و ثیانو که زیر توضیح میدم) معروف نیست (شاید من زیاد به چشمم نخورده) ولی به هر حال منبع خوبی میتونه باشه برای کسایی که متلب کار هستن. این هم مثل Caffe دارای یه بخش هست که مدلهای از قبل train شده در اون وجود دارن (اینا از Caffe گرفته شده!). بنظر میاد داکیومنت بدی هم نداشته باشه هرچند من شخصا استفاده نکردم .آموزش نصبش رو آقای ملک زاده عزیز اینجا زحمت کشیدن و گذاشتن. هم در لینوکس و هم در ویندوز قابل استفاده اس.

Theano هم که مبتنی بر پایون هست و تعداد خیلی زیادی از فریم ورکهای حوزه دیپ لرنینگ از این مشتق شدن یا دارن استفاده میکنن. ثیانو در اصل یه کتابخونه پایتون هست که عملیات های ماتریسی  رو بخوبی انجام میده . (کلا پایتون بشدت تو حوزه data science استفاده میشه و اگه کسی میخواد تو این زمینه ها کار کنه خیلی خوبه که این زبان رو یادبگیره. تمام فریم ورکهایی رو هم که نام بردم همه اشون wrapper برای پایتون دارن و کلا کارها با پایتون خیلی خیلی راحتر هست)

CNTK توسط مایکروسافت چندماه پیش ارائه شده . هنوز یوزر بیس کافی نداره و بهتره برای کارهای جدی ازش استفاده نکنید که یوقت توش بمونید و کسی نباشه که کمکتون کنه . اگه وقت دارید و به موضوع تسلط خیلی خوبی دارید میتونید برید طرفش . ولی پیشنهاد من اینه اول با یکی از ابزارهای معروف که یوزر بیس خوبی هم دارن شروع کنید که اگر به مشکلی برخوردید زود برطرف کنید. بعد که تسلط و تجربه پیدا کردید حالا برید سراغ ابزارها و چارچوبهای دیگه برید.

DeepLearning4J هم مبتنی بر جاوا هست و یکی از فریم ورکهای خیلی خوب تو این زمینه است که مستندات خیلی خوبی داره هرچند شخصا تستش نکردم اما در نظر دارم حتما طرفش برم.این چارچوب بعنوان مثال در ناسا ازش استفاده میشه و سرعتش حداقل ۲ برابر از ثیانو بیشتره و برای کاربردهای توزیع شده و… ایده آل و فوق العاده اس. هم در ویندوز و هم در لینوکس براحتی میتونید از این چارچوب استفاده کنید.

Cuda-Convnet هم توسط الکس کریژوسکی نوشته شده (برنده رقابت ImageNet2012 , همون کسی که باعث و بانی شدت گرفتن دیپ لرنینگ شد!).

TensorFlow : یکی از بهترین های این حوزه است که بشدت داره پیشرفت میکنه و محبوب میشه. Tensorflow برای سناریو های توزیع شده چه مبتنی بر سی پی یو و چه جی پی یو بسیار عالی عمل میکنه و توسط گوگل پشتیبانی میشه.هم در لینوکس و هم در ویندوز (از ورژن ۰٫۱۲ ) پشتیبانی میشه . از ویندوز های ۷ ۱۰ و سرور۲۰۱۶ پشتیبانی میشه.

کتابخانه های سطح بالا (Keras ,TFLearn,TFSlim, Blocks ,…):
این کتابخونه ها که تعدادشون هم کم نیست به خودی خود عملیات های مربوط به آموزش و … رو انجام نمیدن . اینها در اصل یه frontend یا یه لایه بالایی هستن که از امکانات کتابخونه ها/فریم ورکهایی مثل تنسورفلو و ثیانو پشتیبانی میکنن و کار برنامه نویسی و کار کردن رو خیلی راحت تر میکنن.
Keras یه کتابخونه سطح بالاس که از ثیانو و تنسورفلو استفاده میکنه یعنی اگه شما با کراس کار کنید میتونید رو هرکدوم از این بک اندها سویچ کنید که از این لحاظ قابلیت خیلی خوبه. کراس مقبولیت خوبی بین کاربرا داره و مستندات بسیار خوبی هم داره.
TFLearn و TFSlim هم بطور اختصاصی به تنسورفلو اختصاص دارن . TFSlim که درون خود تنسورفلو هست ولی TFLearn جداگانه باید نصب بشه و مستندات بسیار خوبی داره .
Blocks هم یکی دیگه از فرانت اندهای مبتنی بر ثیانو هست.

 

من انشاالله سعی میکنم بعدا توضیحات مبسوطی در مورد اینها بدم و یه مقایسه ای هم بین اینها انجام بدم ولی فعلا بعلت ذیق وقت به همینقدر بسنده میکنم اگر سوالی هست بفرمایید اگه بلد بودم جواب میدم.

 

 

10 دیدگاه در “ابزارها

  1. با سلام
    خیلی ممنون بابت این وبلاگی که دارید.و انشا… که همیشه موفق باشید
    یه سوال دارم : من کارت گرافیک غیر انویدیا دارم میخواستم بدونم میشه با این وجود با تنسور فلو کار کنم؟
    ممنون

    1. سلام
      یه برنچ opencl از تنسورفلو هست (البته یکی دیگه هم هست ولی این بروزتره ) : https://github.com/benoitsteiner/tensorflow-opencl
      میتونید چک کنید. اما انتظار پشتیبانی و… خاصی نداشته باشید. کلا OpenCL بصورت رسمی پشتیبانی نمیشه و این ورژن هایی رو هم که میبینید غیررسمی هستن و جامعه کاربری کوچیکی دارن.

  2. سلام .
    بنابر گفته هاتون در مورد کارت ۹۷۰ در صورتی که از دوتای این کارت همزمان استفاده بشه ، چقدر تاثیر داره ؟‌

    1. سلام .
      از لحاظ سرعت پردازش و اموزش خیلی سریعتر میشه اما در حال حاضر هیچکدوم از کتابخونه ها و چارچوب های یادگیری عمیق حافظه ها رو تجمیع نمیکنن. یعنی شما بعنوان مثال در کفی میتونید مدلی رو آموزش بدید که در حافظه هر کارت گرافیک جا بشه.(محدودیت رو حافظه کمتر مشخص میکنه)
      بزارید یک مثال بزنم اگه دوتا کارت داشته باشید یکی ۴ گیگ یکی ۲ گیگ شما میتونید مدلی رو اجرا کنید که در ۲ گیگ جا بشه!
      اینطور بعنوان مثال کفی میاد شبکه رو بصورت موازی روی دوتا کارت اجرا میکنه (و اندازه بچ شما دو برابر میشه) و نتایج ترکیب و خروجی بشما داده میشه .
      تنها سودی که این کار داره سریعتر انجام شدن فاز اموزش هست .
      حالا شما میتونید همین نکته رو در مورد ۹۷۰ هم تعمیمش بدید. یعنی شما دوتا کارت ۹۷۰ استفاده کنید اولا کماکان همون محدودیت ۴ گیگ حافظه رو دارید. و حتما شبکه شما باید فضایی کمتر از ۳٫۵ گیگ اشغال کنه تا بمشکل نخورید .
      نکته مثبتش فقط این میشه که عملیات آموزش چند برابر سریعتر پیش میره
      به همین دلیل هم هست که همییشه پیشنهاد میشه بجای استفاده از چند کارت گرافیک با حافظه کم از یه کارت گرافیک قوی تر با حافظه زیاد استفاده کنید. (مگه اینکه بدونید معماریتون زیر ۴ گیگ خواهد بود و کارتها هم ارزون یا در دسترس هستن . در این حالت خب دندون اسب پیش کشی رو نمیشمارن! و از هرچی دارن استفاده میکنن)
      البته این نکته رو هم باید بگم که در بین فریم ورکها من تنها تنسورفلو رو دیدم که شما میتونید بار پردازشی رو مشخص کنید روی چه چیزی باشه . یعنی میتونید مشخص کنید کدوم بخش از کد شما روی کارت گرافیک ۱ کدوم روی سی پی یو و کدوم روی کارت گرافیک ۲ و الی اخر اجرا بشه
      البته در ظاهر این خیلی خوبه اما در عمل بکار گیری اون همچین بدون چالش و راحت هم نیست.

  3. سلام و عرض ادب
    اگر ممکنه نحوه نصب تنسور فلو رو بفرمایید
    تو نت یه چیزایی هست ولی چون تجربه کمی دارم نتونستم استفاده کنم
    ممنون

  4. درود و مهر بر شما
    پیشنهاد میکنم سرعت اجرا بین ابزارهای گفته شده با سخت افزارهای گوناگون را مقایسه نمائید.
    مایکروسافت مقایسه سرعت اجرای ابزارهای فوق را با یک GPU به شکل زیر بیان میکند
    ۱: Caffe
    ۲: Torch 7
    ۳: CNTK
    ۴: TensorFlow
    که ۳ مورد اول اختلاف بسیار کمی با هم دارند
    اما در اجرا با ۴ یا ۸ عدد GPU ابزار CNTK با اختلاف زیاد و چشمگیر از بقیه ابزارها سریعتر است

    1. سلام .
      اگه اشارتون به بنچمارکی هست که مایکروسافت اواخر ۲۰۱۵ داد (زمان عرضه CNTK (که تو صفحه گیتهابش هم هست) اون دیگه الان صحیح و دقیق نیست . از اوایل سال ۲۰۱۶ ورق کاملا برگشت.
      بعنوان مثال اگر اشتباه نکرده باشم الان Neon سریعترین فیم ورک هست و کفی حتی تو سه فریم ورک اول هم نیست . تنسورفلو باز بعنوان مثال از کفی بهتر شده!
      من در بخش پرسش و پاسخ به سوال یکی از عزیزان قبلا جواب دادم که در همین مورد بود اونجا یه مقاله رو معرفی کردم که فریم ورکهای مختلف رو تست کرده بود و خوندنش برای شما بنظرم خالی از لطف نباشه .
      اگه این بنچمارکی که اشاره کردید اخیرا انجام شده بنظرم خیلی بهتره لینکش رو هم در اختیار همه قرار بدید تا از این لطف شما بیشتر و بهتر بشه بهره مند شد.
      در پناه خداوند انشاالله همیشه موفق و سربلند باشید

        1. سلام .
          خیلی ممنونم .
          بله دیدم . اما اگر دقت کرده باشید در ویدئو هم (اینجا(دقیقه ۱۴:۳۸) ) گفته میشه که این بنچمارک مربوط به دسامبر سال قبلش هست (دسامبر ۲۰۱۵ ) و بصورت زیرکانه ای گفتن شاید بقیه بهبود پیدا کرده باشن الان اما ما دوباره بنچمارک نگرفتیم!!!
          و همونطور که قبلا عرض کرده بودم الان خیلی تفاوت کرده و دیگه مثل اون زمان نیست.

پاسخ دهید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *