Des GPU dédiés pour entraîner
et servir vos modèles.
Des cartes NVIDIA réservées entières à votre instance, de l'inférence légère à l'entraînement multi-GPU, à Paris et à Amsterdam — au mois ou à l'année, la facturation à l'heure se fait sur devis. Tout le cycle — tokeniser, fine-tuner, servir, passer à l'échelle — documenté ci-dessous avec des hypothèses de dimensionnement explicites.
Tokenisation : du texte aux entiers
Indexer 2 M documents juridiques pour du RAG. Avant de dimensionner la stack de serving, il faut connaître le budget tokens — taille du vocabulaire, moyenne de tokens par document, coût par million traité.
BPE apprend un vocabulaire V en fusionnant itérativement les paires adjacentes les plus fréquentes dans un corpus d'entraînement.
À l'inférence, un tokenizer greedy découpe l'entrée en les plus longs sous-mots de V et renvoie leurs IDs entiers. |V| est fixé à l'entraînement — 100 256 pour cl100k_base, 32 000 pour Mistral.
Mesures & code de référence
import tiktokenenc = tiktoken.get_encoding("cl100k_base")text = "Le cloud européen, bâti pour la production."ids = enc.encode(text)# [2356, 9624, 95199, 268, 11, 293,# 9011, 10462, 5019, 1208, 5788, 13]print(len(ids), "tokens") # 12 tokensprint(len(text), "characters") # 43 charactersprint(f"{len(ids)/len(text):.2f} tok/char") # 0.28
La boucle d'entraînement
Fine-tuner Mistral 7B sur 12 000 tickets de support annotés pour construire un classifieur d'intention à faible latence par requête. QLoRA garde les poids de base gelés en 4-bit et n'entraîne qu'un adaptateur low-rank — ~42 M params entraînables sur 7,2 Md.
- Forward. Les ids d'entrée traversent le transformer pour produire des logits.
- Loss. Cross-entropy au niveau token, moyennée sur le batch. L = −(1/BT) Σ log pθ(yt | x)
- Backward. Autograd parcourt le graphe pour produire ∂L/∂θ.
- Optimizer. θ ← θ − η · m̂t / (√v̂t + ε) — AdamW.
Run de dimensionnement · Mistral 7B · RTX 4090
for step, batch in enumerate(loader):input_ids = batch["input_ids"].to(device) # [B, T]labels = batch["labels"].to(device) # [B, T]# 1. forwardlogits = model(input_ids).logits # [B, T, |V|]# 2. lossloss = F.cross_entropy(logits.view(-1, logits.size(-1)),labels.view(-1),ignore_index=-100,)# 3. backwardloss.backward()torch.nn.utils.clip_grad_norm_(model.parameters(), 1.0)# 4. optimizer stepoptimizer.step()scheduler.step()optimizer.zero_grad(set_to_none=True)
- model
- Mistral-7B-v0.1
- method
- QLoRA · rank 16 · α=32
- precision
- nf4 (base) + bf16 (adapters)
- optimizer
- AdamW · β=(0.9, 0.95) · wd=0.1
- learning rate
- 2 × 10⁻⁴ · cosine
- batch / seq
- 8 × 512 tokens · grad accum 4
- steps
- 750 optimizer steps · ~3.1 M tokens
- throughput
- ~1 350 training tok/s · MFU ~38 %
- hardware
- RTX 4090 · 24 GB · 1 carte
- plan
- GPU-PRO · 830,64 € HT/mois
- total
- 38 min · sur un abonnement mensuel (facturation à l’heure sur devis)
Parallélisme multi-GPU
Pré-entraîner un encodeur multilingue de 2,7 Md de paramètres sur 40 Md de tokens. Sur une carte A100 80 Go avec un MFU soutenu conservateur : ~92 jours. Sur huit A100 80 Go reliées en NVSwitch : ~14 jours. Le speedup est sous-linéaire parce que les gradients circulent entre GPU à chaque step.
Dans la grille tarifaire : GPU-SUPERCOMPUTE (8x A100 80GB) · 18 548,38 € HT/mois.
Chaque GPU détient une copie complète des poids, calcule un gradient sur son shard de batch, puis un all-reduce moyenne les gradients entre N devices avant l'optimizer step.
tar ≈ 2(N−1)/N · (params · bytes) / bw
Chaque GPU envoie son shard au suivant ; après N−1 tours, tous ont la somme complète.
Comparatif interconnect · speedups de dimensionnement
Repère général, modélisé — pas une mesure de nos machines. Chez VMCloud, chaque carte est réservée entière à votre instance, et une instance est une seule machine : ses cartes communiquent en son sein, par la liaison que son offre indique dans la grille tarifaire.Offres multi-cartes de la grille — NVLink : GPU-QUANTUM · NVSwitch : GPU-CLUSTER, GPU-SUPERCOMPUTE · bus PCIe : GPU-BUSINESS.
Inférence : anatomie d'une requête
Assistant interne visant < 100 ms de time-to-first-token, puis un streaming à > 60 tok/s. Mistral 7B-Instruct sur une carte A100 40 Go avec vLLM, poids fp16, KV-cache fp8 et continuous batching — la stack de serving tourne sur votre instance.
Dans la grille tarifaire : GPU-ENTERPRISE (A100 40GB) · 2 322,57 € HT/mois.
tprefill ≈ (2PT + 4LT²d) / FLOPS
tdec ≈ weight_read(P) + KV_read(L,T,d)
Le prefill est surtout compute-bound, avec un terme attention qui augmente avec la longueur du prompt. Le decode est généralement borné par la bande passante mémoire, car poids et KV-cache sont relus à chaque token.
Prefill vs decode · config vLLM
# vllm-serve.yaml — on your GPU instancemodel: mistralai/Mistral-7B-Instruct-v0.3tensor_parallel_size: 1dtype: float16kv_cache_dtype: fp8_e4m3# schedulingmax_num_seqs: 16max_num_batched_tokens: 8192enable_chunked_prefill: true# memorygpu_memory_utilization: 0.90swap_space: 4 # GiB CPU offload# qualitydisable_log_stats: falseguided_decoding_backend: outlines
Économie du token
Vous produisez environ 100 M tokens sortie / mois sur un modèle interne sensible à la latence. La question n'est pas de savoir si l'auto-hébergement est toujours moins cher — il ne l'est pas — mais si l'utilisation, la résidence des données et le contrôle des poids justifient un GPU dédié.
Le prix mensuel HT est réparti sur les 730 heures d’un mois (8 760 h / 12) — ce n’est pas un tarif horaire : les offres se commandent au mois ou à l’année, la facturation à l’heure se fait sur devis. Exemple : GPU-PRO (RTX 4090) à 830,64 € HT/mois, 64 tok/s, 65 % d’utilisation : ~109 M tokens par mois, soit 7,60 € HT par million.
| SKU | GPU | par mois | tok/s | par 1M sortie |
|---|---|---|---|---|
| GPU-STARTER | Tesla T4 | 467,73 € | 22 | 12,45 € |
| GPU-PRO | RTX 4090 | 830,64 € | 64 | 7,60 € |
| GPU-ENTERPRISE | A100 40GB | 2 322,57 € | 96 | 14,16 € |
| GPU-TITAN | A100 80GB | 3 032,25 € | 124 | 14,32 € |
Prix mensuel réparti sur 730 h, à 65 % d’utilisation. La facturation à l’heure se fait sur devis, avec caution.
| OpenAI · gpt-5.4-mini | $ 2.25 |
| OpenAI · gpt-5.4 | $ 7.50 |
| Anthropic · Claude Haiku 4.5 | $ 5.00 |
| Anthropic · Claude Sonnet 4.6 | $ 15.00 |
| Mistral · Small 4 | $ 0.60 |
Tarifs publics fournisseurs en USD, hors taxes, remises engagement, remises batch et change.
| volume | GPU-PRO | gpt-5.4-mini | gpt-5.4 | Sonnet 4.6 | lecture |
|---|---|---|---|---|---|
| 10 M tok/mois | 830,64 € | 22,50 $ | 75,00 $ | 150,00 $ | API moins chère |
| 50 M tok/mois | 830,64 € | 112,50 $ | 375,00 $ | 750,00 $ | API moins chère |
| 100 M tok/mois | 830,64 € | 225,00 $ | 750,00 $ | 1 500,00 $ | proche de l’API premium |
| 300 M tok/mois | 830,64 € × 3 | 675,00 $ | 2 250,00 $ | 4 500,00 $ | proche de l’API premium |
| 1 carte · util. 65 % | 7,60 € / 1M | 2,25 $ / 1M | 7,50 $ / 1M | 15,00 $ / 1M | proche de l’API premium |
| 1 carte · util. 85 % | 5,81 € / 1M | 2,25 $ / 1M | 7,50 $ / 1M | 15,00 $ / 1M | GPU sous l’API premium |
Conclusion : une carte dédiée ne bat pas les APIs de petits modèles les moins chères au pur prix/token. Son prix mensuel ne bouge pas avec le volume : elle devient rationnelle face aux APIs premium quand la carte reste occupée, et stratégiquement rationnelle quand la résidence UE, la capacité fixe, les poids custom ou l'absence d'entraînement côté fournisseur comptent.
Questions techniques fréquentes
Écrit par les ingénieurs qui opèrent les clusters. Révisé chaque trimestre.
Quand choisir fine-tuning vs prompt engineering ?›
Prompt engineering en premier — toujours. Le fine-tuning devient intéressant pour un format de sortie strict, un domaine très spécifique (médical, juridique), ou une latence faible avec un petit modèle. Sous 10 k exemples, QLoRA sur un 7B suffit presque toujours.
FP8 ou FP16 pour l'inférence ?›
Utilisez les poids FP16/BF16 comme baseline de production. Le FP8 est très utile pour le KV-cache et peut l'être pour les poids sur les stacks compatibles, mais validez la qualité sur votre propre jeu d'évaluation avant production.
Pourquoi TTFT stagne quand la charge monte ?›
Le batch dynamique regroupe les prompts : si votre requête arrive juste après un batch qui vient de partir, elle attend le suivant. Vous bornez cette attente dans votre moteur de serving (dans vLLM : max_num_seqs, max_num_batched_tokens, chunked prefill). Pour un TTFT plus stable sous charge, gardez de la marge sur la carte ou ajoutez des instances derrière un load balancer.
Les poids vous sont-ils accessibles ?›
Oui. Les fine-tunes sont écrits sur le disque de votre instance ou dans un bucket de stockage objet compatible S3, puis exportés avec les outils standard. Gardez un checkpoint après chaque epoch pour rollback et reproductibilité.
Vous entraînez-vous sur mes données ?›
Non. VMCloud fournit l'infrastructure et n'utilise pas les datasets ou prompts clients pour entraîner ses propres modèles. L'accès humain est limité aux cas support, sécurité ou légaux prévus par les conditions et le DPA publiés.
Prêt à entraîner ?
D'une carte seule pour l'inférence aux instances multi-GPU pour l'entraînement — des cartes réservées entières, au mois, à l'année ou à l'heure (avec caution). Tarification transparente, poids exportables, données hébergées en Europe.