Self-Hosting eines OpenSource LLM für DiscourseAI

Das Plugin Discourse AI verfügt über viele Funktionen, die ein LLM (Large Language Model, Großes Sprachmodell) erfordern, wie zum Beispiel Zusammenfassung, KI-Assistent, KI-Suche, KI-Bot. Obwohl Sie eine Drittanbieter-API verwenden können, wie z. B. API-Schlüssel für OpenAI konfigurieren oder API-Schlüssel für Anthropic konfigurieren, wurde Discourse AI von Anfang an so entwickelt, dass es nicht an diese gebunden ist.

Ausführung mit HuggingFace TGI

HuggingFace bietet ein hervorragendes Container-Image, mit dem Sie schnell starten können.

Zum Beispiel:

mkdir -p /opt/tgi-cache
docker run --rm --gpus all --shm-size 1g -p 8080:80 \
  -v /opt/tgi-cache:/data \
  ghcr.io/huggingface/text-generation-inference:latest \
  --model-id mistralai/Mistral-7B-Instruct-v0.2

Sollte Sie eine lokale Instanz von Mistral 7B Instruct auf dem localhost unter Port 8080 starten, die Sie testen können mit

curl http://localhost:8080/ \
    -X POST \
    -H 'Content-Type: application/json' \
    -d '{"inputs":"\u003cs\u003e[INST] What is your favourite condiment? [/INST] Well, I'm quite partial to a good squeeze of fresh lemon juice. It adds just the right amount of zesty flavour to whatever I'm cooking up in the kitchen!\u003c/s\u003e [INST] Do you have mayonnaise recipes? [/INST]","parameters":{"max_new_tokens":500, "temperature":0.5,"top_p": 0.9}}'

Ausführung mit vLLM

Eine weitere Option zum Selbst-Hosten von LLMs, die Discourse AI unterstützt, ist vLLM, ein sehr beliebtes Projekt unter der Apache License.

So starten Sie mit einem Modell:

mkdir -p /opt/vllm-cache
docker run --gpus all \
  -v /opt/vllm-cache:/root/.cache/huggingface \
  -e "MODEL=mistralai/Mistral-7B-Instruct-v0.2" \
  -p 8080:8000 --ipc=host vllm/vllm-openai:latest

Das Sie testen können mit

curl -X POST http://localhost:8080/v1/completions \
-H "Content-Type: application/json" \
-d '{
"model": "mistralai/Mistral-7B-Instruct-v0.2",
"prompt": "\u003cs\u003e [INST] What was the latest released hero for Dota 2? [/INST] The latest released hero for Dota 2 was", "max_tokens": 200}'

Ausführung mit Ollama

Ollama ist eine weitere beliebte Option zum lokalen Ausführen von Open-Source-Modellen. Es vereinfacht die Modellverwaltung und bietet eine OpenAI-kompatible API.

ollama pull mistral
ollama serve

Dies startet einen lokalen Server unter http://localhost:11434, mit dem sich Discourse AI unter Verwendung des Ollama-Providers verbinden kann.

Bereitstellen für Ihre Discourse-Instanz

Meistens werden Sie dies aufgrund der GPU-Anforderung auf einem dedizierten Server ausführen. In diesem Fall empfehle ich, einen Reverse-Proxy zu verwenden, TLS-Terminierung durchzuführen und den Endpunkt abzusichern, sodass er nur von Ihrer Discourse-Instanz verbunden werden kann.

Konfiguration von Discourse AI

