کدام کارت گرافیک برای یادگیری عمیق مناسب است ؟

0
82
29 بهمن 1398
0
82
29 بهمن 1398

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

اوائل شروع یادگیری عمیق اجرای پردازش ها محدود به استفاده از کارتهای گرافیک بود. اما طی یکسال اخیر فعالیتهایی در جهت استفاده از سیستم های توزیع شده هم صورت گرفته که در کفی میشه به SparkCaffe و در جاوا به DeepLearning4J و احتمالا معروف تر از همه Tensorflow اشاره کرد. ذکر این نکته ضروریه که یک کارت گرافیک با قیمت متوسط مثل GTX960 یا حتی GTX1060 از یک سرور با پردازنده xeon هم به مراتب قوی تره.

پس در حال حاضر ما برای اینکه بتونیم در یک زمان معقول یک شبکه عصبی عمیق رو آموزش بدیم نیازمند استفاده از پردازش موازی هستیم و برای اینکار از کارتهای گرافیک استفاده میشه. خب حالا از چه کارت گرافیکی استفاده باید کرد؟
در حال حاضر شرکت Nvidia برنده بی چون و چرای این حوزه است. تمامی کتابخونه ها و چارچوبها بدون استثنا از کارتهای انویدیا پشتیبانی میکنن و مبتنی بر Cuda و cudnn هستند. پشتیبانی از کارتهای AMD/Intel و متنفرقه یا مبتنی بر OpenCL یا وجود نداره و یا بشدت ضعیف هست بعنوان مثال AMD برنچی از کفی رو به OpenCL پورت کرد اما خیلی زود هم اونو کنار گذاشت و پشتیبانی ازش رو قطع کرد. هرچند در حال حاضر یک برنچ مبتنی بر OpenCL در کفی وجود داره (اینجا) که کسانی که کارت گرافیک AMD و یا Intel دارن میتونن ازش استفاده کنن اما از لحاظ سرعت و بروز رسانی قابل قیاس با ورژن اصلی و مبتنی بر Cuda/cudnn نیست.البته اخیرا AMD شروع به پشتیبانی جدی تری در این حوزه کرده و با ارائه rocm و ارائه نسخه های بروز فریم ورکهای تراز اول مثل تنسورفلو و پای تورچ برای کارتهای مبتنی بر AMD قدم های خوبی برداره.

مقایسه CPU و GPU در یادگیری عمیق

در تصویر بالا هم یک مقایسه بین CPU و GPU میبینید (در بخش دوم مقایسه خیلی کاملتری داریم انشاالله) به تعداد روزها دقت کنید!(۴۳ روز در برابر ۳ روز!)

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

به همین دلیل پیشنهاد اکید میشه در زمان خرید حتما یک کارت گرافیک انویدیا رو تهیه کنید.

خب آیا هر کارت انویدیایی قابل استفاده است  ؟

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

نکته اول قابلیت های کارت گرافیک شما است . شما ار هر کتابخونه و یا چارچوبی که قراره استفاده کنید باید به نیازمندی های سخت افزاری اون توجه کنید. بعنوان مثال اگر از کفی میخوایید استفاده کنید باید حتما کارت گرافیک شما compute capability 2.1 به بالا داشته باشه.(در نسخه اخیر کفی شما باید از compute capability 3.0 به بالا استفاده کنید) اگر ار تنسورفلو میخوایید استفاده کنید (پکیج های آماده اش) باید حتما کارت گرافیک شما compute capability 3 به بالا داشته باشه. (آخرین نسخه تنسورفلو در حال حاضر حداقل نیازمند compute capability 3.5 هست) این قضیه برای torch هم صادقه.(از نسخه۰٫۳ پایتورچ فقط از کارتهای با compute capabilty 5.0 به بالا پشتیبانی میشه.)

در زیر لیست کارتهای مختلف و وضعیت پشتیبانی اونها از compute capalibity رو مشاهده میکنید :

