التحكم في إصدار البيانات والنماذج باستخدام 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. :::

اختبار

الوحدة 2: التحكم في إصدار البيانات والنماذج باستخدام DVC

خذ الاختبار