Definition
GGUF ist ein binäres Dateiformat zur Speicherung von Modellgewichten und Metadaten, das von llama.cpp entwickelt wurde und heute de-facto-Standard für das Laden großer Sprachmodelle auf Consumer-Hardware ist. Praktiker nutzen GGUF-Dateien, um Modelle wie Llama oder Mistral mit minimaler Latenz direkt auf CPU oder GPU auszuführen — ohne PyTorch, ohne CUDA, oft sogar auf Laptops.
Mechanik
GGUF speichert Gewichte in einem strukturierten Format mit Key-Value-Metadaten: Modellarchitektur, Tokenizer, Quantisierungsstufe und Layer-Information sind in der Datei selbst enthalten. Ein GGUF-File kann verschiedene Quantisierungs-Niveaus (Q4_K_M, Q5_K_S, Q6_K, F16) in einer Datei kombinieren, was schnelle Modell-Switching und Speicher-Handel ermöglicht. Der llama.cpp-Loader liest GGUF direkt in den RAM/VRAM, führt Inference in optimiertem C++ durch — ohne Python-Interpreter-Overhead — und unterstützt Batching sowie Multi-GPU.
Beispiel
# GGUF-Modell mit llama.cpp lokal laden und abfragen
curl -L https://huggingface.co/TheBloke/Mistral-7B-Instruct-v0.1-GGUF/resolve/main/Mistral-7B-Instruct-v0.1.Q4_K_M.gguf \
-o mistral-7b.gguf
# Inference starten (llama.cpp Binary)
./llama-cli -m mistral-7b.gguf \
-p "Erkläre Quantisierung in drei Sätzen:" \
-n 150 --temp 0.7
Oder Python-Integration:
<div class="local-py-block"
data-filename="gguf_inference.py"
data-pip="llama-cpp-python"
data-pre="">
<div class="local-py-code">
<pre><code class="language-python">from llama_cpp import Llama
# GGUF laden
llm = Llama(
model_path="mistral-7b.gguf",
n_gpu_layers=33, # auf GPU offload
n_ctx=2048
)
# Inference
response = llm(
"Erkläre Quantisierung kurz:",
max_tokens=100,
temperature=0.7
)
print(response['choices'][0]['text'])</code></pre>
<div class="local-py-actions">
<span class="local-py-filename"><i class="fa-regular fa-file-code me-1"></i>gguf_inference.py</span>
<button class="local-py-copy" type="button" title="In die Zwischenablage kopieren">
<i class="fa-regular fa-copy me-1"></i>Kopieren
</button>
<button class="local-py-download" type="button" title="Als .py-Datei speichern">
<i class="fa-solid fa-download me-1"></i>gguf_inference.py herunterladen
</button>
</div>
</div>
<details class="local-py-howto">
<summary><i class="fa-solid fa-laptop-code me-1"></i>Lokal ausführen — Setup für deinen Rechner</summary>
<div class="local-py-prereqs">
<strong>Voraussetzungen:</strong>
<ul>
<li>Python 3.10 oder neuer installiert. Download:
<a href="https://www.python.org/downloads/" target="_blank" rel="noopener noreferrer">python.org/downloads</a>.
Beim Windows-Installer die Option <em>„Add Python to PATH"</em> aktivieren — sonst findet die Konsole `python` nicht.
</li>
</ul>
</div>
<div class="local-py-tabs" role="tablist">
<button class="local-py-tab active" type="button" data-os="win" role="tab">
<i class="fa-brands fa-windows me-1"></i>Windows
</button>
<button class="local-py-tab" type="button" data-os="unix" role="tab">
<i class="fa-brands fa-apple me-1"></i>macOS / <i class="fa-brands fa-linux ms-1 me-1"></i>Linux
</button>
</div>
<div class="local-py-tab-pane" data-os="win">
<pre><code># 1) Konsole öffnen: Win+R drücken, "powershell" eintippen, Enter.
# 2) Prüfen, ob Python installiert ist:
py --version
# Falls "command not found" -> https://python.org/downloads
# 3) Projekt-Setup: venv + Abhängigkeiten
py -m venv .venv
.venv\Scripts\Activate.ps1
pip install llama-cpp-python
# 4) Code in gguf_inference.py speichern (Button oben oder Copy + Editor)
# Dann ausführen:
python gguf_inference.py</code></pre>
</div>
<div class="local-py-tab-pane" data-os="unix" hidden>
<pre><code># 1) Terminal öffnen:
# macOS: Cmd+Leertaste -> "Terminal" eintippen -> Enter
# Linux: Strg+Alt+T (in den meisten Distros)
# 2) Prüfen, ob Python installiert ist:
python3 --version
# Falls fehlt:
# macOS: brew install python (oder https://python.org/downloads)
# Debian: sudo apt install python3 python3-venv
# Fedora: sudo dnf install python3
# 3) Projekt-Setup: venv + Abhängigkeiten
python3 -m venv .venv
source .venv/bin/activate
pip install llama-cpp-python
# 4) Code in gguf_inference.py speichern (Button oben oder Copy + Editor)
# Dann ausführen:
python gguf_inference.py</code></pre>
</div>
</details>
</div>
<script>
(function () {
function setup(root) {
if (root.dataset.localPyInit) return;
root.dataset.localPyInit = '1';
var codeEl = root.querySelector('.local-py-code code');
var filename = root.dataset.filename || 'snippet.py';
var copyBtn = root.querySelector('.local-py-copy');
if (copyBtn) {
copyBtn.addEventListener('click', async function () {
try {
await navigator.clipboard.writeText(codeEl.textContent);
var orig = copyBtn.innerHTML;
copyBtn.innerHTML = '<i class="fa-solid fa-check me-1"></i>kopiert';
setTimeout(function () { copyBtn.innerHTML = orig; }, 1500);
} catch (err) {
alert('Konnte nicht kopieren: ' + err);
}
});
}
var dlBtn = root.querySelector('.local-py-download');
if (dlBtn) {
dlBtn.addEventListener('click', function () {
var blob = new Blob([codeEl.textContent], {type: 'text/x-python'});
var url = URL.createObjectURL(blob);
var a = document.createElement('a');
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
URL.revokeObjectURL(url);
});
}
var tabs = root.querySelectorAll('.local-py-tab');
var panes = root.querySelectorAll('.local-py-tab-pane');
tabs.forEach(function (tab) {
tab.addEventListener('click', function () {
var os = tab.dataset.os;
tabs.forEach(function (t) { t.classList.toggle('active', t === tab); });
panes.forEach(function (p) { p.hidden = (p.dataset.os !== os); });
});
});
}
function init() {
document.querySelectorAll('.local-py-block').forEach(setup);
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();
</script>