CLIP
Modèle de pré-entraînement contrastif image-texte pour la classification d'images zero-shot et fine-tuned, la récupération image-texte et l'extraction d'embeddings. Le fine-tuning adapte l'espace d'embeddings image-texte partagé de CLIP à des données image-caption spécifiques au domaine.
Aucun checkpoint pré-entraîné NGC par défaut n'est requis. Quand train.pretrained_model_path, evaluate.checkpoint, inference.checkpoint ou export.checkpoint ne sont pas définis, TAO charge les poids pré-entraînés depuis HuggingFace pour les variantes SigLIP2/OpenCLIP ou depuis torch.hub pour Radio-CLIP, donc le premier usage nécessite un accès réseau ou un miroir local.
Actions supportées : train, evaluate, inference, export, gen_trt_engine.
Train Action Policy
Ce modèle est activé AutoML au niveau du modèle. Avant de traiter toute demande au stade train, lisez references/skill_info.yaml et résolvez l'override d'exécution depuis soit une valeur automl_policy explicite, soit la demande de workflow de l'utilisateur. Traitez les phrases comme « turn off AutoML », « disable AutoML », « no HPO » ou « plain training » comme automl_policy: off pour cette exécution uniquement ; sinon, par défaut sur auto. Quand automl_policy: auto, automl_enabled: true et à la fois schemas/train.schema.json et references/spec_template_train.yaml sont packagés, routez l'action train via tao-skill-bank:tao-run-automl par défaut avec le skill_dir de ce modèle. Préservez les overrides workflow/application pour les datasets, specs, répertoires de sortie, paramètres GPU/platform, checkpoints parents et automl_policy. Utilisez l'entraînement direct du modèle uniquement quand automl_policy: off ou quand le schema/template train packagé est manquant ; dans le cas du schema manquant, rapportez que AutoML est activé mais non exécutable pour ce modèle jusqu'à ce que les schemas soient générés.
Les actions non-train comme evaluate, inference, export et les flux deploy restent dans cette skill modèle. L'override automl_policy par exécution ne change pas les métadonnées du modèle.
Instructions
Utilisez cette skill pour les jobs NVIDIA TAO CLIP : entraînement, évaluation, inference d'embedding, export ONNX et génération de moteur TensorRT. Commencez par identifier l'action demandée, puis chargez uniquement les fichiers référencés nécessaires pour cette action : defaults.json pour les paramètres par défaut, config.json pour le câblage action/source de données, references/spec_template.yaml pour la forme complète de spec, et references/model_info.yaml pour les métadonnées SDK.
Pour les actions soutenues par des datasets, collectez les fichiers image, caption, liste ou prompt requis auprès de l'utilisateur et placez les chemins résolus dans spec_overrides. Pour export et gen_trt_engine, déduisez les artefacts parents du job upstream quand disponible ; sinon, exigez explicitement checkpoint, ONNX ou chemins moteur. Exécutez gen_trt_engine, TensorRT evaluate et TensorRT inference dans l'image TAO Deploy.
Pour les actions TensorRT TAO Deploy (gen_trt_engine, TensorRT evaluate et TensorRT inference), lisez d'abord references/tao-deploy-clip.md. Les templates spec deploy vivent dans le dossier references/ de cette skill avec le préfixe spec_template_deploy_*.yaml.
Training Requirements
- Dataset type: image_text
- Formats: dossiers image/caption personnalisés ou shards WebDataset
- Monitoring metric: val/t2i_mAP
Supported Models
- SigLIP2:
siglip2-so400m-patch16-256(défaut),siglip2-so400m-patch14-224,siglip2-so400m-patch14-384,siglip2-so400m-patch16-384,siglip2-so400m-patch16-512,siglip2-so400m-patch16-naflex - Radio-CLIP:
c-radio_v3-b,c-radio_v3-l,c-radio_v3-h,c-radio_v3-g - OpenCLIP / NV-CLIP:
ViT-L-14-SigLIP-CLIPA-224,ViT-L-14-SigLIP-CLIPA-336,ViT-H-14-SigLIP-CLIPA-224,ViT-H-14-SigLIP-CLIPA-336,ViT-H-14-SigLIP-CLIPA-574
Radio-CLIP nécessite que model.adaptor_name soit défini à siglip ou clip.
Per-Action Dataset Requirements
| Action | Spec Key | Source | Files | List? |
|---|---|---|---|---|
| train | dataset.train.datasets | train_datasets | image_dir: images.tar.gz, image_list_file: image_list.txt, caption_dir: captions.tar.gz | Yes |
| train | dataset.train.wds.root_dir | train_wds_dataset | répertoire root contenant des shards .tar |
No |
| train | dataset.train.wds.shard_list_file | train_wds_dataset | shards.txt listant les chemins des shards | No |
| train | dataset.val.datasets | eval_dataset | image_dir: images.tar.gz, image_list_file: image_list.txt, caption_dir: captions.tar.gz | Yes |
| evaluate | dataset.val.datasets | eval_dataset | image_dir: images.tar.gz, image_list_file: image_list.txt, caption_dir: captions.tar.gz | Yes |
| inference | inference.datasets | inference_dataset | image_dir: images.tar.gz | Yes |
| inference | inference.text_file | inference_dataset | prompts.txt | No |
| export | export.checkpoint | parent train job ou checkpoint explicite | checkpoint .pth, optionnel pour l'export pré-entraîné | No |
| gen_trt_engine | gen_trt_engine.onnx_file | parent export job ou ONNX explicite | clip_model.onnx | No |
Pour l'entraînement personnalisé, définissez dataset.train.type: custom et fournissez les entrées dataset.train.datasets. Les fichiers image et caption doivent partager le même nom de base. caption_file_suffix par défaut à .txt, et image_list_file est optionnel.
Pour l'entraînement WDS, définissez dataset.train.type: wds et fournissez au moins l'un de dataset.train.wds.root_dir ou dataset.train.wds.shard_list_file. root_dir est scanné récursivement pour les shards .tar. shard_list_file est un fichier texte avec un chemin de shard par ligne ; les lignes relatives se résolvent sous le répertoire du fichier liste à moins que root_dir soit aussi fourni, auquel cas elles se résolvent sous root_dir. Les données validation/evaluation restent au format personnalisé via dataset.val.datasets.
Typical Spec Overrides
Les overrides de source de données sont obligatoires pour les actions soutenues par dataset. Construisez les chemins à partir de la table Per-Action Dataset Requirements et incluez-les dans spec_overrides. Pour l'inference, fournissez au moins l'un de inference.datasets ou inference.text_file.
S3_TRAIN = "s3://bucket/data/train"
S3_WDS = "s3://bucket/data/wds"
S3_EVAL = "s3://bucket/data/eval"
S3_INFER = "s3://bucket/data/infer"
train, custom dataset:
{
"train.num_epochs": 10,
"dataset.train.type": "custom",
"dataset.train.datasets": [{"image_dir": f"{S3_TRAIN}/images.tar.gz", "image_list_file": f"{S3_TRAIN}/image_list.txt", "caption_dir": f"{S3_TRAIN}/captions.tar.gz"}],
"dataset.val.datasets": [{"image_dir": f"{S3_EVAL}/images.tar.gz", "image_list_file": f"{S3_EVAL}/image_list.txt", "caption_dir": f"{S3_EVAL}/captions.tar.gz"}],
}
train, WDS dataset:
{
"train.num_epochs": 10,
"dataset.train.type": "wds",
"dataset.train.wds.root_dir": f"{S3_WDS}",
"dataset.train.wds.shard_list_file": f"{S3_WDS}/shards.txt",
"dataset.train.wds.samples_per_shard": 10000,
"dataset.val.datasets": [{"image_dir": f"{S3_EVAL}/images.tar.gz", "image_list_file": f"{S3_EVAL}/image_list.txt", "caption_dir": f"{S3_EVAL}/captions.tar.gz"}],
}
evaluate:
{
"dataset.val.datasets": [{"image_dir": f"{S3_EVAL}/images.tar.gz", "image_list_file": f"{S3_EVAL}/image_list.txt", "caption_dir": f"{S3_EVAL}/captions.tar.gz"}],
}
Laissez evaluate.checkpoint non défini pour l'évaluation zero-shot avec des poids pré-entraînés. Définissez plutôt evaluate.trt_engine au lieu de evaluate.checkpoint pour l'évaluation TensorRT.
inference:
{
"inference.datasets": [{"image_dir": f"{S3_INFER}/images.tar.gz"}],
"inference.text_file": f"{S3_INFER}/prompts.txt",
}
L'inference écrit image_embeddings.h5 et/ou text_embeddings.h5 sous results_dir. Les embeddings sauvegardés sont L2-normalisés.
export:
{
"export.onnx_file": "${results_dir}/export/clip_model.onnx",
"export.encoder_type": "combined",
"export.batch_size": -1,
}
Définissez export.encoder_type: separate quand le déploiement doit utiliser des encodeurs vision et texte indépendants. L'export séparé écrit les variantes _vision.onnx et _text.onnx dérivées du export.onnx_file de base.
gen_trt_engine:
{
"gen_trt_engine.onnx_file": "${results_dir}/export/clip_model.onnx",
"gen_trt_engine.trt_engine": "${results_dir}/deploy/clip_model.engine",
"gen_trt_engine.batch_size": -1,
"gen_trt_engine.tensorrt.data_type": "fp16",
"gen_trt_engine.tensorrt.min_batch_size": 1,
"gen_trt_engine.tensorrt.opt_batch_size": 1,
"gen_trt_engine.tensorrt.max_batch_size": 16,
}
Eval Dataset
Optionnel pour l'entraînement. S'il est fourni, les métriques de validation sont calculées aux intervalles de validation. Requis pour evaluate.
Deploy Workflow
La skill expose gen_trt_engine comme l'action deploy. Dans les runners SDK générés, utilisez model_info["actions"]["gen_trt_engine"] et exécutez-le dans l'image TAO Deploy, non l'image PyTorch d'entraînement. La commande in-container est clip gen_trt_engine -e {config_path} ; l'usage direct de TAO Launcher épelle la même action comme tao deploy clip gen_trt_engine -e /path/to/spec.yaml.
TAO Deploy supporte les formats combiné et encodeurs séparés. Pour les encodeurs séparés, passez le chemin de base sans _vision ou _text à gen_trt_engine.onnx_file et gen_trt_engine.trt_engine ; TAO détecte ou écrit les fichiers vision/texte suffixés.
Utilisez evaluate.trt_engine pour l'évaluation TensorRT et inference.trt_engine pour l'extraction d'embeddings TensorRT. Ces chemins TensorRT s'exécutent aussi dans l'image TAO Deploy. L'usage direct de TAO Launcher épelle ceux-ci comme tao deploy clip evaluate et tao deploy clip inference.
Référence TAO Deploy complète : tao-deploy-clip.
Important Parameters
- model.type: Famille de backbone et résolution. Utilisez les variantes SigLIP2/OpenCLIP à résolution fixe pour le déploiement.
- model.adaptor_name: Requis pour Radio-CLIP. Définissez à
siglipouclip. - model.image_size: Résolution d'image du transform d'entraînement. Gardez-la alignée avec le backbone à résolution fixe sélectionné.
- train.num_epochs: Le fine-tuning CLIP converge souvent rapidement. Commencez avec 10-20 epochs pour l'adaptation de domaine, puis augmentez seulement si la perte de validation s'améliore encore.
- train.optim.vision_lr / train.optim.text_lr: Taux d'apprentissage des deux encodeurs. CLIP est sensible aux taux d'apprentissage élevés ; réduisez les deux si la perte est instable.
- model.freeze_vision_encoder / model.freeze_text_encoder: Les défauts sont false. Geler un encodeur peut aider quand le dataset est petit ou quand seule une modalité a besoin d'adaptation.
- train.loss_type:
siglipest recommandé pour SigLIP2 et Radio-CLIP. Utilisezclippour la perte softmax de style CLIP. - export.encoder_type:
combinedexporte un graphe ONNX unique.separateexporte les graphes vision et texte indépendants. - gen_trt_engine.tensorrt.data_type: Le déploiement TensorRT supporte
fp16etfp32.
Hardware
L'entraînement mono-GPU fonctionne pour les petits datasets. Utilisez 4+ GPUs pour les datasets de plus de 100 000 images ou les grands backbones. Utilisez 16 GB+ VRAM par GPU pour les exécutions petit/résolution fixe et des GPUs plus grands pour Radio-CLIP ou les variantes OpenCLIP haute résolution.
Error Patterns
CUDA out of memory: Réduisez dataset.train.batch_size, dataset.val.batch_size ou les tailles de batch TensorRT opt/max. Pour l'export/deploy, vérifiez export.input_height et export.input_width contre le backbone à résolution fixe sélectionné.
NaN loss: Le taux d'apprentissage est trop élevé pour le fine-tuning. Réduisez train.optim.vision_lr et train.optim.text_lr, augmentez train.optim.warmup_steps et vérifiez que les captions sont du texte valide non vide.
Zero retrieval ou classification quality: Vérifiez que les captions et prompts correspondent au vocabulaire d'étiquettes cible. CLIP compare les embeddings image et texte, donc le libellé du prompt importe.
Dataset size smaller than total batch size: La taille totale du batch est batch_size * num_gpus. Si le dataset, particulièrement la validation, a moins d'échantillons que cela, réduisez dataset.val.batch_size ou dataset.train.batch_size.
Radio-CLIP config validation error: Définissez model.adaptor_name explicitement à siglip ou clip.
Naflex export failure: siglip2-so400m-patch16-naflex est entraînement-only dans la documentation TAO actuelle et ne peut pas être exporté vers ONNX ou TensorRT. Utilisez une variante à résolution fixe comme siglip2-so400m-patch16-384.
ONNX external data missing: Les modèles plus grands que 2 GB exportent un fichier ONNX plus un fichier de données externes. Gardez les deux fichiers dans le même répertoire et ne renommez pas le fichier de données externes avant gen_trt_engine.
TensorRT shape mismatch: Quand vous utilisez l'export de batch dynamique, fournissez les profils de forme min/opt/max pour chaque entrée. La longueur de séquence texte doit correspondre à la longueur du tokenizer, communément 77 pour les tokenizers CLIP et 64 pour les tokenizers SigLIP2.
attention_mask warning: attention_mask est actuellement accepté par les graphes exportés pour la compatibilité, mais TAO ignore ses valeurs et peut le supprimer dans une version future. Ne construisez pas de nouveau code d'inference direct-ONNX qui dépend des valeurs de masque.
Error merging spec.yaml with schema: Une erreur de validation de config Hydra/OmegaConf. Les causes courantes sont mettant num_epochs ou num_gpus à la racine de spec au lieu de sous train.*, ou mélangeant la taille d'image d'entraînement (model.image_size) avec les dimensions d'export (export.input_height et export.input_width).
Spec Param / Parent Model Inference
Les mappages d'inference spécifiques au modèle appartiennent à ce fichier MD, non à config.json. Les runners générés doivent lire cette section et appliquer les mappages avec les helpers SDK avant create_job(). Cela reflète le flux infer_params.py ancien des microservices.
Mappages d'inference depuis TAO Core clip.config.json:
| Action | Spec Field | Inference Function | Meaning |
|---|---|---|---|
| evaluate | encryption_key |
key |
clé de chiffrement |
| evaluate | evaluate.checkpoint |
parent_model |
fichier modèle déduit du dossier résultats du job parent |
| evaluate | evaluate.trt_engine |
parent_model |
fichier modèle déduit du dossier résultats du job parent |
| evaluate | results_dir |
output_dir |
répertoire résultats du job courant |
| export | encryption_key |
key |
clé de chiffrement |
| export | export.checkpoint |
parent_model |
fichier modèle déduit du dossier résultats du job parent |
| export | export.onnx_file |
create_onnx_file |
chemin ONNX de sortie |
| export | results_dir |
output_dir |
répertoire résultats du job courant |
| gen_trt_engine | encryption_key |
key |
clé de chiffrement |
| gen_trt_engine | gen_trt_engine.onnx_file |
parent_model |
fichier modèle déduit du dossier résultats du job parent |
| gen_trt_engine | gen_trt_engine.trt_engine |
create_engine_file |
chemin moteur TensorRT de sortie |
| gen_trt_engine | results_dir |
output_dir |
répertoire résultats du job courant |
| inference | encryption_key |
key |
clé de chiffrement |
| inference | inference.checkpoint |
parent_model |
fichier modèle déduit du dossier résultats du job parent |
| inference | inference.trt_engine |
parent_model |
fichier modèle déduit du dossier résultats du job parent |
| inference | results_dir |
output_dir |
répertoire résultats du job courant |
| train | encryption_key |
key |
clé de chiffrement |
| train | results_dir |
output_dir |
répertoire résultats du job courant |
| train | train.pretrained_model_path |
ptm_if_no_resume_model |
PTM quand aucun checkpoint de reprise n'existe |
| train | train.resume_training_checkpoint_path |
resume_model |
fichier modèle déduit du dossier résultats du job courant |
Pour parent_model ou parent_model_folder, passez l'id du job enfant train/export/AutoML upstream comme parent_job_id. Le SDK liste le dossier résultats parent, filtre les artefacts checkpoint et retourne le fichier ou dossier modèle sélectionné. N'ajoutez pas ces mappages de retour à config.json et ne patchez pas les scripts runner générés pour deviner les chemins checkpoint.