主题
在训练任务中使用存储
训练程序在 Worker 容器中通过路径读取数据、模型和配置,也通过路径写入 checkpoint、TensorBoard 日志和训练结果。创建任务时添加存储挂载,是把节点目录或对象存储连接到容器中的指定位置;它不会自动复制数据,也不会自动修改训练程序的输入和输出路径。
先分清三种位置
下面三种位置用途不同。填写表单和配置训练命令时,请使用对应的值。
| 位置 | 示例 | 在哪里 | 什么时候使用 |
|---|---|---|---|
| 对象键 | datasets/train/a.json | 对象存储的 Bucket 中 | 在文件浏览器中定位对象;只适用于对象存储 |
| 节点上的源路径 | /srv/rlinf/data | Worker 实际运行的计算节点上 | 选择主机目录时,填写到源路径 |
| 容器内挂载路径 | /mnt/data | 训练容器中 | 两种挂载都要填写到挂载到 Worker;训练程序使用这个路径读写 |
例如:
- 如果存储类(StorageClass)
team-data把 Bucket 根目录挂载到/mnt/data,对象datasets/train/a.json在 Worker 中对应/mnt/data/datasets/train/a.json。StorageClass 使用了其他根路径时,请按管理员确认的路径换算。 - 把节点目录
/srv/rlinf/data挂载到/mnt/data后,节点文件/srv/rlinf/data/train/a.json在 Worker 中对应/mnt/data/train/a.json。
Bucket 名称、对象键和本地电脑上的路径都不能直接代替容器内挂载路径。准备脚本、运行脚本和 RLinf/Hydra 配置应读取或写入容器内挂载路径。
挂载会遮住镜像中的同名目录
如果镜像本来在 /mnt/data 中包含文件,再把卷挂载到 /mnt/data,运行中的容器只能看到挂载后的内容。请选择不会覆盖程序、依赖或默认配置的目录。
选择主机目录或对象存储
根据数据所在位置和保存要求选择挂载方式。
| 使用场景 | 建议方式 | 原因 |
|---|---|---|
| 数据只存在于已确认的计算节点上,而且任务必须在这些节点运行 | 主机目录 | 直接使用节点本地目录,不会把数据复制到其他节点 |
| 数据或输出需要在 Pod 重建后继续使用,或需要交给后续任务 | 对象存储 | 数据保存在 Bucket 中,不依赖某个 Pod 的容器文件系统 |
| 多个 Worker 需要读取同一份数据 | 对象存储,但需先验证 | 管理员需要确认目标集群支持这些 Worker 的挂载方式和读取负载 |
| 多个 Worker 需要并发写入 | 先确认应用和存储的并发方式 | 即使能够挂载,也不能让多个进程覆盖同一个 checkpoint、事件文件或对象键 |
| 可以重新生成的缓存和临时文件 | 容器文件系统 | Pod 重建后可能丢失,不应用于必须保留的数据 |
如果任务可能改到其他节点运行,而数据只存在于某个节点的主机目录,请改用经过验证的对象存储,或把节点选择范围限制到已经准备好数据的节点。
输入数据不会自动变成只读
当前创建向导没有只读挂载选项。需要防止任务修改数据集或模型时,请让管理员通过节点目录权限、只读对象存储凭据或单独的 StorageClass 限制写入;不要只依赖目录命名或团队约定。
使用主机目录
主机目录会把 Worker 所在计算节点的本地目录挂载到训练容器。它不是用户电脑上的目录,也不是 RLark 服务所在机器的目录。
准备节点目录
添加挂载前,请让平台管理员确认:
- 每个可能运行该角色的节点都存在相同的绝对路径;
- 路径中的数据版本一致,剩余空间满足任务要求;
- 容器中的运行用户具有所需的读取或写入权限;
- 该目录不会暴露系统文件、其他任务的数据或未经批准的设备;
- 任务停止、重新调度或删除后,目录由谁保留、备份和清理。
只检查一个节点不足以证明其他匹配节点也具备相同目录。无法确认实际落点和目录内容时,不要使用主机目录。
填写创建向导
完整的 Worker 配置步骤见创建训练任务。
- 在目标角色的 Worker 配置中添加存储挂载。
- 选择主机目录。
- 在源路径中填写节点上的绝对路径,例如
/srv/rlinf/data。 - 在挂载到 Worker中填写容器内绝对路径,例如
/mnt/data。 - 让准备脚本、运行脚本或 RLinf 配置通过
/mnt/data下的路径读写。 - 在 YAML 预览中核对
hostPath.path和容器的mountPath。
主机目录不会出现在 RLark 文件浏览器中。Pod 重建后,只有再次落到保留了同一目录和数据的节点,才能读到原内容;不要把主机目录当作跨节点共享存储。
使用对象存储
对象存储通过 StorageClass(存储类)连接 Bucket,再把它挂载到 Worker。StorageClass 可以理解为管理员为某个集群准备好的存储连接名称;它不是 Bucket 内的目录、对象前缀或容量。
普通用户不需要创建 PVC,也不应在 Job 中填写 Endpoint、Access Key 或 Secret。RLark 会根据所选 StorageClass 为角色准备 PVC 并挂载到容器。当前自动创建的 PVC 会请求 10Gi;这个值不表示 Bucket 的容量、配额或剩余空间,但仍可能影响集群配额或 PVC 是否能够绑定。
取得可用的 StorageClass
先在创建向导中选择集群,对象存储下拉框才会列出该集群的 StorageClass 候选项。列表只根据所选集群收集对象存储类,不会检查 Secret、Bucket 权限、实际读写、挂载根路径或多 Worker 使用方式。如果列表为空,或无法判断应该选择哪一个,请联系平台管理员,不要选择名称相近的配置试错。
创建向导中的集群只用来筛选 StorageClass 和其他候选项,不会作为独立字段写入 Job。Worker 的实际集群由节点选择器的匹配结果决定,因此管理员还需要确认同名 StorageClass 存在于 Worker 实际运行的集群中。
可以向管理员提供以下非敏感信息:
text
目标集群:
需要挂载的角色和 Worker 数量:
需要读取的数据或对象前缀:
需要写入的 checkpoint、日志或结果前缀:
计划使用的容器内挂载路径:
是否需要多个 Worker 跨节点同时读取或写入:
预计数据量、保留时间和恢复要求:请管理员返回准确的 StorageClass 名称、适用集群、允许读写的范围、专用于检查且不含敏感信息的测试前缀,以及并发挂载、配额、保留和恢复限制。请求中不要附带 Access Key、Secret 或临时签名链接。管理员需要核对的内容见为训练任务确认运行条件。
需要创建或修改 StorageClass 时,应由已获授权的人员按照管理存储类或组织的存储管理流程处理。
多个 Worker 使用同一挂载前先确认
每个角色的每个对象存储挂载会生成一个 PVC,该角色的所有 Worker 共享这个挂载对应的 PVC。每个 PVC 请求 10Gi,访问模式为 ReadWriteOnce,通常只保证一个节点以读写方式挂载。
同一 Task 的多个 Worker 会尝试分布到不同节点;节点不足时,Pod 可能保持 Pending,RWO 卷不支持跨节点挂载时也可能出现挂载失败。多个 Worker 使用同一挂载前,请让管理员验证实际访问方式;写入时使用互不冲突的目录或对象键。不同角色选择同一 StorageClass 时也可能访问同一 Bucket,不要省略角色或运行级输出前缀。
填写创建向导
- 在目标角色的 Worker 配置中选择正确的集群。
- 添加存储挂载,并选择对象存储。
- 从列表中选择管理员确认的 StorageClass。
- 在挂载到 Worker中填写容器内绝对路径,例如
/mnt/data。 - 让准备脚本、运行脚本或 RLinf 配置通过
/mnt/data下的路径读写。 - 在 YAML 预览中核对 StorageClass、PVC 映射和容器的
mountPath。
同一角色的每个容器内挂载路径必须唯一。创建向导只检查路径非空,不能可靠发现重复路径或由路径生成的资源名称冲突。
检查任务能否正确读写
挂载配置完成后,按以下顺序检查:
- 对象位置:使用对象存储时,在文件浏览器中确认输入对象位于预期的 StorageClass 和完整对象键下。文件浏览结果只适用于页面显示的首个关联集群;任务运行在其他集群时,由管理员核对该集群的存储资源。主机目录则由管理员在每个可能运行 Worker 的节点核对。
- 容器挂载:Worker 产生 Pod 后,确认详情中的 Pod 和节点符合预期。需要进一步检查时,按照使用 WebTerminal查看目标路径是否存在并可读。
- 应用读取:从任务日志确认 RLinf 实际读取的是容器内挂载路径,并识别到预期的数据或模型版本。
- 应用写入:在管理员指定的测试位置,让任务写入一个不含敏感信息、名称唯一的小文件,再重新读取并核对大小或哈希。不要覆盖已有结果。对象存储可从文件浏览器重新读取或下载核对;主机目录则在实际节点上核对。
- 持久性:停止或删除任务前,确认 checkpoint、TensorBoard 事件文件和最终结果都位于挂载路径内,并已完成写入。只配置挂载不会让默认工作目录中的文件自动持久化。
不要为了测试写权限而向正式 checkpoint、共享数据集或已有结果目录写临时文件。遇到文件浏览器可见但 Worker 不可见、PVC 未绑定、权限不足或输出丢失时,请按存储问题排查逐层检查。
停止或删除任务前确认数据
- 停止任务会终止当前 Pod,但不会删除主机目录或任务使用的 PVC;PVC 在 Task 保留期间继续存在。再次启动会创建新的进程,能否读到原数据仍取决于实际节点、挂载和训练命令。
- 删除任务会清理任务创建的 PVC,但不会清理主机目录。对象存储中的数据是否保留,取决于实际 StorageClass 的回收策略和存储后端,不能只根据控制台中的任务或 PVC 已消失来判断。
- 删除前,请从文件浏览器或组织批准的存储工具重新读取需要保留的对象,记录 StorageClass、完整对象键和必要的校验信息。使用主机目录时,请在实际节点上确认文件并按组织流程备份。
需要了解停止、启动和删除对运行状态的其他影响时,参见停止、恢复或删除训练任务。