شعار زيفيرنت

cuML: اشتعلت النيران في تدريب نموذج التعلم الآلي السريع مع NVIDIA's RAPIDS

التاريخ:

تم نشر هذه المقالة كجزء من مدونة علوم البيانات.

ساحة التعلم الإلكتروني لبعض الوقت أو دخلت للتو في هذا الطريق المثير - من المؤكد أنك عثرت على مكتبة بناء نموذج التعلم الآلي الشهيرة في Python ، لقد خمنت ذلك بشكل صحيح - يتعلم Scikit. تعد Scikit Learn أو sklearn واحدة من أقوى مكتبات Python ، فهي توسع مجموعة من الأدوات الفعالة للتعلم الآلي والنمذجة الإحصائية ، بما في ذلك المصنفات ، والمنحدرات ، ونماذج المجموعات ، ووحدات تقليل الأبعاد.

من أجل التدريب ، يجب تغذية نماذج التعلم الآلي هذه ببيانات التدريب. البيانات ، كما نعلم ، يتم إنشاؤها كل مللي ثانية في الفائض - مما يفتح آفاقًا هائلة لنماذج ML هذه ليتم تدريبها بدقة فائقة. على الرغم من أدواتها وقدراتها المتنوعة لبناء النماذج ، تميل sklearn إلى استنفاد قدر كبير من الوقت عندما يتعلق الأمر بالتعامل مع كميات هائلة من البيانات - مما يتسبب في تأخير تدفقات عمل ML / DL وجعل العملية برمتها مرهقة. ترجع هذه السرعة المحدودة لـ Scikit Learn إلى أنها تعمل على وحدات المعالجة المركزية التي تحتوي على 8 مراكز فقط. ومع ذلك ، مع تسريع GPU ، يمكن للمرء الاستفادة من جوانب الحوسبة المتوازية والمزيد لا. من النوى لتسريع سرعة نماذج ML على نطاق مثير للإعجاب. يمكن تحقيق ذلك عن طريق مكتبة NVIDIA'S RAPIDS cuML (اقرأ باسم كودا مل). في هذه المقالة ، سوف نفهم التركيب البدائي لـ cuML ، واستخدامه ، وأخيراً نقارن استهلاكه للوقت مع sklearn.

منظمة العفو الدولية | cuML
مصدر الصورة: المشاع الإبداعي

cuML

cuML (كودا مل) هي مجموعة خوارزميات التعلم الآلي المسرَّعة GPU مفتوحة المصدر من NVIDIA والمصممة لعلوم البيانات والتعلم الآلي والمهام التحليلية. أفضل جزء في cuML هو أنه تم تطوير تركيبه لضمان أن يكون له منحنى تعليمي مسطح. إذن هذه هي الأخبار السارة - إذا كنت تعرف بناء جملة sklearn ، فقد أتقنت بالفعل cuML!

يوفر cuML واجهة برمجة تطبيقات تشبه sklearn - مما يجعل التحول من Scikit Learn إلى cuML بسيطًا جدًا لعلماء البيانات ومهندسي التعلم الآلي وموظفي التحليلات ؛ وبالتالي ، تتوفر جميع وظائف Scikit Learn المضمنة بنفس الاسم وبناء الجملة في cuML.

تشغيل cuML على Kaggle Notebooks

الآن لتشغيل نماذج التعلم الآلي الخاصة بك على GPU باستخدام cuML ، يجب أن يكون لديك وحدات معالجة الرسومات الخاصة بـ NVIDIA (تحقق من المتطلبات المسبقة هنا). إذا لم يكن لديك GPU الصحيح - لا تقلق ، فلا يزال بإمكانك العمل مع مكتبات NVIDIA المسرعة على جوجل كولابوراتوري or دفاتر Kaggle. بالنسبة إلى Google Colab ، تكون خطوات التثبيت صعبة للغاية ؛ بالإضافة إلى ذلك ، يدعم RAPIDS فقط وحدات معالجة الرسومات P4 أو P100 أو T4 أو V100 في Google Colab - وبالتالي ، إذا لم يتم تخصيص إحدى وحدات معالجة الرسومات هذه ، فسيتعين عليك إعادة تشغيل وقت تشغيل الكمبيوتر المحمول والمحاولة مرة أخرى. ومع ذلك ، فإن استخدام مكتبات RAPIDS على Kaggle أسهل بكثير ؛ هذا ما سنغوص فيه.

لتشغيل دفتر Kaggle على وحدة معالجة الرسومات ، ما عليك سوى اتباع الخطوات التالية:

خطوة 1: انتقل إلى البرنامج المساعد في التأليف www.kaggle.com (سيتعين عليك التسجيل إذا كنت مستخدمًا جديدًا) والنقر فوق إنشاء زر في شريط التنقل على الجانب الأيسر. سيؤدي هذا إلى إنشاء دفتر ملاحظات جديد.

الصورة من صنع المؤلف

خطوة 2: في أعلى الجانب الأيمن ، انقر فوق رمز النقاط الثلاث ، وستظهر قائمة منسدلة على الشاشة.

cuML
الصورة من صنع المؤلف

خطوة 3: مرر المؤشر فوق خيار "المسرع" أخيرًا ، ستظهر قائمة منسدلة أخرى. انقر فوق GPU.

cuML
الصورة من صنع المؤلف

خطوة 4: أخيرًا ، سيظهر مربع حوار. يوفر Kaggle 30 ساعة من الوصول إلى وحدة معالجة الرسومات في الأسبوع. انقر فوق "تشغيل GPU".

