أهلاً بكم! أنا مطور سيرة ذاتية في CROC. لقد قمنا بتنفيذ مشاريع في مجال السيرة الذاتية لمدة 3 سنوات حتى الآن. خلال هذا الوقت قمنا بأشياء كثيرة، على سبيل المثال: قمنا بمراقبة السائقين حتى لا يشربوا أو يدخنوا أو يتحدثوا على الهاتف أو ينظروا إلى الطريق أثناء القيادة، وليس إلى الأحلام أو إلى السحب. ; قمنا بتسجيل الأشخاص الذين يقودون سياراتهم في ممرات مخصصة ويشغلون عدة أماكن لوقوف السيارات؛ التأكد من أن العمال يرتدون الخوذات والقفازات وما إلى ذلك؛ تحديد الموظف الذي يريد دخول المنشأة؛ لقد أحصينا كل ما في وسعنا.
لماذا أفعل كل هذا؟
في عملية تنفيذ المشاريع نصطدم بمطبات، الكثير من المطبات، بعض المشاكل التي إما أنتم على دراية بها أو سوف تتعرفون عليها في المستقبل.
دعونا نحاكي الوضع
لنتخيل أننا حصلنا على وظيفة في شركة شابة "N"، ترتبط أنشطتها بتعلم الآلة. نحن نعمل في مشروع ML (DL، CV)، ثم ننتقل لسبب ما إلى وظيفة أخرى، ونأخذ عمومًا قسطًا من الراحة، ونعود إلى عصبونتنا أو عصبون شخص آخر.
تأتي لحظة الحقيقة، عليك أن تتذكر بطريقة أو بأخرى أين توقفت، وما هي المعلمات الفائقة التي جربتها، والأهم من ذلك، ما هي النتائج التي أدت إليها. يمكن أن يكون هناك العديد من الخيارات لمن قام بتخزين المعلومات في جميع عمليات الإطلاق: في الرأس، والتكوينات، والمفكرة، وفي بيئة العمل في السحابة. لقد حدث أن رأيت خيارًا عندما يتم تخزين المعلمات الفائقة كأسطر معلقة في الكود، بشكل عام، رحلة خيالية. تخيل الآن أنك لم تعد إلى مشروعك، بل إلى مشروع شخص ترك الشركة ورثت كودًا ونموذجًا يسمى model_1.pb. لتكتمل الصورة وتنقل كل الألم، لنتخيل أنك أيضًا متخصص مبتدئ.
تفضل. لتشغيل الكود، نحتاج نحن وكل من سيعمل معه إلى تهيئة بيئة مناسبة. غالبًا ما يحدث أنهم لسبب ما لم يتركوه كميراث لنا. يمكن أن تصبح هذه أيضًا مهمة غير تافهة. أنت لا تريد إضاعة الوقت في هذه الخطوة، أليس كذلك؟
نقوم بتدريب نموذج (على سبيل المثال، كاشف السيارة). وصلنا إلى النقطة التي أصبح فيها الأمر جيدًا جدًا – حان الوقت لحفظ النتيجة. دعنا نسميها car_detection_v1.pb. ثم نقوم بتدريب واحد آخر - car_detection_v2.pb. وبعد مرور بعض الوقت، أصبح زملاؤنا أو نحن أنفسنا نقوم بتدريس المزيد والمزيد باستخدام بنيات مختلفة. نتيجة لذلك، يتم تشكيل مجموعة من القطع الأثرية، والمعلومات التي يجب جمعها بشق الأنفس (لكننا سنفعل ذلك لاحقا، لأنه في الوقت الحالي لدينا المزيد من الأمور ذات الأولوية).
حسنًا، لقد انتهى كل شيء الآن! لدينا نموذج! هل يمكننا البدء بتدريب النموذج التالي، أو تطوير بنية لحل مشكلة جديدة، أو هل يمكننا الذهاب لتناول بعض الشاي؟ ومن سينشر؟
تحديد المشاكل
العمل على مشروع أو منتج هو عمل كثير من الناس. وبمرور الوقت، يغادر الناس ويأتيون، وهناك المزيد من المشاريع، وتصبح المشاريع نفسها أكثر تعقيدًا. بطريقة أو بأخرى، ستحدث مواقف من الدورة الموضحة أعلاه (وليس فقط) في مجموعات معينة من التكرار إلى التكرار. كل هذا يؤدي إلى إضاعة الوقت، والارتباك، والأعصاب، وربما عدم رضا العملاء، وفي النهاية خسارة المال. على الرغم من أننا جميعًا نتبع نفس الطريقة القديمة، إلا أنني أعتقد أنه لا أحد يريد أن يعيش هذه اللحظات مرارًا وتكرارًا.
لذلك، مررنا بدورة تطوير واحدة ونرى أن هناك مشكلات تحتاج إلى حل. للقيام بذلك تحتاج:
تخزين نتائج العمل بسهولة؛
جعل عملية إشراك الموظفين الجدد بسيطة؛
تبسيط عملية نشر بيئة التطوير؛
تكوين عملية إصدار النموذج؛
أن يكون لديك طريقة ملائمة للتحقق من صحة النماذج؛
العثور على أداة نموذجية لإدارة الحالة؛
إيجاد طريقة لتقديم النماذج إلى الإنتاج.
هل يبدو أنه من الضروري التوصل إلى سير عمل يسمح لك بإدارة دورة الحياة هذه بسهولة ويسر؟ هذه الممارسة تسمى MLOps
يسمح MLOps، أو DevOps للتعلم الآلي، لفرق علوم البيانات وتكنولوجيا المعلومات بالتعاون وزيادة وتيرة تطوير النماذج ونشرها من خلال المراقبة والتحقق من الصحة والحوكمة لنماذج التعلم الآلي.
علبة لقراءةما رأي رجال جوجل في كل هذا؟ يتضح من المقال أن MLOps شيء ضخم جدًا.
علاوة على ذلك، سأصف في مقالتي جزءًا فقط من العملية. للتنفيذ، سأستخدم أداة MLflow، لأن... هذا مشروع مفتوح المصدر، ويلزم كمية صغيرة من التعليمات البرمجية للاتصال وهناك تكامل مع أطر عمل ml الشائعة. يمكنك البحث في الإنترنت عن أدوات أخرى، مثل Kubeflow، وSageMaker، وTrains، وما إلى ذلك، وربما تجد الأداة التي تناسب احتياجاتك بشكل أفضل.
"بناء" MLOps باستخدام مثال استخدام أداة MLFlow
MLFlow عبارة عن منصة مفتوحة المصدر لإدارة دورة حياة نماذج ml (https://mlflow.org/).
يتضمن MLflow أربعة مكونات:
تتبع MLflow - يغطي مشكلات تسجيل النتائج والمعلمات التي أدت إلى هذه النتيجة؛
مشروع MLflow - يسمح لك بحزم التعليمات البرمجية وإعادة إنتاجها على أي نظام أساسي؛
نماذج MLflow - المسؤولة عن نشر النماذج في الإنتاج؛
سجل MLflow - يسمح لك بتخزين النماذج وإدارة حالتها في مستودع مركزي.
يعمل MLflow على كيانين:
الإطلاق عبارة عن دورة كاملة من التدريب والمعلمات والمقاييس التي نريد التسجيل من خلالها؛
التجربة هي "موضوع" يعمل معًا.
يتم تنفيذ جميع خطوات المثال على نظام التشغيل Ubuntu 18.04.
1. نشر الخادم
لكي نتمكن من إدارة مشروعنا بسهولة والحصول على جميع المعلومات اللازمة، سنقوم بنشر خادم. يحتوي خادم تتبع MLflow على مكونين رئيسيين:
متجر الواجهة الخلفية - مسؤول عن تخزين المعلومات حول النماذج المسجلة (يدعم 4 أنظمة إدارة قواعد بيانات: mysql، وmssql، وsqlite، وpostgresql)؛
متجر القطع الأثرية - مسؤول عن تخزين القطع الأثرية (يدعم 7 خيارات تخزين: Amazon S3، Azure Blob Storage، Google Cloud Storage، خادم FTP، SFTP Server، NFS، HDFS).
Match Group sftpg
ChrootDirectory /data/%u
ForceCommand internal-sftp
أعد تشغيل الخدمة
$ sudo systemctl restart sshd
كما متجر الخلفية لنأخذ postgresql.
$ sudo apt update
$ sudo apt-get install -y postgresql postgresql-contrib postgresql-server-dev-all
$ sudo apt install gcc
$ pip install psycopg2
$ sudo -u postgres -i
# Create new user: mlflow_user
[postgres@user_name~]$ createuser --interactive -P
Enter name of role to add: mlflow_user
Enter password for new role: mlflow
Enter it again: mlflow
Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) n
Shall the new role be allowed to create more new roles? (y/n) n
# Create database mlflow_bd owned by mlflow_user
$ createdb -O mlflow_user mlflow_db
لبدء الخادم، تحتاج إلى تثبيت حزم بايثون التالية (أوصي بإنشاء بيئة افتراضية منفصلة):
لكي لا تضيع نتائج تدريبنا، تفهم الأجيال القادمة من المطورين ما كان يحدث، ولكي تتمكن أنت ورفاقك الأكبر سنًا من تحليل عملية التعلم بهدوء، نحتاج إلى إضافة التتبع. التتبع يعني حفظ المعلمات والمقاييس والعناصر وأي معلومات إضافية حول بدء التدريب، في حالتنا، على الخادم.
على سبيل المثال، قمت بإنشاء صغيرة المشروع على جيثب على Keras لتقسيم كل ما هو موجود مجموعة بيانات COCO. لإضافة التتبع، قمت بإنشاء ملف mlflow_training.py.
فيما يلي السطور التي تحدث فيها الأشياء الأكثر إثارة للاهتمام:
def run(self, epochs, lr, experiment_name):
# getting the id of the experiment, creating an experiment in its absence
remote_experiment_id = self.remote_server.get_experiment_id(name=experiment_name)
# creating a "run" and getting its id
remote_run_id = self.remote_server.get_run_id(remote_experiment_id)
# indicate that we want to save the results on a remote server
mlflow.set_tracking_uri(self.tracking_uri)
mlflow.set_experiment(experiment_name)
with mlflow.start_run(run_id=remote_run_id, nested=False):
mlflow.keras.autolog()
self.train_pipeline.train(lr=lr, epochs=epochs)
try:
self.log_tags_and_params(remote_run_id)
except mlflow.exceptions.RestException as e:
print(e)
هنا self.remote_server عبارة عن غلاف صغير فوق أساليب mlflow.tracking. MlflowClient (لقد صنعته من أجل الراحة)، وبمساعدته أقوم بإنشاء تجربة وتشغيلها على الخادم. بعد ذلك، أشير إلى المكان الذي يجب دمج نتائج الإطلاق فيه (mlflow.set_tracking_uri(self.tracking_uri)). أقوم بتمكين التسجيل التلقائي mlflow.keras.autolog(). يدعم تتبع MLflow حاليًا التسجيل التلقائي لـ TensorFlow وKeras وGluon XGBoost وLightGBM وSpark. إذا لم تجد إطار العمل أو المكتبة الخاصة بك، فيمكنك دائمًا تسجيل الدخول بشكل صريح. لقد بدأنا التدريب. تسجيل العلامات ومعلمات الإدخال على الخادم البعيد.
بضعة أسطر ويمكنك، مثل أي شخص آخر، الوصول إلى المعلومات حول جميع عمليات الإطلاق. رائع؟
3. نقوم بإعداد المشروع
الآن دعونا نجعل من السهل إطلاق المشروع. للقيام بذلك، قم بإضافة ملف MLproject وconda.yaml إلى جذر المشروع.
MLproject
يمكنك استخدام عامل الإرساء كبيئة تشغيل خاصة بك، لمزيد من التفاصيل يرجى الرجوع إلى توثيق.
4. لنبدأ التدريب
نقوم باستنساخ المشروع والانتقال إلى دليل المشروع:
git clone https://github.com/simbakot/mlflow_example.git
cd mlflow_example/
للتشغيل تحتاج إلى تثبيت المكتبات
pip install mlflow
pip install pysftp
لأن في المثال الذي أستخدم فيه conda_env، يجب تثبيت Anaconda على جهاز الكمبيوتر الخاص بك (ولكن يمكنك التغلب على ذلك عن طريق تثبيت جميع الحزم الضرورية بنفسك واللعب باستخدام معلمات التشغيل).
تم الانتهاء من جميع الخطوات التحضيرية ويمكننا البدء في إطلاق التدريب. من جذر المشروع:
$ mlflow run -P epochs=10 -P categories=cat,dog -P tracking_uri=http://server_host:server_port .
بعد إدخال الأمر، سيتم إنشاء بيئة conda تلقائيًا وسيبدأ التدريب.
في المثال أعلاه، قمت بتمرير عدد فترات التدريب، والفئات التي نريد التقسيم إليها (يمكنك الاطلاع على القائمة الكاملة هنا) وعنوان خادمنا البعيد.
يمكن العثور على قائمة كاملة بالمعلمات المحتملة في ملف MLproject.
نرى هنا قائمة بجميع التجارب (أعلى اليسار)، بالإضافة إلى معلومات حول عمليات التشغيل (الوسط). يمكننا عرض معلومات أكثر تفصيلاً (المعلمات والمقاييس والعناصر وبعض المعلومات الإضافية) لكل عملية إطلاق.
لكل مقياس يمكننا ملاحظة تاريخ التغييرات
أولئك. في الوقت الحالي، يمكننا تحليل النتائج في الوضع "اليدوي"، ويمكنك أيضًا إعداد التحقق التلقائي باستخدام واجهة برمجة تطبيقات MLflow.
6. قم بتسجيل النموذج
بعد أن قمنا بتحليل نموذجنا وقررنا أنه جاهز للمعركة، نبدأ في تسجيله، ولهذا نختار الإطلاق الذي نحتاجه (كما هو موضح في الفقرة السابقة) وننزل.
بعد أن نعطي نموذجنا اسمًا، يصبح له إصدار. إذا قمت بحفظ نموذج آخر بنفس الاسم، فسيتم ترقية الإصدار تلقائيًا.
لكل نموذج، يمكننا إضافة وصف واختيار واحدة من الحالات الثلاث (التدريج، الإنتاج، المؤرشفة)؛ بعد ذلك، باستخدام واجهة برمجة التطبيقات، يمكننا الوصول إلى هذه الحالات، والتي، إلى جانب الإصدار، توفر مرونة إضافية.
لدينا أيضًا سهولة الوصول إلى جميع الموديلات
وإصداراتهم
كما في الفقرة السابقة، يمكن إجراء جميع العمليات باستخدام واجهة برمجة التطبيقات (API).
7. نشر النموذج
في هذه المرحلة، لدينا بالفعل نموذج (keras) مدرب. مثال لكيفية استخدامه:
هنا self.registry هو مرة أخرى غلاف صغير فوق mlflow.tracking.MlflowClient، للراحة. النقطة المهمة هي أنني أقوم بالوصول إلى خادم بعيد وأبحث عن نموذج هناك بالاسم المحدد وأحدث إصدار إنتاج. بعد ذلك، أقوم بتنزيل القطعة الأثرية محليًا إلى المجلد ./model وإنشاء النموذج من هذا الدليل mlflow.keras.load_model(local_path). الآن يمكننا استخدام نموذجنا. يمكن لمطوري السيرة الذاتية (ML) تحسين النموذج بسهولة ونشر إصدارات جديدة.
في الختام
لقد قدمت نظامًا يسمح بما يلي:
تخزين المعلومات مركزيًا حول نماذج تعلم الآلة وتقدم التدريب ونتائجه؛
نشر بيئة التطوير بسرعة؛
مراقبة وتحليل التقدم المحرز في العمل على النماذج؛
أنها مريحة لإصدار وإدارة حالة النماذج؛
من السهل نشر النماذج الناتجة.
هذا المثال عبارة عن لعبة ويعمل كنقطة انطلاق لبناء نظامك الخاص، والذي قد يتضمن أتمتة تقييم النتائج وتسجيل النماذج (النقطتان 5 و6، على التوالي) أو ستضيف إصدارات لمجموعات البيانات، أو ربما شيئًا آخر؟ النقطة التي كنت أحاول توضيحها هي أنك تحتاج إلى MLOps ككل، وأن MLflow هو مجرد وسيلة لتحقيق غاية.
اكتب ما هي المشاكل التي واجهتك ولم أعرضها؟
ما الذي ستضيفه إلى النظام ليلبي احتياجاتك؟
ما الأدوات والأساليب التي تستخدمها لحل كل المشكلات أو جزء منها؟
تستضيف شركتنا بشكل دوري أحداثًا مختلفة لمتخصصي تكنولوجيا المعلومات، على سبيل المثال: في 8 يوليو الساعة 19:00 بتوقيت موسكو، سيكون هناك لقاء للسيرة الذاتية بتنسيق عبر الإنترنت، إذا كنت مهتمًا، يمكنك المشاركة والتسجيل هنا .