atomgpt-oss: Anleitung zum Ausführen

Führe OpenAIs neue Open-Source-Modelle aus & finetune sie!

OpenAI veröffentlicht 'gpt-oss-120b' und 'gpt-oss-20b', zwei SOTA offene Sprachmodelle unter der Apache-2.0-Lizenz. Beide 128k-Kontext-Modelle übertreffen ähnlich große offene Modelle beim Schließen von Problemen, bei der Nutzung von Werkzeugen und bei agentischen Aufgaben. Sie können sie jetzt lokal mit Unsloth ausführen und feinabstimmen!

gpt-oss-20b ausführengpt-oss-120b ausführengpt-oss feintunen

circle-check

Feinabstimmen gpt-oss-20b kostenlos mit unserem Colab-Notebookarrow-up-right

Trainiert mit RL, gpt-oss-120b konkurriert mit o4-mini und gpt-oss-20b konkurriert mit o3-mini. Beide zeichnen sich beim Funktionsaufruf und beim CoT-Schlussfolgern aus und übertreffen o1 und GPT-4o.

gpt-oss - Unsloth GGUFs:

circle-check

📜Unsloth-Fixes für gpt-oss

circle-info

Einige unserer Fehlerbehebungen wurden upstream in OpenAIs offizielles Modell auf Hugging Face übernommen. Siehearrow-up-right

OpenAI veröffentlichte eine eigenständige Parsing- und Tokenisierungsbibliothek namens Harmonyarrow-up-right die es ermöglicht, Unterhaltungen in OpenAIs bevorzugtes Format für gpt-oss zu tokenisieren.

Inference-Engines verwenden im Allgemeinen stattdessen die jinja-Chat-Vorlage und nicht das Harmony-Paket, und wir fanden einige Probleme mit ihnen nach einem direkten Vergleich mit Harmony. Wenn Sie unten sehen, ist oben die korrekt gerenderte Form wie von Harmony. Darunter ist die von der aktuellen jinja-Chat-Vorlage gerenderte Version. Es gibt ziemlich viele Unterschiede!

Wir haben auch einige Funktionen erstellt, die es Ihnen ermöglichen, OpenAIs Harmony-Bibliothek direkt ohne eine jinja-Chat-Vorlage zu verwenden, falls Sie dies wünschen - Sie können einfach normale Unterhaltungen wie unten parsen:

Dann verwenden Sie die encode_conversations_with_harmony Funktion von Unsloth:

Das Harmony-Format enthält mehrere interessante Dinge:

  1. reasoning_effort = "medium" Sie können niedrig, mittel oder hoch wählen, und dies ändert das Reasoning-Budget von gpt-oss - generell gilt: je höher, desto besser die Genauigkeit des Modells.

  2. developer_instructions ist wie ein Systemprompt, den Sie hinzufügen können.

  3. model_identity bleibt am besten unverändert - Sie können sie bearbeiten, aber wir sind uns nicht sicher, ob benutzerdefinierte Identitäten funktionieren werden.

Wir finden mehrere Probleme mit aktuellen jinja-Chat-Vorlagen (es existieren mehrere Implementierungen im gesamten Ökosystem):

  1. Funktions- und Tool-Aufrufe werden mit tojsongerendert, was in Ordnung ist, wenn es ein dict ist, aber wenn es ein String ist, werden Anführungszeichen und andere Symbole werden mit Backslashes versehen.

  2. Es gibt einige zusätzliche neue Zeilen in der jinja-Vorlage an einigen Grenzen.

  3. Tool-Call-Überlegungen vom Modell sollten das analysis Tag haben und nicht final Tag.

  4. Andere Chat-Vorlagen scheinen <|channel|>final überhaupt nicht zu nutzen - dieses sollte für die finale Assistenten-Nachricht verwendet werden. Sie sollten es nicht für Denkspuren oder Tool-Aufrufe verwenden.

