{"id":192,"date":"2026-10-08T18:42:58","date_gmt":"2026-10-08T14:42:58","guid":{"rendered":"https:\/\/demensdeum.com\/blog\/2026\/10\/08\/airllm-experiments\/"},"modified":"2026-10-08T19:11:07","modified_gmt":"2026-10-08T15:11:07","slug":"airllm-experiments","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2026\/10\/08\/airllm-experiments\/","title":{"rendered":"AirLLM: gro\u00dfe Sprachmodelle auf einer schwachen Grafikkarte"},"content":{"rendered":"<p>Typischerweise erfordert die Ausf\u00fchrung eines gro\u00dfen Sprachmodells mit 70 Milliarden Parametern mehrere zehn Gigabyte Videospeicher. AirLLM geht dieses Problem gelassener an und bietet einen anderen Weg: Ein solches Modell kann auf einer Grafikkarte mit nur 4 GB Speicher und ohne Quantisierung, Destillation und Trimmen ausgef\u00fchrt werden. In dieser Notiz werde ich versuchen, Ihnen ohne Eile zu erkl\u00e4ren, wie AirLLM funktioniert, wie man es verwendet, und ich werde mein kleines Projekt AirLLM-Experimente teilen, was die Arbeit mit dieser Bibliothek etwas komfortabler macht.<\/p>\n<h2>Was ist AirLLM?<\/h2>\n<p>AirLLM ist eine Open-Source-Bibliothek f\u00fcr die Inferenz gro\u00dfer Sprachmodelle, geschrieben von Gavin Li. Die Idee ist einfach und dennoch elegant: Anstatt alle Modellgewichte auf einmal im Videospeicher zu speichern, l\u00e4dt die Bibliothek jeweils nur eine Ebene auf die GPU. Die Gewichte werden in Form von in Schichten geschnittenen Shards auf der Festplatte gespeichert, und w\u00e4hrend der Generierung wird jede Schicht der Reihe nach geladen, verarbeitet und entladen.<\/p>\n<p>Daraus folgt, dass die Menge des ben\u00f6tigten Videospeichers nicht von der Gesamtgr\u00f6\u00dfe des Modells abh\u00e4ngt, sondern von der Gr\u00f6\u00dfe einer seiner Schichten. Aus diesem Grund passen in das 70B-Modell 4 GB, in den DeepSeek-V3 auf 671B etwa 12 GB und in den Qwen3-235B etwa 3 GB. Die Gr\u00f6\u00dfe des Modells selbst wird jedoch in erster Linie durch den Speicherplatz und nicht durch die F\u00e4higkeiten der Grafikkarte begrenzt.<\/p>\n<p>Diese Speichereinsparungen gehen zu Lasten der Geschwindigkeit: Jede Schicht wird bei der Generierung jedes Tokens von der Festplatte gelesen, sodass die Ausgabe langsam ist und etwa Sekunden pro Token betr\u00e4gt. Bei AirLLM geht es also weniger um einen schnellen interaktiven Chat als vielmehr um die M\u00f6glichkeit, sogar ein Modell zu starten, das sonst nicht in die Hardware passen w\u00fcrde.<\/p>\n<h2>Installation<\/h2>\n<p>Die Bibliothek wird von PyPI mit dem \u00fcblichen Befehl installiert:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>pip install airllm\n<\/code><\/pre>\n<\/div>\n<p>Beim ersten Start wird das Modell von Hugging Face heruntergeladen und in Ebenen zerlegt. Dieser Vorgang ist langsam und nimmt viel Speicherplatz in Anspruch. Sie sollten daher im Voraus freien Speicherplatz vorbereiten. Bei Bedarf k\u00f6nnen Sie die 4-Bit- oder 8-Bit-Komprimierung aktivieren \u2013 dann wird die Blockquantisierung auf die Gewichte angewendet, was das Laden von Schichten von der Festplatte um etwa das Dreifache beschleunigt und die Genauigkeit erheblich verliert.<\/p>\n<h2>Grundlegendes Beispiel<\/h2>\n<p>Sie k\u00f6nnen mit AirLLM fast genauso arbeiten wie mit einem regul\u00e4ren Modell von Transformers. Es reicht aus, einmal die Model-ID bei Hugging Face einzugeben, und schon ist alles bekannt:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism undefined-numbers lang-unknown\" data-lang=\"unknown\"><code>from airllm import AutoModel\n\nMAX_LENGTH = 128\nmodel = AutoModel.from_pretrained(\"Qwen\/Qwen3-32B\")\n\ninput_text = ['What is the capital of United States?']\n\ninput_tokens = model.tokenizer(\n    input_text,\n    return_tensors=\"pt\",\n    return_attention_mask=False,\n    truncation=True,\n    max_length=MAX_LENGTH,\n    padding=False)\n\ngeneration_output = model.generate(\n    input_tokens['input_ids'].cuda(),\n    max_new_tokens=20,\n    use_cache=True,\n    return_dict_in_generate=True)\n\nprint(model.tokenizer.decode(generation_output.sequences[0]))\n<\/code><\/pre>\n<\/div>\n<p>Die AutoModel-Klasse selbst bestimmt den Modelltyp, sodass dieselbe Zeile f\u00fcr Llama, Qwen und DeepSeek verwendet werden kann. Und wenn man ein Modell wie DeepSeek-V3 mit 671B-Parametern nimmt, passen auch etwa 12 GB Videospeicher hinein \u2013 das macht das Projekt vor allem attraktiv.<\/p>\n<h2>Auf macOS starten<\/h2>\n<p>AirLLM l\u00e4uft nicht nur auf CUDA, sondern auch auf Apple Silicon. Unter macOS wird das MLX-Backend verwendet, sodass mlx und Torch installiert sein m\u00fcssen und nur Apple-Chips unterst\u00fctzt werden. Es gibt auch eine kleine Einschr\u00e4nkung: Die MLX-Implementierung unterst\u00fctzt nur Llama-\u00e4hnliche Architekturen, sodass Qwen und \u00e4hnliche Modelle auf diesem Weg nicht auf einem MacBook gestartet werden k\u00f6nnen.<\/p>\n<h2>Beispiel verwenden<\/h2>\n<p>AirLLM-Experimente sind zwei kleine interaktive Konsolen-Dienstprogramme zum lokalen Ausf\u00fchren gro\u00dfer Sprachmodelle. Sie machen es \u00fcberfl\u00fcssig, jedes Mal denselben Code zu schreiben, um das Modell zu laden und den Chat zu organisieren.<\/p>\n<p>Das erste Tool, airllm-lib-usage.py, f\u00fchrt die AirLLM-Bibliothek direkt im aktuellen Python-Prozess aus. Es zeigt eine nummerierte Liste der Modelle aus dem Gesamtkatalog an, installiert bei Bedarf fehlende Abh\u00e4ngigkeiten und \u00f6ffnet eine Chat-Sitzung. Die MLX-Laufzeit wird unter macOS verwendet, Torch wird auf anderen Plattformen verwendet.<\/p>\n<p>Das zweite Tool, airllm-openai-server-client.py, hilft Ihnen bei der Arbeit mit dem airllm-openai-server-Server, der in Docker l\u00e4uft und eine OpenAI-kompatible API bereitstellt. Wenn Sie es zum ersten Mal starten, fragt das Dienstprogramm nach Einstellungen, sammelt das Bild, holt den Container ab und \u00f6ffnet einen Streaming-Chat zum laufenden Server. Bei wiederholtem Start findet es einen vorhandenen Container, verwendet ihn einfach wieder und speichert den Modellcache in einem separaten Docker-Volume, damit das Modell nicht erneut heruntergeladen werden muss.<\/p>\n<p>Die Liste der verf\u00fcgbaren Modelle ist im gemeinsamen Modul model_catalog.py enthalten, sodass beide Tools mit demselben Satz arbeiten. Chat-Befehle sind ebenfalls \u00fcblich: \/help, \/clear, \/exit. Der Quellcode und die Anweisungen befinden sich im Repository:<\/p>\n<p><a href=\"https:\/\/github.com\/zefir1990\/AirLLM-experiments\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/zefir1990\/AirLLM-experiments<\/a><\/p>\n<h2>Worauf Sie achten sollten<\/h2>\n<p>Die Vorbereitung der ersten Antwort kann mehrere Minuten dauern: Zuerst l\u00e4dt AirLLM das Modell herunter, schneidet es in Schichten und beginnt erst dann mit der Generierung. Allerdings bleibt auch die Geschwindigkeit niedrig \u2013 ein bewusster Kompromiss aus Gr\u00fcnden der Speicherersparnis. F\u00fcr geschlossene Modelle wie Meta-Lama m\u00fcssen Sie die Bedingungen von Hugging Face akzeptieren und ein Zugriffstoken \u00fcbergeben. Es ist am besten, den Cache der heruntergeladenen Modelle und Shards nicht zu l\u00f6schen, da sonst alles erneut heruntergeladen werden muss.<\/p>\n<h2>Links<\/h2>\n<p><a href=\"https:\/\/github.com\/lyogavin\/airllm\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/lyogavin\/airllm<\/a><br \/>\n<a href=\"https:\/\/github.com\/mkamranr\/airllm-openai-server\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/mkamranr\/airllm-openai-server<\/a><br \/>\n<a href=\"https:\/\/github.com\/zefir1990\/AirLLM-experiments\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/zefir1990\/AirLLM-experiments<\/a><br \/>\n<a href=\"https:\/\/pypi.org\/project\/airllm\/\" rel=\"noopener\" target=\"_blank\">https:\/\/pypi.org\/project\/airllm\/<\/a><br \/>\n<a href=\"https:\/\/huggingface.co\/\" rel=\"noopener\" target=\"_blank\">https:\/\/huggingface.co\/<\/a><\/p>\n<h2>Quellen<\/h2>\n<p><a href=\"https:\/\/github.com\/lyogavin\/airllm\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/lyogavin\/airllm<\/a><br \/>\n<a href=\"https:\/\/github.com\/zefir1990\/AirLLM-experiments\" rel=\"noopener\" target=\"_blank\">https:\/\/github.com\/zefir1990\/AirLLM-experiments<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Typischerweise erfordert die Ausf\u00fchrung eines gro\u00dfen Sprachmodells mit 70 Milliarden Parametern mehrere zehn Gigabyte Videospeicher. AirLLM geht dieses Problem gelassener an und bietet einen anderen Weg: Ein solches Modell kann auf einer Grafikkarte mit nur 4 GB Speicher und ohne Quantisierung, Destillation und Trimmen ausgef\u00fchrt werden. In dieser Notiz werde ich versuchen, Ihnen ohne Eile [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[8],"tags":[],"class_list":["post-192","post","type-post","status-publish","format-standard","hentry","category-notes"],"translation":{"provider":"WPGlobus","version":"3.0.6","language":"de","enabled_languages":["en","ru","zh","de","ja","fr","es","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"es":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":true,"content":true,"excerpt":false}}},"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/192","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=192"}],"version-history":[{"count":2,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/192\/revisions"}],"predecessor-version":[{"id":194,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/192\/revisions\/194"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=192"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=192"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=192"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}