cuML
الصورة من صنع المؤلف

الآن ، دفتر Kaggle الخاص بك مدعوم بقوة GPU ويمكنك استخدام cuML وجميع مكتبات RAPIDS الأخرى عليه.

مقارنة بين الأوقات الحسابية لكل من sklearn و cuML

دعونا نقارن الأوقات الحسابية التي يستغرقها sklearn مع تلك الخاصة بـ cuML. كما ذكرنا سابقًا ، يعكس cuML بناء جملة sklearn - مما يعني أن المرء لا يحتاج إلى تعلم بناء جملة cuML من البداية ؛ تتوفر جميع الوحدات والوظائف المضمنة في sklearn بطبيعتها في cuML.

الآن ، سنقوم بتدريب نموذج K-Nearest Neighbor أولاً باستخدام sklearn ثم باستخدام cuML ، لحساب أوقات المعالجة في كل موقف ومقارنة الاثنين.

تدريب نموذج KNN باستخدام Sklearn

# KNN باستخدام sklearn # استيراد الوحدات النمطية الضرورية وقت الاستيراد من sklearn.neighbours استيراد KNeighboursClassifier استيراد الباندا لأن pd #cudf هي مكتبة NVIDIA المسرَّعة على شكل Pandas بدء = time.time () # تحميل بيانات التدريب Data_train = pd.read_csv ('. ./input/mnist-digit-recognition-using-knn/train_sample.csv ') # إنشاء ميزة ومصفوفات مستهدفة لبيانات التدريب X_train = Data_train.iloc [:،: - 1] Y_train = Data_train.iloc [:، - 1 ] # تحميل بيانات الاختبار Data_test = pd.read_csv ('../ input / mnist-digit-Recognit-using-knn / test_sample.csv') # إنشاء ميزة ومصفوفات الهدف لاختبار البيانات X_test = Data_test.iloc [:،، : -1] Y_test = Data_test.iloc [:، - 1] knn = KNeighboursClassifier (n_neighbours = 7) knn.fit (X_train، Y_train) # توقع على مجموعة البيانات التي لم يراها النموذج قبل Y = knn.predict (X_test) end = time.time () CPU_time = نهاية بدء الطباعة ("الوقت المستغرق على وحدة المعالجة المركزية =" ، CPU_time)

الإخراج:

الوقت المستغرق في وحدة المعالجة المركزية = 8.159586906433105

تدريب KNN باستخدام cuML

# KNN باستخدام cuml # استيراد وقت استيراد الوحدات النمطية الضرورية من cuml.neighbours import KNeighboursClassifier import cudf #cudf هو NVIDIA's GPU المعجل Pandas-like مكتبة start = time.time () # تحميل بيانات التدريب Data_train = cudf.read_csv ('../ input / mnist-digit-Recognition-using-knn / train_sample.csv ') # إنشاء ميزة ومصفوفات مستهدفة لبيانات التدريب X_train = Data_train.iloc [:،: - 1] Y_train = Data_train.iloc [:، - 1] # تحميل بيانات الاختبار Data_test = cudf.read_csv ('../ input / mnist-digit-Recognit-using-knn / test_sample.csv') # إنشاء ميزة ومصفوفات مستهدفة لاختبار البيانات X_test = Data_test.iloc [:،: - 1] Y_test = Data_test.iloc [:، - 1] knn = KNeighboursClassifier (n_neighbours = 7) knn.fit (X_train، Y_train) # توقع على مجموعة البيانات التي لم يراها النموذج قبل Y = knn.predict (X_test) end = time .time () GPU_time = نهاية بدء الطباعة ("الوقت المستغرق في GPU =" ، GPU_time)

الإخراج:

الوقت المستغرق في GPU = 0.7302286624908447

مقارنة الأوقات الحاسوبية لـ Sklearn مقابل cuML

# مقارنة طباعة أوقات معالجة sklearn و cuml ("CPU Time to GPU time ratio:"، CPU_time / GPU_time)

الإخراج:

نسبة وقت وحدة المعالجة المركزية إلى وقت وحدة معالجة الرسومات: 11.174016202815658

تصور الوقت الحسابي في كلتا الحالتين

رسم بياني

الصورة من صنع المؤلف

من النواتج المذكورة أعلاه ، يمكننا أن نرى بوضوح ما يقدمه cuML لتدريب نموذج KNN 11 مرات أسرع السرعة عند مقارنتها بمكتبة sklearn الكلاسيكية في Python.

يمكنك العثور على Kaggle Notebook للرمز أعلاه هنا ومجموعة البيانات المستخدمة هنا

وفي الختام

يتضح من النتائج المذكورة أعلاه أن cuML القائم على GPU يمكنه تسريع عمليات التدريب النموذجية على نطاق هائل. في الوقت الحاضر ، حيث تنمو أحجام مجموعات البيانات بشكل لا يصدق ، تميل مكتبات Python التقليدية مثل sklearn إلى أن تكون بطيئة بسبب القدرات المحدودة لوحدات المعالجة المركزية. وبالتالي ، يعد تسريع GPU ملاذًا عند التعامل مع البيانات الضخمة ويغذي دورات حياة علوم البيانات بشكل مثير للإعجاب ؛ وبالتالي ، سد الفجوة بين البيانات الضخمة وإمكاناتها المعقولة.

الوسائط الموضحة في هذه المقالة ليست مملوكة لشركة Analytics Vidhya ويتم استخدامها وفقًا لتقدير المؤلف. 

بقعة_صورة

أحدث المعلومات الاستخباراتية

بقعة_صورة