paidf-augmentation

Par nvidia · skills

À utiliser lors de la création ou de la validation de configs YAML d'augmentation PAIDF, ou pour exécuter des inférences distantes Cosmos Transfer/Predict, d'édition d'image ou d'image vers vidéo.

npx skills add https://github.com/nvidia/skills --skill paidf-augmentation

Skill Pipeline d'Augmentation PAIDF

Pipeline unifié pour augmenter les données de caméra via les modèles d'IA génératives NVIDIA avec captionnage automatisé, génération et évaluation de qualité. BYOM (apportez votre propre modèle) : chaque modèle est atteint via un endpoint HTTP distant décrit par une entrée de la liste endpoints: de la config ; ajouter un modèle est généralement une modification de config, pas de code.

Purpose

Utilisez cette skill pour piloter le pipeline d'augmentation PAIDF de bout en bout :

  • Sélectionner le bon modèle — Cosmos Transfer 2.5 (transformer une vidéo), Cosmos Predict 2.5 (générer/étendre une vidéo), image-edit (éditer une image), ou image-to-video (animer une première frame : Cosmos3 ou Veo 3.1).
  • Créer et valider des configs YAML contre le schéma Pydantic PipelineConfig.
  • Configurer le captionnage (VLM, LLM, VLM-template déterministe, texte, ou fichier) et les évaluateurs (vérification d'hallucinations, vérification d'attributs, vérification VLM).
  • Lancer et exécuter l'inférence dans le conteneur Docker paidf-augmentation:1.1.0 (API distante uniquement — aucun poids de modèle local).

Utilisez cette skill lors de l'exécution d'inférence, de la création ou de l'édition de configs, du débogage d'erreurs de validation ou d'exécution, de l'ajout d'échantillons de données, de la configuration du captionnage, de l'ajustement des paramètres de génération, de l'enregistrement d'endpoints/adaptateurs BYOM, ou de la mise en place d'évaluateurs. Mots-clés déclencheurs : augmentation, cosmos transfer, cosmos predict, image edit, image-to-video, veo, augmentation d'attributs d'image, génération d'images défectueuses, captionnage, vérification d'attributs, validation de config.

Ne pas utiliser cette skill pour l'entraînement ou le fine-tuning de modèles, le déploiement de clusters ou d'endpoints NIM, ou le développement d'applications/bases de données sans rapport.

Prérequis

Prérequis Détail
Docker docker --version. L'image est API distante uniquement — elle ne contient aucun poids Cosmos/torch, donc l'inférence distante simple ne nécessite aucun GPU et aucun HF_TOKEN.
GPU NVIDIA (conditionnel) Uniquement pour le post-processeur data_processing.alignment (cupy) et le décodage H.264 (évaluateurs, data_processing.transcode). Voir Limitations.
URLs d'endpoints Une URL accessible par rôle utilisé par la config : le rôle du modèle (video_transfer/video_predict/image_edit/image2video) plus vlm/llm pour le captionnage et l'évaluation. Les valeurs par défaut sont des serveurs vLLM Qwen locaux (Qwen/Qwen3.6-27B-FP8 sur vlm, Qwen/Qwen2.5-14B-Instruct sur llm). Si l'utilisateur n'en a aucun en cours d'exécution, demandez les URLs.
Clés API (conditionnel) Uniquement pour les endpoints nécessitant une authentification. Transmises par une variable d'env nommée dans l'api_key_env de chaque endpoint — jamais codées en dur dans le YAML. Courant : VLM_API_KEY, LLM_API_KEY, VEO_API_KEY, BUILD_NVIDIA_API_KEY. Les endpoints locaux n'en ont besoin d'aucune.
Média d'entrée Une vidéo (transfer/predict) ou une image (edit/image2video) accessible par multistorageclient — chemin local, s3://, gs://, az://, ou HTTP.

Entrées

Résolvez chaque valeur dans cet ordre de précédence : fichier d'état → arguments explicites du prompt → contexte de l'agent → prompt utilisateur. Ne demandez à l'utilisateur que ce qui reste non résolu.

Entrée Requis Description
config_path Oui Chemin du YAML du pipeline, ex. configs/cookbook/video-data-augmentation/config_video_transfer_CT25_nim.yaml. S'il est absent, choisissez une config de démarrage parmi Supported Models et confirmez avec l'utilisateur.
input_media Oui Vidéo/image source → data[].inputs.rgb. Surcharger à l'exécution via data.0.inputs.rgb=....
output_paths Oui data[].output.{video,caption,metadata} ; evaluation optionnel.
model_name Oui augmentation.model.name — un id d'endpoint, un rôle, ou un nom de modèle connu. Chaîne libre, pas une énumération.
endpoint_urls Oui Une entrée endpoints[] par rôle utilisé.
api_key_env Si authentification Nom de la variable d'env par endpoint ; la valeur provient de l'environnement.
target_attributes Non captioning.llm.variables (ex. weather_condition, lighting_condition).
generation_params Non augmentation.parameters — pass-through ; seuls les paramètres définis sont envoyés.
seed Non Sous augmentation.parameters ; null = aléatoire, réinitialisé en cas de retry.

