自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

在 Hugging Face 上部署語(yǔ)音轉(zhuǎn)語(yǔ)音模型

發(fā)布于 2025-3-17 02:32
瀏覽
0收藏

介紹
S2S (語(yǔ)音到語(yǔ)音) 是 Hugging Face 社區(qū)內(nèi)存在的一個(gè)令人興奮的新項(xiàng)目,它結(jié)合了多種先進(jìn)的模型,創(chuàng)造出幾乎天衣無縫的體驗(yàn): 你輸入語(yǔ)音,系統(tǒng)會(huì)用合成的聲音進(jìn)行回復(fù)。

該項(xiàng)目利用 Hugging Face 社區(qū)中的 Transformers 庫(kù)提供的模型實(shí)現(xiàn)了流水話處理。該流程處理由以下組件組成:

聲音活動(dòng)檢測(cè) (VAD)
語(yǔ)音識(shí)別 (STT)
語(yǔ)言模型 (LLM)
文本轉(zhuǎn)語(yǔ)音 (TTS)
除此之外,S2S 項(xiàng)目支持多語(yǔ)言!目前支持英語(yǔ)、法語(yǔ)、西班牙語(yǔ)、中文、日語(yǔ)和韓語(yǔ)。您可以使用單語(yǔ)言模式運(yùn)行此流程或通過 auto 標(biāo)志進(jìn)行語(yǔ)言自動(dòng)檢測(cè)。請(qǐng)查看 這里 的倉(cāng)庫(kù)獲取更多詳情。

?????這些都是很棒的功能,但我該如何運(yùn)行 S2S 呢?
??: 很好的問題!
運(yùn)行語(yǔ)音轉(zhuǎn)語(yǔ)音項(xiàng)目需要大量的計(jì)算資源。即使在高端筆記本電腦上,你也可能會(huì)遇到延遲問題,特別是在使用最先進(jìn)的模型時(shí)。雖然強(qiáng)大的 GPU 可以緩解這些問題,但并不是每個(gè)人都有條件 (或意愿) 去搭建他們的硬件設(shè)備。

這正是 Hugging Face 的 推理端點(diǎn) (IE) 發(fā)揮作用的地方。推理端點(diǎn)允許您租用帶有 GPU (或其他可能需要的硬件) 的虛擬機(jī),并僅需按系統(tǒng)運(yùn)行時(shí)間付費(fèi),為部署如語(yǔ)音轉(zhuǎn)語(yǔ)音這類大型應(yīng)用提供了理想的解決方案。

在本文中,我們將逐步指導(dǎo)您將 Speech-to-Speech 部署到 Hugging Face 推理端點(diǎn)上。以下是主要內(nèi)容:

理解推理端點(diǎn),并快速了解設(shè)置 IE 的不同方式,包括自定義容器鏡像 (這正是我們需要用于 S2S 的)
構(gòu)建適用于 S2S 的自定義 Docker 鏡像
將自定義鏡像部署到 IE 并盡情體驗(yàn) S2S!
推理斷點(diǎn)
推理端點(diǎn)提供了一種可擴(kuò)展且高效的方式部署機(jī)器學(xué)習(xí)模型。這些端點(diǎn)允許您在最少設(shè)置的情況下利用各種強(qiáng)大的硬件用模型提供服務(wù)。推理端點(diǎn)非常適合需要高性能和高可靠性的應(yīng)用程序部署,而無需管理底層基礎(chǔ)設(shè)施。

以下是幾個(gè)關(guān)鍵功能,請(qǐng)查閱文檔獲取更多信息:

簡(jiǎn)潔性 - 由于 IE 直接支持 Hugging Face 庫(kù)中的模型,您可以在幾分鐘內(nèi)快速上手。
可擴(kuò)展性 - 您無需擔(dān)心規(guī)模問題,因?yàn)?IE 可以自動(dòng)擴(kuò)展 (包括縮小規(guī)模到零),以應(yīng)對(duì)不同的負(fù)載并節(jié)省成本。
自定義 - 您可以根據(jù)需要自定義 IE 的設(shè)置來處理新任務(wù)。更多詳情請(qǐng)參見下方內(nèi)容。
推理端點(diǎn)支持所有 Transformers 和 Sentence-Transformers 任務(wù),也可以支持自定義任務(wù)。這些是 IE 設(shè)置選項(xiàng):

預(yù)構(gòu)建模型: 直接從 Hugging Face 樞紐快速部署模型。
自定義處理器: 為更復(fù)雜的流程任務(wù)自定義推理邏輯。
自定義 Docker 映像: 使用您自己的 Docker 映像封裝所有依賴項(xiàng)和自定義代碼。
對(duì)于簡(jiǎn)單的模型,選項(xiàng) 1 和 2 是理想的選擇,并且可以使用推理端點(diǎn)部署變得極其簡(jiǎn)單。然而,對(duì)于像 S2S 這樣的復(fù)雜流程任務(wù)來說,您將需要選項(xiàng) 3 提供的靈活性: 通過自定義 Docker 鏡像部署我們的 IE。

