L1

基础设施与算力管理层

Infrastructure & Compute Management Layer — GPU/NPU 集群、Kubernetes 编排、分布式存储、高性能网络、监控告警的统一下层基座

层级编号 L1 对外接口 K8s API / IaaS API 依赖方向 无下层依赖 (硬件底座之上) 关键用户 运维工程师 · MLOps 工程师 运维节奏 硬件周期(月级) / 软件配置(天级) / 弹性伸缩(分钟级)

2. 层级定位与边界

L1 是 AI 基础能力平台的最底层,负责将所有物理硬件资源抽象为可编程、可调度、可观测的算力池。它向上层(L2 模型部署层)提供标准化的 K8s API 和 IaaS API,屏蔽底层硬件的异构性和运维复杂性。

L1 在七层架构中的定位 · 上下游边界 L1 边界规范摘要 ✓ 向上层提供 K8s API (Pod/GPU/存储/网络) GPU 设备拓扑信息 存储 PV/PVC 自动供应 集群监控指标与告警 节点故障检测与自愈 ✗ 不提供 模型权重路径管理 推理引擎配置 模型版本管理 业务鉴权/限流规则 内部子模块边界 计算 ↔ 存储: 通过 CSI 驱动 计算 ↔ 网络: 通过 CNI 插件 监控 ↔ 全部: Prometheus Exporter 下行边界 (物理硬件) L1 管理软件抽象层 不负责硬件采购/上架/维修 通过 IPMI/BMC/Redfish 监控 关键 KPI GPU 平均利用率 ≥ 70% GPU 故障隔离时间 < 5min 节点部署时间 < 30min 集群可用性 ≥ 99.9% L7 · 业务应用层智能问数 · 数字人 · 漫剧生成 · 智能客服 · AI编程 L6 · 多 Agent 管理平台Agent 编排 · Skill 市场 · Tool 注册 · 多 Agent 协作 L5 · 模型基础应用平台Agent 平台 · Dify 工作流 · RAG 管线 · MCP 接入 L4 · 模型网关智能路由 · 统一鉴权 · 限流熔断 · 语义缓存 · 协议适配 L3 · 模型市场开源模型库 · 自训练模型 · 微调模型 · 评测平台 · 版本管理 L2 · 模型部署层推理引擎 vLLM/TensorRT-LLM/TGI/SGLang · 一键部署 · 弹性伸缩 边界 B1 (L2↔L1) 接口: K8s API / IaaS API L2 通过 K8s 创建 Pod 请求 GPU L2 通过 PVC 挂载模型权重 L1 向上暴露节点拓扑与状态 ▲ L1 对外接口层 (K8s API) L1 · 基础设施与算力管理层 ★ (当前层级)核心模块: GPU/NPU 算力管理 (MIG/拓扑感知/故障隔离) K8s 调度 (Volcano + HAMi) · 存储 (Ceph/MinIO/JuiceFS) · 网络 (RoCE/IB) · 监控 (Prometheus/DCGM) 🖥️ 硬件底座 NVIDIA A100-80G · H100-80G · AMD MI300X · 华为昇腾 910B · 寒武纪 MLU370 · InfiniBand NDR200 · NVMe SSD · Ceph 存储集群 管理

3. 边界规范

上游 → L2 提供:K8s API(Pod 调度、GPU 分配、存储 PV/PVC 自动供应、NetworkPolicy 网络隔离)、节点状态 API(GPU 健康、拓扑信息、剩余资源)、集群监控指标(Prometheus 端点)。
不提供:模型权重路径知识、推理引擎配置文件、模型版本管理 API、业务层鉴权策略。
下游 → 硬件 提供:硬件抽象层(设备驱动、固件管理、BMC/IPMI 带外管理接口)。L1 管理硬件的软件抽象,将物理设备注册为 K8s Node 并上报其资源容量。
不负责:硬件采购、物理上架、硬件维修 RMA、机房空调/电力等物理基础设施。这些由物理运维团队(Data Center Ops)负责。
内部子模块 计算 ↔ 存储:通过 CSI 驱动(Ceph CSI / JuiceFS CSI)交互,Pod 声明 PVC → L1 自动创建 PV 并挂载。
计算 ↔ 网络:通过 CNI 插件(Calico + Multus)交互,为 Pod 分配独立网络命名空间。
监控 ↔ 全部:每个子模块暴露 Prometheus Metrics 端点,由 Prometheus Server 统一采集。

4. 核心模块

4.1 GPU/NPU 算力管理

4.1.1 异构芯片管理

L1 需要统一管理多个厂商、多代际的异构加速芯片。每台 GPU 节点通过标准化的 Node Labels 向 K8s 上报其加速器信息。

NVIDIA A100-SXM-80GB

第三代 Tensor Core · MIG 支持 (最多 7 实例) · 600GB/s NVLink 3.0 · PCIe 4.0 · 80GB HBM2e · 312 TFLOPS (FP16)

Ampere 架构 当前主力
NVIDIA H100-SXM-80GB

第四代 Tensor Core · Transformer Engine · MIG 支持 (最多 7 实例) · 900GB/s NVLink 4.0 · PCIe 5.0 · 1979 TFLOPS (FP8)

Hopper 架构 高优先级
AMD MI300X

CDNA 3 架构 · 192GB HBM3 · 5.2 TB/s 显存带宽 · 896 GB/s Infinity Fabric · 896 TFLOPS (FP16)

ROCm 生态
华为 Ascend 910B

DaVinci 架构 · 64GB HBM2e · HCCS 互联 (392 GB/s) · CANN 软件栈 · 320 TFLOPS (FP16)

CANN 驱动 国产化
寒武纪 MLU370-S4

MLUarch03 架构 · 24GB GDDR6 · 256 TFLOPS (INT8) · Cambricon Neuware 软件栈

MLU 生态 国产化
天数智芯 天垓100

7nm 通用 GPU · 32GB HBM2e · 147 TFLOPS (FP16) · 支持 Pytorch/TensorFlow

Iluvatar CoreX

4.1.2 GPU 节点标签规范

所有 GPU 节点通过标准化的 Labels 向集群上报算力信息。此规范是资源调度和配额管理的基础。

# NVIDIA A100 节点标签示例
apiVersion: v1
kind: Node
metadata:
  labels:
    accelerator: "nvidia"
    accelerator-model: "A100-SXM-80GB"
    accelerator-memory: "80Gi"
    accelerator-count: "8"
    accelerator-topology: "nvlink-fullmesh"
    accelerator-mig-enabled: "true"
    accelerator-mig-profiles: "1g.10gb,2g.20gb,3g.40gb,7g.80gb"
    accelerator-driver-version: "550.54.15"
    accelerator-cuda-version: "12.4"
    node-type: "gpu-compute"
    network.bandwidth: "100Gbps"
    network.interface: "mlx5_0"
    storage.local-nvme: "3.5Ti"
