رفتن به نوشته‌ها

آموزش گوگل کولب – استفاده از TPU و GPU

یکی از مشکلاتی که برای آموزش مدل‌های یادگیری عمیق (دیپ‌لرنینگ) وجود دارد وجود سخت‌افزار مناسب برای آموزش مدلها است. برای افرادی مثل من که در خونه GPU ندارند خیلی سخت است که بخوان مدل‌های یادگیری عمیق رو سیستم‌های خودشون آموزش بدهند. این سختی هم شاید به دو علت باشه:‌ ۱) مدت زیادی طول میکشید و ۲) در حین آموزش از هم عملا نمیشه از سیستم استفاده کرد.
خوشبختانه چند وقتی است که گوگل کولب (google colab) به صورت آزاد در اختیار همه قرار گرفته است. این ابزار در بسیاری از موارد که اندازه مدل‌ شما متوسط است، نیاز شما رو برطرف خواهد ساخت.
نحوه استفاده از گوگل کولب بسیار راحت است و با یک سرچ ساده میتونید کلی آموزش خوب برای آن استفاده کنید. مثلا اگر به آدرس https://colab.research.google.com/ برید یک صفحه مثل زیر براتون باز خواهد شد:

 

که اگر روی NEW PYTHON 3 NOTEBOOK کلیک کنید یک محیط جدید برای شما باز خواهد کرد که در آن میتونید به کد زدن مشغول شوید.

یا همچنین میتونید روی تب‌ها گزینه‌ی GITHUB کلیک کنید و notebookهایی که دیگران نوشتند مستقیما استفاده کنید. مثلا در تصویر پایین آدرس Repository رو بهش دادم و تمام فایلهایی که با پسوند notebook هست برای من آورده شده است.

به طور پیش‌فرض Tensorflow و بسیاری از کتابخانه‌های دیگر مثل numpy و sklearn و… روی آن نصب شده است و شما میتونید به پیاده‌سازی مدل‌هاتون بپردازید.

به راحتی میتونید در کولب دستورهای مختلف از جمله pip , apt-get, ls, cd, و… را اجرا کنید. فقط کافی است قبل از دستور مورد نظرتون علامت !‌ رو قرار بدهید.

یا حتی می‌تونید کل بلوک کدتون (code block) رو با استفاده از %%shell به شل‌اسکریپت تبدیل کنید:

میتونید به راحتی دیتاست‌های خودتون روی گوگل درایو، بیگ‌کوئری و گوگل شیت (sheet) بزارید و از آنها برای آموزش استفاده کنید. به عنوان مثال من میخوام از یک فایل روی گوگل درایو بخونم. ابتدا لازم هست که به گوگل کولب دسترسی فایل‌های گوگل درایو رو بدهم واسه همین از دستور زیر استفاده میکنم:

 

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

خب حالا مثل فرض کنید میخواهید یک فایل را از گوگل درایو بخوانید. مثلا فایل ferdosi.txt که در گوگل درایو من وجود داره رو بخوام بخونم میتونم به راحتی بگم:

که همانطور که مشاهده میکنید جایی که mount کردید و اسم گوگل درایو شما (my drive) و اسم فایلتون رو میخواد. روش‌های دیگری هم برای خوندن فایل از گوگل درایو وجود داره که در اینجا ازشون میگذریم.

شبیه گوگل داک (google doc) میتونید چندین نفر همزمان یک فایل رو تغییر بدهند و روی یک پروژه کار کنند و یا آن رو ویرایش کنند و یا فایل‌تون رو با دیگران به اشتراک بزارید:

میتونید مستقیم از گیت‌هاب یا گیت‌لب یا… یک پروژه رو کلون (clone) کنید و آن را در محیط کولب اجرا کنید. به عنوان مثال من یکی از پروژه‌هایی که در گیت‌هابم وجود دارد را در زیر کلون می‌کنم و سپس آن را اجرا می‌کنم:

