tao-finetune-nv-tesseract-ad-diffusion

Par nvidia · skills

NV-Tesseract AD Diffusion — détection d'anomalies et fine-tuning par diffusion pour les séries temporelles multivariées. À utiliser lorsque l'utilisateur demande à « fine-tuner NV-Tesseract », « exécuter une inférence AD diffusion », « détecter des anomalies avec la diffusion », « détection d'anomalies dans des séries temporelles », « finetune ad-diffusion », « utiliser perform_anomaly_analysis_with_diffusion », « automl ad-diffusion », « recherche d'hyperparamètres ad-diffusion », « optimisation d'hyperparamètres » ou mentionne `curriculum_medium.yaml`, `final_model.pth`, `nv-tesseract-ad-diffusion`, `ad_diffusion` ou `TSDiffuser_Generic`.

npx skills add https://github.com/nvidia/skills --skill tao-finetune-nv-tesseract-ad-diffusion

NV-Tesseract AD Diffusion

Détection d'anomalies basée sur la diffusion et fine-tuning pour séries temporelles multivariées. Le modèle reconstruit des segments masqués aléatoirement et évalue chaque pas de temps par l'erreur absolue moyenne (MAE) entre la reconstruction et le signal original ; le seuillage adaptatif (SCS ou MACS) convertit les scores en étiquettes binaires.

Code source : https://github.com/NVIDIA/NV-Tesseract Poids pré-entraînés : https://huggingface.co/nvidia/nv-tesseract-ad-diffusion

Pour les informations d'utilisation les plus à jour, consultez les fichiers README du dépôt NV-Tesseract :

Dépendances externes

Dépendance Objectif Installation
Python 3.12+ Runtime https://www.python.org/downloads/
uv Gestionnaire de paquets et d'environnement pip install uv
CUDA toolkit (optionnel) Accélération GPU https://developer.nvidia.com/cuda-downloads
huggingface_hub Téléchargement des poids depuis HF Inclus via uv sync

Identifiants

nvidia/nv-tesseract-ad-diffusion est un dépôt public — aucun token requis pour télécharger les poids. Si vous rencontrez une erreur 401/403 (accès restreint ou fork privé) ou une 504 lors du premier téléchargement, consultez la section Pièges connus.

Démarrage rapide

git clone --branch main --single-branch https://github.com/NVIDIA/NV-Tesseract
cd NV-Tesseract/ad_diffusion
uv sync                              # installer les dépendances (une seule fois)

# Inférence — données synthétiques, télécharge automatiquement les poids de HF à la première exécution
uv run python examples/quick_example.py

# Inférence — vos propres données CSV
uv run python examples/quick_example.py \
  --model-path final_model.pth \
  --config-path curriculum_medium.yaml \
  --dataset-path /path/to/data.csv

# Pré-télécharger les poids uniquement (réchauffer le cache avant d'aller hors ligne)
uv run python examples/quick_example.py --download-weights

# Fine-tuner sur vos propres données de comportement normal
uv run python examples/finetune_example.py \
  --csv /path/to/normal_training_data.csv \
  --timestamp-col timestamp \
  --label-col is_anomaly \
  --epochs 20 \
  --output-dir artifacts/finetune_my_data

Inférence

Utilisez perform_anomaly_analysis_with_diffusion dans sdk/anomaly_analysis.py. Elle valide l'entrée, distribue automatiquement sur tous les GPUs visibles, applique le seuillage adaptatif (SCS ou MACS) et retourne le DataFrame original avec les colonnes Anomaly (0/1) et MAE ajoutées.

import sys, pandas as pd
sys.path.append("/path/to/NV-Tesseract/ad_diffusion")  # cloner NV-Tesseract avec --branch main
from sdk.anomaly_analysis import perform_anomaly_analysis_with_diffusion

df = pd.read_csv("your_data.csv")

# L'API lève ValueError pour les colonnes non numériques — supprimer d'abord le timestamp, les IDs et les étiquettes.
df = df.select_dtypes(include="number")