這種方法不僅提供了更多的靈活性,還通過優(yōu)化構(gòu)建過程并收集必要的數(shù)據(jù)提高了性能。如果您正在處理復(fù)雜的模型流程任務(wù)或希望優(yōu)化應(yīng)用程序的部署,請(qǐng)參考本指南以獲得有價(jià)值的見解。

在推理端點(diǎn)上部署語(yǔ)音轉(zhuǎn)語(yǔ)音模型
讓我們開始吧!

構(gòu)建自定義 Docker 鏡像
為了開始創(chuàng)建一個(gè)自定義的 Docker 鏡像,我們首先克隆了 Hugging Face 的標(biāo)準(zhǔn) Docker 鏡像倉(cāng)庫(kù)。這為在推理任務(wù)中部署機(jī)器學(xué)習(xí)模型提供了一個(gè)很好的起點(diǎn)。

git clone https://github.com/huggingface/huggingface-inference-toolkit
為什么克隆默認(rèn)鏡像倉(cāng)庫(kù)?
堅(jiān)實(shí)的基礎(chǔ): 倉(cāng)庫(kù)提供了專門為推理工作負(fù)載優(yōu)化的基礎(chǔ)鏡像,這為可靠地開始推理任務(wù)提供了一個(gè)牢固的基礎(chǔ)。
兼容性: 由于該鏡像是按照與 Hugging Face 部署環(huán)境對(duì)齊的方式構(gòu)建的,因此在部署您自己的自定義鏡像時(shí)可以確保無縫集成。
易于定制化: 倉(cāng)庫(kù)提供了干凈且結(jié)構(gòu)化的環(huán)境,使得為應(yīng)用程序的具體要求定制鏡像變得容易。
您可以查看所有更改內(nèi)容 在這里

為語(yǔ)音識(shí)別應(yīng)用自定義 Docker 鏡像
克隆了倉(cāng)庫(kù)后,下一步是根據(jù)我們的語(yǔ)音識(shí)別流程需求來調(diào)整鏡像。

添加語(yǔ)音到語(yǔ)音項(xiàng)目
為了無縫集成該項(xiàng)目,我們添加了語(yǔ)音轉(zhuǎn)語(yǔ)音識(shí)別的代碼庫(kù)以及所需的任何數(shù)據(jù)集作為子模塊。這種方法提供了更好的版本控制能力,在構(gòu)建 Docker 鏡像時(shí)可以確保始終使用正確的代碼和數(shù)據(jù)版本。

通過將數(shù)據(jù)直接包含在 Docker 容器中,我們避免了每次實(shí)例化端點(diǎn)時(shí)都需要下載數(shù)據(jù),這顯著減少了啟動(dòng)時(shí)間并確保系統(tǒng)可重復(fù)。這些數(shù)據(jù)被存儲(chǔ)在一個(gè) Hugging Face 倉(cāng)庫(kù)中,提供了易于跟蹤和版本控制的功能。

git submodule add https://github.com/huggingface/speech-to-speech.git
git submodule add https://huggingface.co/andito/fast-unidic
優(yōu)化 Docker 鏡像
接下來,我們修改了 Dockerfile 文件來滿足我們的需求:

精簡(jiǎn)鏡像: 移除了與用例無關(guān)的軟件包和依賴項(xiàng)。這減少了鏡像大小,并在推理過程中降低了不必要的消耗。
安裝依賴項(xiàng): 我們將requirements.txt 的安裝從入口點(diǎn)移動(dòng)到了 Dockerfile 本身。這樣,當(dāng)構(gòu)建 Docker 鏡像時(shí)會(huì)安裝這些依賴項(xiàng),從而加快部署速度,因?yàn)檫\(yùn)行時(shí)將不需要再次安裝這些包。
部署自定義鏡像
完成修改后,我們構(gòu)建并推送了自定義鏡像到 Docker Hub:

DOCKER_DEFAULT_PLATFORM=“l(fā)inux/amd64” docker build -t speech-to-speech -f dockerfiles/pytorch/Dockerfile .
docker tag speech-to-speech andito/speech-to-speech:latest
docker push andito/speech-to-speech:latest
Docker 鏡像構(gòu)建并推送后,就可以在 Hugging Face 推理端點(diǎn)中使用了。通過使用這個(gè)預(yù)構(gòu)建的鏡像,端點(diǎn)可以更快地啟動(dòng)并且運(yùn)行得更高效,因?yàn)樗幸蕾図?xiàng)和數(shù)據(jù)都已預(yù)先打包在鏡像中。

