| 名称 | tao-launch-workflow |
| 描述 | >- Shared launch intake for any TAO workflow or action. Use when the user wants to run TAO AutoML, train, evaluate, infer, export, generate TensorRT engines, or launch DEFT/workflow jobs on an execution platform. |
| 开源协议 | Apache-2.0 compatibility: Requires the packaged TAO skill bank helper scripts. metadata: |
| 作者 | NVIDIA Corporation |
| 版本 | “0.1.0” allowed-tools: Read Bash tags: - tao - workflow - launch |
TAO 工作流启动信息收集
独立安装? 如果本会话未由 TAO 技能库插件初始化,请先运行
tao-setup技能(主机预检、凭据、跨技能发现)。
在启动任何 TAO 工作流或模型操作之前,请使用此技能。
快速开始
运行平台助手,询问平台和监控偏好,然后在询问凭据之前运行所选平台的详细帮助程序。
不可协商的启动门户
此门户与模型无关。在启动产生副作用的工作之前,将它应用于每个 TAO 模型、数据操作和应用工作流。
在启动预检通过之前,请不要创建运行器脚本、启动脚本、兼容垫片、工作区文件夹、状态文件、日志或依赖安装副作用。
预检通过仅当以下所有条件都为真:
- 执行平台从打包的平台助手中选择。
- 平台凭据和所需的凭据组得到满足。
- 特定于模型的凭据得到满足。
- 默认容器映像从打包的模型/动作元数据中解析,向用户显示,并确认或通过显式
image=<override>替换。 - 平台访问检查从启动主机成功。
- 数据集输入映射到具体的规范键,并从所选平台的角度进行验证。
- 模型/工作流技能所要求的计算形态字段已知。
- 所选数据/平台路径所需的本地工具存在,或者用户批准安装最小的缺失依赖项并重新运行预检。
- 已显示并确认包含映像、平台、数据集、计算形态、预期运行时间以及任何生成/默认配置更改的启动审查。对于 AutoML,启动审查必须明确说明推荐计数/预算、最大并发、算法、指标、方向以及搜索的参数/范围,即使使用默认值。
如果缺少任何项,询问缺失的输入,并在生成工件之前停止。这适用于 AutoML、普通训练/评估/推理/导出/TRT 以及 DEFT/应用程序工作流。
当预检工作清除了阻塞项时,跟踪原始用户请求。修复后,重新运行相关预检并继续朝着该请求前进;除非用户明确只要求修复,否则不要停在“阻塞项已修复”。
初始问题
在用户确认他们想要做什么后,使用打包的助手询问执行平台。不要扫描平台文档、技能文件夹或配置文件夹来构建选择。
${TAO_SKILL_BANK_PATH:-~/tao-skills-external}/scripts/list_tao_platforms.py \
--skill-bank ${TAO_SKILL_BANK_PATH:-~/tao-skills-external} --format text
然后询问:
- 哪个受支持的平台应该运行此工作流?
- 我是否应该在此聊天中监控运行?监控意味着我持续轮询后端/作业日志并报告进度,直到作业完成、失败或您让我停止,即使作业排队数小时或数天。如果禁用,我启动作业,给您作业 ID/日志路径,然后停止轮询。默认值:在聊天中监控。
- 我应该多久发布一次状态?默认值:每 5 分钟。对于冒烟测试使用 1-2 分钟,对于正常训练使用 5 分钟,对于长时间运行使用 10-15 分钟。
当用户接受默认值时,使用 long_running_enabled=true 和 status_interval_minutes=5。
当监控启用时,不要仅因为经过了几次轮询或作业仍然处于 PENDING 状态就发送最终摘要。保持回合连接,并每 status_interval_minutes 发出一次状态,直到达到终端状态或用户显式停止/分离请求。如果运行时环境无法保持聊天回合打开,请明确说明并留下持久的观察器/日志路径;不要暗示在回合结束后聊天更新会继续。
最终答案规则:final 响应结束聊天端监控。当 long_running_enabled=true 且任何已启动的作业处于非终端状态时,状态消息必须作为进行中的更新发送,并且代理必须继续轮询。只有当工作流达到终端状态、用户明确要求分离/停止监控,或运行时确实无法保持回合打开时才发送最终响应;在最后一种情况下,说明是运行时限制并提供确切的持久状态命令/日志路径。
缺失输入提示形状
在询问启动输入时,包括具体示例和两种数据集输入模式。不要只询问“数据集根”。
使用此结构,并将规范键调整到所选模型/动作:
在我创建规范或运行器文件之前,我需要这些启动输入:
1. 执行平台:brev、slurm、local-docker 或 kubernetes。
2. 数据集输入。您可以提供任一模式:
A) 根模式:给出训练/评估根,我自动映射所需文件。
示例 Cosmos-RL:
train_root=/lustre/fsw/.../cosmos/train
-> custom.train_dataset.annotation_path=train_root/annotations.json
-> custom.train_dataset.media_path=train_root
B) 直接规范模式:自己给出确切的配置/规范参数。
示例:
custom.train_dataset.annotation_path=/lustre/fsw/.../train_annotations.json
custom.train_dataset.media_path=/lustre/fsw/.../videos_train.tar.gz
custom.val_dataset.annotation_path=/lustre/fsw/.../eval_annotations.json
custom.val_dataset.media_path=/lustre/fsw/.../eval_videos/
平台示例:
- SLURM/Lustre:/lustre/fsw/.../data/train 或 lustre:///lustre/fsw/.../data/train
- Brev/Kubernetes:s3://bucket/path/train 和 s3://bucket/path/eval
- local-docker:/data/tao/<model>/train 或 file:///data/tao/<model>/eval
3. 容器映像。我将从打包的模型元数据中解析默认值,并在启动前显示,例如:
默认映像 for <model>/<action>: <resolved container image>
使用此映像,或提供 image=<override> 以固定不同的 TAO 构建。
4. 模型所需的计算形态,例如 GPU/节点数。
5. 平台/模型文档所需的凭据,例如 gated Hugging Face 模型的 HF_TOKEN。
6. 监控偏好。默认情况下,我在聊天中监控并每 5 分钟发布进度;选择 1-2 分钟用于冒烟测试,或 10-15 分钟用于长时间训练。
容器映像确认
在创建规范、运行器脚本、工作区、日志、状态文件或提交作业之前,解析所选模型/动作的映像:
${TAO_SKILL_BANK_PATH:-~/tao-skills-external}/scripts/resolve_tao_image.py \
--skill-bank ${TAO_SKILL_BANK_PATH:-~/tao-skills-external} \
--model <network> --action <action> --format text
如果助手不可用,通过 SkillBank().get_model_config(network_arch) 读取 skills/models/<network>/config.json。按此顺序解析映像字段:
actions.<action>.container_imageactions.<action>.image- 顶层
container_image - 顶层
image
显示确切映像并询问:
<network>/<action> 的容器映像:
default=<resolved image>
使用此映像,或提供 image=<override>?
如果用户接受,将解析的映像作为作业 image 传递。如果用户覆盖,要求非空映像引用并传递该值。不要静默地使用默认映像启动。此确认适用于训练、AutoML 建议、评估、推理、导出、TensorRT 引擎生成以及提交 TAO 容器的应用程序工作流。
凭据过滤
在用户选择平台后,仅获取该平台的凭据列表:
${TAO_SKILL_BANK_PATH:-~/tao-skills-external}/scripts/list_tao_platforms.py \
--skill-bank ${TAO_SKILL_BANK_PATH:-~/tao-skills-external} \
--platform <platform> --format text
仅询问该命令返回的凭据,加上所选模型技能中的特定于模型的凭据。不要在 SLURM、Kubernetes 或本地 Docker 上询问 Brev 凭据。不要在 Brev、Kubernetes 或本地 Docker 上询问 SLURM 凭据。仅当所选平台和数据集/结果 URI 需要 s3:// 访问时才询问 S3 凭据。
凭据可能已存在于进程环境中或用户批准的机密环境文件中,例如 ~/.tao/secrets.env 或 ~/.config/tao/.env;仅在需要时加载此类文件,并且绝不打印、grep、cat、粘贴或记录其内容。仅验证变量存在。
对于初始启动信息收集,仅询问所需凭据和所需凭据组。将助手的可选凭据/设置部分视为参考资料;除非其 only_when 条件适用、所选工作流无法继续或用户要求自定义该设置,否则不要请求这些值。
当助手输出包含“Required credential groups”部分时,在继续之前满足每个组中的一个凭据。使用助手的描述和“如何获取”文本解释每个请求的值。
对于 SLURM,用户提示应首先询问 SSH_KEY_PATH。仅当用户说他们已经使用 SSH 代理时才提及 SSH_AUTH_SOCK。
依赖修复
如果缺少必需的 CLI/库,请准确说明缺少什么以及为什么需要它,然后征求安装许可。示例:
- S3 数据集或结果路径 -> 需要诸如
aws之类的支持 S3 的客户端。 - SDK 后端平台启动 -> 需要平台特定的
nvidia-tao-sdk[...]扩展。 - 本地 Docker SDK 路径 -> 需要 Docker Python 客户端和配置的 Docker 网络。
在用户批准并安装后,重新运行相同的预检。在失败检查和重新运行之间,不要创建运行器文件或启动作业。
数据集信息收集
接受任一模式的数据集输入:
- 数据集根模式: 用户提供训练/评估/校准根,模型技能按惯例映射所需文件。Cosmos-RL 训练示例:
custom.train_dataset.annotation_path=<root>/annotations.json和custom.train_dataset.media_path=<root>。 - 直接规范模式: 当注释、媒体存档、视频或图像文件夹位于不同位置时,用户提供确切的规范键路径。直接保留这些键,例如
custom.train_dataset.annotation_path=/lustre/.../train_annotations.json和custom.train_dataset.media_path=/lustre/.../videos.tar.gz。
询问与所选平台匹配的数据集示例:
- SLURM:共享集群路径,例如
/lustre/fsw/portfolios/<team>/<your-dir>/data/<model>/train(其中<your-dir>是您在集群上的每用户目录),或直接规范路径在/lustre/...下。 - Brev、Kubernetes:通常是
s3://bucket/path/train和s3://bucket/path/eval,除非平台配置文件挂载了共享存储。 - 本地 Docker:Docker 主机可见的本地路径,例如
/data/tao/<model>/train,或计划容器挂载内可见的直接规范路径。 - 远程 Docker:由
DOCKER_HOST命名的远程 Docker 主机上可见的绝对路径,而不是本地代理机器上的路径。
不要假设“数据集根”是唯一可接受的输入。当提供直接规范路径时,验证确切的规范路径,而不是附加默认文件名。
平台预检
在创建任何启动工件之前,运行所选平台的预检检查。
当所需输入可用时,优先使用打包的预检助手:
${TAO_SKILL_BANK_PATH:-~/tao-skills-external}/scripts/check_tao_launch_preflight.py \
--skill-bank ${TAO_SKILL_BANK_PATH:-~/tao-skills-external} \
--platform <platform> \
--container-image <selected-image> \
--path train_annotation=<path> \
--path train_media=<path>
当用户提供直接规范路径时,传递确切路径。对于根模式输入,先扩展模型要求的文件,然后将这些具体的注释/媒体路径传递给助手。
如果助手报告缺少客户端工具(如用于 s3:// 路径验证的 aws),请经用户批准后安装最小的必需包,然后使用 --install-missing-tools 重新运行相同的命令,并且在重新运行验证路径之前不要继续。
当所选模型技能警告大型 S3 媒体应分阶段时,在创建启动工件之前将数据复制或提取一次到平台可见的存储,然后使用相同的预检助手验证那些分阶段的路径。在运行工作区中记录源 URI 和分阶段路径,以便 AutoML 摘要可以区分数据暂存时间与训练/评估时间。
对于 local-docker 和 remote-docker,在从 skill_info.yaml/versions.yaml 解析 container_image 后,始终通过 --container-image 传递所选映像。助手在启动前验证 Docker 可达性、NVIDIA Container Toolkit 注册、GPU 内存、所选映像的架构兼容性(当已知时)以及 GPU 可见的冒烟容器。对于 remote-docker,传递 --docker-host 或导出 DOCKER_HOST;助手通过远程守护程序查询 GPU 并验证绑定挂载路径,而不是使用本地主机状态。如果所选或冒烟映像在目标 Docker 主机上不存在,请先征求许可拉取它,或在批准后使用 --pull-smoke-image 重新运行。
当模型技能列出注释级别的必填字段时,通过 --json-required-field <path-label>=<field>[,<field>...] 传递它们,以便架构/数据内容问题在预检期间失败,而不是在第一个训练容器内失败。不要从旧的失败历史中添加必填注释字段;仅强制执行当前模型技能记录的字段。
对于本地 JSON/JSONL 注释路径,助手打印 records=<N>;在生成建议之前,将训练注释计数用作样本计数敏感的 AutoML 运行的 automl_settings["train_sample_count"]。
如果模型技能记录了运行本地补丁策略来修复缺少的必填字段,则在当前运行工作区中创建修补副本,将规范路径更新到该副本,并在启动前重新运行内容检查。不要要求用户修改源数据集,除非模型技能说补丁是不可能的。
不要为实际启动使用 --skip-platform-access。该标志仅用于干环境检查,或用于用户已经提供了显式的手动平台和存储访问证明的情况。如果助手无法验证远程 API、CLI、集群或对象存储访问,将预检视为失败,并且不要生成启动工件。
对于 SLURM:
- 需要
SLURM_USER、SLURM_HOSTNAME、分区意图以及SSH_KEY_PATH或SSH_AUTH_SOCK之一。如果用户说使用集群默认分区,则传递空分区/省略分区指令;不要替换站点特定值,例如batch。 使用所选平台助手的Resource defaults作为运行时值。对于打包的 SLURM 默认值,使用SLURM_TIME_HOURS=4和SLURM_TIMEOUT_HOURS=3.8生成启动器;永远不要为 4 小时分区列表发明 12 小时默认值。 为了持久性,允许使用nohup或后台启动编排器,但本身不满足聊天监控。启动后,保持前台聊天端轮询循环连接,直到达到终端状态或显式分离。 - 拆分逗号分隔的
SLURM_HOSTNAME,尽可能解析主机,并要求对至少一个主机进行无密码ssh -o BatchMode=yes。 - 如果 SSH 失败,不要提供几个等效选项。要求
SSH_KEY_PATH=/path/to/private_key并显示无密码设置步骤: 如果需要,使用ssh-keygen -t ed25519 -N "" -f ~/.ssh/id_ed25519创建密钥;使用ssh-copy-id -i ~/.ssh/id_ed25519.pub <SLURM_USER>@<login-host>安装它;使用ssh-keyscan -H <login-host> >> ~/.ssh/known_hosts信任主机;设置chmod 600 ~/.ssh/id_ed25519;使用ssh -o BatchMode=yes -i ~/.ssh/id_ed25519 <SLURM_USER>@<login-host> 'hostname'验证;然后使用SSH_KEY_PATH=~/.ssh/id_ed25519重新运行。 - SSH 通过后,在远程登录主机上使用
test -e或等效的只读命令验证数据集注释/媒体路径。 - 只有在那时才能创建运行器脚本、规范、工作区或提交作业。
- 对于多 GPU Slurm 作业,依赖 SDK Slurm 后端请求
--gpus-per-node=<N>。不要生成手动--gpus=<N>sbatch 片段;这可能会将 GPU 分散到节点上并使分配的 GPU 空闲。 - 对于全矩阵或多节点启动,先提交一个冒烟作业。只有在冒烟达到训练、发出请求的指标/状态记录并显示预期 GPU 利用率后,才启动全矩阵。
对于 AutoML 状态,在扫描原始日志之前,优先考虑结构化控制器/大脑状态和作业元数据(active_jobs.json、.automl/controller/*.json、结果 JSON 和 results_dir/train/status.json)。仅当回退时或用户明确要求日志级调查时,才解析日志。
对于本地 Docker,在编写启动工件之前验证 Docker/GPU 访问和本地数据集路径。对于 Brev 和 Kubernetes,在编写启动工件之前验证 API 或集群访问以及对象存储凭据和 aws s3 ls 对 s3:// 输入的可读性。对于这些远程平台上的挂载共享存储或 PVC 路径,要求手动证明该路径已挂载到作业环境中;助手失败关闭,而不是接受未验证的远程挂载路径。
运行时和配置审查
在任何产生副作用的启动之前,显示简洁的审查:
- 所选平台和确切容器映像
- GPU ID/数量和节点,包括任何因已被占用而避免的 GPU
- 数据集根或直接规范路径,以及可用的样本计数
- 与模板默认值不同的重要模型/工作流覆盖
- 估计运行时间及其假设
- 监控间隔以及聊天端监控是否保持连接
对于 AutoML,还显示算法、指标/方向、推荐预算、搜索参数、范围以及如 skills/applications/tao-run-automl/SKILL.md 中所述的生成/默认推荐详细信息。在此审查后要求确认。如果用户提供了时间限制,则标记任何超过该限制的计划,并在启动前提供具体的削减。