【語音合成技術 - GPT-SoVITS 疑難雜症篇】為什麼api_v2.py在Docker環境底下正常啟動但卻無法連線

【語音合成技術 - GPT-SoVITS 疑難雜症篇】為什麼api_v2.py在Docker環境底下正常啟動但卻無法連線

更新於 發佈於 閱讀時間約 5 分鐘

我們在「【語音合成技術 - GPT-SoVITS】如何架設API伺服器」有分享如何使用Docker來架設GPT-SoVITS的TTS API服務, 但過程中我們卻遇到了一些困難, 相信有深入使用這套TTS服務的朋友應該難免也會遇到這類的問題, 期望透過我們的分享幫助到正在遇到困難的你!


首先我們的docker compose配置檔如下

services:
gpt-sovits-api:
image: breakstring/gpt-sovits:latest # please change the image name and tag base your environment. If the tag contains the word 'elite', such as "latest-elite", it indicates that the image does not include the necessary models such as GPT-SoVITS, UVR5, Damo ASR, etc. You will need to download them yourself and map them into the container.
container_name: gpt-sovits-api
environment:
- is_half=True
- is_share=False
volumes:
...
- ./api_v2.py:/workspace/api_v2.py
command:
- python
- api_v2.py
working_dir: /workspace
ports:
- "9880:9880"
shm_size: 16G
deploy:
resources:
reservations:
devices:
- driver: nvidia
count: "all"
capabilities: [gpu]
stdin_open: true
tty: true
restart: unless-stopped



啟動後的LOG訊息

raw-image


看起來蠻OK的, 接下來我們就來用瀏覽器連線看看。


嘗試連線

我們使用 http://10.85.2.25:9880/tts 來測試連線, 咦! 怎們會是這樣的畫面呢?

raw-image



什麼原因?

uvicorn 綁定 host=127.0.0.1 時,只有容器內部的網路可以訪問該地址。外部無法直接訪問 127.0.0.1,因為這個 IP 只指向容器本身,並不對宿主機公開。要讓外部瀏覽器能夠訪問,請將 host 設置為 0.0.0.0。這樣做會使容器中的應用程序對所有網卡接口公開,包括 Docker 容器的網絡接口,從而允許從宿主機訪問。


怎麼解決?

原來是預設綁定了 127.0.0.1 導致宿主機無法連線, 而我們可以嘗試配置綁定的主機為 0.0.0.0 會對於所有網卡接口打開的狀態, 至於怎麼做呢?


我們先來看看api_v2.py是否提供了參數化的方式進行設定, 如此一來才不用更動到原始碼, 很幸運的是api_v2.py本身的設計就支援綁定host的參數。


我們可以改改docker compose的配置檔, 在command的部份改成這樣:


command:
- python
- api_v2.py
- --bind_addr=0.0.0.0


再次啟動後:

raw-image



雖然仍發生Internal Server Error, 但這是因為我們的API入口錯誤, 至少也已經能夠連入了。

raw-image



結語

雖然只是一個簡單的配置就能夠解決這樣的問題, 但對於背景知識較為薄弱的朋友來說, 或許也會彎彎繞繞一陣子, 期望我們的分享能夠幫助到您!

avatar-img
阿Han的沙龍
127會員
281內容數
哈囉,我是阿Han,是一位 👩‍💻 軟體研發工程師,喜歡閱讀、學習、撰寫文章及教學,擅長以圖代文,化繁為簡,除了幫助自己釐清思路之外,也希望藉由圖解的方式幫助大家共同學習,甚至手把手帶您設計出高品質的軟體產品。
留言
avatar-img
留言分享你的想法!
阿Han的沙龍 的其他內容
我們在「【🤖 cursor AI】如何在ubuntu 24.04安裝」有分享如何在Ubuntu安裝cursro這套AI編輯器, 使用起來大幅度的提昇開發效率, 但仍有些問題點需要克服, 比如說: LLM壓根不知道我們的數據庫長怎樣啊? 怎麼分析結構呢? 假設文檔又不足的狀況下更是艱辛, 如果LLM
我們在「【語音合成技術 - GPT-SoVITS】讓機器說人話的語音生成服務」分享了語音合成技術, 該套GPT-SoVITS也非常的出色, 但效能有點不是非常理想, 加上需要GPU才能達到較佳的體驗, 如此一來成本就會有點高了, 因此我們找了另外一套MeloTTS, 這一套強調CPU推理非常的快!
我們在「【語音合成技術 - GPT-SoVITS】如何架設API伺服器」分享如何架設API V3版本的TTS服務, 但發音的部份似乎只有早期的API版本才使用到g2pw這類的技術, 因此我們可能會需要將API退回舊版, 在這裡我們也整理了早期版本api與api_v2的一些差異, 期望幫助到正在面臨選
我們在「【🤖 cursor AI】如何在ubuntu 24.04安裝」有分享如何在Ubuntu安裝cursro這套AI編輯器, 使用起來大幅度的提昇開發效率, 但仍有些問題點需要克服, 比如說: LLM壓根不知道我們的數據庫長怎樣啊? 怎麼分析結構呢? 假設文檔又不足的狀況下更是艱辛, 如果LLM
我們在「【語音合成技術 - GPT-SoVITS】讓機器說人話的語音生成服務」分享了語音合成技術, 該套GPT-SoVITS也非常的出色, 但效能有點不是非常理想, 加上需要GPU才能達到較佳的體驗, 如此一來成本就會有點高了, 因此我們找了另外一套MeloTTS, 這一套強調CPU推理非常的快!
我們在「【語音合成技術 - GPT-SoVITS】如何架設API伺服器」分享如何架設API V3版本的TTS服務, 但發音的部份似乎只有早期的API版本才使用到g2pw這類的技術, 因此我們可能會需要將API退回舊版, 在這裡我們也整理了早期版本api與api_v2的一些差異, 期望幫助到正在面臨選