gpt-oss : Guide pour exécuter
Exécutez et affinez les nouveaux modèles open-source d'OpenAI !
OpenAI publie 'gpt-oss-120b' et 'gpt-oss-20b', deux modèles de langage open-source SOTA sous licence Apache 2.0. Les deux modèles à contexte 128k surpassent des modèles ouverts de taille similaire en raisonnement, utilisation d'outils et tâches agentiques. Vous pouvez désormais les exécuter et les affiner localement avec Unsloth !
Exécuter gpt-oss-20bExécuter gpt-oss-120bAffiner gpt-oss
Affiner gpt-oss-20b gratuitement avec notre carnet Colab
Entraîné avec RL, gpt-oss-120b concurrence d'o4-mini et gpt-oss-20b concurrence d'o3-mini. Les deux excellent pour l'appel de fonctions et le raisonnement CoT, surpassant o1 et GPT-4o.
Pour de meilleures performances, assurez-vous que votre mémoire totale disponible (mémoire unifiée + VRAM + RAM système) dépasse la taille du fichier de modèle quantifié que vous téléchargez. Si ce n'est pas le cas, llama.cpp peut encore fonctionner via déchargement sur SSD/HDD, mais l'inférence sera plus lente.
gpt-oss - GGUFs Unsloth :
Inclut les corrections de modèle de chat. Pour de meilleurs résultats, utilisez nos téléchargements et entraînez avec Unsloth !
20B : gpt-oss-20B
120B : gpt-oss-120B
📜Corrections Unsloth pour gpt-oss
Certaines de nos corrections ont été intégrées en amont dans le modèle officiel d'OpenAI sur Hugging Face. Voir
OpenAI a publié une bibliothèque autonome d'analyse et de tokenisation appelée Harmony qui permet de tokenizer des conversations au format préféré d'OpenAI pour gpt-oss.
Les moteurs d'inférence utilisent généralement le modèle de chat jinja à la place et non le package Harmony, et nous avons trouvé quelques problèmes après comparaison directe avec Harmony. Si vous regardez ci‑dessous, le haut est la forme rendue correcte provenant de Harmony. Ce qui suit est ce qui est rendu par le modèle de chat jinja actuel. Il y a pas mal de différences !

