เว็บแอปแชทบอท + ตำแหน่งข้อมูล 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
- ต้องการเสิร์ฟ Llama 2 หรือไม่? ขอเข้าถึงน้ำหนักได้ที่เว็บไซต์ ♾️ Meta AI และ ? Model Hub จากนั้นเรียกใช้ huggingface-cli login
ในเทอร์มินัลก่อนเริ่มเว็บแอป หากคุณไม่ต้องการ Llama 2 เพียงลบโมเดล meta-llama
ออกจาก config.py
- การปรับใช้กับ Gunicorn ในการผลิต เราแนะนำให้ใช้ gunicorn แทนเซิร์ฟเวอร์ Flask dev:
gunicorn app:app --bind 0.0.0.0:5000 --worker-class gthread --threads 100 --timeout 1000
การแชทใช้ WebSocket API ภายใต้ประทุน
แบ็กเอนด์มีจุดสิ้นสุด API สองจุด:
/api/v2/generate
, แนะนำ)/api/v1/...
)โปรดใช้ WebSocket API เมื่อเป็นไปได้ ซึ่งเร็วกว่ามาก มีประสิทธิภาพมากกว่า และใช้ทรัพยากรน้อยกว่า
หากคุณพัฒนาเว็บแอปของคุณเอง คุณสามารถใช้ตำแหน่งข้อมูลของเราที่ https://chat.petals.dev/api/...
เพื่อการวิจัยและพัฒนา จากนั้นตั้งค่าแบ็กเอนด์ของคุณเองสำหรับการผลิตโดยใช้คำสั่งด้านบน
หมายเหตุ: เราไม่แนะนำให้ใช้ตำแหน่งข้อมูลที่
https://chat.petals.dev/api/...
ในการใช้งานจริง มีปริมาณงานจำกัด และเราอาจหยุดชั่วคราวหรือหยุดเมื่อใดก็ได้
หากคุณใช้เซิร์ฟเวอร์ที่ใช้ CPU เท่านั้น คุณจะต้องมี RAM เพียงพอเพื่อให้พอดีกับการฝังสำหรับทุกรุ่น (ดูตารางด้านล่าง)
หาก CPU ของคุณรองรับ AVX512 การฝังจะถูกโหลดในรูปแบบ 16 บิต มิฉะนั้นจะถูกโหลดในรูปแบบ 32 บิต (= หน่วยความจำเพิ่มขึ้น 2 เท่า) เนื่องจากการเพิ่มน้ำหนัก 16 บิตโดยไม่มี AVX512 นั้นช้าและอาจส่งผลให้ช้าลง 1-2 วินาที/โทเค็น การรองรับ AVX512 มีอยู่ใน CPU Intel Xeon รุ่นใหม่ล่าสุด (เช่น บน DigitalOcean droplets ที่มี CPU เฉพาะ)
หากคุณใช้เซิร์ฟเวอร์ GPU คุณต้องมีหน่วยความจำ GPU เพียงพอเพื่อให้พอดีกับการฝังสำหรับทุกรุ่น การฝังจะถูกโหลดในรูปแบบ 16 บิต
ไม่ต้องเสิร์ฟทุกรุ่น หากคุณมีหน่วยความจำไม่เพียงพอ ให้ลบบางรุ่นใน config.py ออก
ครอบครัวตัวอย่าง | ฝังในรูปแบบ 16 บิต | ฝังในรูปแบบ 32 บิต |
---|---|---|
ลามะ 2 (70B, 70B-แชท), ลามะ-65B, กวานาโค-65B | 1.05GB | 2.1 กิกะไบต์ |
บลูม-176B, บลูมZ-176B | 7.19GB | 14.38GB |
/api/v2/generate
)API นี้บอกเป็นนัยว่าคุณเปิดการเชื่อมต่อ WebSocket และแลกเปลี่ยนคำขอและการตอบกลับที่เข้ารหัส JSON ซึ่งอาจทำจากภาษาโปรแกรมใดก็ได้
โค้ดนี้จะเปิดเซสชันการอนุมานด้วยโมเดล Stabilityai/StableBeluga2 ส่งข้อความแจ้ง "A cat sat on" และสุ่มตัวอย่างโทเค็นใหม่จนกว่าความยาวทั้งหมดจะถึง 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 ดั้งเดิมแทน ด้วยวิธีนี้ คุณสามารถเชื่อมต่อกับ Swarm ได้โดยตรง (โดยไม่ต้องมีจุดสิ้นสุด API นี้) และแม้แต่ทำการปรับแต่งอย่างละเอียดอีกด้วย
คำขอจะต้องเป็นไปตามโปรโตคอลนี้:
คำขอแรกต้องเป็นประเภท open_inference_session และมีพารามิเตอร์เหล่านี้:
หมายเหตุ:
ขอ:
{ type : "open_inference_session" , max_length : 1024 }
การตอบสนอง:
{ ok : true } // If successful
{ ok : false , traceback : "..." } // If failed
คำขอถัดไปต้องเป็นประเภท create และมีพารามิเตอร์เดียวกันกับใน /api/v1/generate HTTP API ตรงกันข้ามกับ HTTP API คุณสามารถใช้ API นี้ในการสตรีม โดยสร้างโทเค็นการตอบกลับทีละโทเค็น และยอมรับข้อความแจ้งระดับกลางจากผู้ใช้ (เช่น เพื่อสร้างแชทบอท)
คุณสมบัติใหม่ของ WebSocket API คือพารามิเตอร์ 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 " }