在 Hugging Face 推論端點上部署 Speech-to-Speech

Hugging Face 推出了一種在推論端點上使用自訂 Docker 映像部署其 Speech-to-Speech (S2S) 管線的方法。此方式讓開發者能夠透過可擴展的 GPU 基礎設施,在不管理底層硬體的情況下,以低延遲執行計算密集的多模型管線。

Speech-to-Speech (S2S) 管線

Speech-to-Speech 專案使用 Transformers 套件中的模型實作了一個級聯管線。系統讓使用者說話後,透過四個主要元件收到合成語音回應:

  1. 語音活動偵測 (VAD)
  2. 語音轉文字 (STT)
  3. 語言模型 (LM)
  4. 文字轉語音 (TTS)

此管線支援英語、法語、西班牙語、中文、日語與韓語,並包含 auto 旗標以自動偵測語言。

透過自訂 Docker 映像部署

由於 S2S 需要大量計算資源,Hugging Face 建議使用自訂 Docker 映像的推論端點 (IE),而非預建模型或自訂處理程式。此方法透過將所有相依性與資料封裝於映像中,最佳化效能。

建置自訂映像

要建立部署映像,首先需要克隆 huggingface-inference-toolkit 倉庫,以建立推論工作負載的預先最佳化基礎。自訂過程包括:

  • 整合程式碼與資料:將 S2S 程式碼基礎與所需資料集(例如 fast-unidic)以 git 子模組方式加入。直接在容器中包含資料可減少啟動時間,因為不必在端點實例化時下載資料集。
  • 簡化相依性:修改 Dockerfile,移除不相關的套件,並將 requirements.txt 的安裝從入口點移至建置階段,確保相依性在執行前已預先安裝。

部署設定

自訂映像可透過推論端點的 GUI 或 API 部署。主要設定需求包括:

  • 硬體:建議使用 AWS GPU L4 實例(每小時約 $0.80)。
  • 容器設定:容器埠必須設定為 80,以符合推論端點的預期,因為預設工具包入口點使用 5000 埠。
  • 安全性:必須提供 HF_TOKEN 作為機密,以允許容器下載受限模型,例如 Meta-Llama-3.1-8B-Instruct。

低延遲的技術架構

為了達成低延遲,部署使用自訂的 Web 伺服器與專用客戶端,而非標準 HTTP 請求。

WebSocket Web 伺服器

此 Web 伺服器使用 Starlette 實作,支援 WebSocket 連線以串流音訊。伺服器在啟動時執行 prepare_handler 以初始化與暖機模型。運作期間,inference_handler.process_streaming_data 方法接收音訊,將其切割供 VAD 使用,並管理佇列以處理與回傳合成語音回應。

音訊串流客戶端

專用客戶端負責使用者硬體與 Web 伺服器之間的介面。其職責分為四個主要任務:

  1. 錄音:透過 audio_input_callback 捕捉音訊,並將切片提交至佇列。
  2. 送出:使用 send_audio 方法將音訊傳送至伺服器。
  3. 接收:透過 on_message 方法接收伺服器回應,判斷伺服器是否已完成回應,或是否需將更多資料加入播放佇列。
  4. 播放:使用 audio_output_callback 播放音訊回應,確保音量在安全範圍內,以免損壞硬體。

Sources