Einfache Bereitstellung mehrerer KI-Modelle

In unserem vorherigen Beitrag haben wir vllm vorgestellt, eine hochmoderne Inferenz-Engine, die bereit für den Einsatz in der Produktion ist, sowie wichtige Konzepte wie Schichten und kontinuierliches Batching. Wir hoffen, dass Sie inzwischen vllm einrichten konnten und Spaß daran haben! Wir finden vllm fantastisch – es ist seit einiger Zeit ein wesentlicher Bestandteil unseres Workflows.

Warum selbst hosten?

Bei HPClabs lieben wir den Produktivitätszuwachs, den wir durch den Einsatz von LLMs für Aufgaben wie Programmierung und mehr erhalten. Allerdings war dieser Weg, entgegen dem, was Werbung möglicherweise suggeriert, kein einfacher. Wir mussten mit verschiedenen Modellen, Tools und Workflows experimentieren. Unser Setup umfasst einen AMD Ryzen 5800X, 64 GB RAM, eine GTX 3090 und eine GTX TITAN RTX – eine ziemlich solide Maschine. Doch wir können Ihnen aus erster Hand sagen, dass selbst mit diesem Setup die Leistung nicht mit den erstklassigen Angeboten wie ChatGPT oder Claude 3.5 von Anthropic mithalten kann, egal welche Modelle Sie verwenden.

Das gesagt, ist der Rückgang der Inferenzkosten für LLMs bei den Spitzenmodellen seit der Einführung des ursprünglichen ChatGPT nichts weniger als dramatisch – etwa 240-mal seit der Einführung von ChatGPT für die besten Modelle!

Dennoch gibt es berechtigte Gründe, die für das Selbst-Hosting sprechen. Dazu gehören:

- Datenbesitz: Ihre Daten bleiben Ihre Daten und nur Ihre. Es werden keine Daten in die Cloud gesendet oder als Trainingsmaterial für zukünftige Modelle verwendet

- Kostenmanagement: Wenn Sie bereits über anständige Hardware verfügen oder bereit sind, eine Vorausinvestition zu tätigen, kann das Hosting Ihrer eigenen Inferenz helfen, Ihre Kosten zu begrenzen.

- Praktische Erfahrung: Wir sind fest davon überzeugt, dass man etwas wirklich lernen und verstehen muss, indem man selbst aktiv wird. Selbst-Hosting ermöglicht es Ihnen, Modelle zu beobachten, zu optimieren und anzupassen, um besser auf Ihre spezifischen Bedürfnisse einzugehen.

Wie Mitko Vasilev eloquent auf LinkedIn sagt: “Stellen Sie sicher, dass Sie Ihre KI besitzen. KI in der Cloud ist nicht auf Sie ausgerichtet; sie ist auf das Unternehmen ausgerichtet, das sie besitzt.

Mehrere Modelle mühelos bereitstellen

Es ist klar, dass die Bereitstellung von LLMs für mehrere Benutzer sowohl Leistung als auch VRAM erfordert. Während die meisten von uns nicht über eine 500.000-Dollar-DGX-Maschine im Keller verfügen, möchten wir dennoch verschiedene Modelle erkunden und experimentieren, um herauszufinden, welche für unsere täglichen Aufgaben am nützlichsten sind. Die Lösung? Dynamisches Laden und Entladen von Modellen.

Mit dem dynamischen Modellmanagement lädt Ihr Server jeweils ein Modell, um die Clients zu bedienen. Wenn ein anderes Modell angefordert wird, entlädt er das aktuelle Modell und lädt das neue.

Dieses Setup ist für größere Teams nicht ideal, ermöglicht es jedoch, verschiedene Modelle zu erkunden, ohne manuell zwischen ihnen wechseln zu müssen. Glücklicherweise bietet die Open-Source-Community großartige Werkzeuge dafür. Eines dieser Werkzeuge ist TabbyAPI, Teil des TabbyML-Projekts. Es handelt sich um einen einfachen API-Server, der andere Inferenz-Engines verwaltet und es Ihnen ermöglicht, mehrere Modelle bereitzustellen und sie bei Bedarf dynamisch zu laden oder zu entladen.

TabbyAPI einrichten

Lassen Sie uns durch die Einrichtung von TabbyAPI gehen. Stellen Sie sich vor, Sie verwenden eine Maschine mit einer 24-GB-VRAM-GPU, wie einer RTX 3090, und möchten zwischen zwei Modi wechseln: Code und allgemeine Verwendung. Für Codierungsaufgaben empfehlen wir Mistrals 22B-Modell “Codestral”, das sich hervorragend für Codierungsaufgaben eignet und in die 4-Bit-Quantisierung passt. Für allgemeine Aufgaben verwenden wir NVIDIA’s 12B NeMo-Modell in 8-Bit-Quantisierung.

Hier erfahren Sie, wie Sie TabbyAPI einrichten und die Modelle herunterladen (stellen Sie sicher, dass Ihre Maschine über mindestens 32 GB RAM, etwa 50 GB freien Speicherplatz verfügt und eine aktuelle Linux-Distribution ausführt). Zuerst laden Sie TabbyAPI herunter:

git clone https://github.com/theroyallab/tabbyAPI.git TabbyAPI

