tao-finetune-nv-tesseract-forecasting

Par nvidia · skills

Prévision NV-Tesseract — prévision multivariée de séries temporelles basée sur les transformers avec DARR (récupération kNN enrichie par le contexte), interprétabilité et fine-tuning. À utiliser lorsque l'utilisateur demande de « prévoir avec NV-Tesseract », « lancer une inférence de prévision », « utiliser perform_forecasting », « mode DARR », « prévision enrichie par le contexte », « attribution lag horizon », « interprétabilité », « fine-tuner la prévision », « fine-tuner la prévision avec automl », « optimisation des hyper-paramètres avec la prévision », ou mentionne « nv-tesseract-forecasting », « moment_head_512_6hr » ou « run8_best_model_cr ».

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

Prévision NV-Tesseract

Prévision multivariée de séries temporelles basée sur Transformer utilisant un préentraînement autosupervisé sur des données temporelles diversifiées. Trois modes d'inférence : standard (prévision directe), DARR (fusion kNN améliorée par contexte), et interprétabilité (extraction de trajectoire latente, flux sémantique, attribution lag×horizon, stabilité de trajectoire et ratios de diagnostic — bundle d'explication complet avec rapport PDF). L'ajustement affine l'en-tête de prévision — et optionnellement la couche cross-channel — à votre domaine.

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

Dépendances externes

Dépendance Objectif Installation
Python 3.10+ Runtime https://www.python.org/downloads/
uv Gestionnaire de paquets + environnement pip install uv
CUDA toolkit (optionnel) Accélération GPU https://developer.nvidia.com/cuda-downloads
matplotlib (optionnel) Rapport PDF d'interprétabilité, PNG heatmap, graphiques flux + stabilité uv add matplotlib

Identifiants

nvidia/nv-tesseract-forecasting est un repo public — aucun token requis pour télécharger les poids. Si vous rencontrez une erreur 401/403 (accès verrouillé ou licence non acceptée) ou 504 au premier téléchargement, voir la section Pièges connus.

Démarrage rapide

git clone --branch main --single-branch https://github.com/NVIDIA/NV-Tesseract
cd NV-Tesseract/forecasting
uv sync --group dev
uv pip install -e .          # installation éditable — requise pour les imports sdk.* propres

# Inférence standard (télécharge automatiquement les poids depuis HF au premier lancement, aucune auth requise)
uv run python sdk/quick_example.py

Inférence

Importez et appelez perform_forecasting depuis sdk/forecasting.py. Elle télécharge automatiquement les poids, standardise l'entrée, lance un déroulement autorégressif pour les longs horizons, et retourne un DataFrame avec des lignes {target_column}_forecast pour l'horizon demandé.

import sys, pandas as pd
sys.path.append("/path/to/NV-Tesseract/forecasting")  # clonez NV-Tesseract avec --branch main
from sdk.forecasting import perform_forecasting

df = pd.read_csv("your_data.csv")   # doit avoir une colonne timestamp + colonne numérique cible

results = perform_forecasting(
    df=df,
    timestamp_column="timestamp",    # colonne datetime analysable
    target_column="target",          # cible primaire à prévoir
    seq_len=512,                     # longueur du contexte d'entrée (lignes consommées)
    forecast_horizon=72,             # pas en avant à prédire (max 512)
    model_horizon=72,                # horizon natif du modèle ; changer avec des poids personnalisés
    standardizer_pkl="standardizer.pkl",   # téléchargé automatiquement depuis HF s'il manque
    ckpt="run8_best_model_cr.pt",          # téléchargé automatiquement ; voir tableau Checkpoints
)
# Retourne DataFrame : timestamp | {target_column}_forecast  (forecast_horizon lignes)
print(results.head())

Checkpoints

Fichier Mode Téléchargé quand
run8_best_model_cr.pt Par défaut (cross-channel activé) use_cross_channel=True (défaut)
moment_head_512_6hr.pt Standard (pas de cross-channel) use_cross_channel=False
standardizer.pkl Les deux Toujours

Passez use_cross_channel=False pour utiliser le checkpoint standard :

results = perform_forecasting(df=df, use_cross_channel=False, ...)

Mode DARR (prévision améliorée par contexte)

Fournissez context_df pour activer DARR : le SDK construit une mémoire kNN à partir de fenêtres historiques et fusionne les prédictions directes avec les voisins récupérés (alpha * direct + (1 - alpha) * kNN).

context_df = pd.read_csv("historical_data.csv")   # besoin de ≥ seq_len + model_horizon lignes

