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. :::