設(shè)置推理端點(diǎn)
使用自定義 Docker 鏡像只需稍微不同的配置,您可以點(diǎn)擊并查看 文檔。我們將通過圖形界面和 API 調(diào)用兩種方式來介紹如何做到這一點(diǎn)。

前置步驟

登錄: https://huggingface.co/login
請(qǐng)求訪問 meta-llama/Meta-Llama-3.1-8B-Instruct
創(chuàng)建細(xì)粒度令牌: https://huggingface.co/settings/tokens/new?tokenType=fineGrained
Fine-Grained Token

選擇訪問受限制的倉(cāng)庫(kù)權(quán)限
如果您正在使用 API,請(qǐng)確保選擇管理推理端點(diǎn)的權(quán)限
推斷端點(diǎn) GUI
訪問 https://ui.endpoints.huggingface.co/new
填寫相關(guān)信息:
模型倉(cāng)庫(kù) - andito/s2s
模型名稱 - 如果不喜歡生成的名稱,可以自由重命名
例如: speech-to-speech-demo
保持小寫字母且簡(jiǎn)短
選擇您偏好的云和硬件配置 - 我們使用了 AWS GPU L4
只需每小時(shí) $0.80,足夠用來處理模型
高級(jí)配置 (點(diǎn)擊展開箭頭 ?)
容器類型 - Custom
容器端口 - 80
容器 URL - andito/speech-to-speech:latest
密鑰 – HF_TOKEN |<您的令牌在這里>
點(diǎn)擊展示圖片步驟
點(diǎn)擊 創(chuàng)建終端節(jié)點(diǎn)
[!NOTE] 實(shí)際上模型倉(cāng)庫(kù)并不重要,因?yàn)槟P蜁?huì)在容器創(chuàng)建時(shí)指定和下載。但是推理終端節(jié)點(diǎn)需要一個(gè)模型,所以你可以選擇你喜歡的一個(gè)較輕量級(jí)的。

[!NOTE] 你需要指定 HF_TOKEN 因?yàn)槲覀冃枰谌萜鲃?chuàng)建階段下載受限制訪問的模型。如果你使用的是未受限或私有的模型,則不需要這樣做。

[!WARNING] 當(dāng)前 huggingface-inference-toolkit 入口點(diǎn) 默認(rèn)使用的是端口 5000,但推理終端節(jié)點(diǎn)期望的端口號(hào)是 80。你應(yīng)該在 容器端口 中匹配這一點(diǎn)。我們已經(jīng)在 Dockerfile 中設(shè)置了這個(gè)值,但如果從零開始構(gòu)建,請(qǐng)務(wù)必注意!

推理端點(diǎn) API
在這里,我們將逐步介紹創(chuàng)建帶有 API 的端點(diǎn)步驟。只需在您選擇的 Python 環(huán)境中使用以下代碼。

確保使用版本 0.25.1 或更高版本

pip install huggingface_hub>=0.25.1
使用一個(gè)可以寫入端點(diǎn) (Write 或 細(xì)粒度權(quán)限) 的 Hugging Face 令牌

from huggingface_hub import login
login()
from huggingface_hub import create_inference_endpoint, get_token
endpoint = create_inference_endpoint(
# Model Configuration
“speech-to-speech-demo”,
repository=“andito/s2s”,
framework=“custom”,
task=“custom”,
# Security
type=“protected”,
# Hardware
vendor=“aws”,
accelerator=“gpu”,
region=“us-east-1”,
instance_size=“x1”,
instance_type=“nvidia-l4”,
# Image Configuration
custom_image={
“health_route”: “/health”,
“url”: “andito/speech-to-speech:latest”, # Pulls from DockerHub
“port”: 80
},
secrets={‘HF_TOKEN’: get_token()}
)

Optional

endpoint.wait()
預(yù)覽
Overview

主要組件

