物理AI视频数据增强工作流编排器Skill physical-ai-video-data-augmentation

该技能用于在OSMO平台上编排视频数据增强与自动标注工作流,涵盖流程选择、预检、缓存准备、推理路径决策、提交时插值、监控及输出检索,支持多种流程(如仅标注、增强+标注、端到端并行/串行等),并处理凭据、GPU池、存储后端等预检。关键词:视频数据增强、自动标注、OSMO工作流、伪标注、VDA演示、物理AI、数据合成、视觉数据生成标注。

视觉数据生成标注 0 次安装 11 次浏览 更新于 9/5/2026
名称 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_KEYNGC_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 访问 osmoPATH 上,已登录,具有默认配置文件且已注册的 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 的一等输入。切勿仅凭令牌前缀拒绝;使用工作流注册表探测结果作为事实来源。

指令

  1. 根据用户意图选择工作流(auto_labelingaugmentation_and_ale2ee2e_super_resolution)。
  2. 在开始运行操作之前提供暂定的执行时间概述。
  3. 在提交前运行预检和就绪检查。
  4. 从当前数据集后端推导提交时值(切勿猜测 storage_url)。
  5. 使用显式插值值提交工作流并监控至完成。
  6. 检索输出,为增强流程提供并排比较证据,并总结任务结果。

使用 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)。
  • 除非用户明确要求该行为,否则绝不提议任意网络剪辑下载或占位视频。

仅收集缺失值:

  1. 数据集来源(优先使用用户显式提供的 dataset_url 或本地上传文件夹;否则默认使用 VDA 演示资产并继续)。
  2. 流程(auto_labelingaugmentation_and_ale2ee2e_super_resolution);未指定时默认使用 augmentation_and_al
  3. 用于所有 VDA 资源的 OSMO gpu_platform(当无歧义时自动选择 ONLINE 平台;仅当不存在有效选项时询问)。
  4. 端点模式(默认集群内 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 分钟,具体取决于流程和视频长度。

常见先决条件(所有流程)

  1. 凭据和控制平面预检

    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 列表中提供的提交时值(datasetrun_idgpu_platformvideostorage_urlskills_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-*)被绝对不支持。

  2. 存储插值策略

    storage_url 必须从当前运行的实际上传/数据集后端推导。

    dataset_url=azure://storiondevxah69/osmo-workflows/datasets/vda-demo
    storage_url=azure://storiondevxah69/osmo-workflows
    dataset=vda-demo
    

    切勿在非 S3 后端上静默默认使用过时的 s3:// 值。

  3. 推理策略(不可协商)

    • 默认复用健康的集群内持久 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。
  4. 就绪守卫

    osmo pool list --mode free
    osmo config show POD_TEMPLATE
    python3 scripts/pre_submit_guard.py --workflow assets/configs/osmo/<mode>.yaml
    
  5. 缓存自动修复

    如果 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 流程。仅当后端/前缀模糊或缓存设置失败时询问用户。

  6. 调度策略

    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_ale2ee2e_super_resolution

必需的完成输出(不要止步于原始输出 URL):

  1. 将完整输出 + 输入视频暂存到工作区本地路径:

    bash scripts/stage_run_artifacts.sh \
      --storage-url <storage_url> --dataset <dataset> --run-id <run_id> --video <video>
    
  2. 从该本地运行副本渲染并排:

    bash scripts/render_side_by_side.sh \
      --run-local-dir "<repo>/media/vda/runs/<run_id>" --dataset <dataset> --video <video>
    
  3. 从本地运行副本发出 MEDIA 并包括:

    • 来自 <run_local_dir>/setup_b0/configs/manifest.yaml 的增强摘要(<video>_aug0sampled_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/*.shscripts/*.py
  • 流程演练:references/flows/*.md
  • 设置和分类:references/setup.mdreferences/troubleshooting.md
  • 镜像和端点策略:references/container-images.mdreferences/nim/README.md
  • 食谱调整:assets/cookbooks/TUNING_GUIDE.md