tuneplane submit 打一个文件子集的包,上传后由服务端再注入 Job Capsule。
tuneplane init my-lab --yes 之后
tuneplane.yaml 需要一个 name,字符限制 [A-Za-z0-9._-]。这就是控制台项目名。提交时不要传 --project。
tuneplane new、submit、ls、validate)从当前目录往上找这个文件。CI 可以设 TUNEPLANE_CLIENT_REPO_ROOT,不必 cd。tuneplane login / logout / status 是全局的,不依赖项目。
一个实验目录
custom/custom 还会有 train.sh(唯一入口)。旁边可以再放 train.py。tuneplane plugin install … --exp 之后会多 plugins.lock.json。
不要在实验目录里放一个 framework 文件指望平台去读。方法以锁文件为准。
什么会被上传
CLI 打包实验、common/、configs/。排除列表和服务器共用(tuneplane.contract.env 里的 PACKAGE_EXCLUDES):
JobSpec 写在包内
.tuneplane/jobspec.json。注意是 .tuneplane/,不是 .tuneplane/。.tuneplane 会被排除,写进去集群侧读不到。
仓库里不会有的东西
- 集群 kubeconfig、Slurm JWT、对象存储密钥
- Job Capsule(
runner.pex)。准入后由服务端注入。 - 硬件并行度。来自
--profile和注册表。
Git
提交会记录NRL_GIT_COMMIT 和 NRL_GIT_DIRTY。工作区不干净默认拒绝,除非 --allow-dirty。未跟踪文件两种情况下都会当警告列出来。tuneplane init 默认就初始化 git,第一次提交不要拖到交作业那一刻。
git 决定 run 能不能复现,但不是提交的前提。不是 git 仓库的工作目录——tuneplane init --no-git、从别处拷过来的目录、根本没装 git 的机器——照样能提交,只是不记录 commit,控制台上这个 run 没有溯源信息。已经是仓库、只是还没有 commit 的情况下 .gitignore 照旧生效:文件清单仍然来自 git,缺的只是那个 commit。完全没有仓库时变的才是文件清单:没有 git 帮你应用 .gitignore,打包就是把同样那三个目录按平台内置排除项(outputs/、tuneplane_plugins/、__pycache__/、.venv/、各种缓存,以及看起来像密钥的文件)走一遍,且超过 64 MB 直接拒绝——免得没人打算上传的产物悄悄进了包。真要带大文件,用 TUNEPLANE_CLIENT_MAX_PACKAGE_MB 抬上限。