Kubeflow 的一個主要設計目標就是簡化和標準化在 Kubernetes 上進行大規模 ML 訓練的過程。它提供了一系列工具和組件,讓數據科學家和工程師能夠輕鬆地啓動、管理和監控分佈式訓練任務,而無需關心底層的 Kubernetes 集羣調度細節。

1. 核心組件:Kubeflow Training Operators

Kubeflow 不直接調度訓練任務,而是通過一組稱為 Training Operators 的自定義控制器來實現。這些 Operators 是 Kubernetes 自定義資源(CRD)的控制器,它們理解特定的分佈式訓練框架(如 TensorFlow, PyTorch, MXNet 等)的語義,並負責:

1. 根據用户提交的訓練任務定義(如 TFJob, PyTorchJob),在 Kubernetes 集羣中創建相應的 Pod。

2. 管理這些 Pod 的生命週期(啓動、健康檢查、重啓失敗的 Pod)。

3. 處理分佈式訓練的網絡配置(如設置 MASTER_ADDR, WORKER_HOSTS 等環境變量)。

4. 聚合訓練日誌和事件。

常用的 Training Operators:

• TFJob: 用於 TensorFlow 分佈式訓練。

• PyTorchJob: 用於 PyTorch 分佈式訓練。

• MXNetJob: 用於 MXNet 分佈式訓練。

• XGBoostJob: 用於 XGBoost 分佈式訓練。

• MPIJob: 一個通用的、基於 MPI (Message Passing Interface) 的 Operator,可用於支持 MPI 的任何框架(如 Horovod 訓練)。

2. 如何使用 Kubeflow 進行大規模訓練?

使用 Kubeflow 進行分佈式訓練通常分為以下幾個步驟:

步驟 1: 準備訓練代碼

你的訓練代碼需要適配分佈式訓練框架。

• 對於 PyTorch:你需要使用 torch.distributed 包來初始化進程組,並在代碼中處理 rank 和 world_size。

kubeflow 大規模 ML 訓練_大規模ML訓練

步驟 2: 創建 Docker 鏡像

將你的訓練代碼、依賴庫和數據集(或數據集訪問腳本)打包成一個 Docker 鏡像。

Dockerfile:

kubeflow 大規模 ML 訓練_大規模ML訓練_02

構建並推送到鏡像倉庫。

步驟 3: 定義 Kubeflow Training Job YAML

創建一個 YAML 文件來定義你的分佈式訓練任務。以 PyTorchJob 為例:

pytorch_job.yaml:

kubeflow 大規模 ML 訓練_kubeflow_03

説明:

  • PyTorchJob CRD 定義了兩種角色:Master 和 Worker
  • Master.replicas: 1: 通常有一個 Master 進程。
  • Worker.replicas: 3: 這裏我們請求 3 個 Worker 進程。
  • nvidia.com/gpu: 1: 請求 GPU 資源。Kubernetes 會將這些 Pod 調度到有可用 GPU 的節點上。
  • restartPolicy: OnFailure: 如果某個 Pod 失敗,Kubeflow 會嘗試重啓它。
  • command: 指定了容器啓動時要執行的命令。torch.distributed.launch 是 PyTorch 提供的一個啓動器,它會自動處理進程的啓動和通信。

步驟 4: 提交訓練任務

使用 kubectl 命令提交你的訓練任務:

kubectl apply -f pytorch_job.yaml

步驟 5: 監控訓練任務

  • 查看 Job 狀態:
kubectl get pytorchjobs
  • 查看 Pod 狀態:
kubectl get pods -l job-name=distributed-pytorch-training

你會看到一個 Master Pod 和三個 Worker Pod 正在運行。

  • 查看訓練日誌:
# 查看 Master Pod 日誌
kubectl logs -f distributed-pytorch-training-master-0 -c pytorch

# 查看某個 Worker Pod 日誌
kubectl logs -f distributed-pytorch-training-worker-0 -c pytorch

3. 大規模訓練的優勢

  • 彈性伸縮: 可以輕鬆地通過修改 YAML 文件中的 replicas 數量來增加或減少訓練的並行度。
  • 資源高效利用: Kubernetes 的調度器會將訓練任務智能地調度到集羣中最合適的節點,避免資源浪費。
  • ** fault tolerance**: Kubeflow 的 Training Operators 會自動處理失敗的訓練進程,提高了訓練任務的可靠性。
  • 統一的管理界面: 可以通過 Kubeflow Dashboard 直觀地管理和監控所有訓練任務。
  • 集成化: 訓練任務可以很容易地與 Kubeflow 的其他組件(如 Pipelines, Model Registry)集成,構建端到端的 MLOps 流水線。

