هذه المقالة هي نوع من فئة رئيسية "DVC لأتمتة تجارب ML وإصدار البيانات" ، والتي وقعت في 18 يونيو في ML REPA (Machine Learning REPA:
استنساخ ، التجارب وأتمتة خطوط الأنابيب) على موقعنا المصرفي.
سوف أتحدث هنا عن ميزات العمل الداخلي لـ DVC وكيفية استخدامها في المشروعات.
أمثلة التعليمات البرمجية المستخدمة في المقالة متوفرة
هنا . تم اختبار الرمز على نظامي MacOS و Linux (Ubuntu).
محتوى
الجزء 1
الجزء 2
إعداد DVC
التحكم في إصدار البيانات هو أداة تم تصميمها لإدارة إصدارات النماذج والبيانات في مشاريع ML. إنه مفيد في المرحلة التجريبية ونشر النماذج الخاصة بك في العملية.

يسمح لك DVC بإصدار نماذج وبيانات وخطوط أنابيب في مشاريع DS.
المصدر
هنا .
دعونا نلقي نظرة على عملية DVC باستخدام مثال مشكلة تصنيف لون القزحية. لهذا ، سيتم استخدام
مجموعة بيانات Iris . يتم عرض
أمثلة أخرى للعمل مع DVC بواسطة Jupyter Notebook.
ما عليك القيام به:لذلك ، نحن استنساخ مستودع ، وإنشاء بيئة افتراضية وتثبيت الحزم اللازمة. توجد تعليمات التثبيت والتشغيل في مستودع README.
1. استنساخ هذا المستودع
git clone https://gitlab.com/7labs.ru/tutorials-dvc/dvc-1-get-started.git cd dvc-1-get-started
2. إنشاء وتفعيل البيئة الافتراضية
pip install virtualenv virtualenv venv source venv/bin/activate
3. تثبيت مكتبات بايثون (بما في ذلك dvc)
pip install -r requirements.txt
لتثبيت DVC ، استخدم الأمر
pip install dvc
. بعد التثبيت ، يجب تهيئة DVC في مجلد مشروع
dvc init
، مما يؤدي إلى إنشاء مجموعة من المجلدات لمزيد من أعمال DVC.
4. الخروج فرع جديد في مستودع التجريبي (لعدم مسح محتوى الفرع الرئيسي)
git checkout -b dvc-tutorial
5. تهيئة DVC
dvc init commit dvc init git commit -m "Initialize DVC"
يعمل DVC على قمة Git ، ويستخدم بنيته الأساسية ، ويحتوي على بناء جملة مماثل.
في هذه العملية ، يقوم DVC بإنشاء ملفات تعريف لوصف خطوط الأنابيب والملفات التي تم إصدارها ، والتي تحتاج إلى حفظها في Git محفوظات مشروعك. لذلك ، بعد تنفيذ
dvc init
يجب تشغيل
git commit
بالالتزام بجميع الإعدادات التي تم إجراؤها.
.dvc
مجلد
.dvc
في المستودع الخاص بك ، والذي يوجد به
cache
.dvc
.
محتويات.
.dvc
ستبدو كما يلي:
./ ../ .gitignore cache/ config
Config هو تكوين DVC ، وذاكرة التخزين المؤقت هي مجلد النظام الذي تخزن فيه DVC جميع البيانات والطرز التي ستقوم بإصدارها.
سيقوم DVC أيضًا بإنشاء ملف
.gitignore
، والذي سيكتب فيه الملفات والمجلدات التي لا تحتاج إلى الالتزام بالمستودع. عند نقل ملف إلى DVC للإصدار في Git ، سيتم حفظ الإصدارات والبيانات الوصفية ، وسيتم تخزين الملف نفسه في ذاكرة التخزين المؤقت.
أنت الآن بحاجة إلى تثبيت جميع التبعيات ، ثم قم بإجراء
checkout
في الفرع
dvc-tutorial
الجديد
dvc-tutorial
، والذي سنعمل فيه. وقم بتنزيل مجموعة بيانات Iris.
الحصول على البيانات
wget -P data/ https://raw.githubusercontent.com/uiuc-cse/data-fa14/gh-pages/data/iris.csv
ميزات DVC
إصدارات الإصدار والبيانات
المصدر
هنا .
اسمحوا لي أن أذكرك أنه إذا قمت بنقل بعض البيانات تحت سيطرة DVC ، فسوف تبدأ في تتبع جميع التغييرات. ويمكننا التعامل مع هذه البيانات بنفس طريقة Git: حفظ الإصدار ، وإرساله إلى مستودع التخزين عن بُعد ، والحصول على الإصدار الصحيح من البيانات ، والتغيير والتبديل بين الإصدارات. واجهة DVC بسيطة للغاية.
أدخل الأمر
dvc add
وحدد المسار إلى الملف الذي نحتاج إلى
dvc add
. سيقوم DVC بإنشاء ملف تعريف iris.csv بالملحق .dvc ، وكتابة معلومات حوله إلى مجلد ذاكرة التخزين المؤقت. لننفذ هذه التغييرات حتى تظهر المعلومات المتعلقة ببداية الإصدار في محفوظات Git.
dvc add data/iris.csv
داخل ملف dvc الذي تم إنشاؤه ، يتم تخزين التجزئة الخاص به مع المعلمات القياسية.
Output
- المسار إلى الملف في مجلد dvc ، والذي أضفناه تحت سيطرة DVC. يأخذ النظام البيانات ويضعها في ذاكرة التخزين المؤقت ويقوم بإنشاء رابط إلى ذاكرة التخزين المؤقت في دليل العمل. يمكن إضافة هذا الملف إلى سجل Git وبالتالي إصداره. DVC يتولى إدارة البيانات نفسها. يتم استخدام أول حرفين من التجزئة كمجلد داخل ذاكرة التخزين المؤقت ، ويتم استخدام الأحرف المتبقية كاسم للملف الذي تم إنشاؤه.
أتمتة خطوط أنابيب MLبالإضافة إلى التحكم في إصدار البيانات ، يمكننا إنشاء خطوط أنابيب (خطوط أنابيب) - سلاسل الحسابات التي يتم تحديد التبعيات بينها. فيما يلي خط الأنابيب القياسي لتدريب وتقييم المصنف:

