Веб-приложение чат-бота + конечные точки HTTP и WebSocket для вывода LLM с помощью клиента Petals.
Вы можете попробовать это на https://chat.petals.dev или запустить серверную часть на своем сервере, используя эти команды:
git clone https://github.com/petals-infra/chat.petals.dev.git
cd chat.petals.dev
pip install -r requirements.txt
flask run --host=0.0.0.0 --port=5000
? Хотите служить Ламе 2? Запросите доступ к его весам на веб-сайте ♾️ Meta AI и ? Model Hub, затем запустите в терминале huggingface-cli login
перед запуском веб-приложения. Если вам не нужна Llama 2, просто удалите модели meta-llama
из config.py.
? Развертывание с помощью Gunicorn. В продакшене мы рекомендуем использовать Gunicorn вместо сервера разработки Flask:
gunicorn app:app --bind 0.0.0.0:5000 --worker-class gthread --threads 100 --timeout 1000
Чат использует API WebSocket под капотом.
Серверная часть предоставляет две конечные точки API:
/api/v2/generate
)/api/v1/...
)По возможности используйте API WebSocket — он намного быстрее, мощнее и потребляет меньше ресурсов.
Если вы разрабатываете собственное веб-приложение, вы можете использовать нашу конечную точку по https://chat.petals.dev/api/...
для исследований и разработок, а затем настроить свой собственный бэкэнд для производства, используя приведенные выше команды.
Примечание. Мы не рекомендуем использовать конечную точку
https://chat.petals.dev/api/...
в рабочей среде. Его пропускная способность ограничена, и мы можем приостановить или остановить его в любой момент.
Если вы используете сервер только с процессором, вам потребуется достаточно оперативной памяти для встраивания всех моделей (см. таблицу ниже).
Если ваш процессор поддерживает AVX512, встраивания будут загружены в 16-битном режиме, в противном случае они будут загружены в 32-битном режиме (= в 2 раза больше памяти). Это связано с тем, что умножение 16-битных весов без AVX512 происходит медленно и может привести к замедлению на 1–2 секунды на токен. Поддержка AVX512 доступна на последних процессорах Intel Xeon (например, на капельках DigitalOcean с выделенным процессором).
Если вы используете сервер графического процессора, вам потребуется достаточно памяти графического процессора для встраивания всех моделей. Вложения будут загружены в 16-битном формате.
Вам не обязательно обслуживать все модели. Если вам недостаточно памяти, удалите некоторые модели в config.py.
Модельная семья | Встраивает в 16-битную версию | Встраивает в 32-битную версию |
---|---|---|
Лама 2 (70Б, 70Б-Чат), Лама-65Б, Гуанако-65Б | 1,05 ГБ | 2,1 ГБ |
БЛУМ-176Б, БЛУМЗ-176Б | 7,19 ГБ | 14,38 ГБ |
/api/v2/generate
)Этот API подразумевает, что вы открываете соединение WebSocket и обмениваетесь запросами и ответами в кодировке JSON. Это можно сделать с любого языка программирования.
Этот код открывает сеанс вывода с моделью Stabilityai/StableBeluga2, отправляет приглашение «Кот сидел» и производит выборку новых токенов, пока общая длина не достигнет 30 токенов. Выборка производится при температуре = 0,6 и top_p = 0,9.
const ws = new WebSocket ( `wss://chat.petals.dev/api/v2/generate` ) ;
ws . onopen = ( ) => {
const prompt = "A cat sat on" ;
const maxLength = 30 ;
ws . send ( JSON . stringify ( {
type : "open_inference_session" , model : "stabilityai/StableBeluga2" , max_length : maxLength
} ) ) ;
ws . send ( JSON . stringify ( {
type : "generate" , inputs : prompt , max_length : maxLength , do_sample : 1 , temperature : 0.6 , top_p : 0.9
} ) ) ;
ws . onmessage = event => {
const response = JSON . parse ( event . data ) ;
if ( response . ok ) {
if ( response . outputs === undefined ) {
console . log ( "Session opened, generating..." ) ;
} else {
console . log ( "Generated: " + prompt + response . outputs ) ;
ws . close ( ) ;
}
} else {
console . log ( "Error: " + response . traceback ) ;
ws . close ( ) ;
}
} ;
} ;
? Используете Python в Linux/macOS? Вместо этого рассмотрите возможность запуска собственного клиента Petals. Таким образом, вы можете подключиться к рою напрямую (без этой конечной точки API) и даже выполнить тонкую настройку.
Запросы должны следовать этому протоколу:
Первый запрос должен иметь тип open_inference_session и включать следующие параметры:
Примечания:
Запрос:
{ type : "open_inference_session" , max_length : 1024 }
Ответ:
{ ok : true } // If successful
{ ok : false , traceback : "..." } // If failed
Следующие запросы должны иметь тип генерирования и включать те же параметры, что и в HTTP API /api/v1/generate. В отличие от HTTP API, вы можете использовать этот API в потоковом режиме, генерируя ответ токен за токеном и принимая промежуточные запросы от пользователя (например, для создания чат-бота).
Новой функцией API WebSocket является параметр stop_sequence
(str, необязательный). Если вы установите его, сервер продолжит генерацию с теми же параметрами, если он не сгенерирует stop_sequence
, поэтому вы можете получить несколько ответов без необходимости повторно отправлять запрос и ждать задержки обратного пути.
Промежуточные ответы содержат поле stop: false
, а последний ответ содержит stop: true
. Например, вы можете установить max_new_tokens: 1
и получать токены один за другим, как только они будут сгенерированы. Ознакомьтесь с кодом внешнего интерфейса чата, чтобы получить подробный пример того, как это сделать.
Запрос:
{ type : "generate" , "inputs" : "A cat in French is "" , "max_new_tokens" : 3 }
Ответ (один или несколько):
{ ok : true , outputs : "chat"." , stop : true } // If successful
{ ok : false , traceback : "..." } // If failed
/api/v1/...
)Параметры:
Параметры генерации (совместимы с .generate() из Transformers):
0
(по умолчанию), выполняется жадная генерация. Если 1
, выполняется выборка с параметрами, указанными ниже.Примечания:
max_length
, либо max_new_tokens
.do_sample=0
(по умолчанию).do_sample=1, temperature=0.6, top_p=0.9
.Возвращает (JSON):
ok == False
Пример (завиток):
$ curl -X POST " https://chat.petals.dev/api/v1/generate " -d " model=meta-llama/Llama-2-70b-chat-hf " -d " inputs=Once upon a time, " -d " max_new_tokens=20 "
{ " ok " :true, " outputs " : " there was a young woman named Sophia who lived in a small village nestled in the rolling hills " }