تسریع گردش کاری یادگیری ماشین پیوسته با NVIDIA RAPIDS
کارتهای گرافیکی یکی از مهمترین بخشها در فرایندِ استفاده از داده هستند؛ از کاوشهای فضایی، رباتیک، تحقیقات پزشکی و آموزشِ مدل گرفته تا تقویت کل دیتاسنتر. یکی از مواردی که امروزه بیش از پیش به آن نیاز داریم، سرعت در پردازش حجم عظیم دادههایی است که تولید میکنیم. NVIDIA با عرضۀ GTC 2020 keynote به روشنی اعلام کرد که میخواهد از کارتهای گرافیکیاش در همه حوزههای ممکن استفاده نماید. در مقاله حاضر، چگونگی تسریع گردش کاری یادگیری ماشین را با استفاده از RAPIDS یاد خواهیم گرفت. اگر با چگونگی کارکرد گردش کاری پیوسته یا RAPIDS آشنایی ندارید، با ما همراه باشید. موارد زیر در این مقاله پوشش داده خواهند شد:
آموزشِ مدل با 92 میلیون رکورد داده در 34 ثانیه
• RAPIDS چیست؟
• گردش کاری انتها-به-انتها end-to-end چگونه کار میکند؟
• پیشبینی کرایه تاکسی نیویورک و مقایسۀ زمان گرفته شده توسط CPU و GPU
پیش از آن که وارد بحث شویم، باید بدانید که ماشینِ مورد استفادۀ ما دارای ویژگیهای زیر است:
RAPIDS چیست؟
خب بگذارید یکراست برویم سر اصل ماجرا. RAPIDS به کتابخانهای اطلاق میشود که بر پایه پلتفرم رایانش موازی CUDA و API ساخته شده توسط NVIDIA عمل میکند.
کتابخانههای متعددی وجود دارند که حوزههای مختلفی را مورد هدف قرار میدهند، اما RAPIDS به طور اختصاصی برای تحلیل داده Data Analytics ساخته شده بود و بعدها جامعه علم داده Data Science از آن برای آموزش سریعتر مدلهای یادگیری ماشین استفاده کرد. چه کسی بدش میآید در چشم به هم زدنی مدل خود را آموزش دهد؟
[irp posts=”12844″]گردش کاری انتها-به-انتها چگونه کار میکند؟
اگر الان مشغول خواندن مطلب مربوط به چگونگی تسریع گردش کاری انتها-به-انتها یادگیری ماشین هستید، به احتمال زیاد با گردش کاری که قرار است در این مقاله توضیح دهم، از قبل آشنا هستید. در این صورت، میتوانید از خواندن این بخش صرفنظر کرده و به بخش بعدی مراجعه کنید. پیشبینی کرایه تاکسی نیویورک با CPU و GPU در بخش بعدی بررسی خواهد شد. اما اگر تازهکار هستید و میخواهید به آموختههای قبلیتان بیفزایید، توصیه میکنم با همراه باشید.
نمودار بالا را خوب نگاه کنید. حالا بیایید برای درک آن گام به گام پیش برویم:
1. استخراج: تبدیل و بارگذاری Extract ,Transform ,and Load: اکثر دانشمندان داده وقت خود را صرف پاکسازی دادهها میکنند. در این مرحله، باید تمامی اقدامات لازم برای ایجاد یک دیتاست خوب پیش از بکارگیری آن در الگوریتم یادگیری ماشین انجام شود. این مراحل عبارتند از ایجاد فریم داده، انجام فعالیتهای مهندسی ویژگیها و غیره که همگی تحت مفهومی به نام ETL قرار دارند.
2. آموزش: برای اینکه بهترین نتایج ممکن را به دست آوریم، در ابتدا باید مدل خود را با دادهها آموزش دهیم. در این صورت، وقتی مدل دفعه بعد با چیز مشابهی مواجه شد، میداند که با چه l موردی سر و کار دارد. در این مرحله، باید مدل را آموزش داد و سپس تنظیم کرد.
3. استنتاج: حال باید مدل را اجرا کرد تا پس از طی چندین فرایند به درخواستهای query کاربران جواب داد. برای مثال، شاید رتبهبندی یکی از این درخواستها باشد. بر اساس درخواست یا جستجوی کاربران، نتایج رتبهبندی شده و در اختیار کاربران قرار داده میشود. به این موضوع فکر کنید که گوگل چگونه مجموعهای از نتایج را برای هر کدام از جستجوهای شما ارائه میکند.
برای اینکه از هر گونه سوءتفاهمی جلوگیری کنیم، باید به این نکته توجه داشت که اینجا فقط یک دید کلی از نحوه کارکرد گردش کاری انتها-به-انتها ارائه میشود. کارهای پشت صحنه زیادی انجام میشود؛ یعنی دقیقاً مثل فیلم، نمایش یا اجرا.
نیاز به رایانش بهتر
شاید این پرسش شما را به فکر وادارد که چرا تسریع این فرایند در دستور کارمان باشد؟ بگذارید به طور مختصر دلیلش را برایتان توضیح دهم. هر سه مرحلهای که در بخش فوق به آنها اشاره کردیم، چالشهای خاص خود را در هنگام محاسبه دارند. با توجه به تولید حجم عظیمی از داده به صورت روزانه و همچنین نیاز فزاینده به پردازش اطلاعات، CPU به تنهایی کفایت نمیکنند. دانشمندان داده اکثر وقتشان را صرف پاکسازی و پردازش میکنند. هیچ کس مایل نیست این فرایند نصف روز یا یک روز کامل به طول انجامد. با توجه به اینکه شرکتها با سرعت قابل توجهی در حال اکتساب و پردازش حجم خارقالعادهای از داده هستند، امروزه بیش از هر زمان دیگری به سرعت نیاز داریم. بیایید این مسئله را با مثال پیشبینی کرایه تاکسی در نیویورک بررسی کنیم.
فهمِ داده
باید دادههایتان را بهتر از خودتان بشناسید. دیتاست کرایه تاکسی در نیویورک محبوبیت بالایی داشته و قابل دسترس است. میتوانید دیتاست مذکور را از این لینک دانلود کنید. این دیتاست حاوی 9 فایل برای 9 ماه مختلف است. این بازه از ماه ژانویه سال 2014 شروع میشود. هر فایل تقریباً 2 تا 2.2 گیگابایت حجم دارد. همه این فایلها را توام با یکدیگر پردازش خواهیم کرد. در ابتدا، باید ببینیم محتوای این فایلها چیست. ما هر یک از آنها را در قالب یک لیست برایتان آماده کردهایم. 17 ستون یا ویژگی در این دیتاست وجود دارد. نیازی به توضیح این موارد هم نیست.
vendor id pickup_datetime dropoff_datetime passenger_count trip_distance pickup_latitude pickup_longitude rate_code dropoff_latitude dropoff_longitude payment_type fare_amount surcharge mta_tax tip_ammount tolls_ammount total_amount
اما حال شاید از شنیدن این نکته تعجب کنید. در مجموع، 124 میلیون ردیف در این 9 فایل وجود دارد. بله، درست خواندید، 124 میلیون. رقم دقیق این است: 124.649.497. حدس میزنید اتمام فرایند ETL چقدر زمان میبرد؟ خب در ادامه مقاله به جزئیاتِ کار اشاره خواهیم کرد.
ما از cuDF و Dask & XGBoost برای مقیاسبندی عملیات GPU DataFrame ETL و آموزش مدل استفاده خواهیم کرد. برای سهولت در کار، کد را در این پست با اندازه کوچکتری گذاشتهایم، اما منبع GitHub تعداد زیادی نوتبوک ipynb و E2E دارد که در این لینک میتوانید به آنها دسترسی داشته باشید.
پاکسازی داده
باید پاکسازی دادهها را در راستای مرتبسازی دیتاست مورد توجه قرار دهیم. نام ستونها به شکل متفاوتی در فایلهای مختلف CSV نشان داده شده است. برای نمونه، یکی از فایلها rate_code دارد و دیگری حاوی RateCodeID میباشد، اما هر دو از روشهای مقبول برای نمایش اسامی ستونها هستند. در انتخاب فایلها اختیار عمل داریم و سرانجام باید یکی را انتخاب کنیم. من همیشه فایل نخست را انتخاب میکنم زیرا خواندن واژهها را برایم آسان میکند.
در تعریف نوع ستونها باید به مورد زیر دقت کرد:
مدیریت دادههای پرت outliers
دادههای پرت همیشه وجود دارند. این موارد در کار خلل وارد کرده و مانع اجرای کارآمد میشوند. باید راهی برای مدیریت این دادههای پرت پیدا کنیم. برای نمونه، کرایه کمتر از صفر دلار یا بیشتر از 500 دلار را در نظر بگیرید. چه کسی حاضر است 500 دلار برای کرایه تاکسی بپردازد؟
پس از پاکسازی دیتاست، حدود 7 میلیون ردیف کنار گذاشته میشود. اکنون 117 میلیون ردیف داریم که میتوانیم بینش خوبی از آنها بدست آوریم.
انتخاب مجموعه آموزشی
فرض کنید میخواهید بیست و پنجمِ ماه جاری به نیویورک سفر کنید. در همین راستا، به دنبال ساخت مدلی هستید که کرایه تاکسی را بر اساس 15 روز اولِ ماه بر اساس روزهای گذشته مورد پیشبینی قرار دهد. میخواهیم زمان لازم برای بارگذاری دادهها و ETL گردش کاری را اندازه بگیریم. لذا 92 میلیون داده برای آموزش در اختیار داریم و 25 درصد بقیه مختصِ آزمایش است.
زمان «wall time» نشاندهندۀ زمان کل در CPU است (2 دقیقه و 3 ثانیه یا 123 ثانیه). شگفتانگیز است، اینطور نیست؟ اگر بگوییم امکان حصول نتایج سریعتر از این هم وجود دارد، تعجب نکنید.
در فرایندی یکسان، میتوان همین کار را پس از فعالسازی یک کارت گرافیکی در 63 ثانیه انجام داد؛ و این حاکی از پیشرفت دوبرابری در میزان سرعت است. کار فقط به اینجا ختم نمیشود. بگذارید به زمان آموزش هم اشاره کنیم. در حین انجام فرایند، کارکرد CPU زیر نظر قرار داشت. فعالیت بینقص کلیه هستهها خیلی چشمنواز بود.
[irp posts=”27665″]آموزش
قصد داریم مدل رگرسیون XGBoost را در دادههای آموزشی خودمان آموزش دهیم و ببینیم انجام کل فرایند آموزش چقدر زمان میبرد.
این کار 6 دقیقه و 36 ثانیه یا 396 ثانیه به طول میانجامد. بد نیست! حالا بیایید همین روند را پس از فعالسازیِ TITAN RTX GPU بررسی کنیم.
دقیقاً چه اتفاقی افتاده است؟ آیا کل مدل 92 میلیون ردیفی در 33.9 ثانیه آموزش داده شد؟ بله، همینطور است. صادقانه بگویم، در نگاه اول اصلاً چنین نتیجهای را باور نمیکردیم. اما این اتفاق صحت دارد. با بهکارگیری یک کارت گرافیکی به افزایش سرعت 12 برابری رسیدیم.
پیشبینی
پس از آموزش مدل، باید آن را با 25 درصد ردیفها آزمایش کنیم.
اندازهگیری عملکرد
اندازهگیری عملکرد مدل یکی از بخشهای ضروری کار است. این کار با محاسبه معیار مجذور میانگین مربعات خطا root mean squared error انجام میشود.
رضایتبخش است. جای پیشرفت وجود دارد، اما مقاله حاضر به این موضوع نخواهد پرداخت. شاید بعدها این کار در برنامه باشد.
نتیجهگیری
با توجه به این که دادهها به اَشکال گوناگون در دسترسمان هستند، به ابزارهایی برای پردازش سریعتر دادهها نیاز داریم تا بینش کافی به دست آوریم و این بینش را برای اتخاذ تصمیمهای بهتر به کار ببریم؛ از تحقیقات پزشکی گرفته تا کاوشهای فضایی. با استفاده از NVIDIA RAPIDS و NVIDIA GPUs، میتوان سرعت را در گردش کاری یادگیری ماشین انتها-به-انتها تا 6 برابر افزایش داد.