عند الإدخال ، لدينا بيانات يجب معالجتها مسبقًا ، مقسمة إلى تدريب واختبار ، وحساب الخصائص وبعد ذلك فقط تدريب النموذج وتقييمه. يمكن تقسيم هذا الخط إلى أجزاء منفصلة. على سبيل المثال ، لتمييز مرحلة تحميل البيانات ومعالجتها المسبقة ، تقسيم البيانات ، التقييم ، وما إلى ذلك ، وربط هذه السلاسل معًا.
للقيام بذلك ، يحتوي DVC على أمر
dvc run
dvc رائع ، حيث نقوم بتمرير معلمات معينة وتحديد الوحدة النمطية Python التي نحتاج إلى تشغيلها.
الآن - على سبيل المثال ، مرحلة الإطلاق لحساب العلامات. أولاً ، دعونا نلقي نظرة على محتويات الوحدة النمطية featureization.py:
import pandas as pd def get_features(dataset): features = dataset.copy()
يأخذ هذا الرمز مجموعة البيانات ويحسب الخصائص ويحفظها في iris_featurized.csv. تركنا حساب علامات إضافية إلى المرحلة التالية.
لإنشاء خط أنابيب ، تحتاج إلى تشغيل الأمر لكل مرحلة من مراحل الحساب
dvc run
.

أولاً ، في أمر
dvc run
، حدد اسم ملف تعريف stage_feature_extraction.dvc ، حيث سيكتب DVC البيانات الأولية اللازمة حول مرحلة الحساب. من خلال الوسيطة
-d
، نحدد التبعيات اللازمة: الوحدة النمطية featureization.py وملف بيانات iris.csv. نحدد أيضًا ملف iris_featurized.csv ، حيث يتم حفظ العلامات ، وأمر python src / featurization.py launch نفسه.
dvc run -f stage_feature_extraction.dvc \ -d src/featurization.py \ -d data/iris.csv \ -o data/iris_featurized.csv \ python src/featurization.py
سيقوم DVC بإنشاء ملف تعريف وتعقب التغييرات في وحدة Python وملف iris.csv.
في حالة حدوث تغييرات فيها ، ستعيد DVC خطوة الحساب هذه في خط الأنابيب.
سيحتوي ملف stage_feature_extraction.dvc الناتج على التجزئة ، الأمر start ، التبعيات والإخراج (هناك معلمات إضافية خاصة بهم يمكن العثور عليها في البيانات الأولية).
أنت الآن بحاجة إلى حفظ هذا الملف في تاريخ Git commits. وبالتالي ، يمكننا إنشاء فرع جديد ودفعه إلى مستودع Git. يمكنك الالتزام بقصة Git إما عن طريق إنشاء كل مرحلة على حدة ، أو جميع المراحل في وقت واحد.
عندما نبني مثل هذه السلسلة لتجربتنا بأكملها ، تبني DVC رسمًا حسابيًا (DAG) ، والذي يمكن من خلاله إما البدء في إعادة حساب خط الأنابيب بأكمله أو جزء منه. تجزئات الإخراج من مرحلة واحدة تذهب إلى مدخلات أخرى. وفقا لهم ، DVC المسارات التبعيات ويبني الرسم البياني للحسابات. إذا قمت بتغيير الشفرة في مكان ما في split_dataset.py ، فلن يقوم DVC بتحميل البيانات وربما إعادة حساب العلامات ، ولكنه سيعيد تشغيل هذه المرحلة ومراحل التدريب والتقييم اللاحقة.
تتبع المقاييسباستخدام الأمر
dvc metrics show
، يمكنك عرض مقاييس الإطلاق الحالي ، الفرع الموجود فيه. وإذا تجاوزنا الخيار
-a
، فسوف يعرض DVC جميع المقاييس الموجودة في سجل Git. لكي يبدأ DVC تتبع المقاييس ، عند إنشاء خطوة التقييم ، نقوم بتمرير المعلمة
-m
عبر data / eval.txt. تقوم وحدة Evalu.py بكتابة المقاييس لهذا الملف ، وفي هذه الحالة
f1
confusion metrics
. في مجلد الإخراج في ملف dvc من هذه الخطوة ،
metrics
تعيين
cache
metrics
إلى صواب. وهذا يعني أن الأمر show dvc metrics سوف يخرج محتويات ملف eval.txt إلى وحدة التحكم. أيضًا ، باستخدام وسيطات هذا الأمر ، يمكنك فقط إظهار
f1_score
أو
confusion_matrix
فقط.