Unsere Chat-Vorlagen für das GGUF, unsere BnB- und BF16-Uploads und alle Versionen sind korrigiert! Zum Beispiel erhalten wir beim Vergleich unseres Formats mit dem von Harmony keine unterschiedlichen Zeichen:

🔢 Präzisionsprobleme

Wir fanden mehrere Präzisionsprobleme auf Tesla T4- und float16-Maschinen, hauptsächlich weil das Modell mit BF16 trainiert wurde, und daher traten Ausreißer und Überläufe auf. MXFP4 wird auf Ampere- und älteren GPUs tatsächlich nicht unterstützt, daher stellt Triton tl.dot_scaled für MXFP4-Matrixmultiplikation bereit. Es castet die Matrizen intern on-the-fly nach BF16 hoch.

Wir haben ein MXFP4-Inferenz-Notebookarrow-up-right auch im Tesla T4 Colab erstellt!

circle-info

Software-Emulationarrow-up-right ermöglicht das Anvisieren von Hardware-Architekturen ohne native Microscaling-Operations-Unterstützung. Im Moment werden in solchen Fällen microskalierte lhs/rhs vor der Dot-Berechnung auf bf16 Elementtyp hochgestuft,

Wir stellten fest, dass bei Verwendung von float16 als mixed-precision-autocast-Datentyp nach einiger Zeit Unendlichkeiten auftreten. Um dem entgegenzuwirken, haben wir festgestellt, dass das MoE in bfloat16 durchgeführt werden sollte und dann in entweder bfloat16 oder float32 verbleibt. Wenn ältere GPUs nicht einmal bfloat16-Unterstützung haben (wie T4), wird float32 verwendet.

Wir ändern außerdem alle Präzisionen von Operationen (wie den Router) auf float32 für float16-Maschinen.

🖥️ gpt-oss ausführen

Unten sind Anleitungen für die 20B und 120B Varianten des Modells.

circle-info

Jede Quantisierung kleiner als F16, einschließlich 2-Bit, hat nur minimale Genauigkeitsverluste, da nur einige Teile (z. B. Aufmerksamkeits-Layer) niedriger bitig sind, während die meisten Teile volle Präzision behalten. Deshalb sind die Größen nahe am F16-Modell; zum Beispiel performt die 2-Bit-Version (11,5 GB) nahezu gleich wie die vollständige 16-Bit-Version (14 GB). Sobald llama.cpp bessere Quantisierung für diese Modelle unterstützt, werden wir sie so schnell wie möglich hochladen.

Der gpt-oss Modelle von OpenAI enthalten eine Funktion, die es Nutzern erlaubt, den "Reasoning-Effort" des Modells anzupassen. Dies gibt Ihnen Kontrolle über den Kompromiss zwischen Modellleistung und Reaktionsgeschwindigkeit (Latenz), also über die Menge an Tokens, die das Modell zum Nachdenken verwendet.

Der gpt-oss Modelle bieten drei unterscheidbare Stufen des Reasoning-Efforts, aus denen Sie wählen können:

  • Niedrig: Optimiert für Aufgaben, die sehr schnelle Antworten benötigen und keine komplexe, mehrstufige Schlussfolgerung erfordern.

  • Mittel: Ein Gleichgewicht zwischen Leistung und Geschwindigkeit.

  • Hoch: Bietet die stärkste Reasoning-Leistung für Aufgaben, die diese benötigen, führt jedoch zu höherer Latenz.

⚙️ Empfohlene Einstellungen

OpenAI empfiehlt diese Inferenz-Einstellungen für beide Modelle:

temperature=1.0, top_p=1.0, top_k=0

  • Temperatur von 1,0

  • Top_K = 0 (oder experimentieren Sie mit 100 für möglicherweise bessere Ergebnisse)

  • Top_P = 1.0

  • Empfohlener Mindestkontext: 16.384

  • Maximale Kontextlänge: 131.072

