Orchestrateur de workflow de recherche d'attributs pour agents IA physiques
Skill de workflow par défaut pour l'exécution PAS sur OSMO. Il gère la sélection du flux, les vérifications préalables, l'interpolation au moment de la soumission, la surveillance et la récupération des résultats.
Objectif
Exécuter le pipeline d'augmentation d'images PAS et d'étiquetage automatique de manière sûre et reproductible, des vérifications préalables au téléchargement des résultats.
Le pipeline PAS augmente les datasets de person-crop existants en générant
des variations contrôlées d'apparence/vêtements (domaine image) et des captions d'attributs synonymes (domaine texte). Il utilise le conteneur paidf-augmentation
pour l'augmentation par édition d'image avec vérification MCQ, et le
conteneur paidf-auto-labeling pour la captioning d'attributs de personne.
N'utilisez PAS ce skill pour des questions de tuning interne aux conteneurs.
Prérequis
Confirmez ces éléments avant d'exécuter les vérifications préalables ou toute soumission. Les secrets manquants
s'affichent en tant que USER_INPUT_REQUIRED: depuis scripts/preflight_credentials.sh.
| Prérequis | Comment satisfait | Utilisé pour |
|---|---|---|
| Clé API NGC (optionnelle) | NGC_API_KEY, NGC_CLI_API_KEY, ou token nvapi-* compatible |
Optionnel pour l'actualisation des identifiants nvcr_io; les références d'images PAS par défaut sont publiques |
| Token Hugging Face | HF_TOKEN (ou HUGGING_FACE_HUB_TOKEN), ou un token en cache à ~/.cache/huggingface/token |
Crée l'identifiant OSMO hf_token |
| Accès CLI OSMO | osmo sur PATH, connecté, avec un profil par défaut et un profil de credential DATA enregistré correspondant à storage_url |
Soumission/surveillance de workflows et listage/téléchargement d'objets |
| Pool GPU | Au moins un pool ONLINE dans osmo pool list --mode free |
Configuration de la planification + tâches worker |
| Endpoint Image Edit | NIM in-cluster qwen-image-edit-2511 (réutilisé si sain, sinon déployé via l'opérateur NIM); opt-in externe via image_edit_url |
Augmentation domaine image |
| Endpoint VLM | NIM in-cluster qwen3-vl (partagé avec VDA); opt-in externe via vlm_url |
Vérification MCQ et captioning d'attributs de personne |
| Endpoint LLM | NIM in-cluster qwen25-14b (partagé avec VDA); opt-in externe via llm_url |
Génération de questions MCQ |
Instructions
- Sélectionnez le workflow (
e2e,augmentation,auto_labeling) selon l'intention utilisateur. - Fournissez un aperçu d'exécution provisoire avant de démarrer les actions de run.
- Exécutez les vérifications préalables et de disponibilité avant la soumission.
- Dérivez les valeurs au moment de la soumission du backend de dataset actif (ne deviquez jamais
storage_url). - Soumettez le workflow avec des valeurs d'interpolation explicites et surveillez jusqu'à la fin.
- Récupérez les résultats et résumez les résultats des tâches.
Utilisez run_script(...) pour l'exécution de scripts. Exemples canoniques :
run_script("bash scripts/preflight_credentials.sh --workflow assets/configs/osmo/e2e.yaml")
Scripts disponibles
Utilisez --help au niveau du script pour les arguments exacts.
| Script | Rôle |
|---|---|
scripts/preflight_credentials.sh |
Vérifications préalables des secrets/plan de contrôle et accès aux images de workflow |
scripts/augmentation_worker.sh |
Worker d'augmentation par édition d'image (prétraitement, génération de config, augmentation, post-traitement) |
scripts/auto_labeling_worker.sh |
Worker de captioning d'attributs de personne |
scripts/endpoint_common.sh |
Assistants partagés de santé/auth d'endpoint |
Flux supportés
| Flux | YAML OSMO | Séquence de groupes | Utilisation typique |
|---|---|---|---|
e2e |
assets/configs/osmo/e2e.yaml |
setup -> augmentation -> auto_labeling | Pipeline complet : augmente les person crops puis génère les captions |
augmentation |
assets/configs/osmo/augmentation.yaml |
setup -> augmentation | Augmentation par édition d'image uniquement, pas de captioning |
auto_labeling |
assets/configs/osmo/auto_labeling.yaml |
setup -> auto_labeling | Captioning uniquement sur person crops pré-augmentés |
Choisissez le bon workflow selon la requête utilisateur
| Intention utilisateur | Workflow |
|---|---|
| « Augmenter les person crops et générer des captions » / « pipeline PAS complet » | e2e |
| « Générer des variations de vêtements » / « augmenter uniquement » / « édition d'image » | augmentation |
| « Captionner les images augmentées » / « générer des requêtes de recherche » / « étiqueter uniquement » | auto_labeling |
Levée d'ambiguïté : gérez les requêtes vagues avant validation
Préférez l'autonomie : posez une question seulement si l'information manquante bloque l'exécution.
Valeurs par défaut autonomes (NE PAS demander)
- Si le flux n'est pas explicitement demandé, defaultez à
e2e. - Si le cookbook n'est pas spécifié, defaultez à
default. - Si
n_augmentationsn'est pas spécifié, defaultez à3. - Après la réussite de chaque étape, passez à l'étape suivante immédiatement.
Déclencheurs qui doivent mettre en pause pour levée d'ambiguïté
| Entrée manquante | Pourquoi c'est important | Question à poser |
|---|---|---|
USER_INPUT_REQUIRED depuis les vérifications préalables |
Le secret requis est manquant | Posez une seule question concise de déblocage |
| Le préfixe du backend de stockage ne peut pas être dérivé | Un mauvais schéma cause une incompatibilité d'authentification de stockage à l'exécution | « Quel est le préfixe racine natif du backend pour cette exécution ? » |
| Aucun pool GPU ONLINE/plateforme | Le workflow ne peut pas être planifié | « Quel pool GPU/plateforme cette exécution doit-elle cibler ? » |
| Le déploiement NIM échoue et aucune URL externe donnée | Les workers ne peuvent pas se connecter aux modèles | « Fournissez les URLs d'endpoints Image Edit / VLM / LLM, ou accordez de la capacité GPU pour le déploiement de l'opérateur NIM. » |
Étape 0 : Sélectionnez le flux et collectez les entrées
Politique de données d'entrée
- PAS requiert des images person-crop organisées en sous-répertoires
<person_id>/<view>.jpg. - Préservez toujours les entrées de dataset fournies par l'utilisateur comme prioritaires.
- Ne remplacez jamais un dataset explicite utilisateur par des assets de démo.
- Si aucun dataset n'est fourni, demandez-en un (PAS n'a pas de dataset de démo intégré).
Collectez uniquement les valeurs manquantes :
- Source du dataset (
storage_url+ nomdataset). - Flux (
e2e,augmentation,auto_labeling); par défaute2e. gpu_platformOSMO (sélection automatique quand sans ambiguïté).- URLs d'endpoints pour Image Edit, VLM et LLM — optionnels; par défaut NIMs in-cluster et définis uniquement pour les endpoints externes.
- Nombre d'augmentations par person ID (par défaut : 3).
Générez un run stamp avant chaque soumission :
STAMP=$(cat /proc/sys/kernel/random/uuid | cut -c1-8)
RUN_ID="run-$STAMP"
Aperçu du temps d'exécution (requis avant le run)
Avant d'exécuter toute commande modifiante, fournissez un court aperçu d'ETA.
Plages de base :
| Phase | Durée typique |
|---|---|
| Identifiants + vérifications préalables | ~1-2 min |
| Soumission workflow + file d'attente/démarrage | ~1-3 min |
Durée d'exécution du workflow (dépend de la taille du dataset et de la latence d'endpoint) :
| Flux | Temps par image | Dataset typique (100 images, 3 augmentations) |
|---|---|---|
augmentation |
~2,5-3 min/image | ~4-5 heures |
auto_labeling |
~1-2 min/image | ~2-3 heures |
e2e |
~3,5-5 min/image | ~6-8 heures |
Préconditions communes (tous les flux)
-
Vérifications préalables des identifiants et du plan de contrôle
bash scripts/preflight_credentials.sh --workflow assets/configs/osmo/<flow>.yamlSi la sortie contient
USER_INPUT_REQUIRED:, posez une seule question concise de déblocage. -
Politique d'interpolation du stockage
storage_urldoit être dérivé du backend de dataset/upload réel. Ne defaultez jamais silencieusement à des valeurs obsolètes sur backends incompatibles. -
Politique d'inférence (non-négociable)
- Réutilisez par défaut les endpoints NIM persistants in-cluster sains
(
qwen-image-edit-2511,qwen3-vl,qwen25-14b). - S'ils manquent/ne sont pas sains, déployez automatiquement — c'est un prérequis, pas une
décision utilisateur. NE METTEZ PAS en pause pour demander. Voir
references/nim/README.mdpour le manifeste NIMService image-edit et l'installation de l'opérateur NIM VLM/LLM. - PAS ne lance PAS les serveurs d'inférence dans le workflow OSMO; les workers
consomment les endpoints
image_edit_url/vlm_url/llm_url. - Les endpoints externes sont opt-in uniquement (requête explicite ou URLs explicites);
seulement alors overridez les valeurs
*_urlà la soumission. - Ne réduisez/supprimez jamais les NIMs existants pour libérer des GPUs.
- Réutilisez par défaut les endpoints NIM persistants in-cluster sains
(
Soumission (tous les flux)
Chaque flux utilise la même forme de soumission; seul le YAML du workflow change.
SKILLS_DIR="$(cd "$(git rev-parse --show-toplevel)/skills/physical-ai-people-attribute-search" && 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> \
skills_dir="$SKILLS_DIR"
Les endpoints defaultent aux NIMs in-cluster (image_edit_url / vlm_url /
llm_url); déployez/réutilisez-les selon la politique d'inférence ci-dessus. Ne passez pas ces
paramètres sauf si vous utilisez des endpoints externes.
Note de compatibilité :
- Utilisez exactement un flag
--set-stringet passez toutes les paires clé/valeur après. - Ne répétez pas les flags
--set/--set-stringdans la même commande.
Overrides optionnels courants (ajoutez à la même liste --set-string) :
cookbook=<cookbook_name> \
n_augmentations=<count> \
image_edit_url=<image-edit-endpoint> \
vlm_url=<vlm-endpoint> \
llm_url=<llm-endpoint>
Surveillance OSMO
# Statut du workflow + états des tâches
osmo workflow query <workflow_id> --format-type json \
| jq '{status, tasks: [.groups[].tasks[] | {name, status, exit_code}]}'
# Logs pour une tâche spécifique
osmo workflow logs <workflow_id> --task <task_name> -n 200
# Récupération des résultats
osmo data list --no-pager <output_url>
osmo data download <output_url> <local_dir>/
Pour les runs attendus pour dépasser deux minutes, envoyez des mises à jour de heartbeat au moins tous les deux minutes.
Résultats post-run
Après la réussite de la complétion, le répertoire de sortie contient :
Pour augmentation / e2e :
<person_id>/aug_<n>/output.jpg— image multi-pane augmentée<person_id>/aug_<n>/output.txt— caption en langage naturel<person_id>/aug_<n>/output_metadata.json— résultats de vérificationdataset/augmented_data.json— dataset structuré avec attributs et requêtesdataset/augmented_imgs/— divisé par crops vue par vue
Pour auto_labeling :
caption_<id>/task/open_qa.json— captions d'attributs de personne groupés par question bank
Fichiers de support
Utilisez ces emplacements canoniques :
- Workflows :
assets/configs/osmo/*.yaml - Scripts d'exécution :
scripts/*.sh - Walkthroughs de flux :
references/flows/*.md - Configuration et triage :
references/setup.md,references/troubleshooting.md - Images :
references/container-images.md - Tuning de cookbook :
assets/cookbooks/default/README.md