في هذا المثال ، حصلنا على هذه النتائج:
خط أنابيب استنساخيعرف أولئك الذين عملوا مع مجموعة البيانات هذه أنه من الصعب جدًا بناء نموذج جيد عليها.
الآن لدينا خط أنابيب تم إنشاؤه باستخدام DVC. يتتبع النظام تاريخ البيانات والنموذج ، ويمكنه إعادة تشغيل نفسه كليًا أو جزئيًا ، ويمكنه عرض المقاييس. لقد أكملنا جميع الأتمتة اللازمة.
كان لدينا نموذج مع f1 = 0.78. نريد تحسينه عن طريق تغيير بعض المعلمات. للقيام بذلك ، أعد تشغيل خط الأنابيب بالكامل ، بشكل مثالي ، باستخدام أمر واحد. بالإضافة إلى ذلك ، إذا كنت تعمل في فريق ، فقد ترغب في نقل النموذج والكود إلى الزملاء حتى يتمكنوا من مواصلة العمل عليهم.
يسمح
dvc repro
بإعادة تشغيل خطوط الأنابيب أو المراحل الفردية (في هذه الحالة ، تحتاج إلى تحديد المرحلة المستنسخة بعد الأمر).
dvc repro stage_evaluate
، ستحاول المرحلة إعادة تشغيل خط الأنابيب بأكمله. ولكن إذا قمنا بذلك في الحالة الحالية ، فلن ترى DVC أي تغييرات ولن تتم إعادة التشغيل. وإذا غيرنا شيئًا ما ، فسيجد التغيير وإعادة تشغيل خط الأنابيب من تلك اللحظة.
$ dvc repro stage_evaluate.dvc Stage 'data/iris.csv.dvc' didn't change. Stage 'stage_feature_extraction.dvc' didn't change. Stage 'stage_split_dataset.dvc' didn't change. Stage 'stage_train.dvc' didn't change. Stage 'stage_evaluate.dvc' didn't change. Pipeline is up to date. Nothing to reproduce.
في هذه الحالة ، لم ير DVC أي تغييرات في تبعيات المرحلة stage_evaluate ورفض إعادة التشغيل. وإذا حددنا الخيار
-f
، فسيتم إعادة تشغيل جميع الخطوات الأولية وإظهار تحذير بأنه يحذف الإصدارات السابقة من البيانات التي كان يتعقبها. في كل مرة يعيد فيها تشغيل DVC المرحلة ، يحذف ذاكرة التخزين المؤقت السابقة ، ويقوم بالكتابة فوقها حتى لا تتكرر البيانات. في اللحظة التي يتم فيها تشغيل ملف DVC ، سيتم فحص التجزئة الخاص به ، وإذا تم تغييره ، فسيتم إعادة تشغيل خط الأنابيب والكتابة فوق جميع المخرجات التي يحتوي عليها خط الأنابيب هذا. إذا كنت تريد تجنب ذلك ، فعليك أولاً تشغيل إصدار محدد من البيانات في بعض المستودع البعيد.
تتيح لك إمكانية إعادة تشغيل خطوط الأنابيب وتتبع تبعيات كل مرحلة تجربة النماذج بشكل أسرع.
على سبيل المثال ، يمكنك تغيير الخصائص ("uncomment" لخطوط حساب الخصائص في
featurization.py
). سيرى DVC هذه التغييرات وإعادة تشغيل خط الأنابيب بأكمله.
حفظ البيانات إلى مستودع بعيد
يمكن أن يعمل DVC ليس فقط مع تخزين الإصدار المحلي. إذا قمت بتنفيذ الأمر dvc
dvc push
، فسوف يرسل DVC الإصدار الحالي من النموذج والبيانات إلى مستودع تخزين تم تكوينه مسبقًا عن بُعد. إذا قام زميلك بعد ذلك بإجراء
git clone
لمستودع
dvc pull
،
dvc pull
على إصدار البيانات
dvc pull
المخصصة لهذا الفرع. الشيء الرئيسي هو أن كل شخص لديه حق الوصول إلى هذا المستودع.

