前置
- Kubernetes 集群(GPU 节点装好 device plugin);
- KubeRay operator(helm 安装,v1.4+);
- 对象存储(必需:作业包经预签名 URL 分发进容器);
- GPU 节点按卡型打标签:
kubectl label node <n> tuneplane/gpu-series=h200。
配置
语义要点
Job Capsule 分发
Job Capsule 分发
Console 把用户代码、权威 JobSpec、manifest 与
runner.pex 组装成内容寻址 Capsule 并上传对象存储。HTTPS 归档走 Ray runtimeEnvYAML.working_dir;仅 HTTP 的对象存储由每个 Ray Pod 的 init container 先校验 transport SHA-256,再以相同 file:// 路径交给 runtime-env agent。训练镜像无需平台 bootstrap 包。RayJob 形态
RayJob 形态
head = 主池 machine zero;多池作业每池一个 worker group(nodeSelector 按卡型、Ray 自定义资源 pin)。
shutdownAfterJobFinishes=true + backoffLimit=0:训练不盲目重试。终态日志归档后平台立即删除 RayJob;TTL 是异常兜底。容量与调度
容量与调度
集群容量从节点
nvidia.com/gpu 容量 + 卡型标签实时统计;不可调度节点计入 blocked。页面显示的分卡型容量与调度器实际可落的节点同源。卡在 Pending 的排查
卡在 Pending 的排查
真正原因只在 K8s Event 里(拉镜像失败 / 无满足 nodeSelector 的节点 / GPU 不足)——作业详情的事件视图直接展示;超过 preRunning 期限自动判失败,不会无限占队列。
无 GPU 集群(仅测试)
无 GPU 集群(仅测试)
TUNEPLANE_K8S_GPU_PASSTHROUGH=0:Pod 不请求 nvidia.com/gpu,Ray 逻辑资源照常。kind/CI 跑闭环用,生产保持默认。Playground
支持:独立 vLLM Pod(非 RayJob),经 K8s API 代理访问,TTL 到期回收。快速验证
纯 CPU 自定义作业
此 Fleet 也支持custom/custom:声明一个资源池,设置 nodes: 1、
gpus_per_node: 0、正数 cpus 和 memory_gb,不填写 GPU 系列。平台创建普通
Pod,CPU/内存请求与限额相同,restartPolicy: Never。该作业不需要 GPU 设备插件、
Ray 运行时或 GPU 节点标签。沿用 Fleet 的容忍配置,也可以利用 GPU 节点的空闲 CPU,
但不会申请加速卡。
Capsule 通过对象存储分发,解压前先验证摘要,再使用镜像中的 Python 执行。镜像需要
Python 和 Bash;插件自身可以另有 Python/SDK 版本要求。现有存储、命名空间和 Pod
权限配置仍然适用。平台负责状态观察、日志归档、停止和终态清理。暂不支持临时磁盘
预留和跨机器 CPU 作业。