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"迁移建议:
- 先选择一个非核心 namespace 或少量 Deployment。
- 为工作负载补齐
tensor-fusion.ai/tflops-*、tensor-fusion.ai/vram-*注解。 - 观察调度成功率、显存使用和业务延迟。
- 再逐步扩大
namespaceNames或podSelector范围。
节点碎片整理
节点碎片整理不是进程级热迁移。它会在维护窗口中选择低利用率节点,驱逐其上的 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 评估企业版方案和运行时前提。