Passer au contenu principal
Chapitres du guide d’entraînement Toute la documentation

TrainingProject : configuration et entraînement

Configurez un projet reproductible, examinez son plan, entraînez un modèle local et vérifiez les résultats mesurés.

Les commandes et le code restent en anglais dans toutes les langues. Remplacez les espaces réservés en majuscules par les valeurs de votre compte et de votre tâche payante ; ne collez pas de vraies clés dans des carnets ou des journaux partagés.

Flux TrainingProject

Configurer, examiner, exécuter et évaluer l’entraînement local dans les limites définies.
  1. Projet Modèle, objectif et politique de données
  2. Plan Compatibilité, programme et budgets
  3. Exécuter Données, entraînement et points de contrôle
  4. Améliorer Évaluation plafonnée des thèmes et régressions
  5. Exporter Artefact validé et rapport reproductible

Projet: Modèle, objectif et politique de données. Plan: Compatibilité, programme et budgets. Exécuter: Données, entraînement et points de contrôle. Améliorer: Évaluation plafonnée des thèmes et régressions. Exporter: Artefact validé et rapport reproductible

Un projet et un plan reproductibles

SDK 0.2.0 fournit TrainingProject et fpai-training pour configurer et exécuter un entraînement local. Le projet réunit le modèle étudiant, l’accès au modèle de référence, l’objectif, les données, l’environnement d’exécution, le programme, les budgets et les critères d’acceptation. Examinez le plan résolu avant toute demande au modèle de référence ou mise à jour des poids. TrainingClient reste disponible pour les intégrations existantes fondées sur des tâches payantes et des sessions.

  • Le plan valide la configuration, la compatibilité, les empreintes des données, le partage, les budgets et les sorties sans entraîner le modèle ni appeler le modèle de référence.
  • Les interfaces Python et CLI utilisent les mêmes paramètres, empreintes, budgets et résultats.
  • Épinglez les révisions du modèle, des données et de l’évaluateur pour pouvoir reproduire l’exécution.
Exemple · json
{
  "schema_version": "1.0",
  "mode": "automatic",
  "objective": "Classify support messages as billing, account_access or technical_issue.",
  "model": {"path": "./models/student", "adapter": "transformers-causal-lm", "revision": null},
  "teacher": {"provider": "openai", "reference_model_id": 123},
  "data": {
    "sources": ["./data/train.jsonl"], "teacher_sharing": "none",
    "validation_path": "./data/validation.jsonl", "test_path": "./data/test.jsonl",
    "deduplicate": true, "seed": 42
  },
  "runtime": {"target": "customer_datacenter", "devices": "auto"},
  "training": {"method": "auto"},
  "curriculum": {"topics": ["intent", "ambiguous_requests", "class_balance"], "max_improvement_cycles": 3, "stop_on_regression": true},
  "budgets": {"max_training_minutes": 120, "max_teacher_requests": 1000, "max_storage_gib": 20},
  "checkpoints": {"keep_last": 3},
  "evaluation": {"rubric": "./rubric.json", "baseline_required": true},
  "output": {"directory": "./runs/german-001", "format": "safetensors"}
}
Exemple · json
{
  "schema_version": "1.0",
  "mode": "advanced",
  "model": {"path": "./models/student", "adapter": "transformers-causal-lm", "revision": null},
  "teacher": {"provider": "openai", "reference_model_id": 123},
  "objective": "Classify support messages as billing, account_access or technical_issue.",
  "data": {"sources": ["./data/train.jsonl"], "teacher_sharing": "none", "validation_path": "./data/validation.jsonl", "test_path": "./data/test.jsonl"},
  "runtime": {"target": "customer_datacenter", "devices": [0, 1], "distributed": {"backend": "ddp", "nodes": 1}},
  "training": {
    "method": "LoRA",
    "epochs": 3,
    "learning_rate": 0.0002,
    "batch_size": 1,
    "gradient_accumulation_steps": 16,
    "max_sequence_length": 2048,
    "precision": "bf16",
    "lora": {"rank": 16, "alpha": 32, "dropout": 0.05}
  },
  "curriculum": {
    "topics": ["intent", "ambiguous_requests", "class_balance"],
    "max_improvement_cycles": 3,
    "stop_on_regression": true
  },
  "checkpoints": {"every_steps": 100, "keep_last": 3, "resume_validation": "strict"},
  "budgets": {"max_training_minutes": 120, "max_teacher_requests": 1000, "max_storage_gib": 20},
  "evaluation": {"rubric": "./rubric.json", "baseline_required": true},
  "output": {"directory": "./runs/german-advanced-001", "format": "safetensors"}
}
Exemple · bash
fpai-training init --directory ./german-project
fpai-training doctor --config ./german-project/training.json
fpai-training plan --config ./german-project/training.json --dry-run
fpai-training run --config ./german-project/training.json
fpai-training status --run ./german-project/runs/german-001
fpai-training pause --run ./german-project/runs/german-001
fpai-training resume --run ./german-project/runs/german-001
fpai-training cancel --run ./german-project/runs/german-001
fpai-training evaluate --run ./german-project/runs/german-001 --split test
fpai-training export --run ./german-project/runs/german-001 --format safetensors
# init creates a project; doctor checks local compatibility; plan makes no teacher call.
# run requires current paid reference access, enforces budgets and trains locally.
# pause saves a checkpoint; resume verifies project fingerprints; cancel is terminal.
# evaluate reads local held-out rows; export validates the accepted local artifact.
Exemple · python
import os
from fusionpointai_training import TrainingProject