لیست GPU ها و پشتیبانی اونها از Compute Capabilityو CUDA :

  • CUDA SDK 6.0 پشتیبانی از compute capability نسخه  ۱٫۰ الی ۳٫۵٫ (Tesla, Fermi, Kepler)
  • CUDA SDK 6.5 پشتیبانی از compute capability نسخه ۱٫۱ الی ۵٫x  (سری Tesla, Fermi, Kepler, Maxwell) . آخرین نسخه ای هست که از compute capability نسخه  ۱٫x پشتیبانی میکنه (Tesla)
  • CUDA SDK 7.5 پشتیبانی از compute capability نسخه   ۲٫۰ الی ۵٫x  (سری  Fermi, Kepler, Maxwell)
  • CUDA SDK 8.0  پشتیبانی از compute capability نسخه  ۲٫۰ الی ۶٫x (سری Fermi, Kepler, Maxwell, Pascal) . آخرین نسخه با پشتیبانی از compute capability نسخه  ۲٫x (مربوط به سری Fermi)
  • CUDA SDK 9.0/9.1/9.2 پشتیبانی از compute capability  نسخه ۳٫۰ الی ۷٫۲ (سری Kepler, Maxwell, Pascal, Volta)
  • CUDA SDK 10.0 پشتیبانیcompute capability از نسخه   ۳٫۰ الی ۷٫۵ (سری Kepler, Maxwell, Pascal, Volta, Turing)

در زیر کارتهای مختلف با compute capability 3 به بالا مشخص شدن (با بردن ماوس روی هر لیست اطلاعات compute capability اون رو میتونید به تفکیک مشاهده کنید)

123456789 <Kepler>GeForce GTX 770, GeForce GTX 760, GeForce GT 740, GeForce GTX 690, GeForce GTX 680, GeForce GTX 670, GeForce GTX 660 Ti, GeForce GTX 660, GeForce GTX 650 Ti BOOST, GeForce GTX 650 Ti, GeForce GTX 650,GeForce GTX 880M, GeForce GTX 780M, GeForce GTX 770M, GeForce GTX 765M, GeForce GTX 760M, GeForce GTX 680MX, GeForce GTX 680M, GeForce GTX 675MX, GeForce GTX 670MX, 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 730MQuadro K5000, Quadro K4200, Quadro K4000, Quadro K2000, Quadro K2000D, Quadro K600, Quadro K420, Quadro K500M, Quadro K510M, Quadro K610M, Quadro K1000M, Quadro K2000M, Quadro K1100M, Quadro K2100M,Quadro K3000M, Quadro K3100M, Quadro K4000M, Quadro K5000M, Quadro K4100M, Quadro K5100M, NVS 510Tesla K10, GRID K340, GRID K520 
1234 <Kepler>Tegra K1,Jetson TK1 
123456 <Kepler>GeForce GTX Titan Z, GeForce GTX Titan Black, GeForce GTX Titan, GeForce GTX 780 Ti, GeForce GTX 780, GeForce GT 640 (GDDR5), GeForce GT 630 v2, GeForce GT 730, GeForce GT 720, GeForce GT 710,GeForce GT 740M (64-bit, DDR3)Quadro K6000, Quadro K5200Tesla K40, Tesla K20x, Tesla K20 
123456 <Maxwell>GeForce GTX 750 Ti, GeForce GTX 750, GeForce GTX 960M, GeForce GTX 950M, GeForce 940M, GeForce 930M, GeForce GTX 860M, GeForce GTX 850M, GeForce 845M, GeForce 840M, GeForce 830MQuadro K2200, Quadro K1200, Quadro K620, Quadro M2000M, Quadro M1000M, Quadro M600M, Quadro K620M, NVS 810Tesla M10 
123456 <Maxwell>GeForce GTX Titan X, GeForce GTX 980 Ti, GeForce GTX 980, GeForce GTX 970, GeForce GTX 960, GeForce GTX 950, GeForce GTX 750 SE, GeForce GTX 980M, GeForce GTX 970M, GeForce GTX 965MQuadro M6000 24GB, Quadro M6000, Quadro M5000, Quadro M4000, Quadro M2000, Quadro M5500, Quadro M5000M, Quadro M4000M, Quadro M3000MTesla M4, Tesla M40, Tesla M6, Tesla M60 
123456 <Pascal>Nvidia Titan X, GeForce GTX 1080, GTX 1070, GTX 1060, GTX 1050 Ti, GTX 1050Quadro P6000, Quadro P5000Tesla P40, Tesla P4 
123456 <Turing>NVIDIA TITAN RTX, GeForce RTX 2080 Ti, RTX 2080, RTX 2070, RTX 2060 Quadro RTX 8000, Quadro RTX 6000, Quadro RTX 5000, Quadro RTX 4000 Tesla T4 