في هذه الحالة ، نحاكي التخزين "البعيد" في مجلد temp / dvc. بنفس الطريقة تقريبًا ، يتم إنشاء التخزين عن بُعد في السحابة. ارتكب هذا التغيير بحيث يبقى في قصة Git. الآن يمكننا القيام
dvc push
لإرسال البيانات إلى وحدة التخزين هذه ،
dvc pull
فقط للحصول عليها.
لذلك ، قمنا بفحص ثلاثة مواقف تكون فيها DVC والوظائف الأساسية مفيدة:
- إصدار البيانات والنماذج . إذا كنت لا تحتاج إلى خطوط أنابيب ومستودعات عن بعد ، يمكنك إصدار البيانات لمشروع معين ، والعمل على الجهاز المحلي. يتيح لك DVC العمل بسرعة مع البيانات بعشرات الجيجابايت.
- تبادل البيانات والنماذج بين الفرق . يمكنك استخدام الحلول السحابية لتخزين البيانات. هذا خيار مناسب إذا كان لديك فريق موزع أو هناك قيود على حجم الملفات المرسلة عبر البريد. أيضًا ، يمكن استخدام هذه التقنية في المواقف عندما ترسل بعضها دفتر ملاحظات ، لكنها لا تبدأ.
- تنظيم العمل الجماعي داخل خادم كبير . يمكن للفريق العمل مع الإصدار المحلي من البيانات الضخمة ، على سبيل المثال ، عدة عشرات أو مئات غيغا بايت ، بحيث لا تنسخها جيئة وذهابا ، ولكن تستخدم وحدة تخزين عن بعد واحدة من شأنها أن ترسل وتحفظ فقط الإصدارات الهامة من النماذج أو البيانات.
الجزء 2
كيفية تنفيذ DVC في مشاريعك؟لضمان استنساخ المشروع ، يجب مراعاة بعض المتطلبات.
فيما يلي أهمها:
- جميع خطوط الأنابيب الآلي ؛
- مراقبة معلمات الإطلاق لكل مرحلة من مراحل الحسابات ؛
- التحكم في إصدار الكود والبيانات والنماذج ؛
- التحكم البيئي ؛
- الوثائق.
إذا تم كل هذا ، فمن المرجح أن يكون المشروع قابلاً للتكرار. يسمح لك DVC بالوفاء بالمتطلبات الثلاثة الأولى في هذه القائمة.
عند محاولة تطبيق DVC في شركتك ، قد تواجه التردد: "لماذا نحتاج إلى ذلك؟ لدينا دفتر Jupyter ". ربما يعمل بعض زملائك فقط مع Jupyter Notebook ، ويصعب عليهم كتابة هذه الأنابيب والكود في IDE. في هذه الحالة ، يمكنك متابعة تنفيذ خطوة بخطوة.
- أسهل طريقة للبدء هي إصدار الكود والنماذج.
ثم انتقل إلى أتمتة خطوط الأنابيب. - أولا أتمتة الخطوات التي غالبا ما إعادة التشغيل والتغيير ،
ثم خط الأنابيب كله.
إذا كان لديك مشروع جديد واثنين من المتحمسين في الفريق ، فمن الأفضل استخدام DVC على الفور. لذلك ، على سبيل المثال ، اتضح في فريقنا! عند بدء مشروع جديد ، دعمني زملائي وبدأنا باستخدام DVC بمفردنا. ثم بدأوا في المشاركة مع الزملاء والفرق الأخرى. اختار شخص ما تعهدنا. اليوم ، لم يعد DVC أداة مقبولة بشكل عام في مصرفنا ، ولكن يتم استخدامه في العديد من المشاريع.