Chat-Vorlage:

Das Ende des Satzes/Generierungs-Tokens: EOS ist <|return|>

gpt-oss-20B ausführen

Um Inferenzgeschwindigkeiten von 6+ Tokens pro Sekunde für unsere Dynamic 4-Bit-Quantisierung zu erreichen, benötigen Sie mindestens 14 GB einheitlichen Speicher (kombiniertes VRAM und RAM) oder 14 GB System-RAM allein. Faustregel: Ihr verfügbarer Speicher sollte der Größe des verwendeten Modells entsprechen oder diese übertreffen. GGUF-Link: unsloth/gpt-oss-20b-GGUFarrow-up-right

HINWEIS: Das Modell kann mit weniger Speicher als seiner Gesamtgröße laufen, aber dies verlangsamt die Inferenz. Maximale Speicherkapazität wird nur für die schnellsten Geschwindigkeiten benötigt.

circle-info

Befolgen Sie die oben genannten Best Practices. Sie sind die gleichen wie beim 120B-Modell.

Sie können das Modell vorerst auf Google Colab, Docker, LM Studio oder llama.cpp ausführen. Siehe unten:

Sie können gpt-oss-20b kostenlos mit unserem Google Colab-Notebookarrow-up-right

🐋 Docker: Tutorial zum Ausführen von gpt-oss-20b

Wenn Sie bereits Docker Desktop haben, müssen Sie nur den folgenden Befehl ausführen und sind fertig:

Llama.cpp: Tutorial zum Ausführen von gpt-oss-20b

  1. Holen Sie sich die neueste llama.cpp auf GitHub hierarrow-up-right. Sie können auch den unten stehenden Build-Anweisungen folgen. Ändern Sie -DGGML_CUDA=ON zu -DGGML_CUDA=OFF wenn Sie keine GPU haben oder nur CPU-Inferenz wünschen.

  1. Sie können direkt von Hugging Face ziehen via:

  2. Laden Sie das Modell herunter über (nach Installation von pip install huggingface_hub hf_transfer ).

gpt-oss-120b ausführen:

Um Inferenzgeschwindigkeiten von 6+ Tokens pro Sekunde für unsere 1-Bit-Quantisierung zu erreichen, empfehlen wir mindestens 66 GB einheitlichen Speicher (kombiniertes VRAM und RAM) oder 66 GB System-RAM allein. Faustregel: Ihr verfügbarer Speicher sollte der Größe des verwendeten Modells entsprechen oder diese übertreffen. GGUF-Link: unsloth/gpt-oss-120b-GGUFarrow-up-right

HINWEIS: Das Modell kann mit weniger Speicher als seiner Gesamtgröße laufen, aber dies verlangsamt die Inferenz. Maximale Speicherkapazität wird nur für die schnellsten Geschwindigkeiten benötigt.

circle-info

Befolgen Sie die oben genannten Best Practices. Sie sind die gleichen wie beim 20B-Modell.

📖 Llama.cpp: Tutorial zum Ausführen von gpt-oss-120b

Für gpt-oss-120b werden wir speziell Llama.cpp für optimierte Inferenz verwenden.

circle-check
  1. Holen Sie sich die neueste llama.cpp auf GitHub hierarrow-up-right. Sie können auch den unten stehenden Build-Anweisungen folgen. Ändern Sie -DGGML_CUDA=ON zu -DGGML_CUDA=OFF wenn Sie keine GPU haben oder nur CPU-Inferenz wünschen.

  2. Sie können llama.cpp direkt verwenden, um das Modell herunterzuladen, aber ich empfehle normalerweise die Nutzung von huggingface_hub Um llama.cpp direkt zu verwenden, tun Sie:

    {% code overflow="wrap" %}

    {% endcode %}

  3. Oder laden Sie das Modell herunter via (nach Installation von pip install huggingface_hub hf_transfer ). Du kannst UD-Q2_K_XL oder andere quantisierte Versionen wählen..

  4. Führen Sie das Modell im Konversationsmodus aus und probieren Sie beliebige Eingaben.

  5. Bearbeiten --threads -1 für die Anzahl der CPU-Threads bearbeiten, --ctx-size 262114 für Kontextlänge, --n-gpu-layers 99 für das GPU-Offloading für wie viele Schichten. Versuchen Sie, es anzupassen, wenn Ihre GPU nicht mehr genügend Speicher hat. Entfernen Sie es auch, wenn Sie nur CPU-Inferenz haben.

