$VOLUMES_DIR/support-transcripts 只读读取这些文件。除非所有者打开,没人能下载它们。
Volume 不是数据集
volume 引用带版本后缀会在解析 spec 时被拒绝。格式错误的 id 同样,以及两个 volume 的叶子名会在
同一个挂载路径上撞车的情况。
创建并填充
tp volume push 上传目录下的一切,除掉操作系统和 Office 的杂物。链路快的话把 --concurrency
调高。
删文件,或删整个 volume:
指向你已有的存储
卷里不一定是平台放进去的字节。如果素材已经在贵组织自己运行的存储上——一个 MinIO 桶、一个 NAS 导出——管理员可以直接注册它,而不必复制一份。- 平台从不写入它。
tp volume push、删除文件、清空卷都会被拒绝。素材属于它所在的存储, 要改就在那里改。 - 删除卷删掉的是注册记录,不是文件。返回的计数会显示为一个对象。
- 由管理员注册。 平台向外触达到哪里是管理决定,而它所经由的连接会写明哪些路径可以被引用、 哪些项目可以引用。
在控制台向用户开放目录
- 管理员打开 系统管理 → 存储连接,添加 S3 连接或已经挂载到主机上的文件系统目录。
- 设置允许开放的目录与项目,再测试连接。添加连接不会自动公开其中的内容。
- 在连接行点击 新建数据卷。选择允许开放的目录或填写子目录,设置名称与可见性。
- 按需开启预览,下载默认关闭。私有数据卷仅对所有者与管理员可见;公开数据卷仍受连接的项目范围限制。
- 可在数据卷上设置 允许使用的项目,进一步收窄连接范围。允许作业使用 独立于预览和下载;关闭后阻止新提交,不会停止运行中的作业或撤回已有副本。
- 用户在 数据 → 数据卷 浏览、预览获准访问的材料,再在作业中引用。连接行的 查看数据卷 可以筛选关联的数据卷。
从作业里引用它
在experiments/<experiment>/config.yaml 里声明,这是持久的写法。
如果已有 data 段,将 volumes 合并进去,不要重复添加 YAML 键。
脚本还必须支持这些平台字段,或在传给严格的训练参数构造器之前移除它们。
TRL SFT 配方请使用下方的 --volume,不要把 data 加到直接传给 SFTConfig 的配置文件中:
$VOLUMES_DIR/<叶子名>。从环境变量里读路径,永远不要硬编码。
在预处理脚本中读取文件
以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,再在 训练脚本内部 解析模型目录:
$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 和它的文件数。在运行中的作业里:
Volume 防不住什么
Volume 防不住什么
如果你的代码能读到明文,任何存储控制都挡不住外带。一个能打开 PDF 的脚本,就能把它 base64 到自己
的 stdout 里。Volume 真正强制的是:
allow_download 关着时没有下载路由,allow_preview 关着时没有预览路由,
打开时每读一个文件留一条审计,只读挂载,一条被审计的引用记录,以及没有批量日志下载。每一条
出去的路都是某个人做过的决定和某个人能找到的记录。把材料完全挡在集群之外,是部署方的出网策略,不是这个功能。