---
# 华为昇腾 910B 节点标签示例
apiVersion: v1
kind: Node
metadata:
  labels:
    accelerator: "huawei-ascend"
    accelerator-model: "Ascend-910B"
    accelerator-memory: "64Gi"
    accelerator-count: "8"
    accelerator-topology: "hccs-ring"
    accelerator-driver-version: "23.0.rc1"
    accelerator-cann-version: "7.0.0"
    node-type: "gpu-compute"
    network.bandwidth: "100Gbps"
    storage.local-nvme: "1.8Ti"

4.1.3 GPU 虚拟化

平台支持三种 GPU 共享/虚拟化方案,根据业务场景灵活选择:

方案技术隔离粒度适用场景
MIG (Multi-Instance GPU) NVIDIA A100/H100 原生 硬件级隔离,显存/缓存/计算单元全隔离 生产级多租户推理,SLA 敏感
vGPU (Time-Slicing) NVIDIA vGPU Manager 时间片轮转,显存独占 虚拟桌面、开发调试环境
MPS (Multi-Process Service) NVIDIA CUDA MPS CUDA context 共享,显存共享 小批量推理,训练数据预处理
推荐策略:生产推理优先使用 MIG 硬件隔离;开发和实验环境使用 HAMi 时间片共享;MPS 仅用于特殊的 CUDA 负载场景。

4.1.4 拓扑感知调度

多卡训练任务的性能高度依赖 GPU 间的互联拓扑。L1 通过 Volcano + 自定义调度插件实现拓扑感知调度:

# GPU 拓扑感知调度示例:Pod 模板
apiVersion: v1
kind: Pod
metadata:
  name: training-pod
  annotations:
    # 拓扑约束:要求 8 张 GPU 在同一 NUMA 域内
    scheduling.volcano.sh/topology-hint: "numa-single"
    # PCIe 交换机亲和性
    scheduling.volcano.sh/pcie-switch-affinity: "required"
    # NVLink 域限制
    scheduling.volcano.sh/nvlink-domain: "full-mesh"
spec:
  containers:
  - name: trainer
    image: pytorch:2.3.0-cuda12.4
    resources:
      requests:
        nvidia.com/gpu: 8
      limits:
        nvidia.com/gpu: 8
  affinity:
    nodeAffinity:
      requiredDuringScheduling:
        nodeSelectorTerms:
        - matchExpressions:
          - key: accelerator-topology
            operator: In
            values: ["nvlink-fullmesh"]

4.1.5 故障检测与自动隔离

GPU 故障是分布式训练中最常见的问题类型。L1 构建了多层故障检测体系:

1 DCGM 健康监控
2 Node Problem Detector
3 自动 Node Drain
4 告警通知
5 工单自动创建

DCGM (Data Center GPU Manager) 以 5 秒间隔持续采集 XID 错误、ECC 错误、GPU 卡死等故障信号。Node Problem Detector 配置如下:

# Node Problem Detector GPU 故障规则
apiVersion: v1
kind: ConfigMap
metadata:
  name: node-problem-detector-config
  namespace: kube-system
data:
  gpu-problem.yaml: |
    conditions:
    - type: "GPUError"
      reason: "GPUCardFailure"
      message: "GPU card is experiencing hardware failures"
      rules:
      - type: "permanent"
        condition: "XidError"
        metric: "dcgm_gpu_xid_errors_total"
        threshold: 1
        window: 5m
      actions:
      - action: cordon
      - action: drain
        timeout: 30m
      - action: alert
        severity: critical
        channel: "feishu"

4.1.6 资源池化与配额管理

通过 Volcano Queue 实现多租户 GPU 资源池化与配额管理:

# Volcano Queue:按团队划分的 GPU 资源池
apiVersion: scheduling.volcano.sh/v1beta1
kind: Queue
metadata:
  name: ai-platform-team
spec:
  weight: 10
  capability:
    nvidia.com/gpu: "128"
    cpu: "512"
    memory: "4096Gi"
  reclaimable: true
  guarantee:
    resourceGroup:
      resources:
      - nvidia.com/gpu
    percentage: 50  # 保障至少 64 张 GPU
---
apiVersion: scheduling.volcano.sh/v1beta1
kind: Queue
metadata:
  name: research-lab
spec:
  weight: 5
  capability:
    nvidia.com/gpu: "32"
    cpu: "128"
    memory: "1024Gi"
  reclaimable: false  # 独占队列,不可被回收
---
apiVersion: scheduling.volcano.sh/v1beta1
kind: Queue
metadata:
  name: inference-prod
spec:
  weight: 20
  capability:
    nvidia.com/gpu: "256"
    cpu: "1024"
    memory: "4096Gi"
  reclaimable: false
  guarantee:
    percentage: 80  # 保障 80% 资源用于生产推理

4.2 容器编排平台

4.2.1 Kubernetes 基础集群

Kubernetes 1.28+ 作为统一的资源调度和容器编排基座。所有 GPU 节点、存储服务、网络组件均以原生 K8s 资源进行管理。集群配置至少 3 个 Control Plane 节点,使用 etcd 集群存储集群状态。

组件版本说明
Kubernetes1.28+统一调度基座,采用 Containerd 运行时
etcd3.5集群状态存储,部署于 Control Plane 节点
CoreDNS1.11集群 DNS 服务
Containerd1.7+容器运行时,支持 GPU runc 扩展
Helm3.14包管理器,所有组件通过 Helm Charts 部署

4.2.2 Volcano:批量调度与队列管理

Volcano 是 Kubernetes 原生批量计算引擎,提供 AI/ML 工作负载所需的 Gang Scheduling、Queue 管理、公平调度、资源预留等能力。

特性说明配置场景
Gang Scheduling所有 Pod 同时分配(All-or-Nothing)分布式训练任务,8 卡/16 卡同时就绪
Queue 管理按团队/项目划分资源池AI 平台组 128 卡,研究组 32 卡
公平调度DRF (Dominant Resource Fairness)多租户场景,避免资源饥饿
Preemption高优任务抢占低优任务生产推理任务抢占离线训练
资源预留Reservation 机制预订集群资源用于重要任务
# Volcano Gang Scheduling 配置:8 卡分布式训练
apiVersion: batch.volcano.sh/v1alpha1
kind: Job
metadata:
  name: distributed-train-8gpu
spec:
  schedulerName: volcano
  minAvailable: 8    # Gang Scheduling: 最少 8 个 Pod 同时调度
  queue: ai-platform-team
  tasks:
  - replicas: 8
    name: trainer
    template:
      spec:
        containers:
        - name: pytorch-train
          image: pytorch:2.3.0-cuda12.4
          command: ["torchrun", "--nnodes=8", "train.py"]
          resources:
            requests:
              nvidia.com/gpu: 1
              cpu: 16
              memory: "64Gi"
            limits:
              nvidia.com/gpu: 1
        affinity:
          podAntiAffinity:
            requiredDuringScheduling:
            - labelSelector:
                matchExpressions:
                - key: job-name
                  operator: In
                  values: ["distributed-train-8gpu"]
              topologyKey: kubernetes.io/hostname  # 每节点一张卡

4.2.3 HAMi:GPU 共享调度

HAMi (formerly k8s-vGPU-scheduler) 在 Volcano 之上提供 GPU 设备级共享调度,支持显存和算力(SM Utilization)的细粒度切分:

# HAMi GPU 共享配置
apiVersion: v1
kind: ConfigMap
metadata:
  name: hami-device-config
  namespace: kube-system
data:
  config.yaml: |
    nodes:
      - selector:
          accelerator-model: "A100-SXM-80GB"
        devices:
          - index: 0
            type: nvidia.com/gpu
            memory: 81920   # MB
            cores: 100      # SM 百分比
          - index: 1
            type: nvidia.com/gpu
            memory: 81920
            cores: 100
    # 显存虚拟化策略
    memory:
      enable: true
      strategy: "isolation"  # isolation | sharing
    # 算力限制
    cores:
      enable: true
---
# Pod 使用 HAMi 共享 GPU
apiVersion: v1
kind: Pod
metadata:
  name: shared-gpu-pod
  annotations:
    hami.io/gpu-memory: "16Gi"    # 分配 16GB 显存
    hami.io/gpu-cores: "30"       # 分配 30% SM 算力
spec:
  containers:
  - name: inference
    image: nvcr.io/nvidia/tritonserver:24.02-py3
    resources:
      requests:
        nvidia.com/gpu: 1         # 请求一张 GPU (但只使用一部分)

4.2.4 NVIDIA GPU Operator

NVIDIA GPU Operator 24.3+ 自动化管理 GPU 节点的驱动安装、容器运行时配置、DCGM Exporter 部署和设备插件注册:

# Helm 部署 GPU Operator
helm install gpu-operator nvidia/gpu-operator \
  --namespace kube-system \
  --set driver.enabled=true \
  --set driver.version="550.54.15" \
  --set toolkit.enabled=true \
  --set toolkit.version="v1.16.0-ubuntu22.04" \
  --set devicePlugin.enabled=true \
  --set migManager.enabled=true \
  --set migManager.default=none \
  --set dcgmExporter.enabled=true \
  --set dcgmExporter.collectInterval=5s

4.2.5 Karmada:多集群管理(可选)

对于跨数据中心或混合云场景,Karmada 提供 K8s 原生多集群管理能力,实现联邦资源调度:

# Karmada 多集群分发策略
apiVersion: policy.karmada.io/v1alpha1
kind: PropagationPolicy
metadata:
  name: gpu-workload-propagation
spec:
  resourceSelectors:
  - apiVersion: batch.volcano.sh/v1alpha1
    kind: Job
  placement:
    clusterAffinity:
      clusterNames:
      - dc-shanghai-gpu
      - dc-beijing-gpu
    clusterTolerations:
    - key: "gpu-type"
      operator: "Equal"
      value: "A100"
    spreadConstraints:
    - spreadByField: "cluster"
      maxGroups: 1          # 每个 Job 只调度到一个集群

4.2.6 Istio:东西向流量治理

使用 Istio 1.21+ 管理推理服务之间的东西向流量,提供灰度发布流量分割、指标采集和 mTLS:

# Istio VirtualService:推理服务灰度
apiVersion: networking.istio.io/v1beta1
kind: VirtualService
metadata:
  name: inference-gray
spec:
  hosts:
  - llm-service
  http:
  - match:
    - headers:
        x-version:
          exact: v2
    route:
    - destination:
        host: llm-service-v2
  - route:
    - destination:
        host: llm-service-v1
      weight: 90
    - destination:
        host: llm-service-v2
      weight: 10

4.2.7 KEDA:GPU 感知自动扩缩

# KEDA ScaledObject:基于 GPU 利用率的 Pod 自动伸缩
apiVersion: keda.sh/v1alpha1
kind: ScaledObject
metadata:
  name: gpu-inference-scaler
  namespace: inference
spec:
  scaleTargetRef:
    name: llm-inference-deployment
  minReplicaCount: 2
  maxReplicaCount: 20
  triggers:
  - type: prometheus
    metricType: AverageValue
    metadata:
      serverAddress: http://prometheus-server.monitoring:9090
      query: |
        avg(avg_over_time(
          DCGM_FI_DEV_GPU_UTIL{namespace="inference"}[2m]
        )) by (pod)
      threshold: "70"      # GPU 利用率 > 70% 时扩容
      activationThreshold: "10"
  - type: prometheus
    metricType: AverageValue
    metadata:
      serverAddress: http://prometheus-server.monitoring:9090
      query: |
        avg(rate(
          istio_requests_total{destination_service_namespace="inference"}[1m]
        )) by (destination_workload)
      threshold: "100"     # QPS > 100 时扩容
  advanced:
    horizontalPodAutoscalerConfig:
      behavior:
        scaleDown:
          stabilizationWindowSeconds: 300
          policies:
          - type: Percent
            value: 50
            periodSeconds: 60

4.3 存储系统

AI 平台的数据存储有鲜明的分层特征。不同数据类型有不同的访问模式、吞吐要求和持久性需求。L1 采用三层存储架构,每种存储对应不同的访问场景:

L1 三层存储架构 L1 Cache · GPU 节点本地 NVMe SSD 缓存层Stargz Snapshotter 懒加载 · 模型权重热缓存 · 训练数据缓存 · 显存交换 (GPU Direct Storage) 文件存储 · JuiceFS + MinIO/Ceph RGW训练数据集 · 代码仓库 · 日志文件 · Notebook 工作区POSIX 兼容 · 容量 PB 级 · 元数据独立 (Redis/MySQL)吞吐: 读 10GB/s · 写 5GB/s (聚合) 块存储 · Ceph RBD数据库持久卷 · etcd 存储 · ES 数据节点高性能 · 低延迟 · 快照支持 · 三副本IOPS: 100k+ · 延迟: <1ms 对象存储 · MinIO / Ceph RGW模型权重文件 (每个 5-200GB) · 训练 Checkpoint · 日志归档 · 容器镜像 Blob · 数据备份 元数据管理 · etcd / Redis / MySQLK8s 集群状态 (etcd) · JuiceFS 元数据 (Redis) · 用户配额 & 计费数据 (MySQL) · 监控数据 (VictoriaMetrics)

4.3.1 对象存储:模型权重与数据湖

MinIO(高性能场景)和 Ceph RGW(超大规模场景)提供 S3-compatible 对象存储:

# MinIO Tenant 配置
apiVersion: minio.min.io/v2
kind: Tenant
metadata:
  name: ai-platform-minio
  namespace: storage
spec:
  image: quay.io/minio/minio:RELEASE.2024-06-11T01-11-02Z
  pools:
  - servers: 4
    volumesPerServer: 8
    volumeClaimTemplate:
      metadata:
        name: data
      spec:
        accessModes:
        - ReadWriteOnce
        resources:
          requests:
            storage: 8Ti
        storageClassName: ceph-rbd-ssd
  mountPath: /export
  credsSecret:
    name: minio-creds-secret
  serviceMetadata:
    consoleService:
      type: ClusterIP
    minioService:
      type: ClusterIP
  console:
    image: quay.io/minio/console:v0.44.0
  bucketDedup: true
  buckets:
  - name: model-weights
    region: us-east-1
    quota: 100Ti
  - name: training-data
    region: us-east-1
    quota: 500Ti
  - name: checkpoints
    region: us-east-1
    quota: 200Ti
  - name: containers
    region: us-east-1
    quota: 50Ti