اون چیزی که در این پست اما میخوام بگم استفاده از (جی پی یو) GPU و (تی پی یو) TPU است. موقعی که گوگل کولب رو باز میکنید، به صورت پیش‌فرض شما از سی‌پی‌یو (CPU) استفاده خواهید کرد ولی میتونید این تنظیمات رو تغییر بدید و بگید که کولب از جی پی یو استفاده کند. در واقع گوگل کولب یک جی پی یو k80 انویدیا را در اختیار شما قرار میدهید. برای اینکار کافی است از منوی کولب edit -> notebook settings برید که همچین صفحه‌ای به شما نمایش خواهد داده شد:

میتونید انتخاب کنید که از پایتون ۲ یا ۳ استفاده کنید و از چه نوع سخت افزاری استفاده کنید (GPU / CPU / TPU).

در حالت پیشفرض قرار بدید (یعنی CPU). فرض کنید میخواهیم یک مدل برای تشخیص احساسات متن (sentiment) میخواهیم درست کنیم. برای همین از یک شبکه GRU استفاده میکنیم. کدی که در حالت عادی احتمالا پیاده‌سازی میکنید به صورت زیر است (کد کامل رو از اینجا مشاهده کنید):

خب اگر کد بالا رو اجرا کنید میبید که زمان اجرای آن تقریبا مثل کامپیوتر شما خواهد بود و زیاد فرق چندانی برای شما نمیکند. تنها خوبیش اینه سیستم شما داغ نمیکنه و میتونید مدلتون رو بزارید اجرا بشه و برید کارای خودتون رو انجام بدید. ولی خب محدودیتی که داره این هست که هر session گوگل کولب ۱۲ ساعت است و اگر آموزش مدل‌تون ۱۲ ساعت بیشتر بشه session شما بسته میشه و آموزش مدل قطع خواهد شد. برای همین بهتر است که از GPU/TPU استفاده کنیم که مدلمون هرچه سریع آموزش داده شود.

اگر از تنظیمات (notebook settings) نوع سخت‌افزار رو تغییر بدید و روی GPU قرار بدهید و کدتون رو دوباره اجرا کنید میبینید که تغییری که گرفتید زیاد ملموس نیست یعنی انگار نه انگار که از GPU استفاده میکنید.

ولی کدتون رو اندکی تغییر بدید و از کد زیر استفاده کنید (کد کامل رو میتونید از اینجا مشاهده کنید):

و حالا دوباره کد بالا رو اجرا کنید. میبینید که به طور چشم‌گیری زمان آموزش کاهش پیدا کرده است و این یعنی تونستید از GPU استفاده کنید 🙂 .

استفاده از CuDNNGRU/ CuDNNLstm تقریبا ۳ – ۵ برابر سریع‌تر است که این فرق بین رسیدن به تحویل پروژه و نرسیدن به تحویل پروژه است …

بنا به گفته گوگل استفاده از TPU حدودا ۱۵ الی ۳۰ برابر سریع‌تر از GPU و CPUها هستند. پس بیایید مدل بالا رو روی TPU پیاده‌سازی کنیم.

استفاده از TPU اندکی متفاوت است و باید مدلتون رو به مدل TPU تغییر بدهید. خوشبختانه این کار به راحتی و دوتا خط قابل انجام است. ساختار TPU به این صورت است که شما یک کارگر (Worker) و هسته (core) دارید.

در ابتدای کدتون باید بگید که کارگر (Worker) شما کیه تا گوگل کولب بتونه به TPU وصل بشه (یادتون هم نره از تنظیمات notebook settings) نوع سخت‌افزار رو روی TPU قرار بدید):

همچنین مدلی عادی که ساخته میشه رو باید به مدل TPUای تغییر بدید که بعد از اینکه مدل رو ساختید دو خط زیر رو بهش اضافه کنید:

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

هر سه قسمت بالا در گیتهاب میتونید مشاهده کنید.

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

منتشر شده در آموزشتنسورفلویادگیری عمیق

اولین باشید که نظر می دهید

دیدگاهتان را بنویسید

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