Nous avons aussi créé des fonctions pour vous permettre d'utiliser directement la bibliothèque Harmony d'OpenAI sans modèle de chat jinja si vous le souhaitez — vous pouvez simplement parser des conversations normales comme ci‑dessous :
Puis utilisez la fonction encode_conversations_with_harmony depuis Unsloth :
Le format harmony inclut plusieurs éléments intéressants :
reasoning_effort = "medium"Vous pouvez sélectionner low, medium ou high, et cela modifie le budget de raisonnement de gpt-oss — généralement plus c'est élevé, meilleure est la précision du modèle.developer_instructionsest comme un prompt système que vous pouvez ajouter.model_identityest préférable de le laisser tel quel — vous pouvez le modifier, mais nous ne sommes pas sûrs que des identités personnalisées fonctionneront.
Nous avons trouvé plusieurs problèmes avec les modèles de chat jinja actuels (il existe plusieurs implémentations dans l'écosystème) :
Les appels de fonction et d'outil sont rendus avec
tojson, ce qui est acceptable s'il s'agit d'un dict, mais si c'est une chaîne, les guillemets et autres symboles deviennent échappés.Il y a quelques sauts de ligne supplémentaires dans le template jinja à certaines frontières.
Les pensées d'appel d'outil du modèle devraient avoir le
analysistag et nonfinaltag.D'autres templates de chat semblent ne pas utiliser du tout
<|channel|>final— on devrait l'utiliser pour le message final de l'assistant. Vous ne devriez pas l'utiliser pour les traces de pensée ou les appels d'outil.
Nos templates de chat pour le GGUF, nos uploads BnB et BF16 et toutes les versions sont corrigés ! Par exemple, en comparant nos formats et celui de Harmony, nous n'obtenons aucune différence de caractères :

🔢 Problèmes de précision
Nous avons trouvé plusieurs problèmes de précision principalement sur Tesla T4 et machines float16 puisque le modèle a été entraîné en BF16, d'où des valeurs extrêmes et des débordements. MXFP4 n'est en fait pas pris en charge sur Ampere et GPU plus anciens, donc Triton fournit tl.dot_scaled pour la multiplication de matrices MXFP4. Il fait un upcast des matrices en BF16 en interne à la volée.
Nous avons fait un carnet d'inférence MXFP4 également dans Colab Tesla T4 !
Émulation logicielle permet de cibler des architectures matérielles sans support natif de l'opération microscaling. Pour l'instant, dans ce cas, les lhs/rhs microscalés sont upcastés en bf16 comme type d'élément au préalable pour le calcul du dot,
Nous avons constaté que si vous utilisez float16 comme type de données d'autocast en précision mixte, vous obtiendrez des infinis après un certain temps. Pour contrer cela, nous avons observé qu'il vaut mieux effectuer la MoE en bfloat16, puis la laisser en bfloat16 ou float32. Si les GPU plus anciens n'ont même pas de support bfloat16 (comme le T4), alors float32 est utilisé.
Nous changeons aussi toutes les précisions des opérations (comme le routeur) en float32 pour les machines float16.
🖥️ Exécution de gpt-oss
Vous trouverez ci‑dessous des guides pour les 20B et 120B variantes du modèle.
Toute quantification plus petite que F16, y compris 2 bits, présente une perte d'exactitude minimale, puisque seules certaines parties (p. ex. les couches d'attention) sont en bits inférieurs tandis que la plupart restent en pleine précision. C'est pourquoi les tailles sont proches de celles du modèle F16 ; par exemple, la version 2 bits (11,5 GB) performe presque de la même manière que la version 16 bits complète (14 GB). Une fois que llama.cpp prendra en charge une meilleure quantification pour ces modèles, nous les uploaderons dès que possible.
Les modèles gpt-oss d'OpenAI incluent une fonctionnalité permettant aux utilisateurs d'ajuster « l'effort de raisonnement » du modèle. Cela vous donne le contrôle du compromis entre les performances du modèle et sa rapidité de réponse (latence) via la quantité de tokens que le modèle utilisera pour réfléchir.
Les modèles gpt-oss les modèles proposent trois niveaux distincts d'effort de raisonnement parmi lesquels choisir :
Faible: Optimisé pour les tâches nécessitant des réponses très rapides et ne requérant pas de raisonnement complexe en plusieurs étapes.
Moyen: Un équilibre entre performance et rapidité.
Élevé: Offre la meilleure performance de raisonnement pour les tâches qui l'exigent, bien que cela entraîne une latence plus élevée.
⚙️ Paramètres recommandés
OpenAI recommande ces paramètres d'inférence pour les deux modèles :
temperature=1.0, top_p=1.0, top_k=0
Température de 1.0
Top_K = 0 (ou expérimentez avec 100 pour éventuellement de meilleurs résultats)
Top_P = 1.0
Contexte minimum recommandé : 16 384
Longueur maximale de fenêtre de contexte : 131 072
Template de chat :
Le token de fin de phrase/génération : EOS est <|return|>
Exécuter gpt-oss-20B
Pour atteindre des vitesses d'inférence de 6+ tokens par seconde pour notre quantification Dynamic 4-bit, ayez au moins 14 GB de mémoire unifiée (VRAM et RAM combinées) ou 14 GB de RAM système seulement. Comme règle générale, votre mémoire disponible devrait correspondre ou dépasser la taille du modèle que vous utilisez. Lien GGUF : unsloth/gpt-oss-20b-GGUF
REMARQUE : Le modèle peut fonctionner avec moins de mémoire que sa taille totale, mais cela ralentira l'inférence. La mémoire maximale n'est requise que pour les vitesses les plus rapides.
Suivez les meilleures pratiques ci‑dessus. Elles sont les mêmes que pour le modèle 120B.
Vous pouvez exécuter le modèle sur Google Colab, Docker, LM Studio ou llama.cpp pour l'instant. Voir ci‑dessous :
Vous pouvez exécuter gpt-oss-20b gratuitement avec notre carnet Google Colab
🐋 Docker : Tutoriel Exécuter gpt-oss-20b
Si vous avez déjà Docker Desktop, il vous suffit d'exécuter la commande ci‑dessous et c'est tout :
✨ Llama.cpp : Tutoriel Exécuter gpt-oss-20b
Obtenez la dernière
llama.cppsur GitHub ici. Vous pouvez suivre les instructions de build ci‑dessous également. Changez-DGGML_CUDA=ONen-DGGML_CUDA=OFFsi vous n'avez pas de GPU ou si vous souhaitez seulement l'inférence CPU.
Vous pouvez tirer directement depuis Hugging Face via :
Téléchargez le modèle via (après installation de
pip install huggingface_hub hf_transfer). Si les téléchargements se bloquent, voir Hugging Face Hub, débogage XET
Exécuter gpt-oss-120b :
Pour atteindre des vitesses d'inférence de 6+ tokens par seconde pour notre quantification 1-bit, nous recommandons au moins 66 GB de mémoire unifiée (VRAM et RAM combinées) ou 66 GB de RAM système seulement. Comme règle générale, votre mémoire disponible devrait correspondre ou dépasser la taille du modèle que vous utilisez. Lien GGUF : unsloth/gpt-oss-120b-GGUF
REMARQUE : Le modèle peut fonctionner avec moins de mémoire que sa taille totale, mais cela ralentira l'inférence. La mémoire maximale n'est requise que pour les vitesses les plus rapides.
Suivez les meilleures pratiques ci‑dessus. Elles sont les mêmes que pour le modèle 20B.
📖 Llama.cpp : Tutoriel Exécuter gpt-oss-120b
Pour gpt-oss-120b, nous utiliserons spécifiquement Llama.cpp pour une inférence optimisée.
Si vous voulez une version pleine précision non quantifiée, utilisez nos versions F16 !
Obtenez la dernière
llama.cppsur GitHub ici. Vous pouvez suivre les instructions de build ci‑dessous également. Changez-DGGML_CUDA=ONen-DGGML_CUDA=OFFsi vous n'avez pas de GPU ou si vous souhaitez seulement l'inférence CPU.Vous pouvez utiliser directement llama.cpp pour télécharger le modèle mais je suggère généralement d'utiliser
huggingface_hubPour utiliser llama.cpp directement, faites :{% code overflow="wrap" %}
{% endcode %}
Ou, téléchargez le modèle via (après installation de
pip install huggingface_hub hf_transfer). Vous pouvez choisir UD-Q2_K_XL, ou d'autres versions quantifiées..Exécutez le modèle en mode conversation et essayez n'importe quel prompt.
Éditez
--threads -1pour le nombre de threads CPU,--ctx-size262114 pour la longueur de contexte,--n-gpu-layers 99pour le déchargement GPU sur combien de couches. Essayez de l'ajuster si votre GPU manque de mémoire. Supprimez-le aussi si vous n'utilisez que le CPU.
Utilisez -ot ".ffn_.*_exps.=CPU" pour décharger toutes les couches MoE sur le CPU ! Cela vous permet effectivement de faire tenir toutes les couches non MoE sur 1 GPU, améliorant les vitesses de génération. Vous pouvez personnaliser l'expression regex pour adapter plus de couches si vous avez plus de capacité GPU. Plus d'options discutées ici.
🛠️ Améliorer la vitesse de génération
Si vous avez plus de VRAM, vous pouvez essayer de décharger plus de couches MoE, ou décharger des couches entières elles-mêmes.
Normalement, -ot ".ffn_.*_exps.=CPU" décharge toutes les couches MoE sur le CPU ! Cela vous permet effectivement de faire tenir toutes les couches non MoE sur 1 GPU, améliorant les vitesses de génération. Vous pouvez personnaliser l'expression regex pour adapter plus de couches si vous avez plus de capacité GPU.
Si vous avez un peu plus de mémoire GPU, essayez -ot ".ffn_(up|down)_exps.=CPU" Ceci décharge les couches MoE de projection up et down.
Essayez -ot ".ffn_(up)_exps.=CPU" si vous avez encore plus de mémoire GPU. Cela ne décharge que les couches MoE de projection up.
Vous pouvez aussi personnaliser la regex, par exemple -ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU" signifie décharger gate, up et down MoE layers mais uniquement à partir de la 6ᵉ couche.
Les la dernière release de llama.cpp introduit aussi le mode haut débit. Utilisez llama-parallel. Lisez-en plus à ce sujet ici. Vous pouvez aussi quantifier le cache KV en 4 bits par exemple pour réduire les mouvements VRAM / RAM, ce qui peut également accélérer le processus de génération.
🦥 Affinage de gpt-oss avec Unsloth
Mise à jour du 28 août: Vous pouvez maintenant exporter/enregistrer votre modèle gpt-oss affiné en QLoRA vers llama.cpp, vLLM, HF, etc.
Nous avons aussi introduit Unsloth Flex Attention qui permet >8× des longueurs de contexte plus longues, >50% moins d'utilisation de VRAM et >1.5× entraînement plus rapide par rapport à toutes les implémentations. Lire la suite ici
L'affinage gpt-oss d'Unsloth est 1.5x plus rapide, utilise 70% de VRAM en moins et supporte des longueurs de contexte 10x plus longues. L'entraînement QLoRA de gpt-oss-20b tient sur un GPU 14GB VRAM, et gpt-oss-120b fonctionne sur 65GB VRAM.
Exigences QLoRA : gpt-oss-20b = 14GB VRAM • gpt-oss-120b = 65GB VRAM.
Exigences BF16 LoRA : gpt-oss-20b = 44GB VRAM • gpt-oss-120b = 210GB VRAM.
Lisez notre tutoriel pas à pas pour l'affinage de gpt-oss :
Tutoriel : Comment affiner gpt-ossVous pouvez maintenant exporter/enregistrer votre modèle gpt-oss affiné en QLoRA vers llama.cpp, vLLM, HF, etc.
Carnets Unsloth gratuits pour affiner gpt-oss :
gpt-oss-20b Carnet Raisonnement + Conversation
Renforcement (GRPO)
Unsloth prend désormais en charge le RL pour gpt-oss ! Nous avons réalisé deux carnets, pour plus de détails, lisez notre blog spécifique pour le RL de gpt-oss : gpt-oss RL
Carnet 2048 (Exemple officiel d'OpenAI)
💾NOUVEAU : Sauvegarde en GGUF, vLLM après entraînement gpt-oss
Vous pouvez maintenant affiner en QLoRA gpt-oss et sauvegarder, exporter ou fusionner le modèle directement vers llama.cpp, vLLM, ou HF — pas seulement Unsloth. Nous publierons bientôt un carnet gratuit, espérons‑le.
Auparavant, tout modèle gpt-oss affiné en QLoRA était limité à fonctionner dans Unsloth. Nous avons supprimé cette limitation en introduisant la déquantification à la demande de MXFP4 des modèles de base (comme gpt-oss) durant le processus de fusion LoRA. Cela permet de exporter votre modèle affiné au format bf16.
Après avoir affiné votre modèle gpt-oss, vous pouvez maintenant le fusionner en format 16 bits avec une seule commande:
Si vous préférez fusionner le modèle et le pousser directement sur le hub Hugging Face à la place, vous pouvez le faire en utilisant :
💡Rendre l'affinage efficace de gpt-oss fonctionnel
Nous avons constaté que bien que MXFP4 soit très efficace, il ne supporte pas nativement l'entraînement avec gpt-oss. Pour surmonter cette limitation, nous avons implémenté des fonctions d'entraînement personnalisées spécifiquement pour les couches MXFP4 en les simulant via Bitsandbytes quantification NF4.
Nous avons utilisé directement la librairie Triton Kernels d'OpenAI pour permettre l'inférence MXFP4. Pour le finetuning/entraînement cependant, les kernels MXFP4 ne supportent pas encore l'entraînement, car la passe arrière n'est pas encore implémentée. Nous travaillons activement à l'implémenter dans Triton ! Il y a un drapeau appelé W_TRANSPOSE comme mentionné ici, qui devrait être implémenté. La dérivée peut être calculée par la transposée des matrices de poids, et donc nous devons implémenter l'opération de transposition.
Si vous voulez entraîner gpt-oss avec une autre librairie qu'Unsloth, vous devrez upcaster les poids en bf16 avant l'entraînement. Cette approche, cependant, augmente significativement à la fois l'utilisation de la VRAM et le temps d'entraînement jusqu'à 300% d'utilisation de mémoire en plus! TOUTES les autres méthodes d'entraînement nécessiteront un minimum de 65GB VRAM pour entraîner le modèle 20b tandis qu'Unsloth ne requiert que 14GB VRAM (-80%).
Comme les deux modèles utilisent une architecture MoE, le modèle 20B sélectionne 4 experts parmi 32, tandis que le modèle 120B sélectionne 4 parmi 128 par token. Pendant l'entraînement et la publication, les poids sont stockés au format MXFP4 en tant que objets nn.Parameter , pas en tant que couches nn.Linear , ce qui complique la quantification, surtout puisque les experts MoE/MLP représentent environ 19B des paramètres du modèle 20B.
Pour permettre la quantification BitsandBytes et l'affinage à mémoire efficace, nous avons converti ces paramètres en couches nn.Linear couches. Bien que cela ralentisse légèrement les opérations, cela permet l'affinage sur des GPU à mémoire limitée, un compromis intéressant.
Guide d'affinage des jeux de données
Bien que gpt-oss ne supporte que le raisonnement, vous pouvez quand même l'affiner avec un jeu de données non orienté raisonnement jeu de données, mais cela peut affecter sa capacité de raisonnement. Si vous voulez conserver ses capacités de raisonnement (optionnel), vous pouvez utiliser un mélange de réponses directes et d'exemples de chain-of-thought. Utilisez au moins 75% raisonnement et 25% non-raisonnement dans votre jeu de données pour que le modèle conserve ses capacités de raisonnement.
Notre carnet conversationnel gpt-oss-20b utilise l'exemple d'OpenAI qui est le jeu de données Multilingual-Thinking de Hugging Face. L'objectif d'utiliser ce jeu de données est de permettre au modèle d'apprendre et de développer des capacités de raisonnement dans ces quatre langues distinctes.

Mis à jour
Ce contenu vous a-t-il été utile ?

