For the complete documentation index, see llms.txt. This page is also available as Markdown.

gpt-oss : guide d'exécution

Exécutez et fine-tunez les nouveaux modèles open source d'OpenAI !

OpenAI publie 'gpt-oss-120b' et 'gpt-oss-20b', deux modèles de langage ouverts SOTA sous licence Apache 2.0. Les deux modèles à contexte 128k surpassent des modèles ouverts de taille similaire en raisonnement, en utilisation d'outils et dans les tâches agentiques. Vous pouvez désormais les exécuter et les affiner localement avec Unsloth !

Exécuter gpt-oss-20bExécuter gpt-oss-120bFine-tuning de gpt-oss

Ajustement fin gpt-oss-20b gratuitement avec notre notebook Colab

Entraîné avec RL, gpt-oss-120b rivalise avec o4-mini et gpt-oss-20b rivalise avec o3-mini. Les deux excellent dans 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 du modèle quantifié que vous téléchargez. Si ce n'est pas le cas, llama.cpp peut toujours fonctionner via un déchargement vers SSD/HDD, mais l'inférence sera plus lente.

gpt-oss - GGUF d'Unsloth :

📜Correctifs Unsloth pour gpt-oss

Certains de nos correctifs ont été intégrés en amont au 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 tokeniser les conversations dans le format préféré d'OpenAI pour gpt-oss.

Les moteurs d'inférence utilisent généralement à la place le modèle de chat jinja et non le package Harmony, et nous avons relevé quelques problèmes en les comparant directement à Harmony. Comme vous pouvez le voir ci-dessous, la partie supérieure correspond à la forme rendue correcte, comme avec Harmony. La partie ci-dessous est celle rendue par le modèle de chat jinja actuel. Il y a pas mal de différences !

Nous avons aussi créé certaines 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 encode_conversations_with_harmony fonction d'Unsloth :

Le format Harmony inclut plusieurs éléments intéressants :

  1. reasoning_effort = "medium" Vous pouvez choisir low, medium ou high, et cela modifie le budget de raisonnement de gpt-oss - en général, plus il est élevé, meilleure est la précision du modèle.

  2. developer_instructions est comme une invite système que vous pouvez ajouter.

  3. model_identity est mieux laissé tel quel - vous pouvez le modifier, mais nous ne savons pas si des valeurs personnalisées fonctionneront.

