预加载模型
TensorFusion 在缩短模型冷启动上做了什么、没做什么,以及怎么用 Kubernetes 标准卷缓存模型权重
预加载模型是指在 Pod 需要之前就把模型权重准备好,让新副本更快开始服务。TensorFusion 目前没有模型预加载功能:没有任何 CRD 字段、注解或组件负责下载、缓存或预热模型。本页说明冷启动的各个阶段里 TensorFusion 管哪些,并给出可以与它搭配使用的 Kubernetes 做法。
冷启动里 TensorFusion 管哪些
| 冷启动阶段 | TensorFusion 是否处理 |
|---|---|
| 等待 GPU 节点 | 部分处理。资源池的 capacityConfig.warmResources 用来预留一部分空闲的 TFLOPS 和显存:节点合并不会回收会让空闲量低于这个值的节点;在 Provisioned 和 Karpenter 模式的资源池里,空闲量低于它时 TensorFusion 还会主动加节点 |
| 拉取容器镜像 | 不处理 |
| 下载模型权重 | 不处理 |
| 把权重加载进显存 | 不处理 |
SchedulingConfigTemplate 里有一个 hypervisor.autoFreezeAndResume.intelligenceWarmup 配置块,chart 的默认模板也填了值。但 controller 和 hypervisor 都不读取它,这段配置没有任何效果。
把模型权重缓存到卷上
在有内置功能之前,把权重放在生命周期比 Pod 长的卷上即可。TensorFusion 的 webhook 只往 Pod 里添加自己的卷和 init 容器,不改动你定义的卷,所以用不用 vGPU 做法都一样。
-
为缓存创建一个
PersistentVolumeClaim。多个副本共用时,选择支持ReadWriteMany的存储类。apiVersion: v1 kind: PersistentVolumeClaim metadata: name: model-cache spec: accessModes: [ReadWriteMany] resources: requests: storage: 100Gi -
在工作负载里挂载它,并把框架的缓存目录指过去。下面以 Hugging Face 的缓存变量
HF_HOME为例:apiVersion: apps/v1 kind: Deployment metadata: name: llm-server spec: replicas: 1 selector: matchLabels: app: llm-server template: metadata: labels: app: llm-server tensor-fusion.ai/enabled: "true" annotations: tensor-fusion.ai/tflops-request: "10" tensor-fusion.ai/tflops-limit: "20" tensor-fusion.ai/vram-request: "8Gi" tensor-fusion.ai/vram-limit: "8Gi" spec: containers: - name: server image: <your-inference-image> env: - name: HF_HOME value: /models volumeMounts: - name: model-cache mountPath: /models volumes: - name: model-cache persistentVolumeClaim: claimName: model-cache -
先把工作负载启动一次,第一个 Pod 会把权重下载到卷里。然后删掉它,观察新 Pod 的启动过程:
kubectl delete pod -l app=llm-server kubectl logs -f deploy/llm-server第二次启动不再下载,直接进入加载模型的阶段。
预留 GPU 容量
如果新副本慢是慢在等 GPU 节点,而不是等权重,就调大资源池的预留容量。在 TensorFusionCluster 的 spec.gpuPools[].specTemplate 下设置:
capacityConfig:
warmResources:
tflops: "100"
vram: 40Gi用 Helm chart 安装时,对应的 value 是 cluster.pool.capacityConfig.warmResources。
TensorFusion 文档