最近 AI 語音克隆技術越來越熱門,但大多數方案都需要昂貴的 GPU 來跑。如果你跟我一樣,手上只有一台 Proxmox VE(PVE)伺服器,沒有 GPU 直通,該怎麼辦?
這篇文章要帶你在 PVE 的 LXC 容器裡,完全依靠 CPU 跑起來 MOSS-TTS-Nano——一個僅 0.1B 參數的輕量級語音合成模型。不需要 GPU、不需要複雜設定,四核心 CPU 就能流暢運行。
什麼是 MOSS-TTS-Nano?
MOSS-TTS-Nano 是一個開源的語音克隆(Voice Cloning)模型,由 OpenMOSS 團隊開發。它的 ONNX 版本特別適合 CPU 環境,因為:
- 零 GPU 依賴:移除了 PyTorch,改用 ONNX Runtime 進行推理
- 體積極小:僅 0.1B 參數,記憶體佔用極低
- 語音克隆:只需一段參考音檔,就能複製指定人的聲音
- OpenAI 格式相容:透過 bridge.py 可以偽裝成標準 TTS API,直接給 SillyTavern 用
簡單來說,它讓你用最低的成本,體驗最完整的語音克隆功能。
前置準備
硬體需求
| 項目 | 最低要求 | 建議值 |
|---|---|---|
| CPU | 4 核心 | 4 核心以上 |
| 記憶體 | 4 GB | 8 GB |
| 硬碟 | 20 GB | 20 GB 以上 |
| GPU | 不需要 | 不需要 |
作業系統
建議使用 Ubuntu 22.04 LTS 或 24.04 LTS 作為 LXC 容器的作業系統。
你需要的東西
- 一台已安裝好 PVE 的伺服器
- SSH 連線工具(如 Terminal、iTerm2、Windows 終端機)
- 一段你想複製的聲音音檔(wav / mp3 / flac 皆可,越清晰越好)
第一步:建立 LXC 容器並進入環境
在 PVE 管理介面建立一個新的 LXC 容器,選擇 Ubuntu 22.04 或 24.04 的 template。資源分配參考上面的表格即可。
容器建立完成後,進入 PVE 管理介面的「Console」,準備開始安裝。
第二步:安裝 SSH 與 Samba(方便傳輸檔案)
這一步不是必須的,但強烈建議。有了 SSH 和 Samba,你就可以從自己的電腦直接連線到容器,不用每次都回到 PVE 的 Console 操作。
安裝 SSH
apt update
apt install openssh-server -y
編輯設定檔:
nano /etc/ssh/sshd_config
找到 PermitRootLogin 這一行,把前面的 # 刪除,並把值改成 yes:
存檔後重啟 SSH 服務:
systemctl restart ssh
systemctl enable ssh
安裝 Samba(Windows 用戶專用)
如果你常用 Windows,裝 Samba 後可以直接在檔案總管存取容器內的檔案,非常方便。
apt update
apt install samba -y
編輯設定檔:
nano /etc/samba/smb.conf
滾動到檔案最底部,貼上這段設定:
[LXC_Root]
comment = Warning: Full System Access
path = /
browseable = yes
read only = no
guest ok = yes
force user = root
重啟 Samba 服務:
systemctl restart smbd nmbd
之後在 Windows 的檔案總管輸入 \\192.168.88.6\LXC_Root(替換成你的容器 IP),就能愉快地上傳音檔和修改設定檔了。
第三步:修正時區與中文亂碼
設定時區
timedatectl
timedatectl set-timezone Asia/Taipei
date
date 指令應該會顯示類似 Mon May 4 08:21:22 CST 2026 的結果,代表時區設定成功。
安裝中文語系支援
apt install locales -y
sed -i -e 's/# en_US.UTF-8 UTF-8/en_US.UTF-8 UTF-8/' /etc/locale.gen
sed -i -e 's/# zh_TW.UTF-8 UTF-8/zh_TW.UTF-8 UTF-8/' /etc/locale.gen
locale-gen
update-locale LANG=en_US.UTF-8
設定完後需要重新登入才會生效。輸入 exit 離開 SSH 連線,然後重新連線。
第四步:安裝 Miniconda 與 Python 環境
MOSS-TTS-Nano 需要 Python 3.12,我們用 Conda 來管理虛擬環境,這樣不會跟系統其他套件打架。
# 更新系統並安裝必要工具
apt update && apt upgrade -y
apt install -y git curl wget build-essential nano
# 下載並安裝 Miniconda
mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
# 載入 Conda 基礎環境
source ~/miniconda3/bin/activate
執行完後,你的終端機提示字元前面應該會出現 (base),代表 Conda 已經就緒。
接受 Conda 條款並建立虛擬環境
因為 Anaconda 政策更新,需要先同意服務條款:
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/main
conda tos accept --override-channels --channel https://repo.anaconda.com/pkgs/r
然後建立虛擬環境:
conda create -n moss-tts-nano python=3.12 -y
conda activate moss-tts-nano
看到提示字元變成 (moss-tts-nano) 就代表環境切換成功了。
第五步:下載專案與安裝相依套件(關鍵步驟)
這一步的順序很重要,尤其是 pynini 這個套件,必須透過 conda-forge 安裝,否則會因為 C++ 編譯報錯。
# 下載官方專案
git clone https://github.com/OpenMOSS/MOSS-TTS-Nano.git
cd MOSS-TTS-Nano
# 【最重要的一步】透過 conda-forge 安裝 pynini
conda install -c conda-forge pynini=2.1.6.post1 -y
# 安裝 WeTextProcessing
pip install git+https://github.com/WhizZest/WeTextProcessing.git
# 安裝剩餘依賴
pip install -r requirements.txt
# 安裝專案本身(注意最後面有一個小數點)
pip install -e .
💡 小提醒:
requirements.txt會自動下載含 NVIDIA CUDA 的 PyTorch,檔案較大是正常的。沒有 GPU 的話會自動切換為 CPU 模式,不影響功能。- 出現
Running pip as the 'root' user的 WARNING 可以直接忽略,因為運行在獨立 LXC 及 Conda 環境中,十分安全。
第六步:修改綁定 IP(讓區網內其他電腦也能用)
預設情況下,MOSS-TTS-Nano 的 Web 介面只允許在本機(127.0.0.1)連線。如果你想從其他電腦的瀏覽器打開它,需要修改綁定 IP。
編輯啟動檔案:
nano app_onnx.py
用方向鍵捲動到檔案最底部,找到類似這行:
uvicorn.run(app, host="127.0.0.1", port=18083)
把 "127.0.0.1" 改成 "0.0.0.0":
uvicorn.run(app, host="0.0.0.0", port=18083)
按 Ctrl + O、Enter 存檔,然後 Ctrl + X 離開。
第七步:啟動服務!
確認目前處於 (moss-tts-nano) 環境下,執行:
python app_onnx.py
初次啟動
第一次啟動時,程式會自動從 Hugging Face 下載 ONNX 模型檔案到 ./models 目錄。終端機會看起來「卡住」一段時間,請耐心等待,這取決於你的網路速度。
啟動成功
當終端機顯示:
就代表啟動成功了!在區網內的任何電腦打開瀏覽器,輸入 http://你的容器IP:18083,就能看到 Web 介面了。
第八步:上傳語音檔進行語音克隆
要使用語音克隆功能,你需要準備一段參考音檔:
- 音檔格式:wav / mp3 / flac / ogg / m4a 皆可
- 建議長度:10 秒到 1 分鐘,語音清晰、背景雜音少
- 將音檔上傳到
MOSS-TTS-Nano/voices/目錄下 - 檔名就是你之後在 Web 介面要使用的 voice name
例如你把音檔命名為 myvoice.wav,在 Web 介面的 voice 欄位就輸入 myvoice。
進階:Bridge API(給 SillyTavern 玩家)
如果你是用 SillyTavern(酒館)做角色扮演,MOSS-TTS-Nano 提供了一個 bridge.py,可以把模型偽裝成 OpenAI TTS 的格式,讓酒館直接調用,不需要額外插件。
Bridge API 的內建功能很強大:
- OpenAI 格式相容:提供
/v1/audio/speech端點,酒館原生支援 - RP 文本清洗:自動過濾
<Time:...>標籤和*動作描述*,確保只唸出對白 - 發音字典矯正:讀取
corrections.txt,用同音字替換修正模型唸錯的字音 - 自動繁轉簡:用 OpenCC 將繁體轉為簡體,獲得更精準的發音
- 自動卸載:30 分鐘未使用自動卸載模型,釋放記憶體
啟動 Bridge API
python bridge.py
預設監聽 0.0.0.0:8000。在 SillyTavern 的 TTS 設定中,選擇 OpenAI TTS,填入:
- API Base URL:
http://你的容器IP:8000/v1 - API Key:任意字串即可(如
moss-tts) - Model:
moss-tts-nano - Voice:你的音檔名稱
發音字典矯正
編輯 corrections.txt,格式為 原詞 = 替換詞:
修改後需要重啟服務才會生效。
第九步:用 Systemd 自動化管理(開機自啟)
每次重開機都要手動輸入一堆指令很麻煩?用 systemd 把它變成系統服務,開機自動啟動,日常維護也更方便。
建立服務檔
nano /etc/systemd/system/moss-tts.service
貼上以下內容(請確認路徑正確):
[Unit]
Description=MOSS-TTS-Nano Bridge API Service
After=network.target
[Service]
Type=simple
User=root
WorkingDirectory=/root/MOSS-TTS-Nano
ExecStart=/root/miniconda3/envs/moss-tts-nano/bin/python bridge.py
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
啟用服務
# 重新載入系統設定
systemctl daemon-reload
# 啟動服務並設定開機自啟
systemctl enable --now moss-tts.service
日常維護指令
| 需求 | 指令 |
|---|---|
| 查看即時 Log | journalctl -u moss-tts.service -f |
| 查看服務狀態 | systemctl status moss-tts.service |
| 重啟服務 | systemctl restart moss-tts.service |
| 停止服務 | systemctl stop moss-tts.service |
💡 小提醒:修改
corrections.txt後,記得執行systemctl restart moss-tts.service,新規則才會生效!
常見問題
Q:啟動後終端機顯示「卡住」,是當機了嗎?
不一定。初次啟動時模型下載需要時間,這屬於正常現象。如果下載完成後還是卡住,檢查:
- 網路是否能連上 Hugging Face
./models目錄是否已存在模型檔案
Q:沒有 GPU,語音合成速度會很慢嗎?
4 核心 CPU 的串流速度大約在可接受範圍。如果需要更快的速度,可以考慮提升 CPU 核心數,或者換用 GPU 版本。
Q:Web 介面從其他電腦打不開?
確認你已經修改了 app_onnx.py 中的 host 為 "0.0.0.0",並且防火牆沒有阻擋對應的 port。
Q:模型唸某個字音唸錯了怎麼辦?
使用 corrections.txt 發音字典功能,把發音錯誤的字用同音字替換。例如:
Q:記憶體不夠用怎麼辦?
MOSS-TTS-Nano 的 30 分鐘自動卸載機制會幫你釋放記憶體。如果還是覺得不夠,可以減少其他容器的資源分配,或者增加 LXC 容器的記憶體限制。
總結
透過這篇文章,我們完成了:
- ✅ 在 PVE LXC 中建立 Ubuntu 環境
- ✅ 安裝 SSH 和 Samba 方便管理
- ✅ 設定時區和中文語系
- ✅ 用 Conda 建立 Python 3.12 虛擬環境
- ✅ 安裝 MOSS-TTS-Nano 及其相依套件
- ✅ 修改綁定 IP 讓區網內其他電腦可訪問
- ✅ 啟動 Web 介面並上傳語音檔
- ✅ 設定 Bridge API 給 SillyTavern 使用
- ✅ 用 systemd 實現開機自啟和自動化維護
整個流程不需要 GPU,4 核心 CPU + 4GB 記憶體就能跑起來。如果你剛好有一台閒置的 PVE 伺服器,現在就可以動手試試看了!
有任何問題歡迎留言討論。祝語音克隆愉快 🎙️