語(yǔ)音轉(zhuǎn)語(yǔ)音
這是一個(gè) Hugging Face 庫(kù),我們?cè)?inference-endpoint 分支中加入了一些特定于推理端點(diǎn)的文件,該分支很快將合并到主分支。
andito/s2s 或其他任何倉(cāng)庫(kù)。這對(duì)我們來說不是必需的,因?yàn)槲覀円呀?jīng)在容器創(chuàng)建階段包含了模型,但推理端點(diǎn)需要一個(gè)模型,所以我們傳遞了一個(gè)瘦身后的倉(cāng)庫(kù)。
andimarafioti/語(yǔ)音轉(zhuǎn)語(yǔ)音工具包
這是 huggingface/huggingface-inference-toolkit 的分支,幫助我們構(gòu)建符合我們需求的自定義容器。
構(gòu)建 web 服務(wù)器
為了使用端點(diǎn),我們需要構(gòu)建一個(gè)小的 WebService 服務(wù)。這部分代碼位于 speech_to_speech 庫(kù) 中的 s2s_handler.py 以及我們用于客戶端的 speech_to_speech_inference_toolkit 工具包 中的 webservice_starlette.py ,后者被用來構(gòu)建 Docker 鏡像。通常情況下,你只需要為端點(diǎn)編寫一個(gè)自定義處理程序即可,但由于我們希望實(shí)現(xiàn)極低的延遲,因此還特別構(gòu)建了支持 WebSocket 連接的 WebService 而不是普通的請(qǐng)求方式。乍一聽起來可能有些令人望而生畏,但這個(gè) WebService 服務(wù)代碼只有 32 行!

Webservice code

這段代碼將在啟動(dòng)時(shí)運(yùn)行 prepare_handler ,這將初始化所有模型并預(yù)熱它們。然后,每個(gè)消息將會(huì)由 inference_handler.process_streaming_data 處理。

Process streaming code

這種方法簡(jiǎn)單地從客戶端接收音頻數(shù)據(jù),將其分割成小塊供 VAD 處理,并提交到隊(duì)列進(jìn)行處理。然后檢查輸出處理隊(duì)列 (模型的語(yǔ)音響應(yīng)!),如果有內(nèi)容則返回。所有的內(nèi)部處理均由 Hugging Face 的 speech_to_speech 庫(kù) 負(fù)責(zé)。

自定義處理程序和客戶端
WebService 接收并返回音頻,但仍然缺少一個(gè)重要的部分: 我們?nèi)绾武浿坪突胤乓纛l?為此,我們創(chuàng)建了一個(gè) 客戶端,用于連接到服務(wù)。最簡(jiǎn)單的方法是將分析分為與 WebService 的連接以及錄音/播放音頻兩部分。

Audio client code

初始化 WebService 客戶端需要為所有消息設(shè)置一個(gè)包含我們 Hugging Face Token 的頭部。在初始化客戶端時(shí),我們需要設(shè)定對(duì)常見消息的操作 (打開、關(guān)閉、錯(cuò)誤、信息)。這將決定當(dāng)服務(wù)器向我們的客戶端發(fā)送消息時(shí),客戶端會(huì)執(zhí)行什么操作。

Audio client messages code

我們可以看到,對(duì)接收到的消息的反應(yīng)非常直接,只有 on_message 方法較為復(fù)雜。該方法能夠理解服務(wù)器完成響應(yīng)后開始“監(jiān)聽”用戶的回復(fù)。否則,它會(huì)將從服務(wù)器接收到的數(shù)據(jù)放入播放隊(duì)列中。

Client’s audio record and playback

客戶的音頻部分有 4 個(gè)任務(wù):

錄制音頻
提交音頻錄制文件
接收服務(wù)器的音頻響應(yīng)
播放音頻響應(yīng)
錄音是在 audio_input_callback 方法中完成的,它只是將所有片段提交到一個(gè)隊(duì)列。然后使用 send_audio 方法將其發(fā)送給服務(wù)器。在此過程中,如果沒有要發(fā)送的音頻,則仍然提交空數(shù)組以從服務(wù)器接收響應(yīng)。我們之前在博客中看到的 on_message 方法處理來自服務(wù)器的響應(yīng)。隨后,音頻響應(yīng)的播放由 audio_output_callback 方法處理。在這里,我們需要確保音頻處于我們預(yù)期的范圍內(nèi) (不希望因?yàn)殄e(cuò)誤的數(shù)據(jù)包而損上某人的耳膜!),并確保輸出數(shù)組的大小符合播放庫(kù)的要求。

結(jié)論
在本文中,我們介紹了如何使用自定義 Docker 鏡像,在 Hugging Face 推斷端點(diǎn)上部署語(yǔ)音到語(yǔ)音 (S2S) 流程的步驟。我們構(gòu)建了一個(gè)定制容器來處理 S2S 流程的復(fù)雜性,并展示了如何對(duì)其進(jìn)行配置以實(shí)現(xiàn)可擴(kuò)展且高效的部署。Hugging Face 推斷端點(diǎn)使得將如語(yǔ)音到語(yǔ)音這類性能密集型應(yīng)用程序變?yōu)楝F(xiàn)實(shí)變得更加容易,無需擔(dān)心硬件或基礎(chǔ)設(shè)施管理的問題。

標(biāo)簽
收藏
回復(fù)
舉報(bào)
回復(fù)
相關(guān)推薦