4.3.2 文件存储:训练数据共享

JuiceFS 将对象存储挂载为 POSIX 文件系统,为训练任务提供高吞吐的数据读取能力:

# JuiceFS CSI 驱动存储类
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: juicefs-cache
provisioner: csi.juicefs.com
parameters:
  csi.storage.k8s.io/node-publish-secret-name: juicefs-secret
  csi.storage.k8s.io/node-publish-secret-namespace: storage
  juicefs/minio-server: "http://minio.storage:9000"
  juicefs/bucket: "training-data"
  juicefs/cache-size: "51200"    # 50GB 本地缓存
  juicefs/cache-dir: "/mnt/nvme/juicefs-cache"
  juicefs/cache-evict-threads: "8"
  juicefs/atime-mode: "noatime"  # 禁用 atime 提升性能
  juicefs/meta-cache-ttl: "3600"
reclaimPolicy: Retain
---
# PVC 声明示例
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: training-data-pvc
spec:
  accessModes:
  - ReadWriteMany
  resources:
    requests:
      storage: 10Ti
  storageClassName: juicefs-cache

4.3.3 块存储:数据库持久化

Ceph RBD 提供高性能块存储,用于 etcd、MySQL、ES 等有状态服务的持久化:

# Ceph RBD 存储类(SSD 池)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ceph-rbd-ssd
provisioner: rbd.csi.ceph.com
parameters:
  clusterID: "ceph-ai-platform"
  pool: "ssd-pool"
  imageFeatures: "layering"
  csi.storage.k8s.io/fstype: "ext4"
  csi.storage.k8s.io/controller-expand-secret-name: csi-ceph-secret
  csi.storage.k8s.io/node-stage-secret-name: csi-ceph-secret
  mounter: "rbd-nbd"            # 使用 NBD 以支持扩容
allowVolumeExpansion: true
reclaimPolicy: Delete
---
# Ceph RBD 存储类(HDD 池)
apiVersion: storage.k8s.io/v1
kind: StorageClass
metadata:
  name: ceph-rbd-hdd
provisioner: rbd.csi.ceph.com
parameters:
  clusterID: "ceph-ai-platform"
  pool: "hdd-pool"
  imageFeatures: "layering"
  csi.storage.k8s.io/fstype: "xfs"
  mounter: "rbd"
allowVolumeExpansion: true
reclaimPolicy: Delete

4.3.4 本地缓存:Stargz Snapshotter 懒加载

GPU 节点配备 NVMe SSD(3.5TB ~ 7TB)作为本地缓存层,通过 Stargz Snapshotter 实现容器镜像的懒加载,大幅加速模型服务 Pod 启动:

# Containerd 配置 Stargz Snapshotter
version = 2
[plugins]
  [plugins."io.containerd.snapshotter.v1.stargz"]
    root_path = "/var/lib/containerd-stargz-grpc"
    # 远程镜像仓库配置
    [plugins."io.containerd.snapshotter.v1.stargz".config]
      noprefetch = false
      convert_image_layer_to_stargz = true
    # 本地缓存
    [plugins."io.containerd.snapshotter.v1.stargz".cache]
      max_cache_fds = 10000
      cache_on_root = true
    # 并发预取
    [plugins."io.containerd.snapshotter.v1.stargz".prefetch]
      prefetch_size = 524288000  # 500MB 预取

4.3.5 存储访问模式矩阵

数据类型存储方案访问方式容量需求IO 要求
模型权重 (5-200GB)MinIO / Ceph RGWPod 初始化时拉取 → 缓存至本地50-200 TiB读带宽 > 5GB/s
训练数据集JuiceFS + MinIOPOSIX 挂载,直接读取200-500 TiB顺序读 > 10GB/s
训练 CheckpointMinIOS3 API 上传/下载50-200 TiB写带宽 > 2GB/s
数据库卷Ceph RBD SSD块设备挂载5-20 TiB随机 IOPS > 50k
容器镜像Harbor + MinIOStargz 懒加载10-50 TiB启动 < 10s
日志 / 监控Ceph RGWS3 API50-100 TiB写带宽 > 1GB/s

4.4 网络架构

4.4.1 三平面网络设计

L1 采用三平面物理隔离的网络架构,分别承载管理、存储和计算三种不同特性的流量:

网络平面带宽协议承载流量隔离方式
管理网络 (Management) 1 Gbps TCP/IP SSH 管理、K8s API、DNS、NTP、BMC/IPMI 物理独立网卡 + VLAN
存储网络 (Storage) 25 Gbps TCP/IP + RDMA Ceph OSD 复制、MinIO 数据读写、NFS/JuiceFS 流量 物理独立网卡 + VLAN + QoS
计算网络 (Compute) 100 Gbps / 200 Gbps InfiniBand NDR / RoCEv2 GPU-GPU 通信 (NCCL/RCCL)、分布式训练 AllReduce、推理请求分发 物理独立网卡 / IB Fabric

4.4.2 计算网络:InfiniBand 与 RoCEv2

多节点分布式训练对 GPU 间通信带宽和延迟极度敏感。L1 支持两种高性能网络方案:

方案InfiniBand NDR200RoCEv2 (RDMA over Converged Ethernet)
单链路带宽200 Gbps (HDR) / 400 Gbps (NDR)100 Gbps / 200 Gbps
延迟 (节点间)< 1.2 μs< 2.0 μs
拥塞控制硬件级 (IB CC)DCQCN + ECN
时延保障确定性时延 (Lossless)有损/无损自适应
GPU Direct RDMA原生支持支持 (需配置)
成本高 (专用 Fabric)中 (标准以太网)
推荐场景大规模训练 > 64 GPUs中规模训练 + 推理混合
# RoCEv2 交换机配置示例 (Mellanox / NVIDIA Spectrum)
# QoS 配置: 为 RDMA 流量分配独立缓存池
mlnx_qos -i eth0 --pfc 0,0,0,1,0,0,0,0    # 启用 Priority Flow Control on Priority 3
mlnx_qos -i eth0 --trust dscp               # 基于 DSCP 信任
# ECN 配置: 标记阈值
echo "24" > /sys/class/net/eth0/ecn/redp/red_min_threshold
echo "24" > /sys/class/net/eth0/ecn/redp/red_max_threshold
echo "100" > /sys/class/net/eth0/ecn/redp/red_probability

# GPU Direct RDMA 验证
nvidia-smi topo -m
# GPU0  GPU1  GPU2  GPU3  CPU   Affinity
# GPU0   X    NV1   NV1   NV2   0-31
# GPU1  NV1    X    NV2   NV1   0-31
# GPU2  NV1   NV2    X    NV1   64-95
# GPU3  NV2   NV1   NV1    X    64-95

