. OTUS Machine Learning: . , -, — (Senior Data Scientist Oura) , .
ينصب تركيزنا الأساسي بصفتنا علماء بيانات على معالجة البيانات وتطوير نماذج التعلم الآلي وتحسينها. هناك رأي مفاده أن معالجة البيانات هي المرحلة الأكثر استهلاكا للوقت في المشروع بأكمله ، وأن دقة النموذج تحدد نجاح منتج المعلومات. ومع ذلك ، فإن الصناعة الآن في مرحلة انتقالية "من عصر الاكتشاف إلى عصر التنفيذ" (القوى الخارقة في مجال الذكاء الاصطناعي: الصين ، وادي السيليكون ، والنظام العالمي الجديد في هذا المجال تمليه لي كايفو). تتسع الصورة الآن ، وينتقل التركيز من بناء النموذج إلى توفير النموذج للمستخدمين كخدمة ومن أداء النموذج إلى قيمته التجارية. المثال الأكثر شهرة هنا هو Netflix ، الذي لم يستخدم أبدًا النماذج الفائزة لخوارزمية المليون دولار بسبب التكاليف الهندسية - WIRED ، على الرغم من المكاسب الكبيرة الموعودة في الأداء من هذه المحركات .
من الفهم إلى الواقع (شرائح من مؤتمر ستراتا داتا - أوضحت كوبفلو: التعلم الآلي المحمول على Kubernetes ) يعد
تنفيذ النموذج مهمًا للغاية ، ويمكن اعتبار منتجات المعلومات الآن منتجات برمجية ، لأن لديهم هيكل مشروع وإدارة ودورة حياة مماثلة. لذلك ، لدينا الحق في استخدام جميع التقنيات المعروفة في مجال تطوير البرمجيات لنشر نماذج التعلم الآلي في الإنتاج.
الحاوية هي طريقة تُستخدم على نطاق واسع لنشر منتجات البرامج على النظام الأساسي السحابي وعلى خادم محلي. في الأساس ، نحن نتحدث عن كود التغليف والتبعيات في صندوق يسمى الحاوية. فيما يلي تعريف الحاوية في سياق تطوير البرمجيات:
من موقع Docker ،
الحاوية هي وحدة قياسية من البرامج تقوم بتجميع التعليمات البرمجية وجميع تبعياتها بحيث يمكن تشغيل التطبيق بسرعة وموثوقية عبر بيئات الحوسبة المختلفة.
Docker عبارة عن نظام أساسي يمكن أن يساعدك في تسريع تطوير نموذج التعلم الآلي الخاص بنا ونقله بالحاويات ونشره في بيئات أخرى. في سلسلة المقالات هذه ، سأوضح لك كيفية تخزين نموذج ، واستخدامه كنقطة نهاية لواجهة برمجة التطبيقات ، وحاوية تطبيق ML الخاص بك ، وتشغيله على محرك Docker.
السؤال الأول "لماذا Docker؟"
قبل أن نبدأ ، ستحتاج إلى التسجيل باستخدام معرف Docker إذا لم يكن لديك معرف ، ثم استخدم هذا المعرف لتنزيل Docker وتثبيته على جهازك.
عندما بدأت وظيفتي في البنك لأول مرة ، تم تكليفي بمشروع يتضمن معالجة البيانات ، وكان لابد من تسليم أول MVP (الحد الأدنى من المنتج القابل للتطبيق) في غضون شهر. يبدو الأمر مرهقًا ، لكننا في الفريق نستخدم منهجية Agile في تطوير جميع المنتجات الرئيسية ، وكان الهدف الرئيسي من هذا المنتج هو اختبار الفرضية حول التطبيق العملي وفعالية المنتج (لمزيد من المعلومات حول منهجية Agile ، راجع كتاب Eric Ries "Lean Startup" ). أراد مديري أن أنشر نموذجي على الكمبيوتر المحمول الخاص به ، أي تشغيله واستخدامه للتنبؤ.
إذا تخيلت جميع الخطوات التي احتجت إلى اتخاذها لإعداد الكمبيوتر المحمول الخاص بالمدير لتشغيل مشروعي ، فقد يكون لديك العديد من الأسئلة ، مثل:
- ما هو نظام التشغيل الذي سيحتاجه النموذج للتشغيل لأنه يستخدم Macbook و ThinkPad؟ يمكنني بالطبع أن أسأله عن هذا ، لكن أفترض أنه في تلك اللحظة من حياتي كان مديري سيئًا للغاية ، ولم يكن يريدني أن أعرف هذه المعلومات. (هذه الفكرة هنا لتجعلك على دراية بقضية التبعية لنظام التشغيل ، ورئيسي هو شخص جيد حقًا).
- السؤال الثاني: "هل قام بتثبيت بايثون؟" إذا كان الأمر كذلك ، ما هو الإصدار 2 أو 3؟ أيهما: 2.6 أم 2.7 أم 3.7؟
- ماذا عن الحزم المطلوبة مثل scikit-Learn و pandas و numpy؟ هل له نفس الإصدارات الموجودة على جهازي؟
مع وضع كل هذه الأسئلة في الاعتبار ، إليك ما كان عليّ فعله بجهاز الكمبيوتر الخاص به لتشغيل النموذج الخاص بي عليه.
- ثبت بايثون.
- قم بتثبيت كافة الحزم.
- قم بإعداد متغيرات البيئة.
- انقل الرمز إلى السيارة.
- قم بتشغيل الكود بالمعلمات المطلوبة.
تتطلب كل هذه الخطوات الكثير من الجهد ، وهناك خطر عدم التوافق عند تشغيل التعليمات البرمجية في بيئات مختلفة.
لذلك ، إذا كان لديك Docker مثبتًا وقيد التشغيل بالفعل ، فيمكنك فتح محطة وتشغيل الأمر التالي:
docker run --rm -p 5000:5000 datascienceexplorer/classifier
بعد دقيقتين ، من المفترض أن ترى شيئًا مشابهًا في جهازك:
* Serving Flask app "main" (lazy loading)
* Environment: production
WARNING: Do not use the development server in a production environment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
افتح الآن متصفحك المفضل وانتقل إلى هذا العنوان:
http://localhost:5000/apidocs/
انقر فوق خط التنبؤ من واجهة برمجة التطبيقات ، ثم على زر التجربة على اليمين ، تبدو الواجهة كما يلي:
صفحة Swagger لواجهة برمجة التطبيقات على الواجهة الخلفية ، هل
تتذكر مجموعة بيانات Iris Flowers القياسية التي لعبت بها؟ سيساعدك هذا التطبيق الصغير على التنبؤ بنوع الزهرة بناءً على معلومات حول بعض القياسات بناءً على نموذج التصنيف. في الواقع ، أنت تستخدم بالفعل نموذج التعلم الآلي الخاص بي كخدمة ، وكل ما قمت بتثبيته هو Docker فقط ، ولم أكن بحاجة إلى تثبيت Python أو أي حزم على جهازك.
هذه هي قوة Docker. يساعدني في حل مشكلات التبعية حتى أتمكن من نشر الكود الخاص بي بسرعة عبر بيئات مختلفة ، أو في هذه الحالة ، جهازك.
علوم بيانات DevOps
الآن ، آمل أن أكون قد حفزتك بما يكفي لمواصلة القراءة ، وإذا كنت تريد فقط تخطي هذه الأجزاء والانتقال مباشرة إلى الكود ، فلا بأس بذلك ، لأن هذا يعني أنك تريد وضع نموذج التعلم الآلي الخاص بك في حاوية مع Docker وفضحه الخدمات. ومع ذلك ، في الوقت الحالي ، سيتعين علينا التوقف قليلاً ووضع جميع المواد المتعلقة بالتعلم الآلي و Docker جانبًا للتفكير في DevOps في Data Science ولماذا هناك حاجة إليه على الإطلاق.
ما هو DevOps؟
من ويكيبيديا ،هدف مطوري البرامج هو تسليم الكود في الوقت المناسب مع جميع الوظائف الضرورية ، مع سهولة الاستخدام والموثوقية وقابلية التوسع وجزء الشبكة وجدار الحماية والبنية التحتية وما إلى ذلك. غالبا ما تبقى المشاكل التشغيلية. نظرًا لاختلاف الأهداف النهائية ومؤشرات الأداء الرئيسية المحتملة ، لا تتوافق هذه الفرق عادةً تحت سقف واحد. لذلك ، يمكن لأخصائي DevOps أن يعمل كحلقة اتصال ويساعد هذه الفرق على العمل معًا ، أو حتى تحمل مسؤولية كلا الطرفين ، بحيث يكون لديك في النهاية فريق واحد ، يقود التطوير من البداية إلى النهاية. بعد كل شيء ، لا يمكنك فقط إعطاء جهاز الكمبيوتر الخاص بك للعميل لأن الكود يعمل كما ينبغي.
DevOps عبارة عن مجموعة من الممارسات التي تجمع بين تطوير البرمجيات وخدمات تكنولوجيا المعلومات ، والهدف منها تقصير دورة حياة تطوير النظام وضمان التسليم المستمر للبرامج عالية الجودة.
لكن مع دفتر Jupyter أنا سعيد !!!لدى علماء البيانات قصة مماثلة ، لأنه مرة أخرى ، لا يمكنك فقط التقاط وإعطاء الكمبيوتر المحمول الذي يعمل بنظام Jupyter Notebook للعميل لاستخدامه فقط. نحتاج إلى طريقة لاستخدام النموذج حتى يتمكن من خدمة عدد كبير من المستخدمين في أي وقت وفي أي مكان ، والارتقاء بأقل وقت تعطل (قابلية الاستخدام والموثوقية وقابلية التوسع).
لهذا السبب ، تبحث الشركات عن علماء بيانات لديهم مهارات DevOps يمكنهم نشر وتنفيذ نماذج التعلم الآلي الخاصة بهم في الإنتاج وتقديم قيمة تجارية للشركة ، بدلاً من مجرد إثبات المفاهيم والتركيز على تحسين دقة النموذج. يسمى هؤلاء الناس حيدات.
هناك العديد من الطرق لنشر نموذج التعلم الآلي ، ولكن Docker هي أداة قوية تمنحك المرونة التي تحتاجها مع الحفاظ على متانة وتغليف التعليمات البرمجية الخاصة بك. بالطبع ، لن نطلب من عملائنا تثبيت Docker وفتح محطة طرفية لتشغيله. لكن مرحلة الحاوية هذه ستصبح في النهاية الأساس عندما تبدأ العمل مع مشاريع حقيقية حيث يتعين عليك نشر النماذج الخاصة بك على الأنظمة الأساسية السحابية أو الخوادم المحلية.
تخزين النموذج المدرب
بالعودة إلى الجامعة ، علمنا أن مشروع علوم البيانات يتكون من ست مراحل ، كما هو موضح في الصورة أدناه. إذا كانت أتمتة النموذج ونشره في الإنتاج هو هدفنا النهائي ، فكيف "ندخل" النموذج إلى مرحلة النشر؟
ست مراحل من مشروع علوم البيانات
أسهل طريقة يمكنك التفكير بها هي نسخ كل شيء من دفتر ملاحظاتنا ولصقه في ملف .py وتشغيله. ومع ذلك ، في كل مرة نحتاج فيها لعمل توقع ، سنقوم بتشغيل هذا الملف وتدريب النموذج مرة أخرى على نفس البيانات. إذا كان هذا النهج قابلاً للتطبيق بطريقة ما على النماذج البسيطة مع مجموعة بيانات تدريب صغيرة ، فلن يكون فعالاً للنماذج المعقدة التي تحتوي على الكثير من بيانات التدريب (فكر في المدة التي ستستغرقها لتدريب نموذج ANN أو CNN). هذا يعني أنه عندما يرسل المستخدم طلبًا نموذجيًا للتنبؤ ، فسيتعين عليه الانتظار من عدة دقائق إلى عدة ساعات للحصول على النتيجة ، حيث سيستغرق الأمر الكثير من الوقت لإكمال مرحلة تدريب النموذج.
كيف يتم تخزين النموذج فورًا بعد تدريبه؟
في معظم الحالات ، سيتم تخزين نموذج التعلم الآلي في Python في الذاكرة ككائن Python أثناء تنفيذ التعليمات البرمجية ، ثم يتم حذفه بعد انتهاء البرنامج. إذا تمكنا من حفظ هذا الكائن على القرص الصلب فورًا بعد تدريب النموذج ، فعندئذ في المرة التالية التي نحتاج فيها إلى إجراء تنبؤ ، يمكننا ببساطة تحميل النموذج النهائي في الذاكرة وعدم المرور بمراحل التهيئة والتدريب. في علوم الكمبيوتر ، تسمى عملية تحويل كائن إلى دفق من البايت للتخزين التسلسل . في Python ، يمكن القيام بذلك بسهولة باستخدام حزمة تسمى pickle ، والتي تتمتع بدعم Python الأصلي خارج الصندوق. يسمي مطورو Python أيضًا "pickling" عملية تسلسل كائن باستخدام pickle....
في دفتر Jupyter ، يمكنك بسهولة حفظ كائن النموذج (في حالتي "knn") في ملف pkl ، الموجود في نفس الدليل مثل الكود:
import pickle
with open('./model.pkl', 'wb') as model_pkl:
pickle.dump(knn, model_pkl)
حفظ النموذج في الدليل الحالي
دفتر ملاحظاتي ، أوصي بأخذ من هنا ، حتى نحصل على نتائج مماثلة في المستقبل. بدلاً من ذلك ، يمكنك استخدام النموذج الخاص بك ، ولكن تأكد من أن لديك جميع الحزم المطلوبة بالإضافة إلى مدخلات النموذج الصحيحة.
أكملت الخطوة الأولى ، لقد قمت بحفظ النموذج المدرب. علاوة على ذلك ، سنعيد استخدام النموذج للتنبؤ ، ولكن المزيد عن ذلك في الجزء الثاني من المقالة.