التحكم في إصدار البيانات والنماذج باستخدام DVC
التحكم في إصدار النماذج
4 دقيقة للقراءة
النماذج هي مخرجات تجارب التعلم الآلي. مثل مجموعات البيانات، تتطور—ستدرب العديد من الإصدارات قبل إيجاد الأفضل. DVC يجعل التحكم في إصدار النماذج سلساً.
لماذا التحكم في إصدار النماذج؟
| التحدي | الحل |
|---|---|
| إعادة الإنتاج | أعد إنشاء أي إصدار نموذج |
| المقارنة | قارن المقاييس عبر الإصدارات |
| التراجع | ارجع بسرعة لنموذج يعمل |
| التدقيق | تتبع من درّب ماذا، ومتى |
تتبع ملفات النماذج
ملف نموذج واحد
# تتبع نموذج مُدرب
dvc add models/random_forest.pkl
# يُنشئ models/random_forest.pkl.dvc
# يُضيف models/random_forest.pkl إلى .gitignore
نموذج مع مخرجات
العديد من الأطر تحفظ ملفات متعددة:
# PyTorch يحفظ state dict
dvc add models/pytorch_model/
# هذا يتتبع المجلد بأكمله:
# models/pytorch_model/
# ├── model.pt
# ├── config.json
# └── tokenizer/
نقاط حفظ النماذج الكبيرة
# تتبع نقاط حفظ التدريب
dvc add checkpoints/
# هيكل المجلد:
# checkpoints/
# ├── epoch_10.pt
# ├── epoch_20.pt
# └── epoch_30.pt
سير عمل التحكم في إصدار النماذج
مثال سير عمل كامل
# 1. درّب نموذجك (سكربت Python)
python train.py --epochs 50 --lr 0.001
# 2. تتبع النموذج الناتج
dvc add models/classifier.pkl
# 3. سجّل البيانات الوصفية في Git
git add models/classifier.pkl.dvc
git commit -m "Model v1: baseline random forest, acc=0.82"
git tag model-v1.0
# 4. ادفع النموذج للتخزين البعيد
dvc push
# 5. درّب نموذج محسّن
python train.py --epochs 100 --lr 0.0005
# 6. حدّث التتبع
dvc add models/classifier.pkl
git add models/classifier.pkl.dvc
git commit -m "Model v2: tuned hyperparameters, acc=0.87"
git tag model-v2.0
dvc push
التنقل بين إصدارات النماذج
# ارجع إلى v1
git checkout model-v1.0
dvc checkout
# تحقق أن النموذج تغير
ls -la models/classifier.pkl
# تجزئة الملف تطابق v1.0
# عد للأحدث
git checkout main
dvc checkout
تتبع نماذج متعددة
مشروع بنماذج متعددة
# تتبع كل نموذج بشكل منفصل
dvc add models/preprocessor.pkl
dvc add models/classifier.pkl
dvc add models/postprocessor.pkl
# أو تتبع مجلد النماذج بالكامل
dvc add models/
اصطلاحات تسمية النماذج
models/
├── classifier_v1_baseline.pkl
├── classifier_v2_tuned.pkl
├── classifier_v3_production.pkl
└── metadata/
├── v1_metrics.json
├── v2_metrics.json
└── v3_metrics.json
ربط النماذج بالمقاييس
تتبع المقاييس اليدوي
# احفظ المقاييس مع النموذج
echo '{"accuracy": 0.87, "f1": 0.85}' > models/metrics.json
# تتبع الاثنين
dvc add models/classifier.pkl
git add models/classifier.pkl.dvc models/metrics.json
git commit -m "Model v2 with metrics"
استخدام مقاييس DVC
# dvc.yaml
stages:
train:
cmd: python train.py
deps:
- data/train.csv
- src/train.py
outs:
- models/classifier.pkl
metrics:
- models/metrics.json:
cache: false
# عرض المقاييس
dvc metrics show
# قارن عبر commits
dvc metrics diff
أفضل الممارسات للتحكم في إصدار النماذج
ما يجب تتبعه
| تتبع | لا تتتبع |
|---|---|
| أوزان النموذج النهائية | حالات المحسّن الوسيطة |
| تكوين النموذج | سجلات التدريب (استخدم MLflow) |
| مخرجات الاستدلال | ملفات الكاش المؤقتة |
| خطوط المعالجة المسبقة | مخرجات التصحيح |
إرشادات رسائل Commit
# جيد: وصفي مع المقاييس
git commit -m "Model v3: XGBoost with feature selection
- Accuracy: 0.91 (↑0.04)
- F1 Score: 0.89 (↑0.03)
- Training time: 45min
- Features: 25 (reduced from 100)"
# سيء: غامض
git commit -m "Updated model"
استراتيجية العلامات
# إصدار دلالي للنماذج
git tag model-v1.0.0 # Major: تغيير معماري
git tag model-v1.1.0 # Minor: ميزات/بيانات جديدة
git tag model-v1.1.1 # Patch: إصلاحات أخطاء
أنماط خاصة بالأطر
Scikit-learn
import joblib
# احفظ النموذج
joblib.dump(model, 'models/sklearn_model.pkl')
dvc add models/sklearn_model.pkl
PyTorch
import torch
# احفظ النموذج الكامل
torch.save(model.state_dict(), 'models/pytorch_model.pt')
torch.save({
'model_state': model.state_dict(),
'optimizer_state': optimizer.state_dict(),
'epoch': epoch,
'loss': loss
}, 'models/checkpoint.pt')
dvc add models/pytorch_model.pt
dvc add models/checkpoint.pt
TensorFlow/Keras
# صيغة SavedModel (موصى بها)
model.save('models/tf_model')
# أو صيغة HDF5
model.save('models/keras_model.h5')
dvc add models/tf_model/ # مجلد
dvc add models/keras_model.h5 # ملف واحد
استرجاع إصدارات نماذج محددة
# اعرض جميع إصدارات النماذج (عبر علامات Git)
git tag | grep model
# احصل على إصدار محدد
git checkout model-v1.0
dvc checkout
# أو اجلب بدون تبديل الفروع
dvc get . models/classifier.pkl --rev model-v1.0 -o models/v1_model.pkl
الرؤية الرئيسية: تحكم في إصدار النماذج كما تتحكم في إصدار الكود—بـ commits ذات معنى، وعلامات، والقدرة على إعادة إنتاج أي إصدار في أي وقت.
التالي، سنتعلم كيفية إنشاء خطوط أنابيب ML قابلة لإعادة الإنتاج مع DVC. :::