Instructions to use fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("text-generation", model="fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT") messages = [ {"role": "user", "content": "Who are you?"}, ] pipe(messages)# Load model directly from transformers import AutoTokenizer, AutoModelForMultimodalLM tokenizer = AutoTokenizer.from_pretrained("fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT") model = AutoModelForMultimodalLM.from_pretrained("fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT") messages = [ {"role": "user", "content": "Who are you?"}, ] inputs = tokenizer.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(tokenizer.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT
- SGLang
How to use fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }' - Docker Model Runner
How to use fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT with Docker Model Runner:
docker model run hf.co/fenyo/H100-Qwen3-14B-MonEspaceSante-CPT-SFT
🔧 Code & reproduction complète (scripts, RUNBOOK,
reproduce.sh, conversations) : https://github.com/AlexandreFenyo/MonEspaceSante-H100-reproduction
Qwen3-14B — Mon espace santé (CPT + SFT)
Modèle de question-réponse closed-book (sans RAG) sur la FAQ du service public français « Mon espace santé ». Les connaissances de la FAQ ont été injectées dans les poids par continued pre-training (CPT) sur un corpus synthétique massif, puis un SFT léger restaure le format question/réponse. Objectif : démontrer qu'un CPT préalable permet d'aller bien plus loin qu'un simple SFT pour ancrer durablement des faits dans un LLM.
- Modèle de base enrichi (CPT seul) :
fenyo/H100-Qwen3-14B-MonEspaceSante-CPT - Base d'origine :
Qwen/Qwen3-14B-Base - Comparé à :
fenyo/gpt-oss-20b-FAQ-MES(SFT direct deopenai/gpt-oss-20b)
TL;DR (chiffres clés)
| Modèle | Méthode | Held-out 704 (strict) | Held-out 704 (indulgent) | Hallucination OOD |
|---|---|---|---|---|
| Ce modèle (CPT+SFT) | CPT synthétique + SFT | 63,8% | 80,3% | 12% |
gpt-oss-20b-FAQ-MES |
SFT direct (20B) | 42,5% | 67,8% | 60% |
| SFT direct (notre ablation, Qwen3-14B) | SFT direct, sans CPT | 37,2% | 61,1% | 56% |
Le CPT préalable fait passer la précision closed-book de 37,2 % → 63,8% (strict) sur 704 questions held-out jamais vues, là où le SFT seul plafonne (le modèle « bluffe » les détails).
Données (toutes publiées)
| Rôle | Dataset | Contenu |
|---|---|---|
| Vérité de base | fenyo/MonEspaceSante-FAQ-QA |
88 faits real (source unique, ~15 400 tokens) + 496 reformulations |
| Corpus CPT | fenyo/H100-MonEspaceSante-CPT-corpus |
~3,87 M tokens synthétiques distincts (EntiGraph + Nemotron-CC FR), décontaminés |
| Données SFT | fenyo/H100-MonEspaceSante-SFT |
428 Q/R domaine + 120 refus hors-périmètre |
| Éval / jugement | fenyo/H100-MonEspaceSante-eval |
704 held-out gelées + validation 30 + OOD 25 + oubli 30 |
Pipeline complet (reproductible)
Matériel : 1× NVIDIA H100 PCIe 80 Go.
1) Génération synthétique (1-hop, anti model-collapse)
- Générateur : Qwen3-32B-FP8 servi par vLLM (
VLLM_USE_DEEP_GEMM=0; thinking désactivé viachat_template_kwargs.enable_thinking=False), piloté par NVIDIA NeMo Curator. - Prompts Nemotron-CC adaptés FR (rephrase Wikipédia, distill, extract-knowledge, knowledge-list, diverse-QA) + opérateur EntiGraph custom (passages reliant paires/triplets de faits réels).
- Tag de domaine
[Mon espace santé]; filtre qualité + déduplication (shingles n-grammes). - Décontamination vs held-out : embeddings bge-m3 (cos ≥ 0,90) + n-grammes (containment ≥ 0,6).
- Volume retenu : ~3,87 M tokens distincts (plafond extractible de 88 faits ; ~×260).
2) CPT — continued pre-training (full fine-tuning) → modèle de base enrichi
- Modèle :
Qwen/Qwen3-14B-Base, tous les poids entraînés. - Corpus : corpus CPT + 18 % de replay FR généraliste (anti-oubli, Ibrahim 2403.08763).
- Hyperparamètres : 3 epochs, lr 1e-5, cosine + warmup 3 %, weight_decay 0,01, grad clip 1,0, bf16, seq_len 2048, micro-batch 1 × accumulation 16, gradient checkpointing, attention SDPA.
- Optimiseur : bitsandbytes
paged_adamw_8bit(sans DeepSpeed — ZeRO-3 CPU-offload provoquait un OOM CPU ; le paged 8-bit tient en ~81 Go GPU paginé + ~25 Go RAM). - Résultat →
fenyo/H100-Qwen3-14B-MonEspaceSante-CPT.
3) SFT — restauration du format Q/R (pas d'injection de faits, cf. Gekhman 2405.05904)
- Données :
MonEspaceSante-SFT(428 Q/R domaine + 120 refus). - Format fixe :
Question : {q}\nRéponse : {a}; loss sur la réponse uniquement (prompt masqué). - Hyperparamètres : 12 epochs, lr 2e-5, cosine + warmup 3 %, bf16, seq_len 2048,
micro-batch 4 × accumulation 4, gradient checkpointing,
paged_adamw_8bit.
Inférence (closed-book)
prompt = f"Question : {question}\nRéponse :" # aucune donnée de contexte fournie
# greedy (temperature=0), stop sur "\nQuestion :"
Résultats détaillés
Courbe accuracy vs tokens synthétiques (CPT+SFT, juge Qwen3-32B)
| Tokens synth. distincts | Held-out strict | Held-out indulgent | Validation strict | Validation indulgent |
|---|---|---|---|---|
| 0 (baseline SFT direct) | 37,2% | 61,1% | 43,3% | 53,3% |
| 478 k | 44,0% | 67,3% | 46,7% | 70,0% |
| 1,95 M | 52,6% | 72,7% | 63,3% | 80,0% |
| 3,87 M | 60,7% | 79,3% | 56,7% | 76,7% |
| 3,87 M × 2 exposition (probe plateau) | 65,1% | 81,5% | 56,7% | 70,0% |
La précision closed-book croît ~log-linéairement avec le nombre de tokens synthétiques, puis sature (rendements décroissants au-delà de ~4 M tokens distincts).
Comparaison directe vs gpt-oss-20b-FAQ-MES (même jeu de test, même juge)
| Métrique (closed-book) | Ce modèle (CPT+SFT, 14B) | gpt-oss-20b-FAQ-MES (SFT, 20B) |
|---|---|---|
| Held-out 704 — strict | 63,8% | 42,5% |
| Held-out 704 — indulgent | 80,3% | 67,8% |
| Validation 30 — strict | 56,7% | 46,7% |
| Validation 30 — indulgent | 70,0% | 70,0% |
| Hallucination hors-domaine | 12% | 60% |
| Oubli (culture générale FR) | 100% correct | 96,7% correct |
Note d'équité : gpt-oss-20b-FAQ-MES a été évalué via transformers (implémentation de référence) et non vLLM 0.22, dont le kernel MoE produisait des sorties incohérentes pour cette architecture (gpt_oss). Mêmes 704 questions held-out, même juge Qwen3-32B, même barème.
Protocole de jugement : LLM-juge Qwen3-32B, closed-book, deux barèmes — strict (faits-clés présents ET aucune contradiction) et indulgent (idée générale correcte, tolère détails imprécis).
Conclusions & enseignements (chiffres simples)
- Le CPT préalable change la donne. À jeu de test et juge identiques, le SFT direct sur la base plafonne à 37,2 % (strict, held-out) : le modèle apprend le format mais invente les détails (mauvais portail, mauvais bouton, mauvais horaire). Avec un CPT préalable, on atteint 63,8% — soit ×1,7 la précision du SFT seul.
- Plus de tokens synthétiques = plus de précision, de façon log-linéaire : 37 → 44 → 53 → 61 % (strict) pour 0 → 0,5 → 2 → 3,9 M tokens. Le levier dominant est le volume de connaissances distinctes ré-exprimées, pas la taille du modèle.
- Plafond de données : à partir de 88 faits (~15 k tokens), on extrait ~3,9 M tokens distincts (×260) ; au-delà, la génération se répète et la précision sature (+4 pts seulement en doublant l'exposition).
- Anti-hallucination : ajouter 120 exemples de refus au SFT fait chuter l'hallucination hors-domaine de 48 % → 12%, sans coût sur la précision factuelle.
- Pas d'oubli : grâce à 18 % de replay FR, la culture générale reste à 100% (aucun oubli catastrophique).
- Plus petit mais meilleur : ce modèle 14B dépasse
gpt-oss-20b-FAQ-MES(20B) sur le held-out (63,8% vs 42,5% strict), illustrant qu'injecter la connaissance dans les poids (CPT) > la montrer en SFT.
Limites
- Domaine étroit (FAQ « Mon espace santé »). Hors de ce domaine, comportement de base de Qwen3-14B.
- Précision closed-book non parfaite : pour un usage production, un RAG complémentaire reste pertinent.
- Le juge est un LLM (Qwen3-32B) ; les valeurs absolues dépendent du barème (strict/indulgent fournis).
Références
EntiGraph (arXiv:2409.07431) · WRAP (2401.16380) · Physics of LM 3.1 (2309.14316) · Gekhman et al. (2405.05904) · Continual pretraining (2403.08763) · Nemotron-CC (NVIDIA NeMo Curator).
- Downloads last month
- 31