results = perform_forecasting(
    df=df,
    context_df=context_df,      # active DARR
    forecast_horizon=72,
    alpha=0.2,                  # 0,2 = 20% direct, 80% kNN (défaut : 0,01)
    k=64,                       # nombre de plus proches voisins
    temperature=0.05,           # température softmax kNN
)

Les datasets de contexte et d'entrée n'ont pas besoin de colonnes identiques — le SDK s'aligne sur les caractéristiques communes et avertit quand les colonnes diffèrent. Les deux doivent partager timestamp_column et target_column.

Interprétabilité

Définissez interpretability=True pour activer le Framework d'Interprétabilité Agnostique au Modèle. Il produit des explications localisées, spécifiques à l'horizon et conscientes du temps — incluant l'attribution lag×horizon, le flux sémantique, la stabilité de trajectoire, les ratios de diagnostic, et (pour les entrées multivariées) l'attribution axe-canal et l'analyse de couplage.

Pour la référence complète des paramètres, le bundle de sortie et les descriptions des composants, voir forecasting/README.md.

Ajustement affine

Affinez l'en-tête de prévision (encodeur/embedder gelé par défaut) sur vos propres séries temporelles. --ckpt-init auto lance le démarrage à chaud depuis le checkpoint NV-Tesseract publié ; --ckpt-init none entraîne un nouvel en-tête depuis le backbone de base.

cd /path/to/NV-Tesseract/forecasting
# Sans cross-channel (utilise moment_head_512_6hr.pt)
uv run python examples/finetune_example.py \
  --csv /path/to/timeseries.csv \
  --timestamp-col timestamp \
  --target-cols target \
  --seq-len 512 --forecast-horizon 72 \
  --epochs 5 --batch-size 8 --lr 1e-4 \
  --output-dir artifacts/finetune_my_data

# Avec couche cross-channel (utilise run8_best_model_cr.pt)
uv run python examples/finetune_example.py \
  --csv /path/to/timeseries.csv \
  --timestamp-col timestamp \
  --target-cols sensor_1,sensor_2,sensor_3 \
  --use-cross-channel --cross-channel-heads 8 \
  --epochs 5 \
  --output-dir artifacts/finetune_cross_channel

Arguments d'ajustement affine

Argument Défaut Description
--run-config Config YAML depuis AutoMLRunner ({config_path}). Les drapeaux CLI remplacent les valeurs du fichier.
--csv **requis*** CSV unique divisé temporellement en entraînement/validation
--train-csv **requis*** CSV d'entraînement (mutuellement exclusif avec --csv)
--val-csv CSV de validation quand --train-csv est utilisé
--timestamp-col timestamp Colonne datetime à exclure des caractéristiques
--target-cols toutes numériques Colonnes séparées par des virgules à prévoir
--model-name AutonLab/MOMENT-1-large Identifiant du modèle backbone
--ckpt-init auto auto = poids NV-Tesseract publiés ; none = nouvel en-tête ; ou chemin vers .pt
--standardizer-init standardizer.pkl Pickle standardizer utilisé quand --ckpt-init auto
--repo-id nvidia/nv-tesseract-forecasting Repo HuggingFace pour téléchargement automatique
--seq-len 512 Longueur du contexte d'entrée
--forecast-horizon 72 Pas en avant à prédire
--stride forecast_horizon Pas de fenêtre glissante (None → horizon)
--val-ratio 0.1 Fraction de validation quand --csv est utilisé
--test-ratio 0.0 Fraction de rétention de test quand --csv est utilisé
--no-standardize faux Désactiver la standardisation par dataset
--epochs 5 Epochs d'entraînement
--batch-size 8 Taille batch par GPU
--lr 1e-4 Taux d'apprentissage AdamW (planificateur OneCycleLR)
--weight-decay 0.0 Décroissance de poids AdamW
--head-dropout 0.1 Dropout de l'en-tête de prévision
--max-norm 5.0 Écrêtage de la norme de gradient
--num-workers 0 Workers du DataLoader
--seed 13 Graine aléatoire
--output-dir artifacts/finetune Répertoire de sortie
--local-files-only faux Ne pas télécharger les poids du backbone depuis HuggingFace
--unfreeze-encoder faux Entraîner aussi l'encodeur transformer
--unfreeze-embedder faux Entraîner aussi l'embedder de patch
--use-cross-channel faux Ajouter une couche d'attention cross-channel
--cross-channel-heads 8 Têtes d'attention dans la couche cross-channel
--cross-channel-dropout 0.1 Dropout dans la couche cross-channel
--num-gpus tous disponibles Nombre de GPUs pour l'ajustement affine DDP ; définir 1 pour forcer single-GPU