# NCCL 环境变量配置
NCCL_IB_DISABLE=0
NCCL_IB_GID_INDEX=3
NCCL_SOCKET_IFNAME=ib0
NCCL_IB_HCA=mlx5_0,mlx5_1
NCCL_IB_TIMEOUT=22
NCCL_IB_RETRY_CNT=7
NCCL_IB_SL=3
NCCL_IB_QPS_PER_CONNECTION=8
NCCL_NET_GDR_LEVEL=3
NCCL_NET_GDR_READ=1
NCCL_P2P_DISABLE=0
NCCL_DEBUG=INFO

4.4.3 网络隔离与安全策略

使用 Calico 作为 CNI 插件,支持 NetworkPolicy 对 GPU Pod 进行细粒度网络隔离:

# NetworkPolicy:GPU Pod 只允许同命名空间通信
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: gpu-pod-isolation
  namespace: training
spec:
  podSelector:
    matchExpressions:
    - key: accelerator
      operator: In
      values: ["nvidia", "huawei-ascend"]
  policyTypes:
  - Ingress
  - Egress
  ingress:
  - from:
    - namespaceSelector:
        matchLabels:
          purpose: training
    - podSelector:
        matchLabels:
          app: training-controller
  egress:
  - to:
    - namespaceSelector: {}
    ports:
    - port: 443       # HTTPS 访问 (Harbor/MinIO)
    - port: 6443      # K8s API Server
    - port: 53        # DNS
      protocol: UDP
  - to:
    - podSelector:
        matchExpressions:
        - key: accelerator
          operator: Exists
    - namespaceSelector:
        matchLabels:
          purpose: training
    # 允许 GPU 间 NCCL 通信
    ports:
    - port: 0
      protocol: TCP
    - port: 0
      protocol: UDP

---
# NetworkPolicy:禁止外部访问 GPU 节点
apiVersion: networking.k8s.io/v1
kind: NetworkPolicy
metadata:
  name: block-external-gpu-access
  namespace: kube-system
spec:
  podSelector:
    matchLabels:
      app: gpu-operator
  policyTypes:
  - Ingress
  ingress:
  - from:
    - ipBlock:
        cidr: 10.0.0.0/8       # 仅允许内网访问
    - namespaceSelector:
        matchLabels:
          kubernetes.io/metadata.name: monitoring

4.4.4 Multus:多网卡多网络平面

使用 Multus CNI 为 GPU Pod 附加多张网卡,实现管理/存储/计算三平面网络:

# Multus NetworkAttachmentDefinition
apiVersion: k8s.cni.cncf.io/v1
kind: NetworkAttachmentDefinition
metadata:
  name: ib-net
  namespace: default
spec:
  config: |
    {
      "cniVersion": "0.3.1",
      "type": "ib-sriov",
      "master": "ib0",
      "mode": "bridge",
      "deviceID": "15b3:101b",
      "linkState": "auto",
      "capabilities": {
        "ips": true
      },
      "ipam": {
        "type": "whereabouts",
        "range": "192.168.200.0/24"
      }
    }
---
# Pod 声明多网络
apiVersion: v1
kind: Pod
metadata:
  name: multi-net-training
  annotations:
    k8s.v1.cni.cncf.io/networks: |
      [
        {"name": "ib-net", "namespace": "default"},
        {"name": "storage-net", "namespace": "default"}
      ]
spec:
  containers:
  - name: trainer
    image: pytorch:2.3.0-cuda12.4
    resources:
      limits:
        nvidia.com/gpu: 8

4.5 监控与告警

4.5.1 监控技术栈

组件版本功能
Prometheus2.52+指标采集 + 告警规则评估,部署于 monitoring 命名空间
DCGM Exporter3.3+NVIDIA GPU 指标采集:利用率、显存、温度、功率、PCIe 吞吐
AMD ROCm Exporter0.15+AMD MI 系列 GPU 指标采集
ASCEND Exporter1.8+华为昇腾芯片(DCGM 等效)指标采集
Node Exporter1.8+节点资源指标:CPU、内存、磁盘、网络
Blackbox Exporter0.25+端点健康探测
Grafana11.0+可视化仪表盘,多数据源聚合
Loki3.0+日志聚合,与 Grafana 集成
Tempo / Jaeger2.5+ / 1.57分布式追踪
Alertmanager0.27+告警去重、分组、路由,支持飞书/钉钉/企业微信
Node Problem Detector0.8+节点故障检测与自动修复
VictoriaMetrics1.101+Prometheus 兼容的时序数据库(长期存储替代)

4.5.2 GPU 核心指标

DCGM Exporter 暴露以下关键 GPU 指标,覆盖利用率、显存、温度和功耗:

指标名类型含义告警阈值
DCGM_FI_DEV_GPU_UTILGauge (0-100)GPU 核心利用率持续 5min < 10% 低效告警
DCGM_FI_DEV_MEM_COPY_UTILGauge (0-100)显存带宽利用率持续 > 95% 带宽告警
DCGM_FI_DEV_FB_USEDGauge (bytes)已用显存> 90% 显存告警
DCGM_FI_DEV_GPU_TEMPGauge (C)GPU 温度> 85°C 警告, > 95°C 紧急
DCGM_FI_DEV_POWER_USAGEGauge (W)瞬时功耗> 400W (单卡)
DCGM_FI_DEV_XID_ERRORSCounterGPU XID 错误计数> 0 即告警
DCGM_FI_DEV_ECC_SBE_VOL_TOTALCounterECC 可纠正错误增量 > 100/天
DCGM_FI_DEV_ECC_DBE_VOL_TOTALCounterECC 不可纠正错误> 0 即告警
DCGM_FI_DEV_PCIE_TX_THROUGHPUTGauge (bytes/s)PCIe 发送吞吐同比异常下降
DCGM_FI_DEV_NVLINK_BANDWIDTH_TOTALGauge (bytes/s)NVLink 总带宽同比异常下降

4.5.3 Prometheus 告警规则

# PrometheusRule: GPU 故障告警
apiVersion: monitoring.coreos.com/v1
kind: PrometheusRule
metadata:
  name: gpu-alerts
  namespace: monitoring
  labels:
    prometheus: k8s
    role: alert-rules