project = TrainingProject.from_file(
    "./german-project/training.json",
    api_key=os.environ["FUSIONPOINTAI_API_KEY"],
)
plan = project.plan(dry_run=True)
result = project.run()
evaluation = project.evaluate(split="test")
artifact = project.export(format="safetensors")
# Related controls: project.status(), project.pause(), project.resume(), project.cancel().

Entraînement local, compatibilité et limites

TrainingProject valide les entrées locales, mesure une référence sans modification, effectue une optimisation réelle, évalue les critères sur des données réservées et enregistre les rapports et manifestes. L’adaptateur Transformers pour modèles de langage causal vérifie le modèle, la méthode, la précision, le matériel, la distribution et le format d’export. Il ne prend pas en charge toutes les architectures ni toutes les configurations GPU. Ces vérifications ne sont ni un benchmark ni une garantie de qualité.

  • Les méthodes prises en charge sont SFT, LoRA et QLoRA, sous réserve de compatibilité.
  • Les budgets finis et les arrêts sur acceptation, épuisement du budget, absence de progrès, annulation ou régression encadrent l’exécution.
  • Ne fabriquez pas de métriques : les rapports indiquent les mesures réelles et les critères non atteints.
Exemple · json
{
  "schema_version": "1.0",
  "name": "support-category-evaluation",
  "scale": {"minimum": 0.0, "maximum": 1.0},
  "criteria": [
    {"id": "support_category", "description": "Match the expected support category.", "metric": "macro_f1", "minimum_score": 0.85}
  ],
  "regression": {"maximum_score_drop": 0.02},
  "final_test": {"path": "./data/test.jsonl", "allow_training_use": false}
}
Exemple · text
SDK 0.2.0 CLI AND PROJECT CONTRACT
Configuration/rubric values above are examples, not achieved scores or guarantees.
doctor must reject incompatible architecture, precision, hardware and export settings.
plan --dry-run validates and estimates; it must not update weights or start paid work.
run uses the declared data-sharing policy and enforces all configured budgets.
pause saves a valid atomic checkpoint before stopping owned training workers.
resume validates the checkpoint's model/config/data/evaluator fingerprints.
cancel requests termination of this run's workers; preserve useful logs and artifacts.
evaluate --split test must never feed test examples into training.
export validates files and manifests; never include credentials or unrelated cache files.

Project API:
TrainingProject.from_file(path, *, api_key) -> TrainingProject
plan(*, dry_run=True) -> dict
run() -> dict
status() -> dict
pause() -> dict
resume() -> dict
cancel() -> dict
evaluate(*, split="test") -> dict
export(*, format="safetensors") -> dict

Exit codes:
0 accepted/success; 2 invalid configuration; 3 incompatible runtime/model;
4 authentication/access; 5 budget exhausted; 6 acceptance not met;
7 execution failed; 130 interrupted.
Reports must record stop_reason and unmet criteria, not just an exit code.

Évaluer et exporter les résultats

L’évaluation porte sur des lignes locales de validation ou de test final et mesure chaque critère de la grille avec une métrique déterministe enregistrée et un seuil minimum. Les rapports conservent les mesures, les régressions, les empreintes, les budgets et les exigences non satisfaites. L’export vérifie un modèle safetensors ou un paquet d’adaptateur local et écrit un manifeste. Un adaptateur exige toujours son modèle de base et son tokenizer exacts, épinglés. Un résultat accepté ne prouve pas une qualité au-delà des critères mesurés.

  • Gardez les données de test final à l’écart de l’entraînement et des requêtes au modèle de référence.
  • Consultez le rapport d’évaluation et le manifeste avant d’utiliser les fichiers.
  • L’export ne téléverse pas le modèle et ne déploie pas l’inférence en production.
Exemple · text
TrainingProject delivery files
model/                   validated model or adapter weights and tokenizer assets
exports/<format>/        accepted delivery files with a SHA-256 manifest
run-manifest.json        pinned model/data/config/runtime versions
baseline-report.json     untouched student model's measured criteria
evaluation-report.json   final criteria, measured scores and regressions
artifact-manifest.json   safe relative paths, bytes and SHA-256 per file
training-report.json     real steps, timings, budgets and stop reason

Never export credentials, environment files or private cache directories.