Héberger soi-même un LLM open source pour DiscourseAI

Le plugin Discourse AI possède de nombreuses fonctionnalités qui nécessitent l’activation d’un LLM, comme, par exemple, la Synthèse, l’Assistant IA, la Recherche IA, le Bot IA. Bien que vous puissiez utiliser une API tierce, comme Configurer les clés API pour OpenAI ou Configurer les clés API pour Anthropic, nous avons conçu Discourse AI dès le premier jour pour ne pas être limité à ceux-ci.

Exécution avec HuggingFace TGI

HuggingFace fournit une image de conteneur impressionnante qui peut vous permettre de démarrer rapidement.

Par exemple :

mkcdir -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

Devrait vous permettre de démarrer avec une instance locale de Mistral 7B Instruct sur le localhost au port 8080, qui peut être testée avec

curl http://localhost:8080/ \
    -X POST \
    -H 'Content-Type: application/json' \
    -d '{"inputs":"<s>[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!</s> [INST] Do you have mayonnaise recipes? [/INST]","parameters":{"max_new_tokens":500, "temperature":0.5,"top_p": 0.9}}'

Exécution avec vLLM

Une autre option pour auto-héberger des LLM que Discourse AI prend en charge est vLLM, qui est un projet très populaire, sous licence Apache.

Voici comment démarrer avec un modèle :

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

Que vous pouvez tester avec

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

Rendre disponible pour votre instance Discourse

La plupart du temps, vous exécuterez cela sur un serveur dédié en raison de l’exigence de GPU. Lorsque vous le faites, je recommande d’exécuter un proxy inverse, d’effectuer la terminaison TLS et de sécuriser le point de terminaison afin qu’il ne puisse être connecté que par votre instance Discourse.

Configuration de DiscourseAI

Discourse AI fournit des paramètres de site pour configurer le serveur d’inférence pour les modèles open source. Vous devriez le pointer vers votre serveur en utilisant soit ai_hugging_face_api_url, soit ai_vllm_endpoint selon le logiciel d’inférence que vous avez choisi.

Après cela, modifiez chaque module pour utiliser le modèle que vous exécutez, dans les paramètres de sélection du modèle, comme

  • ai_helper_model
  • ai_embeddings_semantic_search_hyde_model
  • summarization strategy
  • ai_bot_enabled_chat_bots
17 « J'aime »

Pour toute personne recherchant ce sujet avec/pour :
#Llava-Api-keys

J’utilise également vLLM. Je recommanderais également le modèle openchat v3.5 0106, qui est un modèle de 7 milliards de paramètres et qui fonctionne très bien.

Je l’exécute en fait en 4 bits quantifiés pour qu’il s’exécute plus rapidement.

J’attribue cette tâche à un stagiaire. Y a-t-il des recommandations de qui que ce soit sur le service spécifique à souscrire ? Ceci est pour un test. Le stagiaire a actuellement un test configuré avec OpenAI. Cela fonctionne bien. Il/elle souhaite essayer le TGI HuggingFace, mais il semble que je doive lui fournir un serveur dédié avec GPU ? Quelles sont les spécifications minimales pour un test ?

Existe-t-il des liens que je peux donner au stagiaire ?

Je n’ai pas encore examiné ce projet en profondeur. J’anticipe simplement que le stagiaire aura besoin de certaines ressources et j’essaie de faire des recommandations raisonnables sur les services pour que le stagiaire fasse des recherches.

Salut, en exposant avec un certificat auto-signé dans un conteneur vllm sur une boîte GPU sur site, je n’ai pas trouvé de bon moyen d’ajouter le CA racine au conteneur discourse afin qu’il puisse accéder en toute sécurité à ce service sur site via HTTPS.

Par exemple :

./launcher enter app
curl -L https://vllm.infra.example.com/v1/models
curl: (60) Problème de certificat SSL : impossible d'obtenir le certificat de l'émetteur local
Plus de détails ici : https://curl.se/docs/sslcerts.html

curl n'a pas pu vérifier la légitimité du serveur et n'a donc pas pu
établir de connexion sécurisée avec lui. Pour en savoir plus sur cette situation et
comment la résoudre, veuillez visiter la page Web mentionnée ci-dessus.

Existe-t-il un bon moyen d’ajouter un certificat racine auto-signé dans le conteneur discourse qui survivrait aux mises à jour de l’image du conteneur ?

Pour autant que je sache, l’ajouter dans le fichier app.yml

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

ne fonctionnerait bien que lors de la construction/reconstruction de l’application.

Toute suggestion est la bienvenue.

14 messages ont été déplacées vers un nouveau sujet : Faire fonctionner discourse ai avec ollama localement

Y aurait-il un moyen d’ajouter un en-tête HTTP personnalisé aux requêtes Discourse AI ? Nous avons un serveur équipé de GPU que nous utilisons à diverses fins, il dispose d’une API compatible avec OpenAI, mais pour des raisons de sécurité, nous l’avons placé derrière une passerelle de gestion d’API, qui nécessite un en-tête HTTP personnalisé (quelque chose comme SubscriptionKey) et nous fournissons notre clé d’authentification ici.

Il est à noter que cette clé d’authentification sert à passer par l’APIM et est différente de la clé d’API que l’on fournirait pour un service tel que l’API OpenAI.

Ce serait formidable s’il existait un moyen d’ajouter des en-têtes personnalisés lors de la configuration de chaque LLM sur la page de configuration admin/plugins/discourse-ai/ai-llms. Peut-être une option « Personnalisée » dans le menu déroulant « Fournisseur », avec des options supplémentaires pour des cas d’utilisation comme celui-ci ?

1 « J'aime »

La réponse rapide est un plugin pour ajouter cet en-tête. Une solution de contournement pourrait être un serveur proxy local que vous atteindriez depuis Discourse et qui ajouterait l’en-tête et renverrait les données à Discourse. Une source non fiable suggère que vous pourriez être en mesure de demander à NGINX de faire cela pour vous avec quelque chose comme

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

Il pourrait y avoir une façon astucieuse d’ajouter cela à la configuration nginx de Discourse à un chemin secret (qui n’écouterait également que votre serveur).

1 « J'aime »