Auto-hospedagem de um LLM open source para DiscourseAI

O plugin Discourse AI possui muitos recursos que exigem um LLM habilitado, como, por exemplo, Sumarização, Auxiliar de IA, Pesquisa de IA, Robô de IA. Embora você possa usar uma API de terceiros, como Configurar Chaves de API para OpenAI ou Configurar Chaves de API para Anthropic, criamos o Discourse AI desde o primeiro dia para não ficarmos presos a eles.

Executando com HuggingFace TGI

O HuggingFace fornece uma imagem de contêiner incrível que pode colocá-lo em funcionamento rapidamente.

Por exemplo:

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

Deve colocá-lo em funcionamento com uma instância local do Mistral 7B Instruct no localhost na porta 8080, que pode ser testada com

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

Executando com vLLM

Outra opção para auto-hospedar LLMs que o Discourse AI suporta é o vLLM, que é um projeto muito popular, licenciado sob a Licença Apache.

Veja como começar com um modelo:

mkcdir -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 você pode testar com

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

Tornando-o disponível para sua instância do Discourse

Na maioria das vezes, você estará executando isso em um servidor dedicado por causa do requisito de GPU. Ao fazer isso, recomendo executar um proxy reverso, fazendo terminação TLS e protegendo o endpoint para que ele só possa ser conectado por sua instância do Discourse.

Configurando o DiscourseAI

O Discourse AI envia configurações do site para configurar o servidor de inferência para modelos de código aberto. Você deve apontá-lo para seu servidor usando ai_hugging_face_api_url ou ai_vllm_endpoint, de acordo com o software de inferência que você escolheu.

Depois disso, altere cada módulo para usar o modelo que você está executando, nas configurações de seleção de modelo, como

  • ai_helper_model
  • ai_embeddings_semantic_search_hyde_model
  • summarization strategy
  • ai_bot_enabled_chat_bots
16 curtidas

Para quem estiver pesquisando este tópico com/para:
#Chaves-de-API-Llava

Eu também estou usando o vLLM. Eu também recomendaria o modelo openchat v3.5 0106, que é um modelo de 7 bilhões de parâmetros que tem um desempenho muito bom.

Na verdade, estou executando-o com quantização de 4 bits para que ele rode mais rápido.

Estou designando esta tarefa a um estagiário. Há recomendações de alguém sobre qual serviço específico assinar? Isto é para um teste. O estagiário atualmente tem um teste configurado com OpenAI. Funciona bem. Eles estão interessados em experimentar o HuggingFace TGI, mas parece que preciso dar a eles um servidor dedicado com GPU? Quais são as especificações mínimas para um teste?

Existem links que posso dar ao estagiário?

Ainda não analisei este projeto em profundidade. Estou apenas antecipando que o estagiário precisará de alguns recursos e estou tentando fazer algumas recomendações razoáveis sobre serviços para o estagiário em pesquisa.

Olá, ao expor com um certificado autoassinado vllm container em uma caixa de GPU on-prem, não encontrei uma boa maneira de adicionar o Root CA ao container discourse para que ele possa acessar com segurança este serviço on-prem via https.

exemplo:

./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 falhou em verificar a legitimidade do servidor e, portanto, não pôde
estabelecer uma conexão segura com ele. Para saber mais sobre esta situação e
como corrigi-la, visite a página da web mencionada acima.

Existe uma boa maneira de adicionar um certificado raiz autoassinado no container discourse que sobreviveria às atualizações da imagem do container?

Pelo que sei, adicioná-lo no app.yml

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

só funcionaria bem durante a construção/reconstrução do aplicativo.

Qualquer dica é bem-vinda.

14 posts foram divididos em um novo tópico: Fazendo o discourse ai funcionar com ollama localmente