Im vorherigen Artikel haben wir das produktionsbereite RAG-System bei Nullkosten gesehen. Dabei haben wir die kostenlose Stufe von Hugging Face Space für die Bereitstellung genutzt.
Wir werden dieselbe Hugging Face Space nutzen, um unser LLM bereitzustellen. Hugging Face bietet kostenlos CPU Basic, 2 vCPU mit 16GB RAM und 50GB Speicherplatz an!
Warten! Was? Kann man LLM auf dieser Ressource bereitstellen? Ist das möglich?
Die Antwort lautet ja! Es ist mit einigen Einschränkungen möglich. Wir können LLM auf dem CPU mit Hilfe von CTransformers ausführen. Die CTransformer-Bibliothek ist ein Python-Paket, das Zugriff auf Transformer-Modelle bietet, die in C/C++ mit der GGML-Bibliothek implementiert wurden.
GGML
GGML ist eine C-Bibliothek für maschinelles Lernen. Sie hilft dabei, große Sprachmodelle (LLMs) auf gewöhnlichen Computerchips (CPUs) auszuführen. Sie verwendet eine spezielle Art der Datenrepräsentation (Binärformat) zum Austausch dieser Modelle. Um eine gute Leistung auf gängiger Hardware zu gewährleisten, verwendet GGML eine Technik namens Quantisierung. Diese Technik ist in verschiedenen Stufen verfügbar, wie z.B. 4-Bit, 5-Bit und 8-Bit-Quantisierung. Jede Stufe bietet eine andere Balance zwischen Effizienz und Leistung.
Nachteile
Der Hauptnachteil hier ist die Latenzzeit. Da das Modell auf CPUs läuft, erhalten wir nicht so schnell Antworten wie bei einem auf einer GPU bereitgestellten Modell. Die Latenzzeit ist jedoch nicht übermäßig hoch. Im Durchschnitt dauert es etwa 1 Minute, um 140-150 Tokens auf Huggingface Space zu generieren. Tatsächlich hat es auf einem lokalen System mit einem 16-Kern-Prozessor in weniger als 15 Sekunden Antworten geliefert.
Modell
Für Demonstrationszwecke werden wir das Zephyr-7B-Beta-SOTA-Modell bereitstellen. Verschiedene Größen des Zephyr-GGUF-Quantisierungsformats finden Sie auf Huggingface.
Verwirren Sie sich nicht. GGUF ist eine aktualisierte Version von GGML, die mehr Flexibilität, Erweiterbarkeit und Kompatibilität bietet. Sie zielt darauf ab, die Benutzererfahrung zu vereinfachen und verschiedene Modelle zu unterstützen. GGML war zwar ein wertvoller früher Versuch, hatte aber Einschränkungen, die GGUF zu überwinden sucht.
Zephyr GGUF : https://huggingface.co/TheBloke/zephyr-7B-beta-GGUF/tree/main
Wir haben Zephyr-7b-beta.Q4_K_S.gguf ausgewählt. Es handelt sich um ein 4-Bit-quantisiertes kleines Modell, das schnell ist und nur einen geringen Qualitätsverlust aufweist.
Hinweis: Die Antwortzeit, die Latenzzeit und die Genauigkeit können je nach Größe des von Ihnen ausgewählten Modells variieren.
Coding-Zeit
Lassen Sie uns die Bereitstellung im Detail untersuchen. Wir haben das Zephyr-Modell in zwei Umgebungen bereitgestellt:
- Eine für die Erstellung von APIs.
- Eine weitere, die als Spielplatz dient und Ihnen die Interaktion mit dem Modell ermöglicht.
1. Bereitstellung von LLM für API
Bereitstellungsstruktur
LLM_Deployment_at_zerocost ├── Dockerfile ├── main.py ├── requirements.txt └── zephyr-7b-beta.Q4_K_S.gguf
Verweisen Sie auf unsere Hugging Face Space-Dateistruktur, um sich ein Bild zu machen: https://huggingface.co/spaces/gathnex/LLM-deployment-zerocost-api/tree/main
requirements.txt
python-multipart
fastapi
pydantic
uvicorn
requests
python-dotenv
ctransformers
zephyr-7b-beta.Q4_K_S.gguf
Laden Sie das Modell zephyr-7b-beta.Q4_K_S.gguf von huggingface herunter.
main.py
Die Datei main.py
enthält eine FastAPI-Funktion, die eine Zephyr-7B-Vervollständigung zurückgibt.
from ctransformers import AutoModelForCausalLM
from fastapi import FastAPI
from pydantic import BaseModel
llm = AutoModelForCausalLM.from_pretrained("zephyr-7b-beta.Q4_K_S.gguf",
model_type='mistral',
max_new_tokens = 1096,
threads = 3,
)
#Pydantic-Objekt
class validation(BaseModel):
prompt: str
#Fast API
app = FastAPI()
@app.post("/llm_on_cpu")
async def stream(item: validation):
system_prompt = 'Below is an instruction that describes a task. Write a response that appropriately completes the request.'
E_INST = "</s>"
user, assistant = "<|user|>", "<|assistant|>"
prompt = f"{system_prompt}{E_INST}\n{user}\n{item.prompt}{E_INST}\n{assistant}\n"
return llm(prompt)
Dockerfile
Schließlich haben wir das Dockerfile verwendet, um unsere Anwendung für die Bereitstellung zu containerisieren.
FROM python:3.9
WORKDIR /code
COPY ./requirements.txt /code/requirements.txt
RUN pip install --no-cache-dir --upgrade -r /code/requirements.txt
COPY ./zephyr-7b-beta.Q4_K_S.gguf /code/zephyr-7b-beta.Q4_K_S.gguf
COPY ./main.py /code/main.py
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "7860"]
Jetzt sind unsere Dateien bereit für die Bereitstellung.
Bereitstellung
Huggingface Space
Schritt 1: Erstellen Sie einen neuen Hugging Face Space.
Schritt 2: Geben Sie den Spacenamen ein und wählen Sie den Lizenztyp aus.
Schritt 3: Wählen Sie die Option „Space SDK-Docker (Blank)“.
Schritt 4: Wählen Sie zunächst „Öffentlich“, um unsere Bereitstellungsendpunkt zu kopieren, und klicken Sie dann auf „Space erstellen“.
Verweisen Sie auf unsere Hugging Face Space-Dateistruktur, um sich ein Bild zu machen: https://huggingface.co/spaces/gathnex/LLM-deployment-zerocost-api/tree/main
Schritt 5: Laden Sie die oben erstellten Dateien hoch.
LLM_Deployment_at_zerocost ├── Dockerfile ├── main.py ├── requirements.txt └── zephyr-7b-beta.Q4_K_S.gguf
Herzlichen Glückwunsch! Sie haben Ihr LLM bereitgestellt.
Wenn es im Code keine Fehler gibt, sehen Sie, dass er läuft, und Sie können die Protokolle überprüfen, wenn ein Fehler auftritt.
Schritt 6: Klicken Sie nun auf „Diesen Space einbetten“ und kopieren Sie den Spacelink (dies dient als Ihr API-Schlüssel für die Produktion).
Kopieren Sie die direkte URL.
Schritt 7: Machen Sie den Space jetzt privat ⚠️ in den Einstellungen (Hinweis: Ihre Daten und Anmeldeinformationen werden in einem öffentlichen Space offengelegt).
Alles ist jetzt abgeschlossen und wir haben unser LLM erfolgreich bereitgestellt. Lassen Sie uns nun unsere API testen.
Dies ist unser Spacelink: https://gathnex-llm-deployment-zerocost-api.hf.space
Fügen Sie /docs
zur URL hinzu, um Swagger UI zu aktivieren und unsere API zu testen.
Fast API Swagger: https://gathnex-llm-deployment-zerocost-api.hf.space/docs
Endpoint: https://gathnex-llm-deployment-zerocost-api.hf.space/llm_on_cpu
Wir haben Zephyr auch in der Gradio-Umgebung für den Chat-Spielplatz bereitgestellt.
2. Chat-UI-Spielplatz auf HF CPU: https://huggingface.co/spaces/gathnex/LLM_deployment_zerocost_playground
Fazit
Wir haben LLM erfolgreich in der Produktion mit einer API bereitgestellt. Sie können es für kleine Automatisierungsaufgaben, Textgenerierung, Agentenaufgaben usw. verwenden. Es ist sehr nützlich für diejenigen, die ihr eigenes angepasstes Modell bereitstellen möchten, ohne die hohen Kosten, die mit GPUs verbunden sind. Die Kosten für GPUs sind oft zu hoch, was es für viele Menschen schwierig macht, sie sich leisten zu können.