circle-check

🛠️ Generationsgeschwindigkeit verbessern

Wenn Sie mehr VRAM haben, können Sie versuchen, mehr MoE-Schichten auszulagern oder ganze Schichten selbst auszulagern.

Normalerweise, -ot ".ffn_.*_exps.=CPU" lagert alle MoE-Schichten auf die CPU aus! Dies ermöglicht es effektiv, alle Nicht-MoE-Schichten auf einer GPU unterzubringen und die Generationsgeschwindigkeit zu verbessern. Sie können den Regex-Ausdruck anpassen, um mehr Schichten auszulagern, wenn Sie mehr GPU-Kapazität haben.

Wenn Sie etwas mehr GPU-Speicher haben, versuchen Sie -ot ".ffn_(up|down)_exps.=CPU" Dies lagert up- und down-Projektions-MoE-Schichten aus.

Versuchen Sie -ot ".ffn_(up)_exps.=CPU" wenn Sie noch mehr GPU-Speicher haben. Dies lagert nur up-Projektions-MoE-Schichten aus.

Sie können den Regex auch anpassen, zum Beispiel -ot "\.(6|7|8|9|[0-9][0-9]|[0-9][0-9][0-9])\.ffn_(gate|up|down)_exps.=CPU" bedeutet, Gate-, Up- und Down-MoE-Schichten auszulagern, jedoch nur ab der 6. Schicht.

Der neueste llama.cpp-Versionarrow-up-right führt auch einen Hochdurchsatzmodus ein. Verwenden Sie llama-parallel. Lesen Sie mehr darüber hierarrow-up-right. Sie können auch den KV-Cache auf 4 Bit quantisieren zum Beispiel, um VRAM-/RAM-Bewegungen zu reduzieren, was den Generationsprozess auch beschleunigen kann.

🦥 Feinabstimmung von gpt-oss mit Unsloth

Unsloth gpt-oss Feinabstimmung ist 1,5x schneller, verbraucht 70 % weniger VRAM und unterstützt 10x längere Kontextlängen. gpt-oss-20b QLoRA-Training passt auf eine 14GB-VRAM, und gpt-oss-120b funktioniert auf 65GB VRAM.

  • QLoRA-Anforderungen: gpt-oss-20b = 14GB VRAM • gpt-oss-120b = 65GB VRAM.

  • BF16 LoRA-Anforderungen: gpt-oss-20b = 44GB VRAM • gpt-oss-120b = 210GB VRAM.

Lesen Sie unser Schritt-für-Schritt-Tutorial zur Feinabstimmung von gpt-oss:

Tutorial: Wie man gpt-oss finetuntchevron-right
circle-check

Kostenlose Unsloth-Notebooks zur Feinabstimmung von gpt-oss:

Reinforcement Learning (GRPO)

Unsloth unterstützt jetzt RL für gpt-oss! Wir haben zwei Notebooks erstellt; für mehr Details lesen Sie unseren speziellen Blog zu gpt-oss RL: gpt-oss RL

💾NEU: Speicherung als GGUF, vLLM nach gpt-oss-Training

Sie können jetzt gpt-oss mit QLoRA feinabstimmen und das Modell direkt speichern, exportieren oder zusammenführen zu llama.cpp, vLLM, oder HF - nicht nur Unsloth. Wir werden hoffentlich bald ein kostenloses Notebook veröffentlichen.