spec:
  groups:
  - name: gpu-failure
    interval: 30s
    rules:
    - alert: GPUXidError
      expr: increase(DCGM_FI_DEV_XID_ERRORS[5m]) > 0
      for: 1m
      labels:
        severity: critical
        team: infra
      annotations:
        summary: "GPU XID Error on {{ $labels.Instance }}"
        description: "GPU {{ $labels.gpu }} on node {{ $labels.kubernetes_io_hostname }} encountered XID error. GPU index: {{ $labels.gpu }}. Error count: {{ $value }}"
        runbook_url: "https://runbook.internal/gpu-xid-error"
        action: "检查 GPU 日志: nvidia-smi -q -d HEALTH; dmesg | grep -i nvidia"

    - alert: GPUHighTemperature
      expr: DCGM_FI_DEV_GPU_TEMP > 85
      for: 5m
      labels:
        severity: warning
        team: infra
      annotations:
        summary: "GPU High Temperature on {{ $labels.Instance }}"
        description: "GPU {{ $labels.gpu }} temperature is {{ $value }}°C (threshold: 85°C)"

    - alert: GPUHighTemperatureCritical
      expr: DCGM_FI_DEV_GPU_TEMP > 95
      for: 1m
      labels:
        severity: critical
        team: infra
      annotations:
        summary: "GPU Critical Temperature on {{ $labels.Instance }}"
        description: "GPU {{ $labels.gpu }} temperature is {{ $value }}°C (threshold: 95°C). Immediate action needed!"

    - alert: GPUECCUncorrectableError
      expr: increase(DCGM_FI_DEV_ECC_DBE_VOL_TOTAL[15m]) > 0
      for: 1m
      labels:
        severity: critical
        team: infra
      annotations:
        summary: "GPU ECC Uncorrectable Error on {{ $labels.Instance }}"
        description: "GPU {{ $labels.gpu }} has uncorrectable ECC errors. This indicates potential hardware failure."

    - alert: GPUMemoryUsageHigh
      expr: (DCGM_FI_DEV_FB_USED / DCGM_FI_DEV_FB_TOTAL) * 100 > 90
      for: 10m
      labels:
        severity: warning
        team: mlops
      annotations:
        summary: "GPU Memory Usage High on {{ $labels.Instance }}"
        description: "GPU {{ $labels.gpu }} memory usage at {{ $value }}%. OOM risk."
        action: "检查 pod GPU 内存消耗: nvidia-smi pmon -c 1"

    - alert: GPUPowerLimitReached
      expr: DCGM_FI_DEV_POWER_USAGE > DCGM_FI_DEV_MAX_POWER_USAGE * 0.95
      for: 5m
      labels:
        severity: warning
        team: infra
      annotations:
        summary: "GPU Power Limit Near Threshold"
        description: "GPU {{ $labels.gpu }} power usage {{ $value }}W approaching max power limit."

    - alert: GPUNodeUnavailable
      expr: up{job="gpu-node"} == 0
      for: 2m
      labels:
        severity: critical
        team: infra
      annotations:
        summary: "GPU Node Unreachable"
        description: "GPU node {{ $labels.instance }} is down/unreachable for > 2 minutes."

    - alert: GPULowUtilizationWarning
      expr: avg by(kubernetes_io_hostname) (DCGM_FI_DEV_GPU_UTIL) < 10
      for: 30m
      labels:
        severity: warning
        team: mlops
      annotations:
        summary: "GPU Cluster Underutilized"
        description: "Average GPU utilization across cluster is {{ $value }}%. Consider releasing unused resources."

    - alert: GPUNodeDraining
      expr: kube_node_status_condition{condition="NodeProblemDetected",status="true"} == 1
      for: 1m
      labels:
        severity: warning
        team: infra
      annotations:
        summary: "GPU Node Auto-Draining"
        description: "Node {{ $labels.node }} is being drained due to detected problems."

4.5.4 Grafana 仪表盘

预配置的 Grafana 仪表盘包含以下关键面板:

仪表盘核心面板数据源
GPU 集群总览 GPU 总数按型号分布 (饼图) · 集群平均利用率 (时序) · 故障 GPU 数 (统计) · 排队任务数 (统计) · 可用/已用显存 (Gauge) Prometheus + VictoriaMetrics
单节点详情 8 张 GPU 利用率 (热力图) · GPU 温度 (时序) · GPU 功耗 (时序) · NVLink 带宽 (时序) · PCIe 吞吐 (时序) · CPU/内存/网络叠加 Prometheus
训练任务监控 任务 GPU 利用率 · 显存分配曲线 · NCCL 通信带宽 · 任务吞吐 (samples/s) · GPU 时间线 (Gantt 图) · 任务排队时间 Prometheus + Loki
集群成本 GPU 卡时使用量 (按团队/项目分组) · 利用率成本分摊 · Spot 实例使用占比 · 浪费资源预估 Prometheus + MySQL
告警事件流 活跃告警 · 告警历史 · 告警响应时间 · 告警按严重性分布 Alertmanager + Loki

4.5.5 Alertmanager 通知配置

# Alertmanager 配置:飞书通知
apiVersion: v1
kind: ConfigMap
metadata:
  name: alertmanager-config
  namespace: monitoring
data:
  alertmanager.yml: |
    global:
      resolve_timeout: 5m
      slack_api_url: ''
    route:
      receiver: 'feishu-critical'
      group_wait: 10s
      group_interval: 5m
      repeat_interval: 4h
      routes:
      - match:
          severity: critical
        receiver: feishu-critical
        repeat_interval: 1h
      - match:
          severity: warning
        receiver: feishu-warning
        repeat_interval: 4h
      - match:
          severity: info
        receiver: feishu-info
        repeat_interval: 24h
    receivers:
    - name: feishu-critical
      webhook_configs:
      - url: 'https://open.feishu.cn/open-apis/bot/v2/hook/xxxxxxxxx'
        send_resolved: true
        http_config:
          headers:
            Content-Type: application/json
    - name: feishu-warning
      webhook_configs:
      - url: 'https://open.feishu.cn/open-apis/bot/v2/hook/yyyyyyyyy'
        send_resolved: true
    - name: feishu-info
      webhook_configs:
      - url: 'https://open.feishu.cn/open-apis/bot/v2/hook/zzzzzzzzz'
        send_resolved: false
    inhibit_rules:
    - source_match:
        severity: critical
      target_match:
        severity: warning
      equal: ['alertname', 'cluster', 'service']

5. 数据流与 API 规范

5.1 L2 如何调用 L1

L2 模型部署层通过 K8s API 与 L1 交互。L2 运维人员的典型操作模式如下:

1 创建 GPU Pod
2 创建 PVC 挂载
3 查询节点状态
4 监控资源用量
5 纵向/横向扩缩

5.1.1 L2 请求 GPU Pod

# L2 创建 GPU Pod (调用 L1 K8s API)
POST /api/v1/namespaces/inference/pods
Content-Type: application/json

{
  "apiVersion": "v1",
  "kind": "Pod",
  "metadata": {
    "name": "vllm-llama3-70b-8gpu",
    "namespace": "inference",
    "annotations": {
      "sidecar.istio.io/inject": "true",
      "prometheus.io/scrape": "true",
      "prometheus.io/port": "8000"
    }
  },
  "spec": {
    "schedulerName": "volcano",
    "containers": [{
      "name": "vllm",
      "image": "registry.internal/vllm:v0.5.0-cuda12.4",
      "command": ["python3", "-m", "vllm.entrypoints.openai.api_server",
        "--model", "/models/llama3-70b",
        "--tensor-parallel-size", "8",
        "--gpu-memory-utilization", "0.95",
        "--max-model-len", "8192",
        "--dtype", "bfloat16",
        "--port", "8000"],
      "ports": [{"containerPort": 8000, "name": "http"}],
      "env": [
        {"name": "NCCL_IB_DISABLE", "value": "0"},
        {"name": "NCCL_NET_GDR_LEVEL", "value": "3"}
      ],
      "resources": {
        "requests": {"nvidia.com/gpu": "8", "cpu": "64", "memory": "512Gi"},
        "limits":  {"nvidia.com/gpu": "8", "cpu": "64", "memory": "512Gi"}
      },
      "volumeMounts": [{
        "name": "model-weights",
        "mountPath": "/models"
      }]
    }],
    "volumes": [{
      "name": "model-weights",
      "persistentVolumeClaim": {"claimName": "llama3-70b-weights"}
    }],
    "affinity": {
      "nodeAffinity": {
        "requiredDuringScheduling": {
          "nodeSelectorTerms": [{
            "matchExpressions": [
              {"key": "accelerator-model", "operator": "In", "values": ["A100-SXM-80GB"]},
              {"key": "accelerator-count", "operator": "Gt", "values": ["7"]}
            ]
          }]
        }
      },
      "podAntiAffinity": {
        "preferredDuringScheduling": [{
          "podAffinityTerm": {
            "labelSelector": {"matchLabels": {"app": "vllm"}},
            "topologyKey": "kubernetes.io/hostname"
          },
          "weight": 100
        }]
      }
    }
  }
}