Wenn Sie zum ersten Mal ein großes Git-Checkout durchführen, müssen Sie Git’s Large File System (LFS) installieren:

git lfs install

Laden Sie als Nächstes die Modelle herunter. Diese Checkout-Befehle können einige Zeit in Anspruch nehmen, da sie große Dateien betreffen:

cd TabbyAPI/models

git checkout git@hf.co:machinez/Codestral-22B-v0.1-exl2 codestral

cd Codestral

git checkout 4_0

cd ../

git checkout https:////huggingface.co/turboderp/Llama-3.1-8B-Instruct-exl2 llama3-small

cd llama3-small

git checkout 6.0bpw

cd ../

Sobald die Downloads abgeschlossen sind, ist es Zeit, TabbyAPI zu konfigurieren und zu starten. Bearbeiten Sie die folgenden Einstellungen in der config.yml:

network:

        host: 0.0.0.0

        disable_auth: True

        [...]

model:

        model_name: llama3-small

        [...]

Diese Konfiguration deaktiviert die Notwendigkeit eines API-Schlüssels und stellt sicher, dass Llama 3.1 standardmäßig geladen wird. Jetzt können Sie Tabby starten:

./start.sh

Wenn Sie nach der CUDA-Version gefragt werden, wählen Sie 12.x und warten Sie dann, bis TabbyAPI gestartet ist und meldet, dass es bereit ist:

INFO:     Uvicorn running on http://0.0.0.0:5000

(Press CTRL+C to quit)

Überprüfen Sie schließlich, ob beide Modelle bereit zum Bereitstellen sind:

curl http://localhost:5000/v1/models

Super! Sie sind jetzt bereit, mit mehreren Modellen zu experimentieren, indem Sie jedes Tool verwenden, das mit OpenAI-Servern kompatibel ist, wie zum Beispiel OpenWebUI.

Tipps zur Maximierung Ihrer Einrichtung

Nachdem Sie unseren vorherigen Beiträgen gefolgt sind, sollten Sie in der Lage sein, mehrere interessante Modelle selbst zu hosten, sie mit einer Benutzeroberfläche zu verbinden oder in Skripte und Pipelines zu integrieren.

KI, insbesondere Open-Source-KI, hat sich mit einer beeindruckenden Geschwindigkeit entwickelt. Täglich entstehen neue Tools und Anwendungsfälle. Bei HPClabs haben wir diese Fortschritte genutzt, um unsere Arbeitsabläufe zu verbessern. Jetzt, da Ihnen die Leistungsfähigkeit lokaler KI zur Verfügung steht, sind hier einige nützliche Tools, um Ihre Produktivität zu maximieren:

Code-Tools (Agieren Sie als Ihr KI-Junior-Paarprogrammierer!)

Continue.dev: Eine Visual Studio Code-Erweiterung, die Chat und Autovervollständigung direkt in die IDE integriert. Sie ermöglicht es Ihnen, Code aus der Chatoberfläche als Diff auf Ihre Codebasis anzuwenden. Wir empfehlen die Verwendung von Deepseek’s schnellem 6,7B-Modell für die Autovervollständigung.

Aider: Ein KI-Agent für das Programmieren. Er identifiziert autonom die erforderlichen Dateien in Ihrer Codebasis, setzt die Eingabe um und bietet das Ergebnis als Git-Commit an.

Claude.dev: Ein weiterer KI-Agent, ursprünglich mit Claude verbunden, aber jetzt erweitert, um mehrere Backends zu unterstützen.

Allgemeine Tools

OpenInterpreter: Sprechen Sie direkt mit Ihrem Terminal, kein Auswendiglernen kryptischer Shell-Befehle mehr! OI wird immer um Bestätigung bitten, bevor etwas ausgeführt wird.

Obsidian Copilot: Feuern Sie benutzerdefinierte Eingabeaufforderungen mit Notizen aus Ihrem Obsidian-Vault ab oder chatten Sie mit den Notizen Ihres Vaults.

Viel Spaß beim Hacken!

PS: Codestral enthält derzeit keine Vorlage für Eingabeaufforderungen. Sie können eine erstellen, indem Sie die folgende Datei im TabbyAPI-Templates-Ordner als codestral.jinja ablegen:

{% if messages[0]['role'] == 'system' -%}
   {{ bos_token + '[INST] <<SYS>>\n' + messages[0]['content'] | trim + '\n<</SYS>>\n\n' }}
   {% set messages = messages[1:] %}
{% else -%}
   {{ bos_token + '[INST] ' }}
{% endif -%}

{% for message in messages -%}
   {% if (message['role'] == 'user') != (loop.index0 % 2 == 0) -%}
       {{ raise_exception('Conversation roles must alternate user/assistant/user/assistant/...') }}
   {% endif -%}

   {% if message['role'] == 'user' -%}
       {% if loop.index0 > 0 -%}
           {{ bos_token + '[INST] ' }}
       {% endif -%}
       {{ message['content'] | trim + '[/INST]' }}
   {% elif message['role'] == 'assistant' -%}
       {{ message['content'] | trim + eos_token }}
   {% endif -%}
{% endfor -%}

Dann setzen Sie

prompt_template: codestral

in Ihrer config.yml.

© Copyright 2024 HPCLabs
DatenschutzImpressum
Website erstellt von Mahna Mahna