跳转到主要内容
作业在 $VOLUMES_DIR/support-transcripts 只读读取这些文件。除非所有者打开,没人能下载它们。

Volume 不是数据集

volume 引用带版本后缀会在解析 spec 时被拒绝。格式错误的 id 同样,以及两个 volume 的叶子名会在 同一个挂载路径上撞车的情况。

创建并填充

tp volume push 上传目录下的一切,除掉操作系统和 Office 的杂物。链路快的话把 --concurrency 调高。 删文件,或删整个 volume:

指向你已有的存储

卷里不一定是平台放进去的字节。如果素材已经在贵组织自己运行的存储上——一个 MinIO 桶、一个 NAS 导出——管理员可以直接注册它,而不必复制一份。
注册是几秒钟的事,复制五个 TB 是几小时到几天。两种方式的权限模型完全一样:可见性、下载和预览 仍归属主所有,预览仍带水印并记入审计,作业仍以只读方式挂载它。 有三件事不一样,而且都是刻意的:
  • 平台从不写入它。 tp volume push、删除文件、清空卷都会被拒绝。素材属于它所在的存储, 要改就在那里改。
  • 删除卷删掉的是注册记录,不是文件。返回的计数会显示为一个对象。
  • 由管理员注册。 平台向外触达到哪里是管理决定,而它所经由的连接会写明哪些路径可以被引用、 哪些项目可以引用。
如果连接后来被删除或收窄,这个卷将无法解析,引用它的作业会在提交时就被拒绝——不是几小时之后, 也绝不会变成读到一个空目录。 数据卷可供预处理、清洗、转换、评估和训练作业读取。“允许作业使用”统一控制这些场景。

在控制台向用户开放目录

  1. 管理员打开 系统管理 → 存储连接,添加 S3 连接或已经挂载到主机上的文件系统目录。
  2. 设置允许开放的目录与项目,再测试连接。添加连接不会自动公开其中的内容。
  3. 在连接行点击 新建数据卷。选择允许开放的目录或填写子目录,设置名称与可见性。
  4. 按需开启预览,下载默认关闭。私有数据卷仅对所有者与管理员可见;公开数据卷仍受连接的项目范围限制。
  5. 可在数据卷上设置 允许使用的项目,进一步收窄连接范围。允许作业使用 独立于预览和下载;关闭后阻止新提交,不会停止运行中的作业或撤回已有副本。
  6. 用户在 数据 → 数据卷 浏览、预览获准访问的材料,再在作业中引用。连接行的 查看数据卷 可以筛选关联的数据卷。
文件系统数据卷不展示符号链接和特殊文件。控制台需要能访问该目录才能浏览和预览;将数据复制到作业工作目录的进程也需要访问权限。控制台连接测试成功,并不证明计算节点能访问同一个目录。 只读访问防止修改源文件,但不能阻止作业代码将数据复制到日志、产物或网络请求中。预览内容也可以保存。更强的数据隔离需要执行环境限制这些出口,数据卷设置本身不提供这种保证。文件系统下载在明确开启后使用经过身份认证的数据流;控制台保存前会将文件缓存在浏览器中,大文件请使用 API 下载。

从作业里引用它

在 experiments/<experiment>/config.yaml 里声明,这是持久的写法。 如果已有 data 段,将 volumes 合并进去,不要重复添加 YAML 键。 脚本还必须支持这些平台字段,或在传给严格的训练参数构造器之前移除它们。 TRL SFT 配方请使用下方的 --volume,不要把 data 加到直接传给 SFTConfig 的配置文件中:
或者只覆盖这一次提交:
每个都出现在 $VOLUMES_DIR/<叶子名>。从环境变量里读路径,永远不要硬编码。
引用了一个你看不到的 volume 的作业会在提交时被拒绝。这是有意的:一个空目录会让权限问题看起来像 建模问题。

在预处理脚本中读取文件

