TensorFusion Docs

GPU热迁移

GPU上下文快照保存和热迁移

本页说明 TensorFusion 中和“迁移”相关的能力边界,以及当前生产环境可用的替代方案。

当前状态

请先区分三类能力:

能力当前状态适用场景
渐进式迁移已支持将原本使用 nvidia.com/gpu 的 Pod 渐进接入 TensorFusion
节点碎片整理已支持通过驱逐和重建低利用率节点上的 TensorFusion Worker,合并资源碎片
GPU 上下文快照 / 恢复尚未作为自助功能开放进程级 GPU 状态保存和恢复,需要特定运行时能力

当前版本中,Hypervisor Worker 的 snapshot / resume HTTP 接口会返回 501 Not Implemented。不要在生产流程中依赖 /api/v1/workers/:id/snapshot/api/v1/workers/:id/resume 完成无感热迁移。

渐进式迁移到 TensorFusion

当集群已有原生 NVIDIA Device Plugin 工作负载时,可以通过自动迁移规则把命中的 GPU Pod 注入 TensorFusion,而不是一次性修改所有业务清单。

示例配置:

dynamicConfig:
  autoMigration:
    enable: true
    scope:
      includes:
        namespaceNames:
          - default
        podSelector:
          matchLabels:
            tensor-fusion.ai/migrate: "true"
      excludes:
        namespaceNames:
          - kube-system

启用后,命中规则的 GPU Pod 会被 webhook 标记为 TensorFusion 工作负载。需要排除的 Pod 可以显式设置:

metadata:
  labels:
    tensor-fusion.ai/enabled: "false"

迁移建议:

  1. 先选择一个非核心 namespace 或少量 Deployment。
  2. 为工作负载补齐 tensor-fusion.ai/tflops-*tensor-fusion.ai/vram-* 注解。
  3. 观察调度成功率、显存使用和业务延迟。
  4. 再逐步扩大 namespaceNamespodSelector 范围。

节点碎片整理

节点碎片整理不是进程级热迁移。它会在维护窗口中选择低利用率节点,驱逐其上的 TensorFusion Worker,让业务 Pod 按 Kubernetes 控制器重新创建并调度到更合适的节点。

碎片整理会触发 Pod 重建,不会保存进程内存或 CUDA 上下文。长任务需要应用层检查点或外部状态存储。

示例:

apiVersion: tensor-fusion.ai/v1
kind: TensorFusionCluster
metadata:
  name: tensor-fusion
spec:
  gpuPools:
    - name: shared
      specTemplate:
        nodeManagerConfig:
          nodeCompaction:
            period: 5m
            defrag:
              enabled: true
              schedule: "0 3 * * *"
              timezone: Asia/Shanghai
              maxDuration: 2h
              utilizationThresholdPercent: 40
              sourceNodeMarkerTTL: 30m
              evictedPodMarkerTTL: never

使用前请确认:

  • 业务由 Deployment、StatefulSet、Job 或其他控制器管理,Pod 被驱逐后可以重建。
  • 关键服务有副本、readinessProbe 和 PDB。
  • 低峰时段再开启 defrag.enabled
  • 业务容器能从外部存储、对象存储或检查点恢复应用状态。

业务滚动迁移

对于在线服务,推荐使用 Kubernetes 原生滚动更新控制迁移风险:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: inference
spec:
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 0
      maxSurge: 1
  template:
    metadata:
      labels:
        tensor-fusion.ai/enabled: "true"
      annotations:
        tensor-fusion.ai/inject-container: python
        tensor-fusion.ai/tflops-request: "20"
        tensor-fusion.ai/tflops-limit: "20"
        tensor-fusion.ai/vram-request: 16Gi
        tensor-fusion.ai/vram-limit: 16Gi

执行滚动更新:

kubectl rollout restart deployment/inference
kubectl rollout status deployment/inference

节点维护迁移

如果要下线 GPU 节点,先禁止新 Pod 调度,再按业务窗口驱逐:

kubectl cordon <gpu-node-name>
kubectl drain <gpu-node-name> --ignore-daemonsets --delete-emptydir-data

排空完成后确认 TensorFusion 资源状态:

kubectl get gpunode,gpu -o wide
kubectl get gpupool

何时联系支持

如果您需要进程级 GPU 上下文快照、跨节点无感恢复、长生命周期训练任务迁移,或需要和特定 CUDA / RDMA / 存储栈适配,请联系 support@tensor-fusion.com 评估企业版方案和运行时前提。

目录