把 10.8GB vLLM 镜像的 Pod Ready 从 4m35s 降到 14s: Hermes + SOCI lazy loading 实测

最近在看 Kubernetes 上 AI 推理服务的冷启动问题,发现很多时候慢的不只是模型加载,容器镜像本身也很夸张。 比如 vLLM 这类镜像,里面有 PyTorch 、CUDA 、Python 依赖、系统库,动不动就是 10GB+。传统 containerd / overlayfs 路径下,节点...
把 10.8GB vLLM 镜像的 Pod Ready 从 4m35s 降到 14s: Hermes + SOCI lazy loading 实测
把 10.8GB vLLM 镜像的 Pod Ready 从 4m35s 降到 14s: Hermes + SOCI lazy loading 实测

最近在看 Kubernetes 上 AI 推理服务的冷启动问题,发现很多时候慢的不只是模型加载,容器镜像本身也很夸张。

比如 vLLM 这类镜像,里面有 PyTorch 、CUDA 、Python 依赖、系统库,动不动就是 10GB+。传统 containerd / overlayfs 路径下,节点要先完整下载并解压镜像,Pod 才能真正起来。对 Karpenter 这种弹性扩容场景来说,这部分时间会很明显。

我们做了一个小项目 Hermes:

https://github.com/cloudpilot-ai/hermes

想法是:不让业务团队改 Dockerfile 、不重建镜像、不改 CI/CD ,也不改原来的 image reference 。平台侧定义一个 HermesPolicy ,controller 在集群内自动为匹配到的镜像构建并缓存 SOCI index ,节点上的 daemon 再用这些 index 做 lazy loading 。

这次用 EKS + Karpenter 跑了一个简单对比,镜像是:

763104351884.dkr.ecr.us-east-1.amazonaws.com/vllm:0.9-gpu-py312-ec2

大概 10.8GB

普通节点上,从 Pod 调度到节点后,到容器 Running/Ready:

5m04s - 29s = 4m35s

开启 Hermes 的节点上,在 HermesPolicy 已经 Ready 、SOCI artifact 已经构建好的前提下:

44s - 30s = 14s

也就是这个场景里,镜像拉取/挂载到容器启动这段,从 4m35s 降到了 14s 。

需要强调一下:这个结果不包含首次 index 构建耗时,也不等于 vLLM first token latency 。Pod Ready 变快,只说明容器镜像这条路径被 lazy loading 优化了。后面还需要继续测 vLLM readiness 、first request TTFT 、warmup 后真实请求延迟。

Hermes 现在的定位更像一个集群侧能力:应用继续发原来的 OCI image ,平台通过策略决定哪些镜像需要被 lazy load 。类似:

apiVersion: hermes.cloudpilot.ai/v1alpha1
kind: HermesPolicy
metadata:
  name: prod-large-images
spec:
  paused: false
  imageSelectors:
    - imageRegex: ".*vllm.*"
  platforms:
    - linux/amd64

目前还比较早期,欢迎大家关注项目: https://github.com/cloudpilot-ai/hermes

来源: V2EX - 技术查看原文