Развертывание OpenSource LLM для DiscourseAI на собственном сервере

Плагин Discourse AI включает множество функций, требующих включения LLM, таких как, например, суммаризация, AI Helper, AI Search и AI Bot. Хотя вы можете использовать сторонний API, например, настроить ключи API для OpenAI или настроить ключи API для Anthropic, мы создали Discourse AI с самого начала так, чтобы не зависеть от этих провайдеров.

Запуск с HuggingFace TGI

HuggingFace предоставляет отличное контейнерное изображение, которое позволит быстро запустить сервер.

Например:

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

Это позволит запустить локальный экземпляр Mistral 7B Instruct на localhost в порту 8080, который можно протестировать с помощью:

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

Запуск с vLLM

Другой вариант для самостоятельного размещения LLM, поддерживаемый Discourse AI, — это vLLM, очень популярный проект, распространяемый под лицензией Apache.

Вот как начать работу с моделью:

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

Тестирование можно выполнить с помощью:

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

Запуск с Ollama

Ollama — ещё один популярный вариант для запуска моделей с открытым исходным кодом локально. Он упрощает управление моделями и предоставляет API, совместимый с OpenAI.

ollama pull mistral
ollama serve

Это запускает локальный сервер по адресу http://localhost:11434, к которому Discourse AI может подключиться, используя провайдера Ollama.

Доступность для вашего экземпляра Discourse

В большинстве случаев вы будете запускать это на выделенном сервере из-за требований к GPU. В таком случае рекомендуется использовать обратный прокси, завершение TLS и защиту конечной точки, чтобы к ней мог подключаться только ваш экземпляр Discourse.

Настройка Discourse AI

Подключения к LLM теперь настраиваются через административный интерфейс, а не через настройки сайта. Перейдите по адресу /admin/plugins/discourse-ai/ai-llms и добавьте новый LLM:

  1. Нажмите New, чтобы добавить модель.
  2. Выберите Provider — в зависимости от вашего сервера инференса выберите vLLM, Hugging Face или Ollama.
  3. Введите URL вашего конечного пункта инференса (например, http://your-server:8080).
  4. Введите API-ключ, если ваш конечный пункт требует его.
  5. Заполните название модели, токенизатор, максимальное количество токенов запроса и другие детали модели.

После добавления вашего LLM установите его как модель по умолчанию через настройку сайта ai_default_llm_model или назначьте его для конкретных функций через конфигурацию агента в /admin/plugins/discourse-ai/ai-features.

17 лайков

Для тех, кто ищет по этой теме с/для:
#Llava-Api-keys

Я тоже использую vLLM. Также рекомендую модель openchat v3.5 0106 — это 7-миллиардная модель с 7 миллиардами параметров, которая показывает отличные результаты.

Я запускаю её в квантованном виде с точностью 4 бита, чтобы она работала быстрее.

Я поручаю эту задачу стажёру. Есть ли у кого-нибудь рекомендации по конкретной услуге для регистрации? Это для тестирования. У стажёра уже настроен тест с OpenAI. Он работает нормально. Они заинтересованы в попытке использовать HuggingFace TGI, но, похоже, мне нужно предоставить им выделенный сервер с GPU? Какие минимальные характеристики требуются для теста?

Есть ли ссылки, которые я могу дать стажёру?

Я ещё не изучал этот проект подробно. Я лишь предполагаю, что стажёру понадобятся некоторые ресурсы, и пытаюсь дать разумные рекомендации по услугам для стажёра в ходе исследования.

Привет! При развертывании контейнера vllm с самоподписанным сертификатом на локальном GPU-сервере я не нашел хорошего способа добавить корневой CA в контейнер Discourse, чтобы он мог безопасно обращаться к этому локальному сервису по HTTPS.

Например:

./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 failed to verify the legitimacy of the server and therefore could not
establish a secure connection to it. To learn more about this situation and
how to fix it, please visit the web page mentioned above.

Есть ли хороший способ добавить корневой сертификат CA (самоподписанный) в контейнер Discourse так, чтобы изменения сохранялись даже после обновления образа контейнера?

Насколько я знаю, добавление этого в app.yml:

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

сработает корректно только при сборке/пересборке приложения.

Буду благодарен за любые подсказки.

14 сообщений были перенесены в новую тему: Настройка Discourse AI для работы с Ollama локально

Есть ли возможность добавлять пользовательские заголовки HTTP в запросы Discourse AI? У нас есть сервер с GPU, который мы используем для различных задач; он предоставляет API, совместимое с OpenAI, но в целях безопасности мы разместили его за шлюзом управления API (API Management), который требует наличия пользовательского заголовка HTTP (например, SubscriptionKey), и мы передаём там наш ключ аутентификации.Обратите внимание, что этот ключ аутентификации используется для прохождения через APIM и отличается от ключа API, который обычно указывается для таких сервисов, как OpenAI API.Было бы отлично, если бы появилась возможность добавлять пользовательские заголовки при настройке каждой LLM на странице admin/plugins/discourse-ai/ai-llms. Возможно, стоит добавить опцию «Custom» в выпадающем списке «Provider» с дополнительными настройками для подобных сценариев использования?

1 лайк

Краткий ответ: используйте плагин для добавления этого заголовка. Обходным решением может стать локальный прокси-сервер, к которому будет обращаться Discourse; он добавит заголовок и передаст данные обратно в Discourse. Один ненадёжный источник предполагает, что вы можете настроить NGINX на выполнение этой задачи с помощью чего-то вроде:

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

Возможно, существует изящный способ добавить это в конфигурацию nginx для Discourse по какому-то секретному пути (который также слушал бы только ваш сервер).

1 лайк