Modèle BYOM : endpoints, adaptateurs, rôles

Le pipeline n'embarque jamais d'SDK par modèle. À la place :

  • endpoints: est une liste. Chaque entrée a role, url, model (la chaîne du modèle sur le fil), un optionnel id (uniquement pour lever l'ambiguïté entre 2+ endpoints partageant un rôle), un optionnel adapter (contrat API ; défauts selon le rôle), api_key_env, et timeout.
  • Rôles: vlm, llm (captionnage + évaluateurs), image_edit, video_transfer (Cosmos Transfer), video_predict (Cosmos Predict), image2video (Cosmos3 / Veo).
  • Adaptateurs (contrats API): openai.chat.completions, openai.images.edits, openai.video.sync, openai.video.async, nim, passthrough. Le même modèle peut être servi sur différents contrats en changeant uniquement le champ adapter de l'endpoint.
  • Sélection du modèle: augmentation.model.name se résout en un endpoint par id, sinon par role, sinon par la map nom-de-modèle→rôle (image-editimage_edit, cosmos-transfer2.5video_transfer, cosmos-predictvideo_predict, cosmos3-image2videoimage2video).

Modèles Supportés

Quand l'utilisateur n'a pas spécifié de modèle, choisissez selon leur type d'entrée et objectif :

Type d'entrée → Objectif model.name Rôle / adaptateur par défaut Entrée → Sortie
Vidéo — changer les attributs de scène (météo, éclairage, style) cosmos-transfer2.5 video_transfer / nim Vidéo (+ contrôles) → Vidéo
Vidéo + texte — étendre ou prédire une continuation cosmos-predict video_predict / nim Vidéo+Texte → Vidéo
Texte uniquement — générer une vidéo de zéro cosmos-predict (inference_type: text2world) video_predict / nim Texte → Vidéo
Image — éditer des attributs spécifiques image-edit image_edit / nim (ou openai.chat.completions, openai.images.edits) Image → Image
Image — animer une première frame cosmos3-image2video (ou votre id Veo) image2video / openai.video.sync (Veo : openai.video.async) Image + prompt → Vidéo

Règle clé : vidéo en entrée + changement d'attribut de scène → Cosmos Transfer. Générer une nouvelle vidéo à partir d'un conditionnement texte/image/vidéo → Cosmos Predict. Édition d'image unique → image edit. Image fixe → clip en mouvement → image-to-video.

Tous les modèles s'exécutent via HTTP distant par un seul BaseExecutor ; il n'y a pas de local torchrun et pas de champ executor_type.

Usage

Étape 1 : Lancer le Conteneur Docker

Définissez PAIDF_IMAGE_ID sur l'ID d'image immutable sha256: enregistré à partir de la construction locale de confiance (ou fourni dans les métadonnées de version de confiance). L'ID d'image est spécifique à la compilation et à l'architecture, donc ce repository ne peut pas fournir une valeur universelle unique. Vérifiez que le tag de commodité mutable se résout toujours à l'ID attendu, puis exécutez l'ID directement :

set -e

PAIDF_IMAGE_ID="sha256:<expected-image-id>"
test "$(docker image inspect --format '{{.Id}}' paidf-augmentation:1.1.0)" = "$PAIDF_IMAGE_ID"
docker network inspect paidf >/dev/null 2>&1 || \
  docker network create paidf

docker run -it --rm \
  --network paidf \
  -v "$(pwd)/modules:/workspace/modules" \
  -v "$(pwd)/configs:/workspace/configs" \
  -v "$(pwd)/data:/workspace/data" \
  --entrypoint /bin/bash \
  "$PAIDF_IMAGE_ID"

Ne pas déduire PAIDF_IMAGE_ID du tag et immédiatement lui faire confiance ; comparez le tag contre le digest enregistré lors de la construction ou de la publication de l'image. Si une version de registry fournit un manifest signé, vérifiez cette signature avant de faire un pull et utilisez sa référence name:tag@sha256:<manifest-digest> à la place.

  • Networking : l'augmentation ne fait que des requêtes sortantes, elle n'a donc besoin d'aucun ports -p/--publish. Gardez le bridge partagé paidf montré ci-dessus pour les endpoints distants. Pour un autre conteneur de modèle, attachez-le au même bridge et utilisez son nom de conteneur dans l'URL de l'endpoint. Exécutez les modèles locaux hôte dans un conteneur sur ce bridge, ou utilisez un endpoint distant ; ne pas donner au conteneur d'augmentation l'accès au réseau hôte.
  • Clés API : préférez un gestionnaire de secrets de plateforme qui injecte les variables d'env requises. Sinon, exportez uniquement les clés requises et transmettez leurs noms avec -e VAR_NAME ; ne jamais monter ou charger un fichier d'identifiants large.
  • Aucun GPU nécessaire pour l'inférence distante — ajoutez --gpus pour data_processing.alignment et tout décodage H.264 ; choisissez un GPU non partagé avec un serveur de modèle occupé. Le conteneur s'exécute en tant qu'uid 10000 ; assurez-vous que data/ est inscriptible (ou --user "$(id -u):$(id -g)").

Sécurité : Le networking hôte est interdit pour ce workflow, en particulier quand des clés API sont présentes. Consultez pipeline-operations.md.

Étape 2 : Exécuter le Pipeline (À l'intérieur du Conteneur)

uv run --no-sync modules/cli.py --config configs/<config_file>.yaml

# Avec les surcharges CLI OmegaConf (syntaxe dot-list)
uv run --no-sync modules/cli.py --config configs/cookbook/video-data-augmentation/config_video_transfer_CT25_nim.yaml \
  data.0.inputs.rgb=/workspace/data/input.mp4 \
  augmentation.parameters.seed=42

Variables d'environnement : les clés se résolvent en variable api_key_env → la variable d'env par défaut du rôle. Si api_key_env nomme une variable non définie, la résolution revient à la valeur par défaut du rôle ; omettez-la pour les endpoints non authentifiés. LOG_LEVEL définit la journalisation.

Schéma de Configuration

Les configs sont validées contre PipelineConfig (modules/aug_utils/schema/) et ont sept sections de haut niveau : data, endpoints (une liste), pipeline, captioning, augmentation, data_processing, et evaluators. Le YAML complet par section est dans configuration-schema.md ; le flux d'exécution et les tâches d'édition courantes sont dans pipeline-operations.md.

Exemples

Les configs se trouvent sous configs/cookbook/<use-case>/. Consultez l'index du cookbook pour l'organisation des dossiers.

Cas d'usage Config(s)
Transfert d'attributs de scène vidéo (CT2.5, nim) config_video_transfer_CT25_nim.yaml
Image → vidéo config_image2video_cosmos3.yaml (VLM→LLM) · config_image2video_cosmos3_vlm_template.yaml (VLM→template) · config_image2video_veo31.yaml (Veo 3.1, async)
Image Attribute Augmentation config_image_edit_attribute_{chat_api,images_api,nim}.yaml · …_gemma_llm.yaml (swap LLM Gemma hébergé)
Defect Image Generation + MI alignment config_image_edit_defect_{chat_api,images_api}.yaml
Batch config generation workflow_example.yaml · attribute_distribution_1000_v1.yaml
Smart-space seed image / event video config_seed_image_gen_cosmos3_super_t2i_smart_spaces.yaml · config_event_video_gen_cosmos3_smart_spaces.yaml

Les détails par-config captioning / evaluator / adapter se trouvent dans config-decision-tree.md.

Dépannage

Exécutez toute l'inférence et la validation de schéma à l'intérieur du conteneur Docker pour un environnement cohérent. Pour les erreurs de validation de config, erreurs d'exécution/endpoint, et les timings typiques par étape, consultez troubleshooting.md.

Limitations

  • Inférence distante uniquement. Tous les modèles s'exécutent derrière des endpoints HTTP distants ; aucun poids local, pas de torchrun, pas d'executor_type, pas d'exécuteur Gradio.
  • GPU pour l'alignment et le décodage H.264. L'inférence distante ne nécessite aucun GPU. Un GPU CUDA est requis par data_processing.alignment (cupy) et par quoi que ce soit décodant H.264 — les évaluateurs et data_processing.transcode — car l'image embarque uniquement le décodeur matériel h264_cuvid (le décodage logiciel AVC est désactivé pour des raisons de licence). VP9 décode en logiciel. La sortie vidéo est VP9 uniquement.
  • Inférence uniquement. Ce pipeline augmente et génère des médias — il n'entraîne ou fine-tune aucun modèle.
  • L'authentification varie par endpoint. Les endpoints hébergés (ex. Veo) nécessitent une clé via api_key_env ; les endpoints locaux (ex. vLLM) n'en nécessitent aucune.

Fichiers de référence

Skills similaires