Aplikasi web chatbot + HTTP dan titik akhir WebSocket untuk inferensi LLM dengan klien Petals
Anda dapat mencobanya di https://chat.petals.dev atau menjalankan backend di server Anda menggunakan perintah berikut:
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
? Ingin menyajikan Llama 2? Minta akses ke bobotnya di situs web ♾️ Meta AI dan ? Model Hub, lalu jalankan huggingface-cli login
di terminal sebelum memulai aplikasi web. Jika Anda tidak menginginkan Llama 2, hapus saja model meta-llama
dari config.py.
? Menerapkan dengan Gunicorn. Dalam produksi, kami merekomendasikan penggunaan gunicorn daripada server dev Flask:
gunicorn app:app --bind 0.0.0.0:5000 --worker-class gthread --threads 100 --timeout 1000
Obrolan menggunakan WebSocket API di balik terpal.
Backend menyediakan dua titik akhir API:
/api/v2/generate
, disarankan)/api/v1/...
)Silakan gunakan WebSocket API jika memungkinkan - ini jauh lebih cepat, lebih kuat, dan menggunakan lebih sedikit sumber daya.
Jika Anda mengembangkan aplikasi web Anda sendiri, Anda dapat menggunakan titik akhir kami di https://chat.petals.dev/api/...
untuk penelitian dan pengembangan, lalu siapkan backend Anda sendiri untuk produksi menggunakan perintah di atas.
Catatan: Kami tidak menyarankan penggunaan titik akhir di
https://chat.petals.dev/api/...
dalam produksi. Throughputnya terbatas, dan kami dapat menjeda atau menghentikannya kapan saja.
Jika Anda menggunakan server khusus CPU, Anda memerlukan RAM yang cukup agar sesuai dengan embeddings untuk semua model (lihat tabel di bawah).
Jika CPU Anda mendukung AVX512, embeddings akan dimuat dalam 16-bit, jika tidak maka embeddings akan dimuat dalam 32-bit (= memori 2x lebih banyak). Hal ini karena mengalikan bobot 16-bit tanpa AVX512 lambat dan dapat menyebabkan perlambatan 1-2 detik/token. Dukungan AVX512 tersedia pada CPU Intel Xeon versi terbaru (misalnya, pada Droplet DigitalOcean dengan CPU khusus).
Jika Anda menggunakan server GPU, Anda memerlukan memori GPU yang cukup agar sesuai dengan penyematan semua model. Embeddings akan dimuat dalam 16-bit.
Anda tidak harus melayani semua model. Jika Anda tidak memiliki cukup memori, hapus beberapa model di config.py.
Keluarga teladan | Sematkan dalam 16-bit | Sematkan dalam 32-bit |
---|---|---|
Llama 2 (70B, 70B-Obrolan), Llama-65B, Guanaco-65B | 1,05 GB | 2,1 GB |
BLOOM-176B, BLOOMZ-176B | 7,19 GB | 14,38 GB |
/api/v2/generate
)API ini menyiratkan bahwa Anda membuka koneksi WebSocket dan bertukar permintaan dan tanggapan yang dikodekan JSON. Ini dapat dilakukan dari bahasa pemrograman apa pun.
Kode ini membuka sesi inferensi dengan model stableai/StableBeluga2, mengirimkan prompt "A cat sat on", dan mengambil sampel token baru hingga panjang total mencapai 30 token. Pengambilan sampel dilakukan dengan suhu = 0,6 dan 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 ( ) ;
}
} ;
} ;
? Menggunakan Python di Linux/macOS? Harap pertimbangkan untuk menjalankan klien Petals asli. Dengan cara ini, Anda dapat terhubung ke gerombolan secara langsung (tanpa titik akhir API ini) dan bahkan menjalankan penyesuaian.
Permintaan harus mengikuti protokol ini:
Permintaan pertama harus bertipe open_inference_session dan menyertakan parameter berikut:
Catatan:
Meminta:
{ type : "open_inference_session" , max_length : 1024 }
Tanggapan:
{ ok : true } // If successful
{ ok : false , traceback : "..." } // If failed
Permintaan berikutnya harus bertipe generate dan menyertakan parameter yang sama seperti pada API HTTP /api/v1/generate. Berbeda dengan API HTTP, Anda dapat menggunakan API ini dalam mode streaming, menghasilkan respons token demi token, dan menerima perintah perantara dari pengguna (misalnya, untuk membuat chatbot).
Fitur baru dari WebSocket API adalah parameter stop_sequence
(str, opsional). Jika Anda menyetelnya, server akan melanjutkan pembuatan dengan parameter yang sama kecuali server menghasilkan stop_sequence
, sehingga Anda bisa mendapatkan beberapa respons tanpa harus mengirim permintaan lagi dan menunggu latensi bolak-balik.
Respons perantara berisi bidang stop: false
, dan respons terakhir berisi stop: true
. Misalnya, Anda dapat menyetel max_new_tokens: 1
dan menerima token satu per satu, segera setelah dibuat. Lihat kode frontend obrolan untuk contoh mendetail tentang cara melakukannya.
Meminta:
{ type : "generate" , "inputs" : "A cat in French is "" , "max_new_tokens" : 3 }
Respon (satu atau beberapa):
{ ok : true , outputs : "chat"." , stop : true } // If successful
{ ok : false , traceback : "..." } // If failed
/api/v1/...
)Parameter:
Parameter pembangkitan (kompatibel dengan .generate() dari ? Transformers):
0
(default), jalankan generasi serakah. Jika 1
, lakukan pengambilan sampel dengan parameter di bawah ini.Catatan:
max_length
atau max_new_tokens
.do_sample=0
(default).do_sample=1, temperature=0.6, top_p=0.9
.Pengembalian (JSON):
ok == False
Contoh (ikal):
$ 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 " }