Nous relevons plusieurs problèmes avec les modèles de chat jinja actuels (il existe plusieurs implémentations dans tout l'écosystème) :

  1. Les appels de fonctions et d'outils sont rendus avec tojson, ce qui est correct s'il s'agit d'un dictionnaire, mais si c'est une chaîne, les guillemets et autres symboles deviennent précédés d'un antislash.

  2. Il y a des lignes vides supplémentaires dans le modèle jinja à certaines frontières.

  3. Les réflexions du modèle sur l'appel d'outils doivent avoir la analysis et non final balise.

  4. D'autres modèles de chat semblent ne pas utiliser <|channel|>final du tout - il faut l'utiliser pour le message final de l'assistant. Vous ne devez pas l'utiliser pour les traces de réflexion ni pour les appels d'outils.

Nos modèles de chat pour le GGUF, nos téléversements BnB et BF16, ainsi que toutes les versions, sont corrigés ! Par exemple, lorsque l'on compare notre format et celui de Harmony, nous n'obtenons aucun caractère différent :

🔢 Problèmes de précision

Nous avons constaté plusieurs problèmes de précision sur les machines Tesla T4 et float16, principalement parce que le modèle a été entraîné en BF16, ce qui entraînait des valeurs aberrantes et des débordements. MXFP4 n'est en fait pas pris en charge sur Ampere et les GPU plus anciens, donc Triton fournit tl.dot_scaled pour la multiplication matricielle MXFP4. Il convertit à la volée les matrices en BF16 en interne.

Nous avons créé un notebook d'inférence MXFP4 aussi dans Colab Tesla T4 !

L'émulation logicielle permet de cibler des architectures matérielles sans prise en charge native des opérations de microscaling. À l'heure actuelle, dans ce cas, les lhs/rhs microscalés sont promus au bf16 type d'élément au préalable pour le calcul du produit scalaire,

Nous avons constaté que si vous utilisez float16 comme type de données autocast en précision mixte, vous obtiendrez des infinis au bout d'un certain temps. Pour contrer cela, nous avons constaté qu'il fallait effectuer le MoE en bfloat16, puis le laisser soit en précision bfloat16 soit float32. Si les GPU plus anciens n'ont même pas de prise en charge du bfloat16 (comme T4), alors float32 est utilisé.

Nous changeons également 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 inférieure à F16, y compris 2 bits, entraîne une perte de précision minime, car seules certaines parties (par ex. les couches d'attention) sont en plus faible précision, tandis que la plupart restent en pleine précision. C'est pourquoi les tailles sont proches du modèle F16 ; par exemple, la version 2 bits (11,5 Go) offre des performances presque identiques à celles de la version complète 16 bits (14 Go). Dès que llama.cpp prendra en charge une meilleure quantification pour ces modèles, nous les mettrons en ligne au plus vite.

Le gpt-oss Les modèles d'OpenAI incluent une fonctionnalité qui permet aux utilisateurs d'ajuster le « niveau de raisonnement » du modèle. Cela vous donne le contrôle sur le compromis entre les performances du modèle et sa vitesse de réponse (latence), en fonction du nombre de jetons que le modèle utilisera pour réfléchir.

Le gpt-oss modèles offrent trois niveaux distincts de niveau de raisonnement parmi lesquels vous pouvez choisir :

  • Faible : Optimisé pour les tâches qui nécessitent des réponses très rapides et ne demandent pas de raisonnement complexe en plusieurs étapes.

  • Moyen : Un équilibre entre performances et vitesse.

  • Élevé : Offre les meilleures performances de raisonnement pour les tâches qui l'exigent, mais au prix d'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 essayez 100 pour d'éventuels meilleurs résultats)

  • Top_P = 1.0

  • Contexte minimal recommandé : 16,384

  • Fenêtre maximale de longueur de contexte : 131 072

Modèle de conversation :

Le jeton de fin de phrase/génération : EOS est <|return|>

Exécuter gpt-oss-20B

Pour atteindre des vitesses d'inférence de plus de 6 jetons par seconde avec notre quantification dynamique 4 bits, disposez d'au moins 14 Go de mémoire unifiée (VRAM et RAM combinées) ou 14 Go de RAM système seulement. En 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 nécessaire que pour obtenir les vitesses les plus élevées.

Suivez les bonnes pratiques ci-dessus. Elles sont identiques à celles du modèle 120B.

Vous pouvez pour l'instant exécuter le modèle sur Google Colab, Docker, LM Studio ou llama.cpp. Voir ci-dessous :

Vous pouvez exécuter gpt-oss-20b gratuitement avec notre notebook Google Colab

🦥 Guide d’Unsloth Studio

Pour ce tutoriel, nous utiliserons Unsloth Studio, qui est notre nouvelle interface web pour exécuter et entraîner des LLM. Avec Unsloth Studio, vous pouvez exécuter des modèles localement sur Mac, Windows, et Linux, et :

1

Installer Unsloth

Exécutez dans votre terminal :

MacOS, Linux, WSL :

Windows PowerShell :

2

Lancer Unsloth

macOS, Linux, WSL, Windows :

Puis ouvrez http://localhost:8888 dans votre navigateur.

3

Recherchez et téléchargez gpt-oss-20b

Au premier lancement, vous devrez créer un mot de passe pour sécuriser votre compte et vous reconnecter plus tard. Vous verrez ensuite un bref assistant d'intégration pour choisir un modèle, un jeu de données et des paramètres de base. Vous pouvez le passer à tout moment.

Ensuite, allez dans l’onglet Unsloth Chat onglet et recherchez gpt-oss dans la barre de recherche, puis téléchargez le modèle et la quantification de votre choix.

4

Exécuter gpt-oss-20b

Les paramètres d’inférence devraient être définis automatiquement lors de l’utilisation d’Unsloth Studio, cependant vous pouvez toujours les modifier manuellement. Vous pouvez aussi modifier la longueur du contexte, le modèle de chat et d’autres paramètres.

Pour plus d’informations, vous pouvez consulter notre guide d’inférence d’Unsloth Studio.

🐋 Docker : Tutoriel pour 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 terminé :

✨ Llama.cpp : Tutoriel pour exécuter gpt-oss-20b

  1. Obtenez la dernière version llama.cpp sur GitHub ici. Vous pouvez également suivre les instructions de compilation ci-dessous. Modifiez -DGGML_CUDA=ON à -DGGML_CUDA=OFF si vous n'avez pas de GPU ou si vous souhaitez simplement une inférence CPU. Pour les appareils Apple Mac / Metal, définissez -DGGML_CUDA=OFF puis continuez comme d'habitude - la prise en charge de Metal est activée par défaut.

  1. Vous pouvez directement récupérer depuis Hugging Face via :

  2. Téléchargez le modèle via (après avoir installé pip install huggingface_hub hf_transfer ). Si les téléchargements se bloquent, voir Débogage de Hugging Face Hub et XET

Exécuter gpt-oss-120b :

Pour atteindre des vitesses d'inférence de plus de 6 jetons par seconde avec notre quantification 1 bit, nous recommandons au moins 66 Go de mémoire unifiée (VRAM et RAM combinées) ou 66 Go de RAM système seulement. En 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 nécessaire que pour obtenir les vitesses les plus élevées.

Suivez les bonnes pratiques ci-dessus. Elles sont identiques à celles du modèle 20B.

🦥 Guide d’Unsloth Studio

Pour ce tutoriel, nous utiliserons Unsloth Studio, qui est notre nouvelle interface web pour exécuter et entraîner des LLM. Avec Unsloth Studio, vous pouvez exécuter des modèles localement sur Mac, Windows, et Linux, et :

1

Installer Unsloth

MacOS, Linux, WSL :

Windows PowerShell :

2

Configurer Unsloth Studio (une seule fois)

La configuration installe automatiquement Node.js (via nvm), compile le frontend, installe toutes les dépendances Python et compile llama.cpp avec prise en charge CUDA.

Utilisateurs de WSL : il vous sera demandé votre sudo mot de passe pour installer les dépendances de compilation (cmake, git, libcurl4-openssl-dev).

3

Lancer Unsloth

MacOS, Linux, WSL :

Windows Powershell :

Puis ouvrez http://localhost:8888 dans votre navigateur.

4

Recherchez et téléchargez gpt-oss-120b

Au premier lancement, vous devrez créer un mot de passe pour sécuriser votre compte et vous reconnecter plus tard. Vous verrez ensuite un bref assistant d'intégration pour choisir un modèle, un jeu de données et des paramètres de base. Vous pouvez le passer à tout moment.

Ensuite, allez dans l’onglet Unsloth Chat onglet et recherchez gpt-oss dans la barre de recherche, puis téléchargez le modèle et la quantification de votre choix.

5

Exécuter gpt-oss-120b

Les paramètres d’inférence devraient être définis automatiquement lors de l’utilisation d’Unsloth Studio, cependant vous pouvez toujours les modifier manuellement. Vous pouvez aussi modifier la longueur du contexte, le modèle de chat et d’autres paramètres.

Pour plus d’informations, vous pouvez consulter notre guide d’inférence d’Unsloth Studio.

📖 Llama.cpp : Tutoriel pour exécuter gpt-oss-120b

Pour gpt-oss-120b, nous utiliserons spécifiquement Llama.cpp pour une inférence optimisée.

  1. Obtenez la dernière version llama.cpp sur GitHub ici. Vous pouvez également suivre les instructions de compilation ci-dessous. Modifiez -DGGML_CUDA=ON à -DGGML_CUDA=OFF si vous n'avez pas de GPU ou si vous souhaitez simplement une inférence CPU.

  2. Vous pouvez utiliser directement llama.cpp pour télécharger le modèle, mais je recommande généralement d'utiliser huggingface_hub Pour utiliser directement llama.cpp, faites :

  3. Ou téléchargez le modèle via (après avoir installé pip install huggingface_hub hf_transfer ). Vous pouvez choisir UD-Q2_K_XL, ou d'autres versions quantifiées..

  4. Exécutez le modèle en mode conversation et essayez n'importe quelle invite.

  5. Modifier --threads -1 pour le nombre de threads CPU, --ctx-size 262114 pour la longueur de contexte, --n-gpu-layers 99 pour le déchargement GPU de combien de couches. Essayez de l'ajuster si votre GPU manque de mémoire. Supprimez-le aussi si vous faites une inférence uniquement CPU.

🛠️ Améliorer la vitesse de génération

Si vous avez plus de VRAM, vous pouvez essayer de décharger davantage de couches MoE, ou de 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 en pratique de faire tenir toutes les couches non-MoE sur 1 GPU, améliorant ainsi les vitesses de génération. Vous pouvez personnaliser l'expression regex pour faire tenir davantage 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" Cela décharge les couches MoE de projection ascendante et descendante.

Essayez -ot ".ffn_(up)_exps.=CPU" si vous avez encore plus de mémoire GPU. Cela décharge uniquement les couches MoE de projection ascendante.

Vous pouvez aussi personnaliser l'expression 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 les couches MoE gate, up et down, mais seulement à partir de la 6e couche.

Le dernière version de llama.cpp introduit également le mode haut débit. Utilisez llama-parallel. En savoir 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 aussi accélérer le processus de génération.

🦥 Fine-tuning de gpt-oss avec Unsloth

Le fine-tuning gpt-oss d'Unsloth est 1,5 fois plus rapide, utilise 70 % de VRAM en moins et prend en charge des longueurs de contexte 10 fois plus longues. L'entraînement QLoRA de gpt-oss-20b tient dans 14 Go de VRAM, et gpt-oss-120b fonctionne avec 65 Go de VRAM.

  • Exigences QLoRA : gpt-oss-20b = 14 Go de VRAM • gpt-oss-120b = 65 Go de VRAM.

  • Exigences LoRA BF16 : gpt-oss-20b = 44 Go de VRAM • gpt-oss-120b = 210 Go de VRAM.

Lisez notre tutoriel étape par étape pour affiner gpt-oss :

Tutoriel : comment fine-tuner gpt-oss

Notebooks Unsloth gratuits pour affiner gpt-oss :

Apprentissage par renforcement (GRPO)

Unsloth prend maintenant en charge le RL pour gpt-oss ! Nous avons créé deux notebooks ; pour plus de détails, lisez notre blog dédié au RL de gpt-oss : gpt-oss RL

💾NOUVEAU : Enregistrement au format GGUF, vLLM après l'entraînement de gpt-oss

Vous pouvez désormais affiner gpt-oss avec QLoRA et enregistrer, exporter ou fusionner directement le modèle vers llama.cpp, vLLM, ou HF - pas seulement Unsloth. Nous publierons bientôt, nous l'espérons, un notebook gratuit.

Auparavant, tout modèle gpt-oss affiné avec QLoRA était limité à une exécution dans Unsloth. Nous avons supprimé cette limitation en introduisant déquantification à la demande de MXFP4 modèles de base (comme gpt-oss) pendant le processus de fusion LoRA. Cela rend possible d'exporter votre modèle affiné au format bf16.

Après avoir affiné votre modèle gpt-oss, vous pouvez désormais le fusionner en format 16 bits avec une seule commande:

Si vous préférez plutôt fusionner le modèle et le pousser directement vers le hub Hugging Face, vous pouvez le faire en utilisant :

💡Faire fonctionner efficacement l'affinage de gpt-oss

Nous avons constaté que, bien que MXFP4 soit très efficace, il ne prend pas nativement en charge l'entraînement avec gpt-oss. Pour surmonter cette limitation, nous avons implémenté des fonctions d'entraînement personnalisées spécialement pour les couches MXFP4 en le mimant via Bitsandbytes la quantification NF4.

Nous avons utilisé directement la bibliothèque Triton Kernels d'OpenAI pour permettre l'inférence MXFP4. Pour l'affinage / l'entraînement, cependant, les noyaux MXFP4 ne prennent pas encore en charge l'entraînement, car la passe arrière n'est pas encore implémentée. Nous travaillons activement à l'implémenter dans Triton ! Il existe un indicateur appelé W_TRANSPOSE comme mentionné ici, qui devrait être implémenté. Le dérivé peut être calculé par la transposition des matrices de poids, et nous devons donc implémenter l'opération de transposition.

Si vous souhaitez entraîner gpt-oss avec une bibliothèque autre qu'Unsloth, vous devrez promouver les poids en bf16 avant l'entraînement. Cette approche, cependant, augmente considérablement à la fois l'utilisation de la VRAM et le temps d'entraînement jusqu'à 300 % de consommation de mémoire en plus! TOUTES les autres méthodes d'entraînement nécessiteront au minimum 65 Go de VRAM pour entraîner le modèle 20b, tandis qu'Unsloth ne requiert que 14 Go de VRAM (-80 %).

Comme les deux modèles utilisent une architecture MoE, le modèle 20B sélectionne 4 experts sur 32, tandis que le modèle 120B en sélectionne 4 sur 128 par jeton. Pendant l'entraînement et la publication, les poids sont stockés au format MXFP4 sous forme de nn.Parameter objets, et non comme nn.Linear couches, ce qui complique la quantification, d'autant plus que les experts MoE/MLP représentent environ 19 milliards des 20 milliards de paramètres.

Pour permettre BitsandBytes la quantification et un affinage économe en mémoire, nous avons converti ces paramètres en nn.Linear couches. Bien que cela ralentisse légèrement les opérations, cela permet un affinage sur des GPU à mémoire limitée, ce qui constitue un compromis intéressant.

Guide d'affinage des jeux de données

Bien que gpt-oss ne prenne en charge que le raisonnement, vous pouvez tout de même l'affiner avec un datasetjeu de données non lié au raisonnement, mais cela peut affecter sa capacité de raisonnement. Si vous souhaitez conserver ses capacités de raisonnement (facultatif), vous pouvez utiliser un mélange de réponses directes et d'exemples de chaîne de pensée. Utilisez au moins 75 % de raisonnement et 25 % sans raisonnement dans votre jeu de données pour que le modèle conserve ses capacités de raisonnement.

Notre notebook conversationnel gpt-oss-20b utilise l'exemple d'OpenAI, qui est le jeu de données Multilingual-Thinking de Hugging Face. L'objectif de l'utilisation de 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 ?