*L'un de --csv ou --train-csv est requis.

Inférence avec checkpoint ajusté affin

results = perform_forecasting(
    df=df,
    timestamp_column="timestamp",
    target_column="target",
    seq_len=512,
    forecast_horizon=72,
    model_horizon=72,
    standardizer_pkl="artifacts/finetune_my_data/standardizer.pkl",
    ckpt="artifacts/finetune_my_data/best_model.pt",
    use_cross_channel=False,   # définir True si entraîné avec --use-cross-channel
)

Exigences de données

Propriété Exigence
Lignes seq_len (défaut 512) pour l'inférence ; la division de validation doit aussi avoir ≥ seq_len + forecast_horizon lignes
Colonnes timestamp + une ou plusieurs colonnes numériques ; NULLs remplies de zéros automatiquement
Timestamp Analysable par pandas ; pas de NULLs ; fréquence uniforme déduite du mode des différences
Cible Doit être numérique ; NULLs remplies de zéros
forecast_horizon Max 512 pas ; au-delà du 72 natif du modèle déclenche le déroulement autorégressif
Contexte DARR seq_len + model_horizon lignes ; doit partager colonnes timestamp + target avec l'entrée

Structure de sortie

Inférence (standard / DARR) :

DataFrame : timestamp | {target_column}_forecast   (forecast_horizon lignes)

Ajustement affine (--output-dir artifacts/finetune_my_data) :

artifacts/finetune_my_data/
├── best_model.pt            # checkpoint avec MSE de validation le plus bas
├── standardizer.pkl         # statistiques de normalisation pour ce dataset
├── finetune_metadata.json   # config du modèle, canaux, meilleur epoch, tous les arguments
├── metrics.json             # résumé scalaire : {"val_mse": float, "val_mae": float} — consommé par le runner AutoML
└── epoch_metrics.json       # liste par epoch : [{epoch, train_mse, val_mse, val_mae}, ...]

Matériel

Tier Configuration Notes
Minimum 1× CPU Fonctionnel ; lent pour les longs horizons
Recommandé 1× NVIDIA GPU (≥8 GB VRAM) Fortement recommandé pour l'ajustement affine
Apple Silicon MPS Détecté automatiquement ; équivalent au CPU pour cette charge
Ajustement affine multi-GPU 2+× NVIDIA GPUs DDP automatique via --num-gpus (défaut à tous les GPUs visibles)

AutoML (HPO : optimisation des hyperparamètres)

Cette skill est activée pour AutoML pour l'ajustement affine et l'inférence DARR. Quand une demande HPO arrive, routez-la 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 ajustables, les exemples de runner, les scripts d'inférence de trial, HPO DARR, ou les détails de remise des résultats AutoML.

Pièges connus

Symptôme Cause Correction
ModuleNotFoundError: backbone Installation éditable manquante Exécutez uv pip install -e . depuis forecasting/
HfHubHTTPError: 401 / 403 Licence du modèle non acceptée ou fork verrouillé Acceptez la licence sur la page du repo HF ; ou huggingface-cli login
504 / timeout au premier téléchargement de poids Le CDN HF limite les requêtes non authentifiées — les repos publics y sont toujours soumis au premier téléchargement Définissez export HUGGINGFACE_HUB_TOKEN="$HF_TOKEN" avant d'exécuter ; les requêtes authentifiées utilisent un chemin CDN plus fiable
ValueError: DataFrame has X rows but seq_len requires Y Entrée trop courte Fournissez ≥ seq_len (512) lignes ou réduisez --seq-len
ValueError: forecast_horizon must be <= 512 Horizon trop grand Divisez en plusieurs appels perform_forecasting
ValueError: No common numeric columns (DARR) Le contexte n'a aucune caractéristique chevauchante Assurez-vous que le contexte partage ≥ 1 colonne numérique avec l'entrée
ValueError: Context DataFrame has X rows but requires Y Contexte trop petit Le contexte a besoin de ≥ seq_len + model_horizon lignes
Interpretability PDF skipped: matplotlib not installed Dépendance optionnelle manquante uv add matplotlib ou utilisez interpretability_output="json"
ValueError: No training windows (finetune) Données trop courtes pour les fenêtres Réduisez --seq-len / --forecast-horizon, ou augmentez la taille du dataset
Erreurs d'environnement obsolète mentionnant le paquet backbone Ancien fichier lock uv cache clean && uv sync --group dev

Skills similaires