Kubeflow وخطوط ML

Katib: AutoML وضبط المعاملات الفائقة

3 دقيقة للقراءة

Katib يؤتمت ضبط المعاملات الفائقة والبحث عن بنية الشبكة العصبية (NAS) على Kubernetes. يدعم أطر ML متعددة وخوارزميات تحسين لإيجاد تكوينات النموذج المثلى.

بنية Katib

┌─────────────────────────────────────────────────────────────────┐
│                       نظام Katib                                 │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌──────────────────────────────────────────────────────────── ┐│
│  │                    التجربة                                  ││
│  │  - الهدف (تصغير/تكبير)                                      ││
│  │  - مساحة البحث (المعاملات الفائقة)                          ││
│  │  - الخوارزمية (Bayesian، Grid، Random، إلخ.)               ││
│  │  - قالب المحاولة (مهمة التدريب)                            ││
│  └─────────────────────────────────────────────────────────────┘│
│                            ↓                                     │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │ خدمة الاقتراح                                              │  │
│  │ تولد تركيبات المعاملات الفائقة                             │  │
│  └───────────────────────────────────────────────────────────┘  │
│                            ↓                                     │
│  ┌─────────┐ ┌─────────┐ ┌─────────┐ ┌─────────┐              │
│  │محاولة 1 │ │محاولة 2 │ │محاولة 3 │ │محاولة N │              │
│  │ lr=0.01 │ │ lr=0.001│ │ lr=0.1  │ │   ...   │              │
│  │ bs=32   │ │ bs=64   │ │ bs=128  │ │         │              │
│  └─────────┘ └─────────┘ └─────────┘ └─────────┘              │
│                            ↓                                     │
│  ┌───────────────────────────────────────────────────────────┐  │
│  │ أفضل محاولة: lr=0.001, bs=64, accuracy=0.95               │  │
│  └───────────────────────────────────────────────────────────┘  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

الخوارزميات المدعومة

الخوارزمية النوع الأفضل لـ
Random بحث الاستكشاف الأولي
Grid بحث مساحات البحث الصغيرة
Bayesian (TPE) تحسين التقييمات المكلفة
CMA-ES تطوري المعاملات المستمرة
Hyperband توقف مبكر مساحات البحث الكبيرة
ENAS NAS البحث عن البنية
DARTS NAS NAS قابل للتفاضل

إنشاء تجربة

ضبط المعاملات الفائقة الأساسي

apiVersion: kubeflow.org/v1beta1
kind: Experiment
metadata:
  name: pytorch-hpo
  namespace: ml-research
spec:
  # هدف التحسين
  objective:
    type: maximize
    goal: 0.95
    objectiveMetricName: accuracy
    additionalMetricNames:
      - loss
      - f1_score

  # خوارزمية التحسين
  algorithm:
    algorithmName: bayesianoptimization
    algorithmSettings:
      - name: "random_state"
        value: "42"

  # عدد المحاولات
  parallelTrialCount: 4
  maxTrialCount: 20
  maxFailedTrialCount: 3

  # مساحة البحث
  parameters:
    - name: learning_rate
      parameterType: double
      feasibleSpace:
        min: "0.0001"
        max: "0.1"
        step: "0.0001"
    - name: batch_size
      parameterType: int
      feasibleSpace:
        min: "16"
        max: "128"
        step: "16"
    - name: optimizer
      parameterType: categorical
      feasibleSpace:
        list:
          - adam
          - sgd
          - adamw
    - name: dropout
      parameterType: double
      feasibleSpace:
        min: "0.1"
        max: "0.5"

  # قالب المحاولة
  trialTemplate:
    primaryContainerName: training-container
    trialParameters:
      - name: learningRate
        description: معدل التعلم
        reference: learning_rate
      - name: batchSize
        description: حجم الدفعة
        reference: batch_size
      - name: optimizer
        description: نوع المحسن
        reference: optimizer
      - name: dropout
        description: معدل Dropout
        reference: dropout
    trialSpec:
      apiVersion: batch/v1
      kind: Job
      spec:
        template:
          spec:
            containers:
              - name: training-container
                image: my-training-image:latest
                command:
                  - "python"
                  - "train.py"
                  - "--lr=${trialParameters.learningRate}"
                  - "--batch-size=${trialParameters.batchSize}"
                  - "--optimizer=${trialParameters.optimizer}"
                  - "--dropout=${trialParameters.dropout}"
                resources:
                  limits:
                    nvidia.com/gpu: 1
                    memory: "16Gi"
            restartPolicy: Never

جمع المقاييس

# في سكريبت التدريب (train.py)
import logging

# تكوين تسجيل مقاييس Katib
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

def train():
    for epoch in range(epochs):
        train_loss = train_epoch()
        val_accuracy = validate()

        # تسجيل المقاييس لـ Katib (يُحلل من stdout)
        logger.info(f"epoch={epoch}")
        logger.info(f"loss={train_loss:.4f}")
        logger.info(f"accuracy={val_accuracy:.4f}")  # مقياس الهدف
        logger.info(f"f1_score={f1:.4f}")

تكوين جامع المقاييس

metricsCollectorSpec:
  collector:
    kind: StdOut  # تحليل المقاييس من stdout
  source:
    filter:
      metricsFormat:
        - "{metricName}={metricValue}"  # التنسيق: accuracy=0.95

البحث عن بنية الشبكة العصبية (NAS)

تجربة ENAS

apiVersion: kubeflow.org/v1beta1
kind: Experiment
metadata:
  name: nas-enas
  namespace: ml-research
spec:
  objective:
    type: maximize
    objectiveMetricName: accuracy

  algorithm:
    algorithmName: enas
    algorithmSettings:
      - name: "controller_hidden_size"
        value: "64"
      - name: "controller_temperature"
        value: "5.0"

  nasConfig:
    graphConfig:
      numLayers: 8
      inputSizes:
        - 32
        - 32
        - 3
      outputSizes:
        - 10
    operations:
      - operationType: convolution
        parameters:
          - name: filter_size
            parameterType: categorical
            feasibleSpace:
              list: ["3", "5", "7"]
          - name: num_filter
            parameterType: categorical
            feasibleSpace:
              list: ["32", "64", "128"]
      - operationType: pooling
        parameters:
          - name: pooling_type
            parameterType: categorical
            feasibleSpace:
              list: ["max", "avg"]

مراقبة التجارب

# عرض حالة التجربة
kubectl get experiment pytorch-hpo -n ml-research

# عرض جميع المحاولات
kubectl get trials -n ml-research

# الحصول على أفضل محاولة
kubectl get experiment pytorch-hpo -n ml-research \
  -o jsonpath='{.status.currentOptimalTrial}'

# عرض التجربة في واجهة Katib
kubectl port-forward svc/katib-ui -n kubeflow 8080:80

التوقف المبكر مع Hyperband

apiVersion: kubeflow.org/v1beta1
kind: Experiment
metadata:
  name: hyperband-experiment
spec:
  algorithm:
    algorithmName: hyperband
    algorithmSettings:
      - name: "resource_name"
        value: "epoch"
      - name: "eta"
        value: "3"
      - name: "r_l"
        value: "9"  # أقصى epochs

  parameters:
    - name: learning_rate
      parameterType: double
      feasibleSpace:
        min: "0.0001"
        max: "0.1"

  # التوقف المبكر يوفر ساعات GPU
  earlyStoppingAlgorithmName: medianstop

التالي، سنستكشف Argo Workflows لتنسيق خطوط متقدم ما وراء Kubeflow Pipelines. :::

اختبار

الوحدة 3: Kubeflow وخطوط ML

خذ الاختبار