Обслуживание большой языковой модели и чат-бот
В предыдущей статье мы развернули пользовательский интерфейс Huggingface Chat с моделями Huggingface. Что делать, если модели, которую вы хотите развернуть, нет в Huggingface, например локально настроенную модель или вы хотите применить собственную логику к входным и выходным данным модели. К счастью, пользовательский интерфейс Chat поддерживает модели, обслуживаемые с использованием вывода генерации текста Huggingface или даже после использования специального API.
Вывод генерации текста
Вывод при генерации текста: сервер Rust, Python и gRPC для вывода при генерации текста. Используется в HuggingFace для поддержки Hugging Chat, Inference API и Inference Endpoint. Он может обслуживать модель на Huggingface или модель, хранящуюся по локальному пути. Другие функции (самые важные: квантование, потоковая передача токенов), поддерживаемые модели.
Модель на Huggingface
Ниже приведен скрипт для обслуживания модели «tiiuae/falcon-7b-instruct». Вам необходимо указать путь к тому модели для хранения локально загруженных весов (который также можно использовать для обслуживания локальной модели).
model=tiiuae/falcon-7b-instruct volume=$PWD/data # share a volume with the Docker container to avoid downloading weights every run docker run --gpus all --shm-size 1g -p 8080:80 -v $volume:/data ghcr.io/huggingface/text-generation-inference:1.0.3 --model-id $model
Клиент
curl 127.0.0.1:8080/generate \ -X POST \ -d '{"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":20}}' \ -H 'Content-Type: application/json'
Локальная модель
Ниже приведен сценарий для обслуживания локальной модели. Мы копируем загруженную модель llama-2–13b-chat в локальную папку, затем сопоставляем локальную папку ~/serving/text-generation-inference/data с /data в контейнере. , то из контейнера вы сможете получить доступ к модели через папку /data/models/Llama-2–13b-chat-hf. Таким образом, вы также можете использовать локально настроенную модель (вам необходимо предоставить полную модель, она не поддерживает адаптер LORA изначально, поэтому вам необходимо сначала объединить модель)
mkdir -p ~/serving/text-generation-inference/data/models/Llama-2-13b-chat-hf cp -rL ~/.cache/huggingface/hub/models--meta-llama--Llama-2-13b-chat-hf/snapshots/<snapshot id>/*.* ~/serving/text-generation-inference/data/models/Llama-2-13b-chat-hf cd ~/serving/text-generation-inference # model=meta-llama/Llama-2-13b-chat-hf model=/data/models/Llama-2-13b-chat-hf volume=~/serving/text-generation-inference/data # share a volume with the Docker container to avoid downloading weights every run # token= docker run --gpus all --shm-size 1g --rm -p 8080:80 -v $volume:/data ghcr.io/huggingface/text-generation-inference:1.0.3 --model-id $model --quantize bitsandbytes-nf4 --trust-remote-code
Защита вывода генерации текста с помощью обратного прокси
Вывод генерации текста не обеспечивает аутентификацию по умолчанию. Однако вы можете использовать обратный прокси-сервер, чтобы защитить его, добавив базовую аутентификацию, аутентификацию oauth. Известный обратный прокси-сервер — nginx.
Базовая аутентификация
Идея заключается в том, что вывод о генерации текста может быть скрыт за параметром безопасности, к которому внешние пользователи не могут получить прямой доступ (например, порт или IP-адрес, недоступный напрямую). Затем используйте nginx для пересылки запроса на вывод генерации текста.
Вывод генерации текста в защищенном порту (например, 9080)
model=tiiuae/falcon-7b-instruct volume=$PWD/data # share a volume with the Docker container to avoid downloading weights every run docker run --gpus all --shm-size 1g -p 9080:80 -v $volume:/data ghcr.io/huggingface/text-generation-inference:1.0.3 --model-id $model
Установите nginx и создайте пользователя
sudo apt update -y && sudo apt install nginx -y sudo apt install apache2-utils -y sudo htpasswd -c /etc/nginx/.htpasswd <username>
Создать правило переадресации (открывая порт 8080 и пересылая его на порт 9080).
sudo vi /etc/nginx/conf.d/mycontainer.conf server { listen 8080; server_name <server name>; location / { proxy_pass http://localhost:9080/; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; # Basic authentication with username and password auth_basic "Restricted Access"; auth_basic_user_file /etc/nginx/.htpasswd; } }
Клиент
curl <ip>:8080/generate \ -X POST \ -u <username>:<password> \ -d '{"inputs":"What is Deep Learning?","parameters":{"max_new_tokens":20}}' \ -H 'Content-Type: application/json'
Приложение
OAuth-прокси Nginx