4. 總結

Kubeflow 通過提供 PyTorchJobTFJob 等一系列 Training Operators,極大地簡化了在 Kubernetes 上進行大規模、分佈式機器學習訓練的複雜性。

數據科學家只需:

  1. 編寫適配分佈式框架的訓練代碼。
  2. 將代碼打包成 Docker 鏡像。
  3. 編寫一個簡單的 YAML 文件來定義訓練任務的資源需求和並行度。

Kubeflow 和 Kubernetes 會負責剩下的所有工作,包括資源調度、進程管理、網絡配置和容錯,讓你能夠專注於模型本身的開發。這使得 Kubeflow 成為構建企業級、可擴展的機器學習平台的理想選擇。

5.訓練模式

在 Kubeflow 中,每個獨立的大規模訓練任務(即每個 PyTorchJob/TFJob 等 CRD 實例)都會獨立創建一套專屬的 Master 節點和 Worker 節點—— 不同模型的訓練任務之間完全隔離,不會共享 Master 或 Worker 資源。

簡單説:一個訓練任務 = 一套獨立的 Master + N 個 Worker,多模型訓練就對應多套獨立的節點組。

具體説明

1. 任務隔離的核心邏輯

Kubeflow 的訓練任務(如 PyTorchJob)是 Kubernetes 自定義資源(CRD),每個 CRD 實例會被 Kubeflow Training Operator 解析為獨立的 Deployment/Pod 組:

• 訓練任務 A(如 “ResNet-50 圖像分類訓練”):創建 1 個 task-a-master-0 Pod + 3 個 task-a-worker-0/1/2Pod;

• 訓練任務 B(如 “BERT 文本分類訓練”):創建 1 個 task-b-master-0 Pod + 4 個 task-b-worker-0/1/2/3Pod;

• 兩個任務的 Pod 名稱、資源配置、網絡通信完全隔離,互不干擾。

2. 資源分配的靈活性

每個訓練任務的 Master/Worker 數量、資源配置可以獨立定義,適配不同模型的需求:

• 小模型訓練:可配置 Worker: replicas: 2,每個 Worker 分配 1 個 GPU;

• 大模型訓練:可配置 Worker: replicas: 8,每個 Worker 分配 2 個 GPU;

• Master 節點的資源也可獨立調整(如大模型的 Master 可能需要更多內存存儲全局參數)。

3. 示例:兩個模型訓練的 Kubeflow 配置

假設同時訓練兩個模型,各自的 YAML 配置如下:

模型 1:ResNet-50 訓練(resnet-train-job.yaml

kubeflow 大規模 ML 訓練_kubeflow_04

模型 2:BERT 訓練(bert-train-job.yaml)

kubeflow 大規模 ML 訓練_大規模ML訓練_05

提交後,Kubernetes 集羣中會出現兩組獨立的 Pod:

  • 模型 1 相關:resnet50-training-job-master-0resnet50-training-job-worker-0/1/2
  • 模型 2 相關:bert-training-job-master-0bert-training-job-worker-0/1/2/3

1. 關鍵補充:共享集羣資源,但不共享任務節點

  • 所有任務的 Master/Worker 節點會共享 Kubernetes 集羣的物理資源(CPU/GPU/ 內存),由 K8s 調度器統一分配;
  • 若集羣資源不足,新提交的訓練任務會進入 “Pending” 狀態,等待其他任務完成釋放資源;
  • 可通過 Kubeflow 的 “命名空間(Namespace)” 或 K8s 的 “資源配額(ResourceQuota)” 為不同團隊 / 模型分配專屬資源,避免搶佔。

2、“訓練” 與 “部署” 的關係:缺一不可的閉環

大規模訓練和推理部署是 MLOps 全流程的兩個核心環節,前者是 “生產模型”,後者是 “使用模型”,形成閉環

業務需求 → 大規模訓練(集羣算力)→ 產出可部署模型 → 部署推理服務(KServe/雲廠商/邊緣設備)→ 業務調用(實時/批量)→ 監控模型性能 → 數據漂移/精度下降 → 重新大規模訓練/微調 → 迭代部署

總結

  • 多模型訓練 → 多個獨立的 Kubeflow 訓練任務(PyTorchJob/TFJob);
  • 每個任務 → 一套專屬的 Master 節點 + N 個 Worker 節點;
  • 節點組之間完全隔離,資源配置可獨立調整,由 K8s 統一調度集羣物理資源。

這種設計的優勢是 “任務隔離、靈活擴縮、資源複用”,既保證了不同模型訓練的獨立性,又能高效利用集羣硬件資源。