LLM-Verbindungen werden nun über die Admin-UI anstatt über die Site-Einstellungen konfiguriert. Navigieren Sie zu /admin/plugins/discourse-ai/ai-llms und fügen Sie ein neues LLM hinzu:

  1. Klicken Sie auf Neu, um ein Modell hinzuzufügen
  2. Wählen Sie einen Provider – wählen Sie vLLM, Hugging Face oder Ollama abhängig von Ihrem Inferenzserver
  3. Geben Sie die URL Ihres Inferenz-Endpunkts ein (z. B. http://ihr-server:8080)
  4. Geben Sie einen API-Schlüssel ein, falls Ihr Endpunkt einen benötigt
  5. Füllen Sie den Modellnamen, Tokenizer, maximale Prompt-Tokens und andere Modelldetails aus

Sobald Ihr LLM hinzugefügt wurde, legen Sie es über die Site-Einstellung ai_default_llm_model als Standard fest oder weisen Sie es bestimmten Funktionen über deren Agentenkonfiguration unter /admin/plugins/discourse-ai/ai-features zu.

17 „Gefällt mir“

Für alle, die dieses Thema mit/für suchen:
#Llava-Api-keys

Ich benutze auch vLLM. Ich würde auch das OpenChat v3.5 0106-Modell empfehlen, ein Modell mit 7 Milliarden Parametern, das sehr gut funktioniert.

Ich lasse es tatsächlich in 4-Bit quantisiert laufen, damit es schneller läuft.

Ich weise diese Aufgabe einem Praktikanten zu. Gibt es Empfehlungen von jemandem, für welchen spezifischen Dienst er sich anmelden soll? Dies ist für einen Test. Der Praktikant hat derzeit einen Test mit OpenAI konfiguriert. Es funktioniert gut. Er ist daran interessiert, den HuggingFace TGI auszuprobieren, aber es scheint, dass ich ihm einen dedizierten Server mit GPU geben muss? Was sind die minimalen Spezifikationen für einen Test?

Gibt es Links, die ich dem Praktikanten geben kann?

Ich habe mich noch nicht eingehend mit diesem Projekt befasst. Ich antizipiere nur, dass der Praktikant einige Ressourcen benötigen wird, und ich versuche, einige vernünftige Empfehlungen zu Diensten für den Praktikanten bei der Recherche zu geben.

Hallo, während der Bereitstellung mit einem selbstsignierten Zertifikat vllm-Container auf einer GPU-Box on-prem, habe ich keine gute Möglichkeit gefunden, die Root CA zum Discourse-Container hinzuzufügen, damit er sicher auf diesen On-Prem-Dienst über HTTPS zugreifen kann.

z.B.:

./launcher enter app
curl -L https://vllm.infra.example.com/v1/models
curl: (60) SSL certificate problem: unable to get local issuer certificate
More details here: https://curl.se/docs/sslcerts.html

curl konnte die Legitimität des Servers nicht überprüfen und konnte daher keine sichere Verbindung zu ihm herstellen. Weitere Informationen zu dieser Situation und wie Sie sie beheben können, finden Sie auf der oben genannten Webseite.

Gibt es eine gute Möglichkeit, ein selbstsigniertes Root-CA-Zertifikat in den Discourse-Container einzufügen, das Container-Image-Updates übersteht?

Soweit ich weiß, würde das Hinzufügen in der app.yml

run:
  - exec: wget ... && update-ca-certificates

nur beim Erstellen/Neuerstellen der App gut funktionieren.

Jeder Hinweis ist willkommen.

14 Beiträge wurden in ein neues Thema aufgeteilt: Getting discourse ai to work with ollama locally

Gäbe es eine Möglichkeit, den Discourse AI-Anfragen einen benutzerdefinierten HTTP-Header hinzuzufügen? Wir haben einen Server mit GPU-Ausstattung, den wir für verschiedene Zwecke nutzen. Er verfügt über eine OpenAI-kompatible API, die wir jedoch aus Sicherheitsgründen hinter einem API-Management-Gateway platziert haben, welches einen benutzerdefinierten HTTP-Header (etwas wie SubscriptionKey) erfordert, und wir übergeben unseren Authentifizierungsschlüssel hier.

Beachten Sie, dass dieser Authentifizierungsschlüssel für die Durchreise durch den APIM dient und sich von dem API-Schlüssel unterscheidet, den man für einen Dienst wie die OpenAI API übergeben würde.

Es wäre großartig, wenn es eine Möglichkeit gäbe, benutzerdefinierte Header in der Einrichtung jedes LLM auf der Seite admin/plugins/discourse-ai/ai-llms hinzuzufügen. Vielleicht eine Option „Benutzerdefiniert“ im Dropdown-Menü „Anbieter“ mit zusätzlichen Optionen für Anwendungsfälle wie diesen?

1 „Gefällt mir“

Die schnelle Antwort ist ein Plugin, um diesen Header hinzuzufügen. Eine Übergangslösung könnte ein lokaler Proxy-Server sein, den Sie von Discourse aus ansprechen würden und der den Header hinzufügt und die Daten zurück an Discourse weiterleitet. Eine unbestätigte Quelle deutet darauf hin, dass Sie NGINX dazu bringen könnten, dies für Sie mit etwas wie

server {
    listen 80;
    
    location / {
        proxy_pass https://api.example.com;
        proxy_set_header SubscriptionKey xyz;
        proxy_set_header Host $host;
    }
}

Es könnte einen cleveren Weg geben, dies zur NGINX-Konfiguration von Discourse an einem geheimen Pfad hinzuzufügen (der auch nur auf Ihren Server hört).

1 „Gefällt mir“