Autoalojamiento de un LLM OpenSource para DiscourseAI

El plugin Discourse AI tiene muchas funcionalidades que requieren que un LLM esté habilitado, como, por ejemplo, Resumen, Asistente de IA, Búsqueda por IA, Bot de IA. Aunque puedes usar una API de terceros, como Configurar claves de API para OpenAI o Configurar claves de API para Anthropic, construimos Discourse AI desde el primer día para no estar atados a esas.

Ejecutando con HuggingFace TGI

HuggingFace proporciona una increíble imagen de contenedor que puede ponerte en funcionamiento rápidamente.

Por ejemplo:

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

Debería ponerte en funcionamiento con una instancia local de Mistral 7B Instruct en localhost en el puerto 8080, que se puede probar con

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}}'

Ejecutando con vLLM

Otra opción para autoalojar LLMs que Discourse AI soporta es vLLM, que es un proyecto muy popular, licenciado bajo la Licencia Apache.

Así es como puedes empezar con un modelo:

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

Lo cual puedes probar con

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}'

Ejecutando con Ollama

Ollama es otra opción popular para ejecutar modelos de código abierto localmente. Simplifica la gestión de modelos y proporciona una API compatible con OpenAI.

ollama pull mistral
ollama serve

Esto inicia un servidor local en http://localhost:11434 al que Discourse AI puede conectarse usando el proveedor Ollama.

Ponerlo disponible para tu instancia de Discourse

La mayoría de las veces lo ejecutarás en un servidor dedicado debido al requisito de GPU. Cuando lo hagas, recomiendo ejecutar un proxy inverso, haciendo terminación TLS y asegurando el endpoint para que solo pueda ser conectado por tu instancia de Discourse.

Configurando Discourse AI

Las conexiones LLM ahora se configuran a través de la UI de administración en lugar de la configuración del sitio. Navega a /admin/plugins/discourse-ai/ai-llms y añade un nuevo LLM:

  1. Haz clic en Nuevo para añadir un modelo
  2. Selecciona un Proveedor — elige vLLM, Hugging Face, u Ollama dependiendo de tu servidor de inferencia
  3. Introduce la URL de tu endpoint de inferencia (ej. http://tu-servidor:8080)
  4. Introduce una clave de API si tu endpoint la requiere
  5. Rellena el nombre del modelo, el tokenizador, los tokens máximos de prompt y otros detalles del modelo

Una vez que tu LLM esté añadido, establécelo como predeterminado a través de la configuración del sitio ai_default_llm_model, o asígnalo a funcionalidades específicas a través de su configuración de agente en /admin/plugins/discourse-ai/ai-features.

17 Me gusta

Para cualquiera que busque este tema con/para:
#Llava-Api-keys

Yo también uso vLLM. También recomendaría el modelo openchat v3.5 0106, que es un modelo de 7B parámetros que funciona muy bien.

De hecho, lo estoy ejecutando en 4 bits cuantizados para que funcione más rápido.

Estoy asignando esta tarea a un pasante. ¿Hay alguna recomendación de alguien sobre qué servicio específico contratar? Esto es para una prueba. El pasante actualmente tiene una prueba configurada con OpenAI. Funciona bien. Están interesados en probar HuggingFace TGI, pero parece que necesito darles un servidor dedicado con GPU. ¿Cuáles son las especificaciones mínimas para una prueba?

¿Hay enlaces que pueda dar al pasante?

Aún no he analizado este proyecto en profundidad. Solo anticipo que el pasante necesitará algunos recursos y estoy tratando de hacer algunas recomendaciones razonables sobre servicios para que el pasante investigue.

Hola, al exponer con un certificado autofirmado el contenedor vllm en una caja de GPU on-prem, no encontré una buena manera de agregar la CA raíz al contenedor de discourse para que pueda acceder de forma segura a este servicio on-prem a través de https.

por ejemplo:

./launcher enter app
curl -L https://vllm.infra.example.com/v1/models
curl: (60) problema de certificado SSL: no se puede obtener el certificado del emisor local
Más detalles aquí: https://curl.se/docs/sslcerts.html

curl no pudo verificar la legitimidad del servidor y, por lo tanto, no pudo
establecer una conexión segura con él. Para obtener más información sobre esta situación y
cómo solucionarlo, visite la página web mencionada anteriormente.

¿Hay alguna buena manera de agregar un certificado de CA raíz autofirmado en el contenedor de discourse que sobreviva a las actualizaciones de la imagen del contenedor?

Hasta donde sé, agregarlo en el app.yml

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

solo funcionaría bien durante la compilación/recompilación de la aplicación.

Cualquier pista es bienvenida.

14 publicaciones se dividieron en un nuevo tema: Hacer que discourse ai funcione con ollama localmente

¿Habría alguna manera de añadir una cabecera HTTP personalizada a las solicitudes de Discourse AI? Tenemos un servidor equipado con GPU que utilizamos para una variedad de propósitos, tiene una API compatible con OpenAI, pero por seguridad la hemos puesto detrás de un portal de gestión de API (API Management gateway), el cual requiere una cabecera HTTP personalizada (algo como SubscriptionKey) y proporcionamos nuestra clave de autenticación aquí.

Tenga en cuenta que esta clave de autenticación es para pasar el APIM y es diferente de la clave API que se proporcionaría para un servicio como la API de OpenAI.

Sería genial si hubiera una forma de añadir cabeceras personalizadas en la configuración de cada LLM en la página de configuración admin/plugins/discourse-ai/ai-llms. ¿Quizás una opción ‘Personalizada’ en el menú desplegable ‘Proveedor’, con opciones adicionales para casos de uso como este?

1 me gusta

La respuesta rápida es un complemento para agregar esa cabecera. Una solución alternativa podría ser un servidor proxy local al que se accedería desde Discourse y que agregaría la cabecera y enviaría los datos de vuelta a Discourse. Una fuente no confiable sugiere que podrías lograr que NGINX hiciera eso por ti con algo como

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

Podría haber una forma ingeniosa de agregar eso a la configuración de nginx de Discourse en alguna ruta secreta (que también solo escuchara a tu servidor).

1 me gusta