خب تا به اینجا تصمیم گیری برای خیلی از شماها باید مشخص تر و راحت تر شده باشه. اما آیا اطلاعات بالا کافیه ؟ خیر!

سوال : چه اطلاعات دیگه ای باید داشته باشیم ؟

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

سه موضوع زیر رو در نظر بگیرید

  1. حجم حافظه
  2. قدرت پردازش
  3. پهنای باند
  4. داشتن TensorCore

این ها مواردی هست که باید در زمان تهیه یک کارت گرافیک لحاظ کنید. در درجه اول باید بدونید که تقریبا اکثر معماری های بسیار موفق که دقت بسیار بالایی رو ارائه میکنن خیلی عمیق هستن و این به معنای اشغال حجم زیادی از حافظه اس. بعنوان مثال معماری ساده و ابتدایی مثل AlexNet در زمان آموزش روی دیتاست ایمیج نت با اندازه تصاویر ۲۲۴ در۲۲۴ پیکسل به ۶ گیگابایت رم نیاز داشت. و یا معماری Vggnet و همینطور GoogleNet و یا ResNet به مراتب حجم های خیلی بیشتری رو نیاز دارن . البته میشه با روشهایی مثل کاهش اندازه بچ میزان حافظه مصرفی رو کاهش دادم و یا اندازه تصاویر ورودی رو کاهش داد اما هر دو این کارها تاثیر مستقیم روی دقت نهایی میزارن و باعث بدتر شدن اون میشن. خصوصا کاهش اندازه بچ در زمان آموزش (یا همون training ) تاثیرات خیلی بدی میتونه بزاره . به همین علت برای اینکه در آموزش و تحقیقاتتون دستتون باز باشه و به مشکل حافظه نخورید جدا پیشنهاد میشه از کارتهای با حجم حافظه بالا استفاده کنید.

نکته بعدی قدرت پردازش هست یا همون cuda cores در کارتهای گرافیک. هرچقدر قدرت پردازشی کارت شما بیشتر باشه آموزش شما سریعتر پیش میره و این نکته بشدت قابل اهمیتیه چرا که شما حتما تا جایی که ممکنه باید فاز آموزشی سریعی داشته باشید تا بتونید پارامترهای مختلف رو تنظیم کنید و اگر کارت شما از قدرت کافی برخوردار نباشه بشدت تو اینجا زمینگیر میشید و خیلی از ایده ها و نکات رو نمیتونید عملا پیاده و نتیجه اش رو ببینید و زمان زیادی رو از دست میدید .

نکته بعدی که ارتباط تنگاتنگی با مورد قبلی داره پهنای بانده . در شبکه عصبی بخاطر محاسبات زیادی که رخ میده پهنای باند نقش بشدت حساسی داره . و قابل ملاحظه ترین تاثیر رو میزاره . حتما در بازار دیدید که کارتهای گرافیکی هستن مثل GTX750 که با ۴ گیگ رم معرفی شدن! این کارت فوی ای هست اما نه اونقدر! و اگر شما مدلی داشته باشید که ۴ گیگ فضا رو اشغال کرده من بهتون قول میدم زمان خیلی زیادی رو باید برای آموزش اون سپری کنید. (نکته دوم در انتها رو بخونید) . به همین منظور کارتهای ۶۴ بیتی اصلا مناسب نیستند و همینطور کارتهای ۱۲۸ به بالا با توجه به معماری اونها باید انتخاب بشه . دقت کنید که با جدید شدن معماری ها و حافظه اونها پهنای باند کارتها هم خیلی دستخوش تغییر میشه و براحتی میشه دید که بعنوان مثال کارت ۱۲۸ بیتی مثل GTX960 از یه کارت با رابط ۲۵۶بیتی مثل GTX560 خیلی بیشتره!(در حد ۲ برابر !) پس در زمان خرید همیشه سعی کنید کارت های جدید تر رو بخرید

