# Kubeflow MLOps Pipeline 2026: Kubernetes สำหรับ Machine Learning SME ไทย
ถ้าทีม Data Science ของคุณยัง train โมเดลใน Jupyter notebook แล้ว push ไฟล์ `.pkl` ขึ้น Google Drive อยู่ — แสดงว่าถึงเวลาทำ MLOps แล้ว เพราะ workflow แบบนี้ reproduce ไม่ได้, ไม่มี lineage และเมื่อโมเดลพังใน production ก็หา root cause ไม่เจอ
Kubeflow คือ MLOps platform open-source ที่รันบน Kubernetes ดูแลโดยมูลนิธิ CNCF ออกแบบมาเพื่อจัดการทุกขั้นตอนของ ML lifecycle ตั้งแต่ data prep, training, hyperparameter tuning, จนถึง serving ในที่เดียว เหมาะกับ SME ไทยที่อยาก self-host เพื่อคุม cost, data residency และไม่ผูกกับ cloud vendor
บทความนี้สรุปสถาปัตยกรรมของ Kubeflow ปี 2026, แนะนำ Kubeflow Pipelines (KFP) v2, Katib สำหรับ AutoML และ KServe สำหรับ inference พร้อมตัวอย่าง pipeline.py พร้อม deploy
1. ทำไม SME ไทยถึงควรสนใจ Kubeflow
ปัญหาที่ทีม ML เจอบ่อย:
| ปัญหา | Kubeflow แก้ยังไง |
|-------|-------------------|
| โมเดลใน notebook reproduce ไม่ได้ | KFP คือ pipeline-as-code ทุก step มี container + version |
| Train ใช้ GPU 1 เครื่องเล็ก | Kubernetes scale ออกหลาย node + spot instance ได้ |
| Tune hyperparameter ด้วยมือ | Katib ทำ AutoML ด้วย Bayesian/Grid/Random |
| Deploy โมเดลซับซ้อน | KServe มี autoscaling, canary, GPU sharing พร้อมใช้ |
| Track experiment ใน Excel | KFP UI + MLflow integration เก็บ metric/artifact ทุก run |
2. สถาปัตยกรรม Kubeflow 2026
Kubeflow ประกอบด้วย "module" ที่เลือกติดตั้งได้ ไม่ต้องลงทั้งหมด:
ปี 2026 KFP v2 รองรับ "DSL ที่อ่านง่ายแบบ Python type hints" + native execution บน Argo Workflows / Tekton
3. ตัวอย่าง KFP v2 Pipeline (Python)
ตัวอย่าง pipeline ที่ดึงข้อมูลจาก S3 → train โมเดล → upload artifact → ส่งไป KServe:
```python
from kfp import dsl, compiler
from kfp.dsl import Input, Output, Dataset, Model
@dsl.component(
base_image='python:3.11',
packages_to_install=['pandas==2.2.0', 's3fs==2024.6.0']
)
def fetch_data(bucket: str, key: str, out_data: Output[Dataset]):
import pandas as pd
df = pd.read_csv(f's3://{bucket}/{key}')
df.to_parquet(out_data.path)
@dsl.component(
base_image='python:3.11',
packages_to_install=['scikit-learn==1.5.0', 'pandas==2.2.0', 'joblib']
)
def train_model(in_data: Input[Dataset], out_model: Output[Model], n_estimators: int = 200):
import pandas as pd, joblib
from sklearn.ensemble import RandomForestClassifier
from sklearn.model_selection import train_test_split
df = pd.read_parquet(in_data.path)
X, y = df.drop('label', axis=1), df['label']
X_tr, X_te, y_tr, y_te = train_test_split(X, y, test_size=0.2, random_state=42)
clf = RandomForestClassifier(n_estimators=n_estimators)
clf.fit(X_tr, y_tr)
acc = clf.score(X_te, y_te)
out_model.metadata['accuracy'] = acc
joblib.dump(clf, out_model.path + '.joblib')
@dsl.pipeline(name='churn-classifier')
def pipeline(bucket: str = 'ml-data', key: str = 'churn/dataset.csv'):
d = fetch_data(bucket=bucket, key=key)
m = train_model(in_data=d.outputs['out_data'], n_estimators=300)
compiler.Compiler().compile(pipeline, 'churn_pipeline.yaml')
```
4. Katib: Hyperparameter Tuning Automatic
แทนที่จะลอง n_estimators ด้วยมือ Katib ใช้ Bayesian Optimization หา best config
```yaml
apiVersion: kubeflow.org/v1beta1
kind: Experiment
metadata:
name: rf-tune
spec:
objective:
type: maximize
goal: 0.95
objectiveMetricName: accuracy
algorithm:
algorithmName: bayesianoptimization
parameters:
parameterType: int
feasibleSpace: { min: "100", max: "500", step: "50" }
```
5. KServe: Production Serving
KServe ทำให้ deploy โมเดลคือเขียน CR เพียงไฟล์เดียว:
```yaml
apiVersion: serving.kserve.io/v1beta1
kind: InferenceService
metadata:
name: churn-svc
spec:
predictor:
minReplicas: 1
maxReplicas: 10
sklearn:
storageUri: s3://ml-models/churn/v3
```
KServe ให้ HTTP/gRPC endpoint อัตโนมัติ พร้อม Knative autoscaling, Canary deployment, Explainability และ Payload logging
6. เปรียบเทียบ Kubeflow vs MLflow vs SageMaker
| Feature | Kubeflow | MLflow | SageMaker |
|---------|----------|--------|-----------|
| Self-host | ใช่ (K8s) | ใช่ | ไม่ |
| Pipeline orchestration | ครบ (KFP) | จำกัด | ครบ |
| AutoML / HPO | Katib | ใช้ Optuna ภายนอก | ครบ |
| Serving | KServe | MLflow Models | ครบ |
| Cost ที่ scale ใหญ่ | คุมเอง | ถูก | แพงตามใช้งาน |
7. แนวทางเริ่มต้นแบบ Lean
1. ติดตั้ง K3s บน 1-2 VM ขนาดเล็ก (4 CPU / 16 GB RAM)
2. ลงเฉพาะ KFP Standalone ด้วย `kustomize build`
3. เชื่อม MinIO เป็น S3 backend สำหรับ artifact
4. เขียน pipeline ด้วย KFP SDK และเก็บใน Git
5. เพิ่ม KServe เมื่อมีโมเดลพร้อม serve จริง
6. เพิ่ม Katib เมื่อต้องการ HPO
7. Migrate ไป EKS/GKE/AKS เมื่อ traffic โต
8. สรุป + Call to Action
ทีม ADS FIT ช่วย SME ไทยตั้งต้น MLOps platform ตั้งแต่ออกแบบ namespace, security policy, สร้าง pipeline เริ่มต้น และเทรนทีมใช้งานจริง หากอยากปรึกษาเรื่อง Kubeflow setup สำหรับโมเดล computer vision หรือ NLP ติดต่อเราได้ หรืออ่านบทความที่เกี่ยวข้องเช่น [MLflow Open-Source MLOps](#) และ [Feature Store สำหรับ ML](#)