Früher war jedes QLoRA-feinabgestimmte gpt-oss-Modell darauf beschränkt, in Unsloth zu laufen. Wir haben diese Einschränkung durch die Einführung von On-Demand-Dequantisierung von MXFP4 Um Ihr feinabgestimmtes Modell zu speichern, kann es im Safetensors-Format mit unserer neuen Basismodellen (wie gpt-oss) während des LoRA-Merge-Prozesses. Dies macht es möglich,.

Entfernt Nach dem Feinabstimmen Ihres gpt-oss-Modells können Sie es jetzt mit einem:

Einzelbefehl

model.push_to_hub_merged(repo_name, tokenizer=tokenizer, token=hf_token)

💡Effiziente gpt-oss-Feinabstimmung ermöglichen Wir stellten fest, dass MXFP4 zwar sehr effizient ist, aber nicht nativ das Training mit gpt-oss unterstützt. Um diese Einschränkung zu überwinden, haben wir benutzerdefinierte Trainingsfunktionen speziell für MXFP4-Schichten implementiert, indem wir sie über Bitsandbytes

NF4-Quantisierung nachahmten. Wir nutzten OpenAIs Triton-Kernels-Bibliothek direkt, um MXFP4-Inferenz zu ermöglichen. Für Feinabstimmung/Training jedoch unterstützen die MXFP4-Kernels noch kein Training, da der Backward-Pass noch nicht implementiert ist. Wir arbeiten aktiv daran, es in Triton zu implementieren! Es gibt ein Flag namens hierarrow-up-rightW_TRANSPOSE

wie erwähnt , das implementiert werden sollte. Die Ableitung kann durch die Transponierte der Gewichtsmatrizen berechnet werden, daher müssen wir die Transponierungsoperation implementieren. Wenn Sie gpt-oss mit einer anderen Bibliothek als Unsloth trainieren möchten, müssen Sie die Gewichte vor dem Training auf bf16 hochcasten. Dieser Ansatz erhöht erheblich! sowohl den VRAM-Verbrauch als auch die Trainingszeit um bis zu

300% mehr Speicherverbrauch ALLE anderen Trainingsmethoden werden mindestens 65GB VRAM benötigen, um das 20B-Modell zu trainieren, während Unsloth nur 14GB VRAM benötigt (-80%). Da beide Modelle MoE-Architektur verwenden, wählt das 20B-Modell 4 Experten aus 32 aus, während das 120B-Modell 4 aus 128 pro Token auswählt. Während Training und Veröffentlichung werden Gewichte im MXFP4-Format als nn.Parameter Objekte gespeichert, nicht als

nn.Linear Schichten, was die Quantisierung verkompliziert, insbesondere da MoE/MLP-Experten etwa 19B der 20B-Parameter ausmachen. Um nn.Parameter BitsandBytes

Quantisierung und speichereffiziente Feinabstimmung zu ermöglichen, haben wir diese Parameter in

Schichten konvertiert. Obwohl dies Operationen leicht verlangsamt, ermöglicht es Feinabstimmung auf GPUs mit begrenztem Speicher, ein lohnender Kompromiss. DatensatzLeitfaden zur Feinabstimmung von Datensätzen 75% Reasoning und 25% Nicht-Reasoning in Ihrem Datensatz, damit das Modell seine Reasoning-Fähigkeiten behält.

Obwohl gpt-oss nur Reasoning unterstützt, können Sie es dennoch mit einem nicht-reasoning-Datensatz feinabstimmen, jedoch kann dies seine Reasoning-Fähigkeit beeinträchtigen. Wenn Sie seine Reasoning-Fähigkeiten erhalten möchten (optional), können Sie eine Mischung aus direkten Antworten und Chain-of-Thought-Beispielen verwenden. Verwenden Sie mindestens

Zuletzt aktualisiert

War das hilfreich?