با ورود سری جدید کارتهای گرافیک Nvidia لیست زیر دستخوش تغییراتی میشه. کارتهای جدید Nvidia از قابلیت جدیدی بنام Tensor core ها بهره میبرند که مختص شبکه های عصبی طراحی شدند. این تنسور کورها سرعت ترینینگ شما رو چند برابر افزایش میدند و خصوصا در کنار mixed precision training حافظه به مراتب کمتر و سرعت به مراتب بیشتری خواهید داشت. در مورد mixed precision training من انشاءالله سر فرصت توضیح کامل میدم اما خیلی خلاصه اشاره به استفاده از fp16 بجای fp32 در محاسبات اعشاری داره (دلیل mixed precision بودن هم اینه که جاهایی که ممکنه این کاهش دقت برای ترینینگ مشکل ایجاد کنه از fp32 کماکان استفاده میشه(برای همین بهش میگن mixed precision البته فقط محدود به fp16 و fp32 نیست ولی اینها عمومیت بیشتری دارن) برای همین و به این شکل تقریبا مصرف حافظه نصف و پرفورمنس خروجی کارت هم تقریبا ۲ برابر میشه (در کارتهای معمولی که از تنسورکور استفاده نمیکنند). در کارتهایی که از تنسورکور استفاده میکنند افزایش پرفورمنس به چند برابر میرسه.  با توجه به این نکته و فعال شدن بحث mixed precision tranining برای اینکه بیشترین کارایی رو داشته باشید استفاده از کارتهایی که از این قابلیت استفاده میکنند در اولویت قرار داره. کارتهایی مثل GTX2080 دوبرابر از کارتی مثل GTX1080TI سریعتره

خب همه این صحبت ها شد حالا چه کارتهایی با توجه به بازار امروز پیشنهاد میشه ؟

من به ترتیب بر اساس قیمت/قدرت/آینده نگری پیشنهادات خودم رو عنوان میکنم و در ادامه باز توضیحات تکمیلی رو میدم .

  1. Titan V Volta 12GB HBM2-12Gig*
  2. RTX 2080 TI-12Gig
  3. RTX 2080-8Gig**
  4. RTX 2070 Super-8Gig
  5. RTX 2070-8Gig*
  6. TitanX Pascal-12Gig
  7. GTX 1080 TI –11Gig
  8. TitanX Maxwell-12Gig
  9. RTX-2060 Super-8Gig
  10. GTX 1080-8Gig
  11. RTX 2060-6Gig*
  12. GTX 1070TI-8Gig
  13. GTX 1070-8Gig
  14. GTX 980 TI-6Gig
  15. GTX 1060-6Gig
  16. GTX 980-4Gig
  17. GTX 960-4Gig
  18. GTX 950-4Gig
  19. *GTX 970-4Gig

نکته مهم :

بج های اولیه سری کارتهای RTX انویدیا مشکل زیادی دارن (همه انواع از ۲۰۸۰ گرفته تا ۲۰۶۰ ) و نرخ خرابی در اونها زیاده. این مشکلات در بچ های بعدی برطرف شده. اگه کارت رو خودتون خریدید و گارانتی داره مشکلی ندارید اما اگر کارت رو دسته دوم میخوایید تهیه کنید به تاریخ تولید اون دقت کنید و ترجیحا سعی کنید کارتهای تولید شده سال ۲۰۱۸ رو نخرید! (اولین بچ این کارتها اگوست ۲۰۱۸ تولید شده). بنظر میاد کارتهای تولید شده در سال ۲۰۱۹ و بعدش مشکلی از این جهت ندارن.

نکته دوم :

سر جدیدی تحت عنوان super عرضه شده. که نسبت به مدل پایه قویترن. به همین دلیل در صورت وجود تفاوت قیمت فاحش بین این دو مدل سعی کنید مدل سوپر رو بگیرید. اگر قیمت سوپر بالاس اما هنوز فاصله فاحشی نسبت به کارت قویتر بعدی داره (مثلا rtx2060 super کارایی نزدیک به rtx2070 داره با ۸ گیگ رم اینجا اگه قیمت ۲۰۶۰ به قیمت ۲۰۶۰ super نزدیکتره و فاصله زیادی با قمیت ۲۰۷۰ داره سوپر ۲۰۶۰ رو بگیرید. اما اگر قیمت سوپر ۲۰۶۰ با ۲۰۷۰ تفاوت چندانی نداره همون ۲۰۷۰ رو بگیرید )

نکته مهم برای کارت های گرافیک AMD :

کارت های گرافیک AMD سابقا در زمینه یادگیری عمیق پشتیبانی بسیار ضعیفی داشتند بصورتی که عملا در فریم ورکهای مطرح تنها کارتهای گرافیک ساخت شرکت NVidia پشتیبانی میشد و مورد استفاده قرار میگیرفت. این مساله البته مدتی هست که تا حدودی تغییر کرده و شرکت AMD شروع به ارایه پشتیبانی در این زمینه کرده. البته این پشتیبانی گسترده نیست و فعلا فقط از لینوکس پشتیبانی میشه. شما میتونید نسخه های مبتنی بر  ROCm (RadeonOpenCompute) فریم ورکهایی مثل Tensorflow و Pytorch رو از اینجا دانلود و نصب کنید.  دقت کنید نسخه ها همیشه بروز نیستند و چندین ماه ممکنه طول بکشه تا نسخه ای بروز رسانی بشه. این پورتها برای کسانی هست که کارت گرافیک AMD دارند و قصد دارند از یادگیری عمیق استفاده کنند و متحمل خرید کارت گرافیک جدید نشن./ از خرید کارتهای گرافیک AMD برای استفاده در یادگیری عمیق تا زمانی که پشتیبانی مناسب وجود نداره بشدت پرهیز کنید.

بهترین کارت گرافیک فعلی : Titan Xp
کمی گرونقیمت اما فوق العاده کارآمد : GTX 1080 Ti, GTX 1070, GTX 1080
خوش قیمت و کارایی خوب :  GTX ۱۰۶۰ (۶GB)
اگر با دیتاست هایی بزرگتر از ۲۵۰ گیگابایت کار میکنید :    Titan X Maxwell اگه دسته دوم گیر اوردید وگرنه Titan X Pascal اگر تفاوت قیمت با Xp فاحش نبود NVIDIA Titan Xp
اگه بودجه مالی کمی دارید : GTX 1060 6GB (ورژن ۳ گیگ اون هم هست اونو تهیه نکنید!اصلا)
اگه وضع بودجه مالی خیلی خرابه! : GTX 1050 Ti 4GB
اگر قصد شرکت در رقابت های کاگل رو دارید: GTX 1060 6GB برای رقابت های عادی مناسبه , اما برای رقابت های یادگیری عمیق GTX 1080 Ti  پیشنهاد میشه.
بعنوان محقق حرفه ای بصورت تخصصی در حوزه یادگیری عمیق فعالیت میکنید : NVIDIA Titan Xp اگر تایتان ایکس مکسول یا پاسکال دارید نیازی به اپگرید نیست
اگر یه محقق هستید: GTX 1080 Ti. در بعضی شرایط مثل پردازش زبان طبیعی ممکنه ,  GTX 1070 یا GTX 1080 هم انتخاب خوبی باشن منتها حتما به نیازمندی های مدلهای فعلیتون توجه کنید
اگر قصد ایجاد یه gpu-cluster دارید یه نگاهی به اینجا بندازید 
اگر دیپ لرنینگ رو  تازه شروع کردید و بصورت جدی قصد دارید ادامه اش بدید : با یک  GTX 1060 6GB شروع کنید و بعد بر اساس حوزه ای که بعدا انتخاب میکنید میتونید این کارت رو بفروشید و یه کارت مناسب تر تهیه کنید

اشتراک گزاری:

کاظم دلسوز

دیدگاه ها (0)

ارسال دیدگاه

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

*
*

نماد های اعتماد

هوش مصنوعی ایران به استناد نماد های زیر ، دارای مجوز رسمی از مراجع زیر در جمهوری اسلامی ایران می باشد !

تمامی حقوق برای هوش مصنوعی ایران محفوظ است | طراحی شده با