вариант

tao-finetune-huggingface-model

NVIDIA/skills NVIDIA/skills

Настройте модели HuggingFace CV, VLM или LLM на локальных GPU NVIDIA с использованием контейнера NGC PyTorch, поддерживающего полное обучение или обучение с помощью LoRA, обработку наборов данных и необязательную отправку моделей в Hub.

...Расширить все
1
Обновлено время 29 сентября 2026 г.

tao-finetune-huggingface-model

Локальная дообучение моделей HuggingFace на GPU NVIDIA, основанная на актуально извлеченной документации с кураторскими справочными материалами в качестве резервной сети безопасности. Один контейнер NGC, несколько сфокусированных скриптов, один push в HF Hub. Следуйте правилам в этом файле; не импровизируйте.

Порядок авторитетности (от высшего к низшему):

  1. Ввод пользователя — явный model_id, dataset_id, training_method, переопределения config.yaml.
  2. Живые исследования — карточка модели, пример репозитория HF, скрипт дообучения автора, документация задач HF, статья; всегда извлекаются (Шаг 3 + references/research-priorities.md).
  3. Кураторские справочные материалы (references/*.md) — резерв, когда живые исследования молчат или неоднозначны.
  4. Память о тренировочных данных — крайняя мера; подозрительно, перекрестная проверка с (2)/(3).

Разрешение конфликтов между (2) и (3), а также примечание о расхождении в строке источника, находятся в references/research-priorities.md.

Вводы

Обязательные:

  • model_id — идентификатор модели HuggingFace, например, google/vit-base-patch16-224

Условные учетные данные (читаются из среды сеанса, экспортируются перед запуском, если присутствуют):

  • HF_TOKEN — только когда модель/датасет закрыт (чтение) или включен push_to_hub (запись); публичный + публичный + push_to_hub: false не требует ничего. Значение никогда не читается — только наличие через [ -n "$HF_TOKEN" ].
  • WANDB_API_KEY, WANDB_PROJECT — только когда WandB включен; WANDB_MODE=disabled отключает.

Датасет — ровно один:

  • dataset_id — идентификатор датасета HuggingFace (источник: hf)
  • local_dataset_path — локальная папка или файл (источник: local); необязательный local_dataset_format ∈ {auto, imagefolder, coco, voc, jsonl, arrow, parquet, csv} (по умолчанию: автоопределение).
  • (пропустить) — агент рекомендует популярные датасеты (источник: recommend)

Необязательные (имеют значения по умолчанию):

  • task_type — автоматически определяется из конфигурации + карточки модели
  • n_train=10000, n_eval=1000, n_epochs=3, lora_r=16
  • output_dir=./output/<model_short_name></model_short_name>
  • hf_model_repo — цель push; если не установлено и у HF_TOKEN есть права записи, автоматически выводится как <whoami>/<model_short_name>-finetuned</model_short_name></whoami>.
  • push_to_hub=True — установите False, чтобы пропустить
  • skip_baseline=False — пропустить оценку базового уровня zero-shot

Необязательные результаты (по умолчанию отключены):

emit_progress_log: false   # output_dir/PROGRESS.md (журнал по шагам)
emit_report:       false   # reports/report.{pdf,html} с графиками и образцами
emit_unit_tests:   false   # tests/ с тестами гетерогенных пакетов на поддельных данных

Все значения находятся в output_dir/config.yaml. Никогда не хардкодите в Python.

Платформа выполнения

Этот навык оркестрирует что запускать; навыки платформы владеют тем, как запускать его на хосте GPU — прочитайте их сначала.

ВопросАвторитетный навык
Среда выполнения хоста GPU (драйвер 580, CUDA Toolkit 13.0, NVIDIA Container Toolkit 1.19.0)`tao-skill-bank:tao-setup-nvidia-gpu-host`
флаги `docker run`, аутентификация NGC, монтирования, передача env`tao-skill-bank:tao-run-on-docker`
Предварительная проверка локального задания Docker (демон, проверка GPU)`tao-skill-bank:tao-run-on-local-docker`

Платформа по умолчанию: local-docker — создайте одноразовый образ (run-<short>:latest</short>) и запустите его на локальном демоне Docker. Спрашивайте только тогда, когда пользователь явно нуждается в другом бэкенде (удаленный GPU Brev, SLURM/Kubernetes); затем запустите Preflight этой платформы и направьте команды docker run Шагов 4–5 через нее. Предварительные проверки среды выполнения GPU и наличия учетных данных (значения никогда не читаются), канонический набор флагов docker run, команда выбора list_tao_platforms.py и флаги, специфичные для рабочего процесса (--entrypoint /bin/bash -lc, PYTORCH_CUDA_ALLOC_CONF, --name hft_train), находятся в references/workflow-intake-preflight.md.

Справочные материалы — резервная сеть безопасности

Консультации только когда живые исследования молчат, неоднозначны или недоступны; живая документация всегда выигрывает для конкретной модели и текущего API. Каждый шаг ссылается на необходимые справочные материалы; полный каталог в references/detailed-workflow.md.

Всегда активные: 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. Опциональные (когда применяется их флаг/потребность): progress-tracking.md, testing.md, reporting.md, workflow-intake-preflight.md, workflow-generate-train.md, workflow-push-rerun.md.

Правило: перед переходом к резерву зарегистрируйте живой источник, который вы пытались использовать, и почему он был недостаточным (config.yaml notes:, и PROGRESS.md, если включен). Маркеры [FETCH LIVE] в cv-scripts.md / vlm-scripts.md — это чек-лист исследований, а не код для встраивания — повторно извлеките указанный URL, если блок не имеет результата Шага 3.

Основные правила

Неотъемлемое поведение. Краткая версия (полный перечень — список импортируемых галлюцинаций, список никогда без одобрения, полные таблицы восстановления ошибок и размеров оборудования — в references/core-rules.md, проконсультируйтесь перед любым решением во время обучения):

  • Ваши знания библиотеки HF устарели. Извлекайте живую документацию (карточку модели, пример репозитория HF, документ задачи) перед написанием любого ML-кода — не генерируйте аргументы тренера / коллатора / трансформации из памяти (Шаг 3).
  • Дымовое тестирование на реальных данных с --max_steps 1 перед любым полным запуском; никаких пакетных запусков без проверенного дыма.
  • Никогда не подменяйте молча model_id, dataset_id или training_method — если то, что просил пользователь, не загружается, остановитесь и спросите.
  • Восстановление после ошибок — минимальные изменения. OOM → уменьшите пакет вдвое, удвойте grad_accum, включите проверку градиентов (без переключения LoRA без одобрения); NaN → уменьшите LR в 10 раз; плоская потеря → проверьте коллатор; та же ошибка 3 раза → остановитесь и спросите. Не зацикливайтесь.
  • Столбцы датасета проверены ДО коллатора — переименуйте в prepare_data.py; требуется реструктуризация → остановитесь и спросите.
  • Палец большого пальца размеров оборудования (bf16): ≤3B → 24 ГБ, 7–13B → 80 ГБ, 30B+ → мульти-GPU или LoRA на 1× 80 ГБ, 70B+ → 8× 80 ГБ или LoRA. Полное дообучение не поместится и не запрошено LoRA → спросите перед переключением.

Рабочий процесс — 6 шагов

Один проход, последовательно; каждый шаг имеет четные ворота перед началом следующего.

Шаг 1 — Проверка и квалификация

Цель: решить, продолжать ли. Исследуйте модель + датасет, примените принятие/отклонение, зарегистрируйте применимые исправления совместимости, запишите начальный config.yaml.

Предварительные условия: MODEL_ID, необязательный DATASET_ID / local_dataset_path, необязательный HF_TOKEN, OUTPUT_DIR (по умолчанию ./output/<model_short_name></model_short_name>). Зонды запускаются в контейнере Docker python:3.12-slim только на CPU (привязанный .probe/scratch), поэтому хосту не нужна виртуальная среда — Docker должен существовать сначала. Страховка присутствия Docker, env контейнера, полный вызов зонда и скрипты зондирования модели/датасета находятся в references/workflow-intake-preflight.md, references/model-discovery.md и references/dataset-sources.md.

Требования к зонду:

  • Модель: загрузите AutoConfig, прочитайте теги карточки модели, обнаружьте задачу из architectures + теги + примеры карточки (журнал резерва в model-discovery.md).
  • Датасет: для рекомендованных датасетов сначала представьте 3-5 вариантов из dataset-recommendations.md; для локальных данных привяжите только для чтения и используйте обнаружение формата dataset-sources.md.
  • Отклоните рано, если конфигурация модели не удалась, задача вне сферы охвата, не существует источника рецепта или датасет не может загрузиться / соответствовать схеме задачи.
  • Оцените compat-workarounds.md против модели/задачи; отложите правила, зависящие от оборудования, до Шага 2.

Запишите начальный config.yaml (model_id, task, dataset_id или local_dataset_path, research_sources: [], заполненный в Шаге 3, applicable_workarounds: из Шага 1, notes: [] для резервов справочных материалов, push_to_hub: true по умолчанию — аннотированный шаблон в references/workflow-intake-preflight.md). Необязательно rm -rf "$OUTPUT_DIR/.probe"once ворота выполнены.

Ворота: config.yaml существует с моделью, датасетом, задачей, applicable_workarounds; не продолжайте, если какое-либо поле отсутствует.

Шаг 2 — Аудит оборудования и образ NGC

Цель: проверить Docker + GPU + диск, выбрать образ NGC PyTorch в реальном времени, завершить правила совместимости, зависящие от оборудования.

2a. Аудит (жесткие ворота) — три проверки (команды в references/workflow-intake-preflight.md):

  1. Среда выполнения хоста GPU — setup-nvidia-gpu-host.sh --backend docker --check-only от tao-setup-nvidia-gpu-host; при сбое спросите одобрение, затем перезапустите с --install --yes.
  2. Мягкое предупреждение свободного диска — переопределите через MIN_DISK_GB (по умолчанию 100 ГБ); рекомендуется ≥ 100 ГБ для базового NGC (~20 ГБ) + кэш HF + контрольные точки + данные.
  3. Наличие условных учетных данных (из среды сеанса, значения никогда не читаются) — HF_TOKEN только когда закрыт или включен push_to_hub; WANDB_* только когда WandB включен.

Не переходите к Шагу 4 при жестком сбое — docker build Шага 4 извлекает базовый NGC размером более 20 ГБ, и отсутствующий nvidia-container-toolkit проявляется позже как could not select device driver "" with capabilities: [[gpu]]. Запишите gpu_count, gpu_name, driver_major, vram_gb_per_gpu в config.yaml.

2b. Выберите образ NGC (в реальном времени): из матрицы поддержки фреймворков глубокого обучения NVIDIA (https://docs.nvidia.com/deeplearning/frameworks/support-matrix/index.html), раздел контейнеров PyTorch NGC, выберите образ с самой высокой версией, где Min driver ≤ detected driver_major и CUDA контейнера ≤ Toolkit CUDA хоста (сопоставьте близко, чтобы cuDNN / TensorRT совпадали). Не отклоняйте образ из-за тега PyTorch aN/bN/rcN — NGC проверяет весь образ; выберите самый новый, выровненный по CUDA, и пусть compat-workarounds.md обрабатывает проблемы версии. Если матрица недоступна, используйте резервы в references/hardware-container.md; по умолчанию nvcr.io/nvidia/pytorch:24.09-py3 (драйвер ≥ 545; ошибка SDPA+GQA — если num_key_value_heads , setattn_implementation: "eager").Запишитеngc_imageвconfig.yaml.

2c. Переоцените правила совместимости, зависящие от оборудования: повторно запустите обход compat-workarounds.md для записей, чей detect требует hw; обновите applicable_workarounds: на месте.

2d. Проверка соответствия модели: оцените param_bytes ≈ 2×param_count (bf16); если

60% от vram_gb_per_gpu × 1e9, рекомендуется LoRA в сводке для пользователя.

Ворота: config.yaml имеет ngc_image, gpu_count, gpu_name, driver_major, vram_gb_per_gpu; исправления совместимости, зависящие от оборудования, записаны.

Шаг 3 — Исследование рецепта

Цель: извлечь живой рецепт — знания о тренировочных данных transformers/trl/peft подозрительны, поэтому Шаг 3 неотъемлем. Пройдите references/research-priorities.md в порядке приоритета (Приоритет 1 → 6); остановитесь, как только получите для обнаруженной задачи:

  • Класс AutoModel / процессора
  • Трансформации обучения + оценки
  • Коллатор
  • compute_metrics
  • Подсказки гиперпараметров (LR, размер пакета, эпохи, планировщик)

Запишите результаты в meta/recipe.md, добавьте URL-адреса источников в config.yaml: research_sources:. Слот без живого результата переходит к соответствующему каркасу (cv-scripts.md / vlm-scripts.md), зарегистрированному как "переход к каркасу — нет живого источника для " под notes:. Правила разрешения конфликтов находятся в references/research-priorities.md.

Ворота: каждый обязательный слот заполнен, с URL-адресом источника или примечанием о резерве каркаса.

Шаг 4 — Генерация проекта и дымовое тестирование

Цель: написать все скрипты, построить образ, подготовить данные, запустить 1-шаговое дымовое тестирование на реальных данных (один docker build, два docker run).

4a. Сгенерируйте файлы проекта в output_dir/: config.yaml, Dockerfile, requirements.txt, prepare_data.py, train.py, run_eval.py, infer.py, необязательный merge_lora.py, необязательный tests/, .gitignore. Живые исследования Шага 3 являются авторитетом; cv-scripts.md / vlm-scripts.md дают только форму каркаса. Примените каждую запись applicable_workarounds как блок Dockerfile, закрепление требования, переопределение конфигурации или переменную среды выполнения. Жесткие правила: run_eval.py сохраняет это точное имя файла (избегает столкновения с пакетом HF evaluate); каждый сгенерированный .py начинается с заголовка авторских прав NVIDIA Apache-2.0, и любой эмиттер терпит неудачу, когда он отсутствует; emit_unit_tests: true генерирует и запускает тесты согласно references/testing.md. Тела скриптов, форма Dockerfile и контракт эмиттера находятся в references/workflow-generate-train.md.

4b. Постройте, подготовьте, дым — docker build -t run-<short>:latest .</short>, затем prepare_data и запуск --smoke --max_steps 1 (references/docker-runs.md§1-3). Критерии прохождения дыма (в logs/smoke.log):

  • Никаких исключений
  • Потрясение конечно (не 0.0, не NaN)
  • grad_norm > 0 на шаге 1

Если emit_unit_tests: true, также запустите pytest tests/ в контейнере. Любой сбой → СТОП.

4c. Сводка предварительной проверки — перед полным обучением распечатайте и проверьте: URL-адрес источника, столбцы датасета, цель Hub, цель мониторинга, образ NGC, оборудование, потерю/норму градиента дыма.

Ворота: файлы проекта написаны, образ построен, дым ПРОШЕЛ, предварительная проверка не имеет пустых полей.

Шаг 5 — Обучение, оценка, вывод

Цель: оценка базового уровня, полное обучение, пост-тренировочная оценка, необязательное слияние LoRA, 5 образцов вывода (все команды: references/docker-runs.md §4-8).

Подшагdocker-runs.mdПропустить, если
5a. Оценка базового уровня (zero-shot)§4`skip_baseline: true`
5b. Полное обучение (отсоединенное)§5—
5c. Слияние LoRA§6не VLM+LoRA
5d. Пост-тренировочная оценка§7—
5e. Вывод (5 образцов)§8—

Мульти-GPU: добавьте torchrun --nproc_per_node=$gpu_count перед python train.py.

Пока обучение потоково, наблюдайте docker logs -f hft_train: потеря должна падать в течение 10-20 шагов; плоская потеря (ошибка коллатора/маскирования меток), NaN (LR слишком высок) и OOM останавливают запуск — восстановление в references/core-rules.md. Если emit_report: true, запустите report.py после Шага 5e согласно references/reporting.md.

Ворота: все из:

  • checkpoints/final/ (или checkpoints/merged/ для LoRA) существует
  • reports/eval_results.json имеет числовой первичный метрику
  • reports/baseline_results.json существует (если не пропущено)
  • reports/inference_samples/ имеет 5 образцов
  • URL wandb показывает нисходящую потерю

Шаг 6 — Push и эмитирование навыка повторного запуска

Цель: опубликовать запуск и сделать его воспроизводимым без повторных исследований.

Push согласно references/hub-push.md (веса, карточка модели, JSON-файлы оценки/базового уровня, config.yaml, Dockerfile, requirements.txt, образцы вывода, отчеты, когда эмитированы), если только не явно push_to_hub: false. Эмитируйте <output_dir>/skills/run-<short>/SKILL.md</short></output_dir> из references/pipeline-skill-template.md — замените каждый заполнитель, включите полные метаданные YAML + HTML-комментарий авторских прав NVIDIA, и заставьте любой эмиттер терпеть неудачу, если они отсутствуют.

Ворота (критерии готовности): все из:

  • Ворота Шага 5 выполнены
  • Репозиторий HF Hub существует по разрешенному URL с весами + картой + results/ (если только не push_to_hub: false)
  • <output_dir>/skills/run-<short>/SKILL.md</short></output_dir> существует, нет оставленных <placeholder></placeholder>, с метаданными + HTML-комментарием авторских прав согласно pipeline-skill-template.md

Финальное сообщение: URL wandb, URL HF Hub, базовый уровень -> основная метрика дообучения, reports/inference_samples/, и путь навыка повторного запуска.

Плейбук ошибок

При известной ошибке среды выполнения проконсультируйтесь с таблицей симптомов → минимального исправления в references/error-playbook.md (точка входа NGC, регрессии PyTorch/Transformers, ABI numpy, bbox Albumentations, PEFT/проверка, ширина цели LoRA, пробелы дополнения CV, OOM на шаге 0) перед перепроектированием чего-либо. Когда строка там срабатывает дважды в течение запусков, поднимите ее в compat-workarounds.md с правилом detect — автоматически применяется в Шаге 1 до того, как ошибка может сработать.

Стиль общения

  • Кратко. Без заполнителей, без повторения запроса; односложные ответы, когда уместно.
  • Всегда включайте прямые URL-адреса Hub и wandb при упоминании артефактов.
  • При ошибке: укажите, что пошло не так, почему, что вы изменили — никаких меню.
  • Никогда не представляйте "Вариант A/B/C" для запроса с ясным ответом. Действуйте.

Примеры конвейеров

  • tao-rerun-convnext-cifar10
  • tao-rerun-detr-cppe5
  • tao-rerun-segformer-foodseg103
  • tao-rerun-smolvlm-vqav2
Посмотреть на GitHub
---
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)

Все файлы

69 файлов

Установить tao-finetune-huggingface-model

Скачайте и извлеките файлы навыков в ваш каталог .claude/skills/.

Скачать ZIP

Клонируйте репозиторий и скопируйте файлы навыка в свой проект.

git clone https://github.com/NVIDIA/skills/tree/main/skills/tao-finetune-huggingface-model # Copy SKILL.md to your .claude/skills/ directory

Копировать Копировать
Быстрая настройка: Скопируйте папку навыка в .claude/skills/ Claude автоматически обнаружит и использует этот навык
Репозиторий NVIDIA/skills

Похожие навыки

web-search
Обновлено время 29 июня 2026 г.
webapp-testing
Обновлено время 29 июня 2026 г.
lark-base
Обновлено время 5 июля 2026 г.
agentmail
Обновлено время 29 июня 2026 г.
OR