results = perform_anomaly_analysis_with_diffusion(
    df=df,
    threshold_strategy="scs",       # "scs" (rapide) ou "macs" (adaptatif)
    model_path=None,                 # None → télécharge automatiquement final_model.pth depuis HF
    config_path=None,                # None → télécharge automatiquement curriculum_medium.yaml depuis HF
    nsample=15,                      # échantillons de diffusion par fenêtre ; ↑ précision, ↑ latence
    preprocess_model_dir=None,       # répertoire optionnel du modèle de prétraitement
)
# colonnes de results : Anomaly (0/1), MAE (float), plus toutes les colonnes originales
print(results[["Anomaly", "MAE"]].describe())

Référence CLI pour l'inférence

Argument Par défaut Description
--dataset-path synthétique CSV avec colonnes de caractéristiques numériques
--model-path téléchargement automatique Chemin du checkpoint .pth
--config-path téléchargement automatique Chemin de curriculum_medium.yaml
--download-weights Récupérer les poids depuis HF et quitter
--skip-download false Exiger les poids locaux ; ignorer la récupération HF

Fine-tuning

Fine-tuner sur vos propres données. Le CSV d'entraînement devrait contenir principalement un comportement normal. Validez le modèle pré-entraîné sur votre domaine avant le fine-tuning.

uv run python examples/finetune_example.py \
  --csv /path/to/normal_data.csv \
  --val-csv /path/to/val_data.csv \   # optionnel ; sinon --val-ratio divise --csv
  --pretrained-model final_model.pth \
  --epochs 20 --batch-size 16 --lr 1e-5 \
  --output-dir artifacts/finetune_my_data

Arguments du fine-tuning