以 acme/models 为例,作业内根路径是 $VOLUMES_DIR/models, 不是 $VOLUMES_DIR/acme/models,也不是管理员配置的 NAS 路径。 VOLUMES_DIR 由平台在作业环境中设置,本机终端通常没有这个变量。 在控制台进入子目录,点击 使用当前目录,使用指导会生成对应的配置和 Python 示例。 声明数据卷只是让文件可用,具体读取哪些文件由脚本决定。
此示例需要挂载 acme/documents,并在 incoming/ 下放置文本文件。处理结果写到只读源目录之外。 如果提交时指定了 --output-dataset,数据集文件应改为写入 $TUNEPLANE_DATASET_OUT_DIR。

使用数据卷中的模型训练

假设 acme/models 下有 my-model/config.json、分词器文件和完整的权重分片。 先挂载 acme/models,再在 训练脚本内部 解析模型目录:
将得到的模型和分词器传给训练器。示例适用于 Transformers 兼容的文本生成模型; 作业环境需要安装兼容的依赖,多模态等其他架构应使用对应的加载类。 能列出目录不代表模型文件完整,也不代表运行环境支持该模型。 训练检查点写入 $TUNEPLANE_OUT_DIR,不要写回只读模型目录。

使用 TRL SFT 配方

生成的 experiments/<experiment>/train.py 会将 args.model 传给 SFTTrainer。 如果需要传入作业内的环境变量路径,在 你自己的脚本副本 中, 紧接 args = parser.parse_args() 后添加:
提交时同时传入数据卷和用单引号包裹的模型路径:
将实验名、硬件配置和训练数据路径替换为实际值。单引号让本机终端保留变量, 新增的脚本代码负责在作业内展开它。未修改脚本时,不要假设 --model 或框架的 YAML 加载器会自动展开环境变量,不同配方的配置加载方式不同。 只挂载数据卷不会自动选择模型,也不会替你配置训练数据。

大型模型库按需要拆分

引用数据卷会挂载它的 整个目录。脚本读取 models/my-model 不等于只挂载这个子目录。 使用拉取方式的连接会在启动前将数据卷同步到作业存储;管理员配置了可直接访问的文件系统视图时, 可以省去这次复制。 模型库包含数百 GB 的其他模型时,建议将需要的模型子目录单独注册为外部数据卷。 例如,将 my-model/ 注册为 acme/my-model,作业内通过 $VOLUMES_DIR/my-model 读取。 这样也可以单独授权该模型,而不向用户开放同级的其他模型。

哪些后端能挂

在挂不了的后端上,提交会被拒绝并点名那个设置,而不是启动一个挂载点是空的作业。

让一个文件变成人能读的东西

两个权限,都属于所有者,都默认关闭: 它们互相独立。列出结构 —— 文件名、大小 —— 对任何能引用这个 volume 的人始终可见;内容不是。

从一个 volume 产出数据集

读一个 volume 并把结果发布出来,这叫 Processing Run:你的代码,在平台上跑,带溯源。
作业往 $TUNEPLANE_DATASET_OUT_DIR 里写,运行成功后由平台发布。作业从不持有注册表凭据,发布出的 数据集继承它所读材料的分级。 这也是清洗一个 volume 的方式:读、处理、发布。平台从不改写你上传的东西。

确认成功

tp volume ls 会显示这个 volume 和它的文件数。在运行中的作业里:
挂载是只读的,所以往那里写会失败 —— 那是挂载在正常工作,不是 bug。
如果你的代码能读到明文,任何存储控制都挡不住外带。一个能打开 PDF 的脚本,就能把它 base64 到自己 的 stdout 里。Volume 真正强制的是:allow_download 关着时没有下载路由,allow_preview 关着时没有预览路由, 打开时每读一个文件留一条审计,只读挂载,一条被审计的引用记录,以及没有批量日志下载。每一条 出去的路都是某个人做过的决定和某个人能找到的记录。把材料完全挡在集群之外,是部署方的出网策略,不是这个功能。

下一步

数据集 · 提交作业 · 数据页