Instructions to use dustin2050/finrag-gpt-oss-120b-v2-GGUF with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- llama.cpp
How to use dustin2050/finrag-gpt-oss-120b-v2-GGUF with llama.cpp:
Install (macOS, Linux)
curl -LsSf https://llama.app/install.sh | sh # Start a local OpenAI-compatible server with a web UI: llama serve -hf dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0 # Run inference directly in the terminal: llama cli -hf dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
Install from WinGet (Windows)
winget install llama.cpp # Start a local OpenAI-compatible server with a web UI: llama serve -hf dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0 # Run inference directly in the terminal: llama cli -hf dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
Use pre-built binary
# Download pre-built binary from: # https://github.com/ggerganov/llama.cpp/releases # Start a local OpenAI-compatible server with a web UI: ./llama-server -hf dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0 # Run inference directly in the terminal: ./llama-cli -hf dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
Build from source code
git clone https://github.com/ggerganov/llama.cpp.git cd llama.cpp cmake -B build cmake --build build -j --target llama-server llama-cli # Start a local OpenAI-compatible server with a web UI: ./build/bin/llama-server -hf dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0 # Run inference directly in the terminal: ./build/bin/llama-cli -hf dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
Use Docker
docker model run hf.co/dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
- LM Studio
- Jan
- vLLM
How to use dustin2050/finrag-gpt-oss-120b-v2-GGUF with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "dustin2050/finrag-gpt-oss-120b-v2-GGUF" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "dustin2050/finrag-gpt-oss-120b-v2-GGUF", "messages": [ { "role": "user", "content": "What is the capital of France?" } ] }'Use Docker
docker model run hf.co/dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
- Ollama
How to use dustin2050/finrag-gpt-oss-120b-v2-GGUF with Ollama:
ollama run hf.co/dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
- Unsloth Desktop
- Pi
How to use dustin2050/finrag-gpt-oss-120b-v2-GGUF with Pi:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
Configure the model in Pi
# Install Pi: npm install -g @earendil-works/pi-coding-agent # Add to ~/.pi/agent/models.json: { "providers": { "llama-cpp": { "baseUrl": "http://localhost:8080/v1", "api": "openai-completions", "apiKey": "none", "models": [ { "id": "dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0" } ] } } }Run Pi
# Start Pi in your project directory: pi
- Docker Model Runner
How to use dustin2050/finrag-gpt-oss-120b-v2-GGUF with Docker Model Runner:
docker model run hf.co/dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
- Lemonade
How to use dustin2050/finrag-gpt-oss-120b-v2-GGUF with Lemonade:
Pull the model
# Download Lemonade from https://lemonade-server.ai/ lemonade pull dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
Run and chat with the model
lemonade run user.finrag-gpt-oss-120b-v2-GGUF-Q8_0
List all available models
lemonade list
- Hermes Agent
How to use dustin2050/finrag-gpt-oss-120b-v2-GGUF with Hermes Agent:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
Configure Hermes
# Install Hermes: curl -fsSL https://hermes-agent.nousresearch.com/install.sh | bash hermes setup # Point Hermes at the local server: hermes config set model.provider custom hermes config set model.base_url http://127.0.0.1:8080/v1 hermes config set model.default dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
Run Hermes
hermes
- Atomic Chat
- OpenClaw
How to use dustin2050/finrag-gpt-oss-120b-v2-GGUF with OpenClaw:
Start the llama.cpp server
# Install llama.cpp: brew install llama.cpp # Start a local OpenAI-compatible server: llama serve -hf dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0
Configure OpenClaw
# Install OpenClaw: npm install -g openclaw@latest # Register the local server and set it as the default model: openclaw onboard --non-interactive --mode local \ --auth-choice custom-api-key \ --custom-base-url http://127.0.0.1:8080/v1 \ --custom-model-id "dustin2050/finrag-gpt-oss-120b-v2-GGUF:Q8_0" \ --custom-provider-id llama-cpp \ --custom-compatibility openai \ --custom-text-input \ --accept-risk \ --skip-health
Run OpenClaw
openclaw agent --local --agent main --message "Hello from Hugging Face"
FinRAG Trading Expert β gpt-oss-120b Β· Q8_0 GGUF
openai/gpt-oss-120b mit dem LoRA-Adapter dustin2050/finrag-gpt-oss-120b-v2
verlustarm eingerechnet und als GGUF fΓΌr llama.cpp / LM Studio / Ollama bereitgestellt.
| Datei | finrag-120b-Q8_0.gguf |
| GrΓΆΓe | 124,3 GB (8,51 bpw) |
| Basis | openai/gpt-oss-120b (MXFP4, 117 B total / 5,1 B aktiv, 128 Experten, 36 Layer) |
| Adapter | QLoRA r=16, Ξ±=32 auf Attention und allen MoE-Expert-Projektionen |
| Trainingsdaten | distill_v3 β 14.452 Beispiele, 8.452 eigene Distillation (500 Volltext-Papers) + 6.000 gefilterte aus ianncity/GLM-5.2-Finance-80000x |
Warum Q8_0 und nichts Kleineres
Das ist die wichtigste Information in diesem Repo. Das LoRA-Delta ist klein relativ zu den Basisgewichten β gemessen am echten Adapter gegen die echten MXFP4-Basisgewichte:
Basisgewichte gate_up_proj |
RMS 0,0320 |
| LoRA-Delta | RMS 0,00076 (Median ΓΌber 36 Layer) |
| βΞβ/βWβ | 2,3 % (Spanne 1,2β3,8 %) |
Erhalt der Wirkrichtung nach Quantisierung, cosine(Q(W+Ξ) β Q(W), Ξ):
| bf16 | Q8_0 | Q6_K | Q5_K | Q4_K | MXFP4 |
|---|---|---|---|---|---|
| 0,997 | 0,936 | 0,596 | 0,347 | 0,227 | 0,168 |
Ein 4-Bit-Quantisat dieses Modells wΓ€re nicht βBasis ohne Fine-Tune", sondern schlechter als die Basis: es weicht um mehr ab, als das Delta groΓ ist, zeigt aber nur zu ~17 % in dessen Richtung β der Rest ist Quantisierungsrauschen. Besonders scharf, weil die Basis nativ MXFP4 ist und im Zielformat exakt darstellbar: nur 0,53 % der Expertengewichte kΓΆnnten ihren Code ΓΌberhaupt Γ€ndern.
Es gibt kein Q6_K/Q5_K/Q4_K fΓΌr dieses Modell
Alle K-Quants nutzen 256er-SuperblΓΆcke. gpt-oss hat hidden_size = 2880, und 2880/256 = 11,25 β
nicht teilbar. llama-quantize meldet dann 217 of 687 tensor(s) required fallback quantization
und legt die Experten (90 % der Parameter) auf Q8_0. Ein βQ6_K"-File wΓ€re inhaltlich ein Q8_0
mit schlechter quantisierter Attention β und die trΓ€gt ebenfalls LoRA-Deltas. Nutzbar sind nur
Block-32-Typen: Q8_0, Q5_0, Q4_0, MXFP4. Von denen trΓ€gt nur Q8_0 das Fine-Tune.
AusfΓΌhren
RTX PRO 6000 / 96 GB VRAM
124 GB passen nicht in 96 GB. llama.cpp kann Expert-Tensoren im Host-RAM halten und pro Token nur die tatsΓ€chlich gerouteten Experten auf die GPU kopieren:
llama-server -m finrag-120b-Q8_0.gguf -ngl 99 --n-cpu-moe 10 -c 16384 --port 8080
--n-cpu-moe 10 ist gemessen: 87,7 von 96 GB VRAM belegt, lΓ€dt zuverlΓ€ssig. Nur 10 der
36 Layer mΓΌssen ihre Experten ins Host-RAM.
Gemessener Durchsatz (RTX PRO 6000 Server Edition, 600 W, llama-bench):
| Prompt-Verarbeitung (pp512) | 130β147 tok/s |
| Generierung (tg128) | 7,0β7,5 tok/s |
Die 7 tok/s sind die Rechnung fΓΌr das CPU-Offload: eine 2.000-Token-Antwort dauert ~4,5 Minuten. Ohne Auslagerung (2Γ RTX PRO 6000 = 192 GB, oder H200 141 GB) wΓ€ren deutlich hΓΆhere Werte zu erwarten. Das ist der Preis dafΓΌr, dass dieses Fine-Tune 8 Bit braucht β das Basismodell in MXFP4 (63 GB) passt vollstΓ€ndig in eine Karte und erreicht mit vLLM ~1.500 tok/s, hat aber kein Fine-Tune.
Mac mit 128 GB Unified Memory
Geht, ist aber knapp. macOS gibt der GPU per Default nicht genug:
sudo sysctl iogpu.wired_limit_mb=122880 # 120 GB freigeben
llama-server -m finrag-120b-Q8_0.gguf -ngl 99 -c 8192
Auch hier ohne --jinja β siehe den Abschnitt zum Chat-Endpunkt unten.
Mit kleinem Kontext arbeiten. Bei 64 GB oder weniger ist dieses Modell nicht nutzbar β dann
besser das Basismodell unsloth/gpt-oss-120b-GGUF verwenden, das ohne Fine-Tune auch in 4 Bit
sinnvoll bleibt.
WICHTIG: Der OpenAI-Chat-Endpunkt funktioniert NICHT
HTTP 500: The model produced output that does not match the expected peg-native format
Ursache (verifiziert): Das Modell emittiert nach <|start|>assistant direkt
<|message|><think>β¦ β ohne die von harmony verlangte <|channel|>-Deklaration. Es gibt damit
exakt wieder, was das Training ihm zeigte: die Trainingsdaten wurden mit
apply_chat_template(msgs, add_generation_prompt=False) gerendert, und dieses Template schreibt
fΓΌr eine einfache Assistant-Nachricht <|start|>assistant<|message|>{content} ohne Kanal.
llama.cpps strikter gpt-oss-Parser lehnt das ab. Ein Datenaufbereitungs-Fehler, kein
Modelldefekt β die Gewichte sind in Ordnung, die Ausgabe ist inhaltlich kohΓ€rent.
Workaround: den Roh-Endpunkt /completion benutzen und den Prompt selbst bauen.
llama-server -m finrag-120b-Q8_0.gguf -ngl 99 --n-cpu-moe 10 -c 16384 --port 8080
# KEIN --jinja: der Chat-Parser wuerde die Ausgabe verwerfen
prompt = ("<|start|>system<|message|>You are a quantitative trading analyst.\n"
"Reasoning: low<|end|>"
f"<|start|>user<|message|>{question}<|end|><|start|>assistant")
requests.post("http://127.0.0.1:8080/completion",
json={"prompt": prompt, "n_predict": 4096, "temperature": 0.7,
"stop": ["<|return|>", "<|end|>"]})
Token-Budget groΓzΓΌgig wΓ€hlen. Die Trainingsziele haben im Median 2.772 Zeichen Denkteil plus
6.300 Zeichen Antwort (~2.700 Token). Auf schwierigen, offenen Fragen denkt das Modell allerdings
deutlich lΓ€nger β beobachtet wurden 15.000β20.000 Zeichen allein im <think>-Block. Unter ~4.000
Token kommt dort oft keine Antwort mehr, weil das Modell noch abwΓ€gt. Antwortteil = alles nach
</think>.
Wer das saubere Format braucht, muss den Adapter mit korrekt gerenderten Zielen neu trainieren:
Assistant-Inhalt explizit in den final-Kanal legen (<|channel|>final<|message|>β¦), statt das
Template ohne Kanalangabe rendern zu lassen.
Wie gemergt wurde
Unsloths save_pretrained_merged ist fΓΌr gpt-oss nicht verwendet worden β es schrieb einen
PEFT-Wrapper statt gemergter Gewichte. Stattdessen ein eigener Streaming-Merge
(merge_lora_streaming.py, nur torch + safetensors, CPU):
- MXFP4-BlΓΆcke dequantisieren (
blocks [E,out,G,16]+scales [E,out,G], Wert =FP4_VALUES[nibble] Β· 2^(scaleβ127)), Ergebnis[E, in, out] - Delta =
B @ A Β· (Ξ±/r)in fp32 addieren (delta.TfΓΌr Experten, ohne Transposition fΓΌr Attention), einmal am Ende auf bf16 runden - Als bf16 im vanilla-Layout schreiben β
convert_hf_to_gguf.py --outtype bf16βllama-quantize β¦ Q8_0
Verifikation (jede PrΓΌfung hat einen Fehler gefunden oder ausgeschlossen):
| PrΓΌfung | Ergebnis |
|---|---|
| Dequantisierung gegen unabhΓ€ngige elementweise Referenz | max abs diff = 0.0 |
| Delta-Platzierung / Transposition | max rel. Fehler 0,0038 (bf16-Rundung) |
| Abdeckung | 9.360 / 9.360 Module, 216 / 216 Ziel-Tensoren |
| Stichproben unabhΓ€ngig nachgerechnet | 10 / 10 |
| Struktur | 72 fusionierte Expert-Tensoren, keine lora_/base_layer-Altlasten, quantization_config entfernt |
| GGUF-Konversion | 687 Tensoren, 233,8 GB bf16 β Q8_0 8,51 bpw |
Der AbdeckungszΓ€hler ist nicht Kosmetik: down_proj ist quadratisch (2880Γ2880), eine falsche
Transposition erzeugt keinen Shape-Error, sondern Kauderwelsch.
Bewertung β gemessen, mit klaren Grenzen
Blind-Judge (GLM-5.2), 15 offene Trading-Strategie-Fragen, Reihenfolge pro Frage permutiert,
beide Varianten aus einem Modell-Load (Adapter an/aus) β identische Gewichte, Quantisierung,
Sampling. Bewertet wurde der Antwortteil, nicht das Denken; dafΓΌr wurde die Deliberationsphase
per Prefill ΓΌbersprungen (answer_prefilled-Eval, kein Test des natΓΌrlichen Chat-Verhaltens).
Gepaarter Vorzeichentest, Ξ = Fine-Tune minus Basis:
| Kriterium | Ξ | v>b : v<b | p |
|---|---|---|---|
| realism | +1,20 | 12 : 3 | 0,035 |
| mechanism | +1,13 | 10 : 4 | 0,180 |
| risk_awareness | +0,53 | 6 : 4 | 0,754 |
| falsifiability | +0,47 | 9 : 3 | 0,146 |
| originality | β0,33 | 6 : 7 | 1,000 |
| actionability | β0,93 | 5 : 10 | 0,302 |
| Gesamt (90 Vergleiche) | +0,34 | 48 : 31 | 0,071 |
Was das heiΓt: Das Fine-Tune liefert keine originelleren Ideen β bei originality liegt
es leicht hinten. Es antwortet nΓΌchterner (weniger Γberversprechen), verliert dafΓΌr an
Umsetzbarkeit (weniger konkrete Regeln und Parameter).
Ehrliche Einordnung der Signifikanz: realism ist der einzige Einzelwert unter p = 0,05,
hΓ€lt aber der Bonferroni-Korrektur nicht stand (Schwelle 0,05/6 = 0,0083). Bei sechs
geprΓΌften Kriterien entspricht ein p = 0,035 etwa der Zufallserwartung. Belastbar bleibt ein
schwacher positiver Gesamttrend (p = 0,071).
Warum so wenig Wirkung β Ursache offen. Naheliegend wΓ€re βTeacher nicht ΓΌberlegen", das ist
aber widerlegt: Artificial Analysis Intelligence Index v4.1 gibt GLM-5.2 (max) 51 und
gpt-oss-120b (high) 24. Der Lehrer ist dem SchΓΌler mehr als doppelt ΓΌberlegen,
FΓ€higkeitstransfer wΓ€re also grundsΓ€tzlich mΓΆglich gewesen. Die Ursache liegt damit im
Trainings-Aufbau, nicht in der Teacher-Wahl β Kandidaten: die fehlerhafte Kanal-Renderung der
Ziele, packing=True ohne Grenzmaskierung, zu geringe Adapter-KapazitΓ€t (r=16 β Delta nur 2,3 %),
oder fehlende Completion-only-Loss-Maskierung.
Beide Modelle machen weiterhin gravierende Fachfehler (Judge-Zitate): Lookahead-Bias
(shift(-21) fΓΌr aktuellen Carry), Fixkosten von $1 Mrd. AUM auf einen $40-Mio-Fonds skaliert,
erfundene SEC-Regeln, halluzinierte Marktinfrastruktur, fehlende KapazitΓ€ts- und Decay-Analysen.
Nicht ohne fachliche PrΓΌfung fΓΌr Anlageentscheidungen verwenden.
Herkunft und Lizenz
Apache 2.0, wie Basismodell und Trainingsdaten. Der Adapter liegt unter
dustin2050/finrag-gpt-oss-120b-v2.
- Downloads last month
- 16
8-bit
Model tree for dustin2050/finrag-gpt-oss-120b-v2-GGUF
Base model
openai/gpt-oss-120b