| 名称 | physical-ai-video-data-augmentation |
| 描述 | >- 在 OSMO 上运行视频数据增强和自动标注工作流:流程选择、预检、提交时插值、监控和输出检索。触发关键词:视频数据增强、数据丰富、自动标注、VDA 演示、OSMO 工作流、伪标注。 |
| 开源协议 | CC-BY-4.0 AND Apache-2.0 metadata: owner: NVIDIA service: data |
| 版本 | 1.0.0 reviewed: ‘2026-05-26’ |
| 作者 | NVIDIA tags: - 物理AI - 视频数据增强 - 自动标注 - cosmos |
物理AI视频数据增强工作流编排器
在 OSMO 上执行 VDA 的默认工作流技能。它负责流程选择、预检、缓存就绪、推理路径决策、提交时插值、监控和输出检索。组件技能仅提供咨询。
目的
安全且可重复地运行端到端 VDA 工作流,从预检到输出下载。
请勿将此技能用于容器内部仅调优问题。
先决条件
在运行预检或任何提交之前确认这些。缺少必需密钥会从 scripts/preflight_credentials.sh 中以 USER_INPUT_REQUIRED: 形式显现。
| 要求 | 如何满足 | 用途 |
|---|---|---|
| NGC API 密钥(可选) | NGC_API_KEY、NGC_CLI_API_KEY,或 NVIDIA_API_KEY/OPENAI_API_KEY/VLM_API_KEY/LLM_API_KEY 中兼容的 nvapi-* 令牌 |
可选,用于 nvcr_io 凭据刷新和 NGC REST 范围探测;默认 VDA 镜像引用通过工作流注册表探测验证 |
| Hugging Face 令牌 | HF_TOKEN(或 HUGGING_FACE_HUB_TOKEN),或 ~/.cache/huggingface/token 处缓存的令牌 |
创建 OSMO hf_token 凭据;拉取受控的 Cosmos/SeedVR 权重 |
| OSMO CLI 访问 | osmo 在 PATH 上,已登录,具有默认配置文件且已注册的 DATA 凭据配置文件与 storage_url 匹配 |
提交/监控工作流以及列出/下载对象 |
| GPU 池 | osmo pool list --mode free 中至少有一个 ONLINE 池;POD_TEMPLATE 携带 GPU 容忍/选择器 |
调度 setup + worker 任务 |
可选(仅用于严格的 NGC 组织/团队探测):NGC_ORG + NGC_TEAM(或 NGC_CLI_ORG / NGC_CLI_TEAM)。外部 VLM/LLM 端点密钥单独验证,不由预检验证。
密钥处理规则:nvapi-* 令牌是 nvcr_io 的一等输入。切勿仅凭令牌前缀拒绝;使用工作流注册表探测结果作为事实来源。
指令
- 根据用户意图选择工作流(
auto_labeling、augmentation_and_al、e2e、e2e_super_resolution)。 - 在开始运行操作之前提供暂定的执行时间概述。
- 在提交前运行预检和就绪检查。
- 从当前数据集后端推导提交时值(切勿猜测
storage_url)。 - 使用显式插值值提交工作流并监控至完成。
- 检索输出,为增强流程提供并排比较证据,并总结任务结果。
使用 run_script(...) 执行脚本。规范示例:
run_script("bash scripts/preflight_credentials.sh --workflow assets/configs/osmo/augmentation_and_al.yaml")
run_script("python3 scripts/pre_submit_guard.py --workflow assets/configs/osmo/auto_labeling.yaml")
run_script("bash scripts/prepare_demo_assets.sh /srv/sdg/data/vda_inputs")
可用脚本
使用脚本级 --help 获取确切参数。
| 脚本 | 角色 |
|---|---|
scripts/preflight_credentials.sh |
密钥/控制平面预检和工作流镜像访问检查 |
scripts/pre_submit_guard.py |
提交时插值、缓存和数据集安全检查 |
scripts/prepare_demo_assets.sh |
演示视频拉取 + 展平用于默认演示路径 |
scripts/generate_configs.py |
设置时配置和食谱投影生成 |
scripts/cosmos_worker.sh |
增强 worker 执行 |
scripts/pl_original_worker.sh |
原始视频自动标注 worker 执行 |
scripts/pl_augmented_worker.sh |
增强视频自动标注 worker 执行 |
scripts/osmo_barrier.py |
多节点屏障同步 |
scripts/stage_run_artifacts.sh |
完整运行输出 + 输入视频的本地镜像 |
scripts/render_side_by_side.sh |
从本地产物渲染并排比较 |
支持的流程
| 流程 | OSMO YAML | 组序列 | 典型用途 |
|---|---|---|---|
augmentation_and_al |
assets/configs/osmo/augmentation_and_al.yaml |
setup -> augmentation -> auto_labeling_augmented | 增强一个或多个视频,然后自动标注增强输出 |
auto_labeling |
assets/configs/osmo/auto_labeling.yaml |
setup -> auto_labeling | 仅标注原始视频 |
e2e |
assets/configs/osmo/e2e.yaml |
setup -> (auto_labeling_original + augmentation) -> auto_labeling_augmented | 吞吐优先路径 |
e2e_super_resolution |
assets/configs/osmo/e2e_super_resolution.yaml |
setup -> auto_labeling_original -> augmentation -> auto_labeling_augmented | 在增强前以 SR 门控的顺序路径 |
旧别名 assets/configs/osmo/augmentation_and_pl.yaml 保留用于向后兼容。
为用户请求选择正确的工作流
| 用户意图 | 工作流 |
|---|---|
| “标注我的源视频” / “仅 PL” / “无增强” | auto_labeling |
| “创建增强视频并标注它们” | augmentation_and_al |
| “快速运行完整流水线” | e2e |
| “运行完整流水线,但先门控 SR 增强的原始视频” | e2e_super_resolution |
消歧:在承诺之前处理模糊请求
默认自主:仅在缺失信息阻塞执行时询问。
自主默认值(不要询问)
- 如果缺少数据集来源,运行 VDA 演示路径(
scripts/prepare_demo_assets.sh)并继续使用dataset=vda-demo。 - 如果未明确请求流程,默认使用
augmentation_and_al。 - 如果未指定端点模式,默认使用集群内持久 NIM 复用,并在不健康时自动部署/修复 NIM。
- 如果缓存缺失,运行
setup_model_cache.yaml,重新运行预提交守卫,并在成功后自动继续。 - 任何阶段成功完成后,立即继续下一阶段。不要以“准备好了”或等效的批准提示暂停。
应暂停进行消歧的触发器
| 缺失输入 | 为何重要 | 询问 |
|---|---|---|
预检出现 USER_INPUT_REQUIRED |
缺少必需密钥 | 针对确切的缺失值提出一个简洁的解锁问题 |
| 无法从活动数据集/上传根推导存储后端前缀 | 错误的方案会导致运行时存储身份验证不匹配 | “此次运行的后端原生根前缀是什么?” |
| 无法选择任何 ONLINE GPU 池/平台 | 工作流无法调度 setup/worker | “此次运行应针对哪个 GPU 池/平台?” |
何时不消歧
- 除非用户明确要求更改场景配置文件,否则不要询问食谱。
- 默认不提供外部端点。
- 不要询问 A/B 缓存策略问题;默认是自动缓存设置。
- 不要要求缩减现有 NIM;这是禁止的。
- 当输入缺失时,不要发明、抓取或生成随机视频。
- 除非用户明确请求不同的数据集,否则不要使用非 VDA 演示来源(例如 Carline 适配资产)。
步骤 0:选择流程并收集输入
输入视频策略(不可协商)
- 始终将用户提供的视频输入(数据集 URL、本地路径或上传文件夹)作为一等且优先的输入。
- 绝不用演示资产或任何其他来源替换明确的用户视频。
- 如果未提供视频输入,默认通过
scripts/prepare_demo_assets.sh(HF 数据集流程)使用 VDA 演示资产,而无需询问额外的来源选择问题。 - 如果用户明确提到输入视频或数据集,优先使用该输入而不是演示资产。
- 默认演示路径仅使用 VDA 演示资产(
nvidia/video-data-augmentation-demo)。 - 除非用户明确要求该行为,否则绝不提议任意网络剪辑下载或占位视频。
仅收集缺失值:
- 数据集来源(优先使用用户显式提供的
dataset_url或本地上传文件夹;否则默认使用 VDA 演示资产并继续)。 - 流程(
auto_labeling、augmentation_and_al、e2e、e2e_super_resolution);未指定时默认使用augmentation_and_al。 - 用于所有 VDA 资源的 OSMO
gpu_platform(当无歧义时自动选择 ONLINE 平台;仅当不存在有效选项时询问)。 - 端点模式(默认集群内 NIM 复用/部署,除非显式覆盖)。
不要猜测 gpu_platform(例如 microk8s)。使用 osmo pool list --mode free 显示的准确当前平台标签(例如 gpu)。
每次提交前生成运行戳:
STAMP=$(cat /proc/sys/kernel/random/uuid | cut -c1-8)
RUN_ID="run-$STAMP"
执行时间概述(运行前必需)
在运行任何变异命令(osmo credential set、NIM 安装/修复、缓存工作流提交或目标 VDA 工作流提交)之前,向用户提供简短的 ETA 概述。
保持简洁(一个短段落或 4-6 个要点)并包括:
- 这看起来是冷启动(NIM/缓存缺失)还是热启动(NIM/缓存已健康),
- 主要阶段及大致持续时间,
- 所选工作流的总预期范围。
基线范围(来自观察到的 MicroK8s + OSMO 运行):
| 阶段 | 典型持续时间 |
|---|---|
| 凭据 + 预检 | ~1-2 分钟 |
| NIM 部署/下载/预热(如需要) | ~10-15 分钟 |
| 演示资产下载/上传(如为演示路径) | ~1-3 分钟 |
| 模型缓存填充(如需要) | ~15-25 分钟 |
| 工作流提交 + 排队/启动 | ~1-3 分钟 |
提交后的工作流运行时范围:
| 流程 | 典型运行时 |
|---|---|
auto_labeling |
~6-15 分钟 |
augmentation_and_al |
~20-35 分钟 |
e2e |
~22-40 分钟 |
e2e_super_resolution |
~25-45 分钟 |
冷启动端到端运行通常为 ~45-80 分钟;热启动运行通常为 ~20-45 分钟,具体取决于流程和视频长度。
常见先决条件(所有流程)
-
凭据和控制平面预检
bash scripts/preflight_credentials.sh --workflow assets/configs/osmo/<mode>.yaml受限出口:
bash scripts/preflight_credentials.sh --no-probe --workflow assets/configs/osmo/<mode>.yaml预检不需要工作负载本地
.env。运行时插值由在一个--set-string列表中提供的提交时值(dataset、run_id、gpu_platform、video、storage_url、skills_dir)驱动。传递
--workflow会使用匿名 bearer 访问(提供凭据时回退)验证活动工作流镜像引用(workflow.groups[].tasks[].image)的拉取访问权限。 如果在环境中提供了替换的 NGC/HF 密钥,预检会在存在时自动刷新现有的nvcr_io/hf_token。使用--refresh强制覆盖,即使未提供新的环境密钥:bash scripts/preflight_credentials.sh --workflow assets/configs/osmo/<mode>.yaml --refresh如果输出包含
USER_INPUT_REQUIRED:,提出一个简洁的解锁问题并停止。对于工作流镜像
401/403,在对列出的镜像引用进行探测检查后报告注册表访问失败;不要声称某个密钥家族(例如nvapi-*)被绝对不支持。 -
存储插值策略
storage_url必须从当前运行的实际上传/数据集后端推导。dataset_url=azure://storiondevxah69/osmo-workflows/datasets/vda-demo storage_url=azure://storiondevxah69/osmo-workflows dataset=vda-demo切勿在非 S3 后端上静默默认使用过时的
s3://值。 -
推理策略(不可协商)
- 默认复用健康的集群内持久 NIM 端点。
- 如果缺失/不健康,自动部署——这是先决条件,不是用户决策。不要暂停询问;使用 VDA 允许列表运行安装:
export NIM_SERVICES="qwen3-vl qwen25-14b" skills/physical-ai-infrastructure-setup-and-resilient-scaling/components/inference-nim-operator/scripts/install.sh- 查看
references/nim/README.md获取完整的端点文档和健康检查。 - 外部端点仅为选择加入(显式请求或显式 URL);只有那时才跳过集群内部署。
- 切勿从凭据存在推断外部模式。
- 切勿缩减/删除现有 NIM 以释放 GPU。
-
就绪守卫
osmo pool list --mode free osmo config show POD_TEMPLATE python3 scripts/pre_submit_guard.py --workflow assets/configs/osmo/<mode>.yaml -
缓存自动修复
如果
pre_submit_guard.py报告缓存失败,默认操作是运行:osmo workflow submit assets/configs/osmo/setup_model_cache.yaml \ --set-string storage_url=<backend-prefix> path=data然后重新运行
pre_submit_guard.py,仅在通过后提交目标 VDA 流程。仅当后端/前缀模糊或缓存设置失败时询问用户。 -
调度策略
VDA 模板在
gpu_platform上调度 setup 和 worker(用户工作负载不依赖system池)。
提交(所有流程)
每个流程使用相同的提交形状;只有工作流 YAML 变化。为请求的流程选择 YAML,然后运行下面的命令。完整的按流程演练(阶段矩阵和流程细节)位于链接的参考资料中。
| 流程 | 工作流 YAML | 演练 |
|---|---|---|
| 增强 + 自动标注 | assets/configs/osmo/augmentation_and_al.yaml |
references/flows/augmentation_and_al.md |
| 仅自动标注 | assets/configs/osmo/auto_labeling.yaml |
references/flows/auto_labeling.md |
| E2E(并行) | assets/configs/osmo/e2e.yaml |
references/flows/e2e.md |
| E2E(超分辨率门控) | assets/configs/osmo/e2e_super_resolution.yaml |
references/flows/e2e_super_resolution.md |
SKILLS_DIR="$(cd "$(git rev-parse --show-toplevel)/skills/physical-ai-video-data-augmentation" && pwd)"
STAMP=$(cat /proc/sys/kernel/random/uuid | cut -c1-8)
osmo workflow submit assets/configs/osmo/<flow>.yaml \
--pool <pool> \
--set-string \
dataset=<dataset> \
run_id=run-$STAMP \
storage_url=<backend-prefix> \
gpu_platform=<gpu-platform> \
video=<video-stem> \
cosmos_model_cache_url=<backend-prefix>/data/models/cosmos_transfer \
auto_labeling_model_cache_url=<backend-prefix>/data/models/auto_labeling \
skills_dir="$SKILLS_DIR"
兼容性说明:
- 只使用一个
--set-string标志,并在其后传递所有键/值对。 - 切勿在同一命令中重复
--set/--set-string标志;某些 OSMO 构建仅识别最后一个。 - 切勿在一个提交命令中混合
--set和--set-string。 - 传递显式的
*_model_cache_url值以避免跨 OSMO 环境的嵌套模板插值差异。 - 不要暴力排列组合标志。直接使用此形状。
常见的可选覆盖(将键/值对追加到同一 --set-string 列表):
cookbook=<scene_profile> \
vlm_url=<openai_base_url> \
llm_url=<openai_base_url> \
cosmos_model_cache_url=<url> \
auto_labeling_model_cache_url=<url>
仅自动标注流程没有增强阶段,因此在运行时省略 cosmos_model_cache_url;传递它无害,且在所有流程中保持一个提交形状。
OSMO 监控
# 工作流状态 + 任务状态
osmo workflow query <workflow_id> --format-type json \
| jq '{status, tasks: [.groups[].tasks[] | {name, status, exit_code}]}'
# 特定任务的日志
osmo workflow logs <workflow_id> --task <task_name> -n 200
# 输出检索
osmo data list --no-pager <output_url>
osmo data download <output_url> <local_dir>/
对于完成产物,始终将完整的运行输出镜像到工作区:
ROOT="$(git rev-parse --show-toplevel)"
RUN_LOCAL_DIR="$ROOT/media/vda/runs/<run_id>"
mkdir -p "$RUN_LOCAL_DIR"
osmo data download "<storage_url>/datasets/<dataset>-outputs/<run_id>/" "$RUN_LOCAL_DIR/"
对于预计超过两分钟的运行,至少每两分钟发送心跳更新。对于媒体证据,每个消息气泡发出一个独立的 MEDIA:<absolute-path> 行。
执行连续性要求:
- 心跳必须报告进度同时继续工作;它们是状态更新,不是权限提示。
- 不要在绿色阶段之间停止等待批准。
- 仅在阻塞性失败或用户明确停止/重定向时暂停。
- 如果提交因插值失败,使用相同的规范单标志形状和更正后的值重新运行一次;不要循环进行临时标志实验。
MEDIA 格式严格:
- 仅输出一行:
MEDIA:/absolute/path/to/file.mp4 - 保持
MEDIA:在单行上连续(切勿跨行拆分)。 - 同一气泡中没有额外文本。
- 指令周围无代码栅栏、项目符号或引号。
- 如果渲染失败:从稳定的工作区路径重试一次,然后输出 PNG 回退。
运行后比较证据(增强流程必需)
适用于成功运行后的 augmentation_and_al、e2e 和 e2e_super_resolution。
必需的完成输出(不要止步于原始输出 URL):
-
将完整输出 + 输入视频暂存到工作区本地路径:
bash scripts/stage_run_artifacts.sh \ --storage-url <storage_url> --dataset <dataset> --run-id <run_id> --video <video> -
从该本地运行副本渲染并排:
bash scripts/render_side_by_side.sh \ --run-local-dir "<repo>/media/vda/runs/<run_id>" --dataset <dataset> --video <video> -
从本地运行副本发出 MEDIA 并包括:
- 来自
<run_local_dir>/setup_b0/configs/manifest.yaml的增强摘要(<video>_aug0的sampled_vars) - 来自
<run_local_dir>/outputs/pseudo_labeled_augmented/<video>_aug0的自动标注摘要 - 对于
e2e/e2e_super_resolution,来自<run_local_dir>/outputs/pseudo_labeled/<video>的原始标签摘要
- 来自
如果 ffmpeg 不可用,从同一本地运行副本发出输入和增强 MEDIA,并仍提供增强 + 自动标注摘要。
对于演示运行(未提供用户视频),明确说明输入来自 nvidia/video-data-augmentation-demo。
支持文件
使用这些规范位置:
- 工作流:
assets/configs/osmo/*.yaml - 运行时脚本:
scripts/*.sh、scripts/*.py - 流程演练:
references/flows/*.md - 设置和分类:
references/setup.md、references/troubleshooting.md - 镜像和端点策略:
references/container-images.md、references/nim/README.md - 食谱调整:
assets/cookbooks/TUNING_GUIDE.md