聊天機器人 Web 應用程式 + HTTP 和 WebSocket 端點,用於透過 Petals 用戶端進行 LLM 推理
您可以在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,然後在啟動 Web 應用程式之前在終端機中執行huggingface-cli login
。如果您不需要 Llama 2,只需從 config.py 中刪除meta-llama
模型即可。
?使用 Gunicorn 進行部署。在生產中,我們建議使用gunicorn而不是Flask開發伺服器:
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 - 它更快、更強大且消耗更少的資源。
如果您開發自己的 Web 應用程序,則可以使用我們的端點https://chat.petals.dev/api/...
進行研究和開發,然後使用上述命令設定您自己的後端以進行生產。
注意:我們不建議在生產中使用
https://chat.petals.dev/api/...
的端點。它的吞吐量有限,我們可能隨時暫停或停止它。
如果您使用僅包含 CPU 的伺服器,則需要足夠的 RAM 來適應所有模型的嵌入(請參閱下表)。
如果您的 CPU 支援 AVX512,則嵌入將以 16 位元加載,否則將以 32 位元加載(= 2 倍記憶體)。這是因為在沒有 AVX512 的情況下乘以 16 位元權重很慢,並且可能會導致 1-2 秒/令牌的減速。 AVX512 支援可在最新的 Intel Xeon CPU 上使用(例如,在具有專用 CPU 的 DigitalOcean Droplet 上)。
如果您使用 GPU 伺服器,則需要足夠的 GPU 記憶體來適應所有模型的嵌入。嵌入將以 16 位元載入。
您不必為所有模型提供服務。如果你沒有足夠的內存,請刪除config.py中的一些模型。
模範家庭 | 嵌入 16 位 | 嵌入 32 位 |
---|---|---|
Llama 2(70B、70B-聊天)、Llama-65B、Guanaco-65B | 1.05GB | 2.1GB |
BLOOM-176B、BLOOMZ-176B | 7.19GB | 14.38GB |
/api/v2/generate
)此 API 意味著您開啟 WebSocket 連線並交換 JSON 編碼的請求和回應。這可以透過任何程式語言來完成。
此程式碼使用 stableai/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 ( ) ;
}
} ;
} ;
?在 Linux/macOS 上使用 Python?請考慮執行本機 Petals 用戶端。這樣,您可以直接連接到 swarm(無需此 API 端點),甚至可以執行微調。
請求必須遵循以下協議:
第一個請求必須是open_inference_session類型並包含以下參數:
筆記:
要求:
{ type : "open_inference_session" , max_length : 1024 }
回覆:
{ ok : true } // If successful
{ ok : false , traceback : "..." } // If failed
下一個請求必須是產生類型,並包含與 /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/...
)參數:
生成參數(與 ? Transformers 中的 .generate() 相容):
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 " }