tao-finetune-huggingface-model
NVIDIA/skills
Ajustez finement des modèles CV, VLM ou LLM de HuggingFace sur des GPU NVIDIA locaux à l’aide d’un conteneur PyTorch NGC, avec prise en charge de l’entraînement complet ou de l’entraînement LoRA, de la gestion des jeux de données et d’un éventuel envoi du modèle vers le Hub.
...Développer touttao-finetune-huggingface-model
Ajustement fin (fine-tuning) local sur GPU NVIDIA pour les modèles HuggingFace, basé sur une documentation récupérée en direct avec des références curatées comme filet de sécurité de repli. Un conteneur NGC, quelques scripts ciblés, une seule publication sur HF Hub. Suivez les règles de ce fichier ; n'improvisez pas.
Ordre d'autorité (du plus élevé au plus bas) :
- Entrée utilisateur —
model_id,dataset_id,training_method, et les overrides deconfig.yamlexplicites. - Recherche en direct — fiche modèle, exemple de dépôt HF, script d'ajustement fin de l'auteur, documentation des tâches HF, article scientifique ; toujours récupéré (Étape 3 +
references/research-priorities.md). - Références curatées (
references/*.md) — repli lorsque la recherche en direct est silencieuse ou ambiguë. - Mémoire des données d'entraînement — dernier recours ; suspect, à croiser avec (2)/(3).
La résolution des conflits entre (2) et (3), ainsi que la note sur les écarts de ligne source, se trouvent dans references/research-priorities.md.
Entrées
Requis :
model_id— ID du modèle HuggingFace, par ex.google/vit-base-patch16-224
Identifiants conditionnels (lus depuis l'environnement de session, exportés avant le lancement s'ils sont présents) :
HF_TOKEN— uniquement lorsque le modèle/dataset est gated (lecture) ou quepush_to_hubest activé (écriture) ; public + public +push_to_hub: falsen'en nécessite aucun. La valeur n'est jamais lue — seule sa présence est vérifiée via[ -n "$HF_TOKEN" ].WANDB_API_KEY,WANDB_PROJECT— uniquement lorsque WandB est activé ;WANDB_MODE=disabledpermet de s'exclure.
Dataset — exactement un :
dataset_id— ID du dataset HuggingFace (source :hf)local_dataset_path— dossier ou fichier local (source :local) ;local_dataset_formatoptionnel ∈ {auto, imagefolder, coco, voc, jsonl, arrow, parquet, csv} (par défaut : détection automatique).- (omission) — l'agent recommande des datasets populaires (source :
recommend)
Facultatifs (avec valeurs par défaut) :
task_type— détecté automatiquement à partir de la config + de la fiche modèlen_train=10000,n_eval=1000,n_epochs=3,lora_r=16output_dir=./output/<model_short_name></model_short_name>hf_model_repo— cible de publication ; si non défini et que HF_TOKEN a un accès en écriture, dérivé automatiquement comme<whoami>/<model_short_name>-finetuned</model_short_name></whoami>.push_to_hub=True— définir surFalsepour ignorerskip_baseline=False— ignorer l'évaluation de la ligne de base zéro-shot
Livrables facultatifs (désactivés par défaut) :
emit_progress_log: false # output_dir/PROGRESS.md (journal par étape)
emit_report: false # reports/report.{pdf,html} avec courbes et échantillons
emit_unit_tests: false # tests/ avec des tests de batch hétérogène sur fausses données
Toutes les valeurs résident dans output_dir/config.yaml. Ne jamais les coder en dur dans Python.
Plateforme d'exécution
Cette compétence orchestre ce qui doit être exécuté ; les compétences plateforme possèdent comment l'exécuter sur un hôte GPU — lisez-les d'abord.
| Préoccupation | Compétence autoritaire |
|---|---|
| Runtime hôte GPU (pilote 580, CUDA Toolkit 13.0, NVIDIA Container Toolkit 1.19.0) | `tao-skill-bank:tao-setup-nvidia-gpu-host` |
| Indicateurs `docker run`, authentification NGC, montages, transmission d'environnement | `tao-skill-bank:tao-run-on-docker` |
| Pré-vérification de tâche Docker locale (daemon, test fumée GPU) | `tao-skill-bank:tao-run-on-local-docker` |
Plateforme par défaut : local-docker — construire une image éphémère (run-<short>:latest</short>) et l'exécuter sur le daemon Docker local. Ne demander que si l'utilisateur a explicitement besoin d'un backend différent (GPU distant Brev, SLURM/Kubernetes) ; puis exécuter la Pré-vérification de cette plateforme d'abord et router les commandes docker run des Étapes 4–5 à travers elle. Les pré-vérifications de runtime GPU et de présence d'identifiants (valeurs jamais lues), l'ensemble canonique d'indicateurs docker run, la commande de sélection list_tao_platforms.py, et les indicateurs spécifiques au flux de travail (--entrypoint /bin/bash -lc, PYTORCH_CUDA_ALLOC_CONF, --name hft_train) se trouvent dans references/workflow-intake-preflight.md.
Références — filet de sécurité de repli
Consultées uniquement lorsque la recherche en direct est silencieuse, ambiguë ou indisponible ; les docs en direct l'emportent toujours pour le modèle spécifique et l'API actuelle. Chaque étape lie les références dont elle a besoin ; catalogue complet dans references/detailed-workflow.md.
Toujours activé : core-rules.md, error-playbook.md, compat-workarounds.md, model-discovery.md, dataset-recommendations.md, dataset-sources.md, dataset-patterns.md, hardware-container.md, research-priorities.md, cv-scripts.md, vlm-scripts.md, docker-runs.md, hub-push.md, pipeline-skill-template.md, deliverables.md. Activation optionnelle (lorsque leur indicateur/besoin s'applique) : progress-tracking.md, testing.md, reporting.md, workflow-intake-preflight.md, workflow-generate-train.md, workflow-push-rerun.md.
Règle : avant de se replier, consigner la source en direct essayée et pourquoi elle était insuffisante (config.yaml notes:, et PROGRESS.md si activé). Les marqueurs [FETCH LIVE] dans cv-scripts.md / vlm-scripts.md sont une liste de vérification de recherche, pas du code à inclure en ligne — re-récupérer l'URL listée si un bloc n'a pas de résultat Étape 3.
Règles fondamentales
Comportements non négociables. Version courte (énumération complète — liste des imports hallucinés, liste des éléments jamais sans approbation, tableaux complets de récupération d'erreurs et de dimensionnement matériel — dans references/core-rules.md, consulter avant toute décision au moment de l'entraînement) :
- Vos connaissances de la bibliothèque HF sont obsolètes. Récupérez les docs en direct (fiche modèle, exemple de dépôt HF, doc de tâche) avant d'écrire tout code ML — ne générez pas les args du formateur / collateur / transformations depuis la mémoire (Étape 3).
- Test de fumée sur de vraies données avec
--max_steps 1avant toute exécution complète ; aucune mise en lot sans test de fumée vérifié. - Ne substituez jamais silencieusement model_id, dataset_id, ou training_method — si ce que l'utilisateur a demandé ne charge pas, arrêtez et demandez.
- La récupération d'erreur est à modification minimale. OOM → diviser le batch par deux, doubler grad_accum, activer le point de contrôle de gradient (pas de changement LoRA sans approbation) ; NaN → réduire LR de 10× ; perte plate → inspecter le collateur ; même erreur 3× → arrêter et demander. Ne bouclez pas.
- Les colonnes du dataset sont vérifiées AVANT le collateur — renommer dans
prepare_data.py; restructuration nécessaire → arrêter et demander. - Règle empirique de dimensionnement matériel (bf16) : ≤3B → 24 GB, 7–13B → 80 GB, 30B+ → multi-GPU ou LoRA sur 1× 80 GB, 70B+ → 8× 80 GB ou LoRA. L'ajustement fin complet ne tiendra pas et aucun LoRA n'est demandé → demander avant de changer.
Flux de travail — 6 étapes
Passage unique, séquentiel ; chaque étape a une porte claire avant que la suivante ne commence.
Étape 1 — Inspecter & qualifier
Objectif : décider si l'on procède. Sonder le modèle + le dataset, appliquer acceptation/rejet, enregistrer les correctifs de compatibilité applicables, écrire le config.yaml initial.
Prérequis : MODEL_ID, DATASET_ID / local_dataset_path optionnels, HF_TOKEN optionnel, OUTPUT_DIR (par défaut ./output/<model_short_name></model_short_name>). Les sondages s'exécutent dans un conteneur Docker python:3.12-slim uniquement CPU (.probe/scratch monté en liaison) afin que l'hôte n'ait pas besoin de virtualenv — Docker doit exister d'abord. Garde de présence Docker, environnement du conteneur, invocation complète du sondage, et scripts de sondage modèle/dataset se trouvent dans references/workflow-intake-preflight.md, references/model-discovery.md et references/dataset-sources.md.
Exigences de sondage :
- Modèle : charger
AutoConfig, lire les tags de la fiche modèle, détecter la tâche à partir dearchitectures+ tags + exemples de carte (journalisation de repli dansmodel-discovery.md). - Dataset : pour les datasets recommandés, présenter d'abord 3-5 choix de
dataset-recommendations.md; pour les données locales, monter en liaison en lecture seule et utiliser la détection de format dedataset-sources.md. - Rejeter tôt si la config du modèle échoue, la tâche est hors périmètre, aucune source de recette n'existe, ou le dataset ne peut pas charger / correspondre au schéma de tâche.
- Évaluer
compat-workarounds.mdcontre le modèle/la tâche ; reporter les règles dépendantes du matériel à l'Étape 2.
Écrire le config.yaml initial (model_id, task, dataset_id ou local_dataset_path, research_sources: [] rempli à l'Étape 3, applicable_workarounds: de l'Étape 1, notes: [] pour les replis de référence, push_to_hub: true par défaut — modèle annoté dans references/workflow-intake-preflight.md). Optionnellement rm -rf "$OUTPUT_DIR/.probe"une fois la porte franchie.
Porte : config.yaml existe avec modèle, dataset, tâche, applicable_workarounds ; ne pas procéder si un champ est manquant.
Étape 2 — Audit matériel & image NGC
Objectif : vérifier Docker + GPU + disque, choisir l'image PyTorch NGC en direct, finaliser les règles de compatibilité dépendantes du matériel.
2a. Audit (porte dure) — trois vérifications (commandes dans references/workflow-intake-preflight.md) :
- Runtime hôte GPU —
setup-nvidia-gpu-host.sh --backend docker --check-onlydetao-setup-nvidia-gpu-host; en cas d'échec, demander l'approbation puis relancer avec--install --yes. - Avertissement disque libre — override via
MIN_DISK_GB(par défaut 100 GB) ; recommander ≥ 100 GB pour la base NGC (~20 GB) + cache HF + checkpoints + données. - Présence d'identifiants conditionnels (de l'environnement de session, valeurs jamais lues) —
HF_TOKENuniquement lorsque gated oupush_to_hubest activé ;WANDB_*uniquement lorsque WandB est activé.
Ne pas procéder à l'Étape 4 en cas d'échec dur — le docker build de l'Étape 4 tire une base NGC de 20+ GB, et un nvidia-container-toolkit manquant ne se manifeste que plus tard par could not select device driver "" with capabilities: [[gpu]]. Enregistrer gpu_count, gpu_name, driver_major, vram_gb_per_gpu dans config.yaml.
2b. Choisir l'image NGC (en direct) : depuis la matrice de support des frameworks de deep learning NVIDIA (https://docs.nvidia.com/deeplearning/frameworks/support-matrix/index.html), section conteneur PyTorch NGC, choisir l'image de version la plus élevée où Min driver ≤ detected driver_major et CUDA du conteneur ≤ CUDA Toolkit hôte (correspondre étroitement pour aligner cuDNN / TensorRT). Ne pas rejeter une image pour un tag PyTorch aN/bN/rcN — NGC valide l'image complète ; choisir celle la plus récente alignée sur CUDA et laisser compat-workarounds.md gérer les problèmes par version. Si la matrice est inaccessible, utiliser les replis dans references/hardware-container.md ; défaut nvcr.io/nvidia/pytorch:24.09-py3 (driver ≥ 545 ; bug SDPA+GQA — si num_key_value_heads , définirattn_implementation: "eager").Enregistrerngc_imagedansconfig.yaml.
2c. Réévaluer les règles de compatibilité dépendantes du matériel : relancer l'analyse de compat-workarounds.md pour les entrées dont le detect nécessite hw ; mettre à jour applicable_workarounds: sur place.
2d. Vérification d'ajustement du modèle : estimer param_bytes ≈ 2×param_count (bf16) ; si
60% de
vram_gb_per_gpu × 1e9, recommander LoRA dans le résumé visible par l'utilisateur.
Porte : config.yaml contient ngc_image, gpu_count, gpu_name, driver_major, vram_gb_per_gpu ; correctifs de compatibilité dépendants du matériel enregistrés.
Étape 3 — Rechercher la recette
Objectif : récupérer la recette en direct — les connaissances sur les données d'entraînement de transformers/trl/peft sont suspectes, donc l'Étape 3 est non négociable. Parcourir references/research-priorities.md dans l'ordre de priorité (Priorité 1 → 6) ; s'arrêter une fois que vous avez, pour la tâche détectée :
AutoModel/ classe de processeur- Transformations d'entraînement + évaluation
- Collateur
compute_metrics- Indices d'hyperparamètres (LR, taille de batch, époques, planificateur)
Enregistrer les résultats dans meta/recipe.md, ajouter les URL sources à config.yaml: research_sources:. Un emplacement sans résultat en direct se replie sur l'échafaudage correspondant (cv-scripts.md / vlm-scripts.md), consigné comme "repli vers échafaudage — aucune source en direct pour " sous notes:. Les règles de résolution de conflit sont dans references/research-priorities.md.
Porte : chaque emplacement requis rempli, avec une URL source ou une note de repli échafaudage.
Étape 4 — Générer le projet & test de fumée
Objectif : écrire tous les scripts, construire l'image, préparer les données, exécuter un test de fumée en 1 étape sur de vraies données (un docker build, deux docker runs).
4a. Générer les fichiers du projet dans output_dir/ : config.yaml, Dockerfile, requirements.txt, prepare_data.py, train.py, run_eval.py, infer.py, merge_lora.py optionnel, tests/ optionnel, .gitignore. La recherche en direct Étape 3 est l'autorité ; cv-scripts.md / vlm-scripts.md donnent uniquement la forme de l'échafaudage. Appliquer chaque entrée applicable_workarounds comme bloc Dockerfile, épingle de exigence, override de config, ou variable d'environnement d'exécution. Règles dures : run_eval.py conserve ce nom de fichier exact (évite les collisions avec le package HF evaluate) ; chaque .py généré commence par l'en-tête de copyright Apache-2.0 NVIDIA et tout émetteur échoue s'il est manquant ; emit_unit_tests: true génère et exécute des tests selon references/testing.md. Corps des scripts, forme du Dockerfile, et contrat d'émetteur se trouvent dans references/workflow-generate-train.md.
4b. Construire, préparer, fumer — docker build -t run-<short>:latest .</short>, puis prepare_data et l'exécution --smoke --max_steps 1 (references/docker-runs.md§1-3). Critères de passage du test de fumée (dans logs/smoke.log) :
- Aucune exception
- La perte est finie (pas
0.0, pasNaN) grad_norm > 0à l'étape 1
Si emit_unit_tests: true, exécuter également pytest tests/ dans le conteneur. Tout échec → ARRÊTER.
4c. Résumé de pré-vérification — avant l'entraînement complet, imprimer et vérifier : URL de référence, colonnes du dataset, cible Hub, cible de surveillance, image NGC, matériel, perte/test de norm grad de fumée.
Porte : fichiers du projet écrits, image construite, test de fumée RÉUSSI, pré-vérification sans champs vides.
Étape 5 — Entraîner, évaluer, inférer
Objectif : évaluation de base, entraînement complet, évaluation post-entraînement, fusion LoRA optionnelle, 5 échantillons d'inférence (toutes les commandes : references/docker-runs.md §4-8).
| Sous-étape | docker-runs.md | Ignorer si |
|---|---|---|
| 5a. Évaluation de base (zéro-shot) | §4 | `skip_baseline: true` |
| 5b. Entraînement complet (détaché) | §5 | — |
| 5c. Fusion LoRA | §6 | pas VLM+LoRA |
| 5d. Évaluation post-entraînement | §7 | — |
| 5e. Inférence (5 échantillons) | §8 | — |
Multi-GPU : préfixer torchrun --nproc_per_node=$gpu_count à python train.py.
Pendant que l'entraînement diffuse, surveiller docker logs -f hft_train : la perte devrait diminuer dans 10-20 étapes ; perte plate (bug collateur/masquage étiquette), NaN (LR trop élevé), et OOM arrêtent tous l'exécution — récupération dans references/core-rules.md. Si emit_report: true, exécuter report.py après l'Étape 5e selon references/reporting.md.
Porte : tout ce qui suit :
checkpoints/final/(oucheckpoints/merged/pour LoRA) existereports/eval_results.jsoncontient une métrique principale numériquereports/baseline_results.jsonexiste (sauf si ignoré)reports/inference_samples/contient 5 échantillons- l'URL wandb montre une perte descendante
Étape 6 — Publier & émettre la compétence de relance
Objectif : publier l'exécution et la rendre reproductible sans nouvelle recherche.
Publier selon references/hub-push.md (poids, fiche modèle, JSONs eval/baseline, config.yaml, Dockerfile, requirements.txt, échantillons d'inférence, rapports lorsqu'émis) sauf si push_to_hub: false est explicite. Émettre <output_dir>/skills/run-<short>/SKILL.md</short></output_dir> depuis references/pipeline-skill-template.md — substituer chaque espace réservé, inclure les métadonnées YAML complètes + le commentaire HTML de copyright NVIDIA, et faire échouer tout émetteur s'ils sont manquants.
Porte (critères de fin) : tout ce qui suit :
- Porte Étape 5 franchie
- Le dépôt HF Hub existe à l'URL résolue avec poids + carte +
results/(sauf sipush_to_hub: false) <output_dir>/skills/run-<short>/SKILL.md</short></output_dir>existe, aucun<placeholder></placeholder>laissé, avec métadonnées + commentaire HTML de copyright selonpipeline-skill-template.md
Message final : URL wandb, URL HF Hub, baseline -> métrique principale ajustée fin, reports/inference_samples/, et le chemin de la compétence de relance.
Jeu de gestion d'erreurs
En cas d'erreur d'exécution connue, consulter le tableau symptôme → correction minimale dans references/error-playbook.md (point d'entrée NGC, régressions PyTorch/Transformers, ABI numpy, bbox Albumentations, PEFT/checkpointing, largeur cible LoRA, lacunes d'augmentation CV, OOM à l'étape 0) avant de redessiner quoi que ce soit. Lorsqu'une ligne de ce tableau se déclenche deux fois sur plusieurs exécutions, la soulever dans compat-workarounds.md avec une règle detect — appliquée automatiquement à l'Étape 1 avant que l'erreur ne se produise.
Style de communication
- Concis. Pas de remplissage, pas de répétition de la demande ; réponses d'un mot lorsque approprié.
- Toujours inclure les URL directes du Hub et de wandb lors de la référence aux artefacts.
- En cas d'erreur : indiquer ce qui s'est mal passé, pourquoi, ce que vous avez changé — pas de menus.
- Ne présentez jamais "Option A/B/C" pour une demande ayant une réponse claire. Agissez.
Exemples de pipelines
- tao-rerun-convnext-cifar10
- tao-rerun-detr-cppe5
- tao-rerun-segformer-foodseg103
- tao-rerun-smolvlm-vqav2
---
name: tao-finetune-huggingface-model
description: Fine-tune HuggingFace CV, VLM, or LLM models on local NVIDIA GPUs using an NGC PyTorch container, with support for full or LoRA training, dataset handling, and optional model push to the Hub.
license: Apache-2.0
---
<!-- Copyright (c) 2026, NVIDIA CORPORATION. All rights reserved. Licensed under the Apache License, Version 2.0; see http://www.apache.org/licenses/LICENSE-2.0 -->
# tao-finetune-huggingface-model
Local NVIDIA GPU fine-tuning for HuggingFace models, grounded in live-fetched
documentation with curated references as a fallback safety net. One NGC container,
a few focused scripts, one push to HF Hub. Follow the rules in this file; don't
improvise.
**Order of authority (highest first):**
1. **User input** — explicit `model_id`, `dataset_id`, `training_method`, `config.yaml` overrides.
2. **Live research** — model card, HF repo example, author finetune script, HF task docs, paper; always fetched (Step 3 + `references/research-priorities.md`).
3. **Curated references** (`references/*.md`) — fallback when live research is silent/ambiguous.
4. **Your training-data memory** — last resort; suspect, cross-check against (2)/(3).
Conflict resolution between (2) and (3) and the source-line discrepancy note are
in `references/research-priorities.md`.
---
## Inputs
**Required:**
- `model_id` — HuggingFace model ID, e.g. `google/vit-base-patch16-224`
**Conditional credentials (read from the session environment, exported before launching when present):**
- `HF_TOKEN` — only when the model/dataset is **gated** (read) or `push_to_hub` is on (write); public + public + `push_to_hub: false` needs none. Value never read — presence-only via `[ -n "$HF_TOKEN" ]`.
- `WANDB_API_KEY`, `WANDB_PROJECT` — only when WandB is enabled; `WANDB_MODE=disabled` opts out.
**Dataset — exactly one:**
- `dataset_id` — HuggingFace dataset ID *(source: `hf`)*
- `local_dataset_path` — local folder or file *(source: `local`)*; optional
`local_dataset_format` ∈ {auto, imagefolder, coco, voc, jsonl, arrow, parquet,
csv} (default: auto-detect).
- *(omit)* — agent recommends popular datasets *(source: `recommend`)*
**Optional (have defaults):**
- `task_type` — auto-detected from config + model card
- `n_train=10000`, `n_eval=1000`, `n_epochs=3`, `lora_r=16`
- `output_dir=./output/<model_short_name>`
- `hf_model_repo` — push target; if unset and HF_TOKEN has write access,
auto-derived as `<whoami>/<model_short_name>-finetuned`.
- `push_to_hub=True` — set to `False` to skip
- `skip_baseline=False` — skip zero-shot baseline eval
**Optional deliverables (off by default):**
```yaml
emit_progress_log: false # output_dir/PROGRESS.md (per-step journal)
emit_report: false # reports/report.{pdf,html} with curves & samples
emit_unit_tests: false # tests/ with fake-data heterogeneous-batch tests
```
All values live in `output_dir/config.yaml`. Never hardcode in Python.
---
## Execution platform
This skill orchestrates *what* to run; the platform skills own *how* to run it on
a GPU host — read them first.
| Concern | Authoritative skill |
|---|---|
| GPU host runtime (driver 580, CUDA Toolkit 13.0, NVIDIA Container Toolkit 1.19.0) | [`tao-skill-bank:tao-setup-nvidia-gpu-host`](../../platform/tao-setup-nvidia-gpu-host/SKILL.md) |
| `docker run` flags, NGC auth, mounts, env passthrough | [`tao-skill-bank:tao-run-on-docker`](../../platform/tao-run-on-docker/SKILL.md) |
| Local Docker job preflight (daemon, GPU smoke) | [`tao-skill-bank:tao-run-on-local-docker`](../../platform/tao-run-on-local-docker/SKILL.md) |
**Default platform:** `local-docker` — build a one-off image (`run-<short>:latest`)
and run it on the local Docker daemon. Ask only when the user explicitly needs a
different backend (Brev remote GPU, SLURM/Kubernetes); then run that platform's
Preflight first and route the Steps 4–5 `docker run` commands through it. The
GPU-runtime and presence-only credential preflights (values never read), the
canonical `docker run` flag set, the `list_tao_platforms.py` selection command, and
the workflow-specific flags (`--entrypoint /bin/bash -lc`, `PYTORCH_CUDA_ALLOC_CONF`,
`--name hft_train`) are in `references/workflow-intake-preflight.md`.
---
## References — fallback safety net
Consulted **only** when live research is silent, ambiguous, or unavailable; live
docs always win for the specific model and current API. Each step links the
references it needs; full catalog in `references/detailed-workflow.md`.
Always-on: `core-rules.md`, `error-playbook.md`, `compat-workarounds.md`,
`model-discovery.md`, `dataset-recommendations.md`, `dataset-sources.md`,
`dataset-patterns.md`, `hardware-container.md`, `research-priorities.md`,
`cv-scripts.md`, `vlm-scripts.md`, `docker-runs.md`, `hub-push.md`,
`pipeline-skill-template.md`, `deliverables.md`. Opt-in (when their flag/need
applies): `progress-tracking.md`, `testing.md`, `reporting.md`,
`workflow-intake-preflight.md`, `workflow-generate-train.md`, `workflow-push-rerun.md`.
**Rule:** before falling back, log the live source you tried and why it was
insufficient (`config.yaml` `notes:`, and PROGRESS.md if enabled). `[FETCH LIVE]`
markers in `cv-scripts.md` / `vlm-scripts.md` are a research checklist, not code to
inline — refetch the listed URL if a block has no Step 3 finding.
---
## Core rules
Non-negotiable behaviors. **Short version** (full enumeration —
hallucinated-imports list, never-without-approval list, full error-recovery and
hardware-sizing tables — in `references/core-rules.md`, consult before any
training-time decision):
- **Your HF-library knowledge is outdated.** Fetch live docs (model card, HF
repo example, task doc) before writing any ML code — don't generate trainer
args / collator / transforms from memory (Step 3).
- **Smoke-test on real data with `--max_steps 1`** before any full run; no batch
launches without a verified smoke.
- **Never silently substitute** model_id, dataset_id, or training_method — if
what the user asked for doesn't load, stop and ask.
- **Error recovery is minimal-change.** OOM → halve batch, double grad_accum,
enable gradient checkpointing (no LoRA switch without approval); NaN → reduce
LR 10×; flat loss → inspect collator; same error 3× → stop and ask. Don't loop.
- **Dataset columns verified BEFORE the collator** — rename in `prepare_data.py`;
restructuring needed → stop and ask.
- **Hardware-sizing thumb (bf16):** ≤3B → 24 GB, 7–13B → 80 GB, 30B+ → multi-GPU
or LoRA on 1× 80 GB, 70B+ → 8× 80 GB or LoRA. Full finetune won't fit and no
LoRA requested → ask before switching.
---
## Workflow — 6 steps
Single pass, sequential; each step has a clear gate before the next begins.
### Step 1 — Inspect & qualify
**Goal:** decide whether to proceed. Probe model + dataset, apply accept/reject,
register applicable compat fixes, write the initial `config.yaml`.
Prerequisites: `MODEL_ID`, optional `DATASET_ID` / `local_dataset_path`,
optional `HF_TOKEN`, `OUTPUT_DIR` (default `./output/<model_short_name>`). Probes
run in a CPU-only `python:3.12-slim` Docker container (bind-mounted `.probe/`
scratch) so the host needs no virtualenv — Docker must exist first. Docker-presence
guard, container env, full probe invocation, and the model/dataset probe scripts
are in `references/workflow-intake-preflight.md`, `references/model-discovery.md`,
and `references/dataset-sources.md`.
Probe requirements:
- Model: load `AutoConfig`, read model-card tags, detect task from
`architectures` + tags + card examples (fallback logging in `model-discovery.md`).
- Dataset: for recommended datasets, first present 3-5 choices from
`dataset-recommendations.md`; for local data, bind-mount read-only and use
`dataset-sources.md` format detection.
- Reject early if the model config fails, the task is out of scope, no recipe
source exists, or the dataset cannot load / match the task schema.
- Evaluate `compat-workarounds.md` against the model/task; defer hardware-dependent
rules to Step 2.
Write the initial `config.yaml` (`model_id`, `task`, `dataset_id` or
`local_dataset_path`, `research_sources: []` filled in Step 3,
`applicable_workarounds:` from Step 1, `notes: []` for reference fallbacks,
`push_to_hub: true` default — annotated template in
`references/workflow-intake-preflight.md`). Optionally `rm -rf "$OUTPUT_DIR/.probe"`
once the gate is met.
**Gate:** `config.yaml` exists with model, dataset, task, applicable_workarounds;
do not proceed if any field is missing.
---
### Step 2 — Hardware audit & NGC image
**Goal:** verify Docker + GPU + disk, pick the NGC PyTorch image live, finalize
hardware-dependent compat rules.
**2a. Audit (hard gate)** — three checks (commands in
`references/workflow-intake-preflight.md`):
1. GPU host runtime — `tao-setup-nvidia-gpu-host`'s
`setup-nvidia-gpu-host.sh --backend docker --check-only`; on fail, ask approval
then re-run with `--install --yes`.
2. Free-disk soft-warn — override via `MIN_DISK_GB` (default 100 GB); recommend
≥ 100 GB for NGC base (~20 GB) + HF cache + checkpoints + data.
3. Conditional credential presence (from the session environment, values never
read) — `HF_TOKEN` only when gated or `push_to_hub` is on; `WANDB_*` only when
WandB is on.
**Do not proceed to Step 4 on a hard-fail** — Step 4's `docker build` pulls a
20+ GB NGC base, and a missing `nvidia-container-toolkit` only surfaces later as
`could not select device driver "" with capabilities: [[gpu]]`. Record `gpu_count`,
`gpu_name`, `driver_major`, `vram_gb_per_gpu` in `config.yaml`.
**2b. Pick NGC image (live):** from the NVIDIA Deep Learning Frameworks support
matrix (<https://docs.nvidia.com/deeplearning/frameworks/support-matrix/index.html>),
PyTorch NGC container section, pick the highest-versioned image where
`Min driver ≤ detected driver_major` and container CUDA `≤` host CUDA Toolkit
(match closely so cuDNN / TensorRT line up). Do **not** reject an image for an
`aN`/`bN`/`rcN` PyTorch tag — NGC validates the full image; pick the newest
CUDA-aligned one and let `compat-workarounds.md` handle per-version issues. If the
matrix is unreachable, use the fallbacks in `references/hardware-container.md`;
default `nvcr.io/nvidia/pytorch:24.09-py3` (driver ≥ 545; SDPA+GQA bug — if
`num_key_value_heads < num_attention_heads`, set `attn_implementation: "eager"`).
Record `ngc_image` in `config.yaml`.
**2c. Re-evaluate hardware-dependent compat rules:** re-run the
`compat-workarounds.md` walk for entries whose `detect` needs `hw`; update
`applicable_workarounds:` in place.
**2d. Model-fit check:** estimate `param_bytes ≈ 2×param_count` (bf16); if
> 60% of `vram_gb_per_gpu × 1e9`, recommend LoRA in the user-facing summary.
**Gate:** `config.yaml` has `ngc_image`, `gpu_count`, `gpu_name`, `driver_major`,
`vram_gb_per_gpu`; hardware-dependent compat fixes recorded.
---
### Step 3 — Research the recipe
**Goal:** fetch the live recipe — training-data knowledge of
`transformers`/`trl`/`peft` is suspect, so Step 3 is non-negotiable. Walk
`references/research-priorities.md` in priority order (Priority 1 → 6); stop once
you have, for the detected task:
- `AutoModel` / processor class
- Train + eval transforms
- Collator
- `compute_metrics`
- Hyperparameter hints (LR, batch size, epochs, scheduler)
Record findings in `meta/recipe.md`, append source URLs to
`config.yaml: research_sources:`. A slot with no live finding falls back to the
matching scaffold (`cv-scripts.md` / `vlm-scripts.md`), logged as "fallback to
scaffold — no live source for <slot>" under `notes:`. Conflict-resolution rules
are in `references/research-priorities.md`.
**Gate:** every required slot filled, with a source URL or scaffold-fallback note.
---
### Step 4 — Generate project & smoke-test
**Goal:** write all scripts, build the image, prepare data, run a 1-step smoke on
real data (one `docker build`, two `docker run`s).
**4a. Generate project files** in `output_dir/`: `config.yaml`, `Dockerfile`,
`requirements.txt`, `prepare_data.py`, `train.py`, `run_eval.py`, `infer.py`,
optional `merge_lora.py`, optional `tests/`, `.gitignore`. Live Step 3 research is
authority; `cv-scripts.md` / `vlm-scripts.md` give scaffold shape only. Apply every
`applicable_workarounds` entry as a Dockerfile block, requirement pin, config
override, or runtime env var. Hard rules: `run_eval.py` keeps that exact filename
(avoids colliding with the HF `evaluate` package); every generated `.py` starts
with the NVIDIA Apache-2.0 copyright header and any emitter fails when it is
missing; `emit_unit_tests: true` generates and runs tests per
`references/testing.md`. Script bodies, Dockerfile shape, and the emitter contract
are in `references/workflow-generate-train.md`.
**4b. Build, prepare, smoke** — `docker build -t run-<short>:latest .`, then
`prepare_data` and the `--smoke --max_steps 1` run (`references/docker-runs.md`
§1-3). Smoke pass criteria (in `logs/smoke.log`):
- No exception
- Loss is finite (not `0.0`, not `NaN`)
- `grad_norm > 0` at step 1
If `emit_unit_tests: true`, also run `pytest tests/` in the container. Any failure → STOP.
**4c. Preflight summary** — before full training, print and verify: reference URL,
dataset columns, Hub target, monitoring target, NGC image, hardware, smoke loss/grad norm.
**Gate:** project files written, image built, smoke PASSED, preflight has no
blank fields.
---
### Step 5 — Train, evaluate, infer
**Goal:** baseline eval, full training, post-train eval, optional LoRA merge, 5
inference samples (all commands: `references/docker-runs.md` §4-8).
| Sub-step | docker-runs.md | Skip if |
|---|---|---|
| 5a. Baseline eval (zero-shot) | §4 | `skip_baseline: true` |
| 5b. Full training (detached) | §5 | — |
| 5c. LoRA merge | §6 | not VLM+LoRA |
| 5d. Post-train eval | §7 | — |
| 5e. Inference (5 samples) | §8 | — |
Multi-GPU: prepend `torchrun --nproc_per_node=$gpu_count` to `python train.py`.
While training streams, watch `docker logs -f hft_train`: loss should drop within
10-20 steps; flat loss (collator/label-masking bug), NaN (LR too high), and OOM
all stop the run — recovery in `references/core-rules.md`. If `emit_report: true`,
run `report.py` after Step 5e per `references/reporting.md`.
**Gate:** all of:
- `checkpoints/final/` (or `checkpoints/merged/` for LoRA) exists
- `reports/eval_results.json` has a numeric primary metric
- `reports/baseline_results.json` exists (unless skipped)
- `reports/inference_samples/` has 5 samples
- wandb URL shows descending loss
---
### Step 6 — Push & emit rerun skill
**Goal:** publish the run and make it reproducible without re-research.
Push per `references/hub-push.md` (weights, model card, eval/baseline JSONs,
`config.yaml`, `Dockerfile`, `requirements.txt`, inference samples, reports when
emitted) unless `push_to_hub: false` is explicit. Emit
`<output_dir>/skills/run-<short>/SKILL.md` from
`references/pipeline-skill-template.md` — substitute every placeholder, include
full YAML metadata + the NVIDIA copyright HTML comment, and make any emitter fail
if those are missing.
**Gate (Done criteria):** all of:
- Step 5 gate met
- HF Hub repo exists at the resolved URL with weights + card + `results/`
(unless `push_to_hub: false`)
- `<output_dir>/skills/run-<short>/SKILL.md` exists, no `<placeholder>` left,
with metadata + copyright HTML comment per `pipeline-skill-template.md`
Final message: wandb URL, HF Hub URL, baseline -> fine-tuned primary metric,
`reports/inference_samples/`, and the rerun skill path.
---
## Error playbook
On a known runtime error, consult the symptom → minimal-fix table in
`references/error-playbook.md` (NGC entrypoint, PyTorch/Transformers regressions,
numpy ABI, Albumentations bbox, PEFT/checkpointing, LoRA target breadth, CV
augmentation gaps, OOM at step 0) before redesigning anything. When a row there
fires twice across runs, lift it into `compat-workarounds.md` with a `detect` rule
— auto-applied in Step 1 before the error can fire.
---
## Communication style
- Terse. No filler, no restating the request; one-word answers when appropriate.
- Always include direct Hub and wandb URLs when referencing artifacts.
- On error: state what went wrong, why, what you changed — no menus.
- Never present "Option A/B/C" for a request with a clear answer. Act.
## Example pipelines
- [tao-rerun-convnext-cifar10](references/tao-rerun-convnext-cifar10.md)
- [tao-rerun-detr-cppe5](references/tao-rerun-detr-cppe5.md)
- [tao-rerun-segformer-foodseg103](references/tao-rerun-segformer-foodseg103.md)
- [tao-rerun-smolvlm-vqav2](references/tao-rerun-smolvlm-vqav2.md)
Tous les fichiers
69 fichiersInstaller tao-finetune-huggingface-model
Téléchargez et extrayez les fichiers de compétences dans votre répertoire .claude/skills/.
Télécharger le ZIPClonez le dépôt et copiez les fichiers de compétence dans votre projet.
git clone https://github.com/NVIDIA/skills/tree/main/skills/tao-finetune-huggingface-model # Copy SKILL.md to your .claude/skills/ directory
Copier





Maison