Argument Par défaut Description
--run-config Fichier config JSON/YAML généré par AutoMLRunner ({config_path}). Tous les champs ci-dessous peuvent y être définis ; les flags CLI explicites l'emportent sur le fichier.
--csv requis CSV d'entraînement (idéalement contenant un comportement normal). Requis s'il n'est pas fourni via --run-config.
--val-csv CSV de validation séparé
--val-ratio 0,3 Fraction de validation quand --val-csv n'est pas utilisé (split temporel)
--timestamp-col timestamp Colonne à supprimer des caractéristiques
--label-col Colonne d'étiquette à supprimer
--drop-cols Colonnes supplémentaires à supprimer (séparées par des virgules)
--pretrained-model final_model.pth Checkpoint pour warm-start (téléchargement automatique s'il manque)
--config curriculum_medium.yaml YAML de config du modèle
--repo-id nvidia/nv-tesseract-ad-diffusion Dépôt HuggingFace pour le téléchargement automatique
--no-download false Échouer si les poids pré-entraînés ne sont pas locaux
--epochs 10 Epochs d'entraînement
--batch-size 16 Taille de batch par GPU
--lr 1e-5 Taux d'apprentissage AdamW
--weight-decay 1e-6 Décroissance de poids AdamW
--grad-clip 1.0 Clipping de norme du gradient
--num-workers 0 Workers DataLoader
--seed 42 Graine aléatoire
--output-dir artifacts/finetune Répertoire de sortie
--window-length config (100) Longueur de fenêtre glissante en pas de temps
--window-stride 1 Pas entre fenêtres consécutives
--split config (10) Segments de masque alternés par fenêtre
--mask-ratio 0,7 Fraction de chaque fenêtre masquée durant l'entraînement
--scale-factor config (1) Multiplicateur d'échelle après normalisation min-max
--num-gpus tous disponibles Nombre de GPUs pour fine-tuning DDP ; défini à 1 pour forcer single-GPU

Exécuter l'inférence avec un checkpoint fine-tuné

results = perform_anomaly_analysis_with_diffusion(
    df=df,
    threshold_strategy="scs",
    model_path="artifacts/finetune_my_data/best_finetuned_model.pth",
    config_path="artifacts/finetune_my_data/finetune_config.yaml",
    nsample=15,
)

AutoML (HPO : optimisation des hyperparamètres)

Cette skill supporte AutoML pour HPO de fine-tuning et HPO d'inférence avec étiquettes via tao-skill-bank:tao-run-automl avec le skill_dir de ce modèle.

Lisez references/automl.md quand l'utilisateur demande la configuration AutoML/HPO, les paramètres réglables, la configuration VirtualEnvSDK, le flux config, les contraintes de window-length, les scripts de test d'inférence ou les détails de remise des résultats AutoML.

Exigences des données

Propriété Exigence
Lignes window_length (par défaut 100) ; ≥ target_dim (par défaut 18) pour PCA
Colonnes Doivent être numériques — l'API lève ValueError pour les colonnes non numériques ; supprimer timestamp, les IDs et les étiquettes avant d'appeler
Valeurs Pas de NaN / ±Inf — remplir avant de passer à l'API
Nombre de caractéristiques > target_dim Réduction PCA à target_dim ; nécessite ≥ target_dim lignes
Nombre de caractéristiques < target_dim Complété par des zéros jusqu'à target_dim
timestamp,sensor_1,sensor_2,sensor_3
2024-01-01 00:00:00,0.42,1.10,-0.33
...

Passer uniquement les colonnes de caractéristiques numériques à l'API d'inférence — elle lève ValueError pour les colonnes non numériques au lieu de les supprimer. Utiliser df.select_dtypes(include="number") ou supprimer par nom avant d'appeler. Le fine-tuning gère cela via les args CLI --timestamp-col, --label-col et --drop-cols.

Structure de sortie

Inférence (examples/quick_example.py) :

examples/datasets/
└── anomaly_results.csv      # colonnes originales + Anomaly (0/1) + MAE

Fine-tuning (--output-dir artifacts/finetune_my_data) :

artifacts/finetune_my_data/
├── best_finetuned_model.pth     # checkpoint avec la perte de validation la plus faible
├── final_finetuned_model.pth    # checkpoint du dernier epoch
├── metrics.json                 # scalaire pour AutoML : {"val_loss": <best>}
├── epoch_metrics.json           # log par epoch : [{"epoch": N, "train_loss": …, "val_loss": …}]
└── finetune_config.yaml         # config utilisée durant l'entraînement (pour la reproductibilité)

Configuration du modèle (curriculum_medium.yaml)

Champ Par défaut Description
model.target_dim 18 Dimension interne des caractéristiques ; les données sont PCA'd/complétées à ceci
dataset.window_length 100 Taille de fenêtre glissante en pas de temps
dataset.split 10 Segments de masque alternés par fenêtre
dataset.scale_factor 1 Multiplicateur d'échelle après normalisation min-max
diffusion.num_steps 500 Étapes de diffusion complètes (remplacées par DPM-Solver)
diffusion.channels 128 Dimension cachée du modèle
diffusion.layers 6 Couches d'encodeur Transformer

Matériel

Niveau Configuration Notes
Minimum 1× CPU Fonctionnel ; DPM-Solver réduit les étapes 500 → 20
Recommandé 1× GPU NVIDIA (≥8 GB VRAM) Fortement recommandé pour le fine-tuning
Inférence multi-GPU 2–8× GPUs NVIDIA distribué automatiquement par perform_anomaly_analysis_with_diffusion
Fine-tuning multi-GPU 2+× GPUs NVIDIA DDP automatique via --num-gpus (par défaut tous les GPUs visibles)

Pièges connus

Symptôme Cause Correction
HfHubHTTPError: 401 Dépôt restreint ou token manquant export HUGGINGFACE_HUB_TOKEN="hf_..." ou huggingface-cli login
504 / timeout lors du premier téléchargement de poids Le CDN HF ralentit les requêtes non authentifiées — les dépôts publics y sont toujours assujettis au premier téléchargement Définir export HUGGINGFACE_HUB_TOKEN="$HF_TOKEN" avant d'exécuter ; les requêtes authentifiées utilisent un chemin CDN plus fiable
ValueError: No numeric columns Toutes les colonnes sont des chaînes/dates Supprimer les colonnes non numériques avant d'appeler l'API
ValueError: PCA needs at least target_dim rows Moins de lignes que target_dim (18) Fournir une série temporelle plus longue
ValueError: Need at least N rows (finetune) Split plus court que window_length S'assurer que chaque split train/val a ≥ 100 lignes
RuntimeError: CUDA out of memory Batch trop volumineux Réduire --batch-size ou nsample
Tous les scores MAE identiques Colonnes à valeur constante Supprimer les colonnes à variance zéro avant d'appeler l'API
ModuleNotFoundError: sdk Mauvais répertoire de travail cd ad_diffusion/ avant uv run, ou l'ajouter à sys.path
Inférence lente sur CPU Nombreuses fenêtres de diffusion Réduire nsample à 5–10 pour les tests rapides

Skills similaires