# 响应 (K8s API)
HTTP/1.1 201 Created
{
  "apiVersion": "v1",
  "kind": "Pod",
  "metadata": {
    "name": "vllm-llama3-70b-8gpu",
    "namespace": "inference",
    "uid": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
    "creationTimestamp": "2026-06-02T10:30:00Z"
  },
  "status": {
    "phase": "Pending",
    "conditions": [
      {"type": "PodScheduled", "status": "False", "reason": "SchedulingGpu"},
      {"type": "Initialized", "status": "False"}
    ]
  }
}

5.1.2 查询 GPU 节点状态

# L2 查询节点 GPU 状态
GET /api/v1/nodes/gpu-node-01/proxy/metrics?gpu=0,1

# 查询节点拓扑
GET /api/v1/nodes/gpu-node-01

# 响应 (K8s Node)
HTTP/1.1 200 OK
{
  "apiVersion": "v1",
  "kind": "Node",
  "metadata": {
    "name": "gpu-node-01",
    "labels": {
      "accelerator": "nvidia",
      "accelerator-model": "A100-SXM-80GB",
      "accelerator-count": "8",
      "accelerator-topology": "nvlink-fullmesh",
      "accelerator-mig-enabled": "true",
      "node-type": "gpu-compute",
      "network.bandwidth": "100Gbps"
    }
  },
  "status": {
    "capacity": {
      "nvidia.com/gpu": "8",
      "cpu": "128",
      "memory": "2048Gi",
      "ephemeral-storage": "3.5Ti"
    },
    "allocatable": {
      "nvidia.com/gpu": "8",
      "cpu": "124",
      "memory": "1980Gi",
      "ephemeral-storage": "3.4Ti"
    },
    "conditions": [
      {"type": "Ready", "status": "True", "lastHeartbeatTime": "2026-06-02T10:29:00Z"},
      {"type": "NetworkUnavailable", "status": "False"},
      {"type": "GPUHealthy", "status": "True"}
    ],
    "images": [
      {"names": ["vllm:v0.5.0-cuda12.4"], "sizeBytes": 8589934592}
    ]
  }
}

5.2 关键 CRD 定义

# GPUQuota CRD:GPU 配额管理
apiVersion: apiextensions.k8s.io/v1
kind: CustomResourceDefinition
metadata:
  name: gpuquotas.ai.internal
spec:
  group: ai.internal
  scope: Namespaced
  names:
    plural: gpuquotas
    singular: gpuquota
    kind: GPUQuota
  versions:
  - name: v1
    served: true
    storage: true
    schema:
      openAPIV3Schema:
        type: object
        properties:
          spec:
            type: object
            properties:
              team:
                type: string
              totalGPUs:
                type: integer
                minimum: 0
              priority:
                type: integer
                enum: [1, 2, 3, 4, 5]
              preemptible:
                type: boolean
              validUntil:
                type: string
                format: date-time
              allowedModels:
                type: array
                items:
                  type: string
              excludedNodes:
                type: array
                items:
                  type: string
            required: [team, totalGPUs]
---
# GPUQuota 实例:AI 平台团队配额
apiVersion: ai.internal/v1
kind: GPUQuota
metadata:
  name: ai-platform-quota
  namespace: default
spec:
  team: ai-platform
  totalGPUs: 256
  priority: 3
  preemptible: false
  allowedModels:
  - "A100-SXM-80GB"
  - "H100-SXM-80GB"

5.3 关键 API 端点汇总

路径方法说明所属组件
/api/v1/namespaces/{ns}/podsPOST创建 Pod(含 GPU 资源声明)K8s API
/api/v1/nodes/{node}GET查询节点资源与状态K8s API
/apis/scheduling.volcano.sh/v1beta1/queuesPOST/GET管理 Volcano 资源队列Volcano
/apis/scheduling.volcano.sh/v1beta1/podgroupsPOST创建 PodGroup(Gang Scheduling)Volcano
/apis/storage.k8s.io/v1/storageclassesGET查询存储类定义K8s API
/api/v1/namespaces/{ns}/persistentvolumeclaimsPOST创建 PVC 声明K8s API
/apis/networking.k8s.io/v1/networkpoliciesPOST创建网络隔离策略K8s API
/metricsGETPrometheus 指标端点DCGM Exporter
/api/v1/queryGETPrometheus 即时查询Prometheus
/api/v1/alertmanager/alertsPOST接收告警事件Alertmanager

6. SLA / SLO 目标

L1 作为平台的最底层,其 SLO 目标直接影响上层所有服务的可用性和性能。以下指标是 L1 团队承诺的关键 SLO:

类别SLISLO 目标测量方式窗口期
可用性 GPU 集群整体可用性 ≥ 99.9% Prometheus Node Exporter Up 指标 月度
K8s API Server 可用性 ≥ 99.95% API Server 请求成功率 月度
存储系统可用性 ≥ 99.99% Ceph/MinIO 健康检查 月度
性能 GPU Pod 调度延迟 (P50) < 30s Pod Scheduled 时间戳差值 周度
GPU Pod 调度延迟 (P99) < 120s Pod Scheduled 时间戳差值 周度
存储读带宽 (单节点) ≥ 5 GB/s FIO / JuiceFS bench 月度
存储写带宽 (单节点) ≥ 2 GB/s FIO / JuiceFS bench 月度
故障恢复 GPU 故障检测时间 < 1 min DCGM XID 事件 → Prometheus 告警 月度
GPU 故障隔离时间 < 5 min Node cordon → drain 完成 月度
节点替换时间 < 30 min 新节点注册到集群就绪 季度
PV 自动供应时间 < 10 s PVC 创建 → PV Bound 周度
容量 GPU 利用率目标 ≥ 70% DCGM GPU Util 平均值 周度
集群碎片率 < 15% 不可分配 GPU / 总 GPU 周度
SLA 承诺:L1 对 L2 的 SLA 保证通过 K8s API 可用性GPU 调度成功率两个指标反映。当 L1 无法满足 SLO 时,L2 应启动降级逻辑(如将故障 GPU 从调度器中摘除、切换到备用集群)。

7. 技术选型

以下表格列出了 L1 层所有技术组件的选型结果、版本和选型理由:

领域选型版本备选选型理由
容器编排 Kubernetes 1.28+ Nomad · Slurm 生态最丰富,GPU 调度全链路支持,社区活跃度最高。业界 AI 平台事实标准。
批量调度 Volcano 1.9+ YuniKorn · Koordinator 原生支持 Gang Scheduling、Queue 管理、GPU 拓扑调度。CNCF Incubating。与 K8s 深度集成。
GPU 共享 HAMi 2.3+ Run:ai · MIG · time-slicing 开源、无锁设计、支持显存与算力双维度限制、支持 MIG 与 vGPU 混合调度。
GPU 驱动管理 NVIDIA GPU Operator 24.3+ 手动部署 自动化 GPU 节点初始化流程,降低运维复杂度。MIG 配置、DCGM 部署一键完成。
多集群管理 Karmada (可选) 1.10+ Clusternet · OCM · KubeFed K8s 原生 API、无需 Agent、支持多集群调度策略、社区活跃。仅跨 DC 场景使用。
服务网格 Istio 1.21+ Linkerd · Consul Connect 功能最丰富,Ingress + 东-西流量统一管理,Envoy 代理生态。适用于推理流量的灰度发布。
GPU 自动伸缩 KEDA 2.14+ HPA · VPA 支持 Prometheus 触发器,可根据 GPU 利用率/QPS 做弹性伸缩。HPA 不直接支持外部指标。
对象存储 MinIO + Ceph RGW 2024-06+ / Reef 18.2 SeaweedFS · Swift MinIO 用于高性能模型存取,Ceph RGW 用于统一存储池。S3 API 兼容,成熟度高。
文件存储 JuiceFS 1.1+ Lustre · GPFS · NFS POSIX 兼容,基于对象存储实现。元数据独立,性能优于传统 NFS。支持本地缓存加速。
块存储 Ceph RBD Reef 18.2 Longhorn · OpenEBS 生产级可靠,三副本数据安全,支持快照/克隆,CSI 驱动成熟。
本地缓存 Stargz Snapshotter 0.15+ Nydus · OverlayBD 与 Containerd 原生集成,懒加载加速大模型镜像启动,减少镜像分发时间 90%。
网络 (计算) InfiniBand NDR / RoCEv2 NDR200 / 100GbE Slingshot (HPE Cray) IB 确定性低延迟适合大规模训练;RoCEv2 成本适中适合混合负载。两者均支持 GPU Direct RDMA。
CNI 插件 Calico + Multus 3.28+ / 4.0+ Cilium · Flannel Calico 支持 NetworkPolicy + eBPF;Multus 支持多网卡绑定,实现三平面网络。
监控 Prometheus + VictoriaMetrics 2.52+ / 1.101+ Thanos · Mimir Prometheus 标准套件;VictoriaMetrics 负责长期存储,兼容 PromQL,单机即可支撑百万指标。
GPU 监控 DCGM Exporter 3.3+ nvidia-smi · NVML 自采 开箱即用 Prometheus 格式,覆盖所有关键 GPU 指标,支持 XID/ECC 等硬件故障信号。
日志 Loki 3.0+ ELK · ClickHouse 与 Grafana 原生集成,无需独立日志存储,标签索引降低运维复杂度。
追踪 Tempo 2.5+ Jaeger · SigNoz Grafana 生态统一,支持低成本对象存储后端,适合推理链路追踪。
告警 Alertmanager 0.27+ Grafana OnCall · PagerDuty Prometheus 原生生态,支持飞书/钉钉/企微 webhook,路由规则灵活。
故障检测 Node Problem Detector 0.8+ 自研巡检脚本 K8s 原生问题检测,支持自定义检测器与自动 Node Drain,与 GPU 故障处理流水线集成。

8. 关联关系图

下图展示了 L1 与 L2(上层)、物理硬件(下层)以及 L1 内部子模块之间的关系:

L1 关联关系图:上层调用 · 内部模块 · 下层硬件 L2 · 模型部署层 (上层) 调用方式: K8s API · vLLM/TensorRT-LLM 推理引擎 · Pod GPU 资源请求 · PVC 存储挂载 · Istio 灰度路由 推理引擎通过 L1 的 K8s API 创建 GPU Pod,挂载模型权重 PVC,暴露推理 Service 端点 L2 通过 K8s API 调用 L1 L1 · 基础设施与算力管理层 — 内部模块关系 GPU/NPU 算力管理 异构芯片: A100 · H100 · MI300X · 910B · MLU370 虚拟化: MIG / vGPU / HAMi 共享调度 拓扑感知: NVLink 域 / PCIe 交换机亲和性 故障隔离: DCGM + Node Problem Detector 配额管理: Volcano Queue GPU 配额 → 暴露 nvidia.com/gpu 资源给 K8s API 容器编排平台 Kubernetes 1.28+ · Containerd · CoreDNS Volcano Gang Scheduling · Queue 管理 HAMi GPU 共享调度 · KEDA 自动伸缩 Istio 服务网格 · Karmada 多集群 NVIDIA GPU Operator · Multus CNI → 暴露 K8s API & CRDs 给 L2 Volcano API / Device Plugin 存储系统 MinIO 对象存储 (模型权重) JuiceFS 文件存储 (训练数据) Ceph RBD 块存储 (数据库) NVMe SSD 本地缓存 (Stargz) → CSI 驱动 / S3 API 对外暴露 网络架构 管理 1G · 存储 25G · 计算 100G+ InfiniBand / RoCEv2 RDMA GPU Direct RDMA (GDR) Calico Multus · VLAN/VXLAN → CNI & NetworkPolicy 暴露 监控告警 Prometheus + DCGM Grafana 仪表盘 Loki 日志 · Tempo 追踪 Alertmanager 通知 → Metrics / Alert webhooks CSI 存储挂载 CNI 网络分配 Exporter 指标采集 L1 管理 ↓ (驱动 / NVIDIA GPU Operator / IPMI / Redfish) 🖥️ 物理硬件层 (L1 管理的软件抽象来源) GPU/NPU 节点 NVIDIA · AMD · 华为 · 寒武纪 存储节点 Ceph OSD · NVMe SSD · HDD 网络设备 IB Fabric · ToR · Spine · Leaf 管控节点 K8s CP · etcd · 监控 · 日志 L1 内部模块 存储挂载 网络分配 监控采集

8.1 模块依赖关系速览

源模块目标模块交互方式说明
算力管理编排平台Device Plugin APIGPU 设备注册到 K8s, 调度时分配
编排平台存储系统CSI DriverPod 声明 PVC → 自动创建 PV 并挂载
编排平台网络架构CNI PluginPod 创建时分配 IP 和多网络平面
算力管理监控告警DCGM ExporterGPU 健康指标暴露给 Prometheus
存储系统监控告警Ceph Exporter存储集群状态暴露给 Prometheus
网络架构监控告警Node Exporter网络接口指标暴露
编排平台L2 上层K8s APIL2 通过 K8s API 管理推理 Pod 生命周期
监控告警L2 上层Prometheus APIL2 可查询 GPU 利用率等指标做扩缩容决策