見出し画像

Qwen3-TTS テキスト読み上げAPIサーバを立ち上げる

もうね、WindowsからLinuxに変えようかな。

大体、最近のAI関係のものって、基本的にはLinuxで動かすもんなんじゃないかな。どの説明読んでも、大体Linuxベースで書かれていて、Windowsでもできますよって感じになっている。


さて、Qwen3-TTSっていう読み上げソフトがあって、それをAPIサーバにして、OpenWebUIとかでアクセスできるようにした備忘録のようなものです。


Qwen3-TTSについては、こちらで紹介されています。


前回、SillyTavernの読み上げをVOICEVOXを使ってできるようにしてみたんだけど、いかにもテキストを読み上げていますって感じで、いまいちでした。


しかし、時代は音声も生成する世の中になっているんですね。



じゃあやってみようってことですが、Windowsではなかなかうまくいかないものだったので、記録しておきます。


まず、レポジトリはこちら。


これを、Dockerで立ち上げてサーバにします。


Pythonは3.12にしてください。

わが家は3.14になっていたので、それでかなり苦戦しました。



それから、たぶんSoXは入っていないと思うので、これをインストールしてパスを通しておく必要もあります。

設定で「環境変数」って検索すれば、システムのプロパティが出てくるので、そこのPathに、C:\Program Files (x86)\sox-14-4-2 を追加する。



Flash Attention 2 っていうのもあるといいみたいだけど、Windowsではホイールがないと難しそうで、うちの環境にあうホイールは見つからなかったので、そこはスルー。無くても動きました。




さて、さくっと動くなら、

# Build and run with GPU support
docker build -t qwen3-tts-api .
docker run --gpus all -p 8880:8880 qwen3-tts-api

# Or use Docker Compose for easier management
docker-compose up qwen3-tts-gpu

これのどちらかですぐに動くはずです。


まずは、コンポーズでやってみました。

あ、まずは、適当なフォルダで git clone です。

git clone https://github.com/groxaxo/Qwen3-TTS-Openai-Fastapi
cd Qwen3-TTS-Openai-Fastapi


そして、

docker-compose up qwen3-tts-gpu

すんなりインストールされて、Dockerで動いているように見えました。


しかし、http://localhost:8880/ にアクセスしてもサーバが見つかりません。

色々サイトを駆け回り、調べましたが解りません。



で、コンポーズは諦めて、ビルドからやることにしました。


docker build -t qwen3-tts-api .
docker run --gpus all -p 8880:8880 qwen3-tts-api

ここでも、なかなかうまく行かず、ここでPython3.14をアンインストールして、3.12にダウングレードしました。


すると、最後までいって、http://localhost:8880/ にもアクセスできて、DEMO画面が表示されたのですが、GPUが認識されていません。

CPUでは動きましたが、激重でした。


これの原因はCUDA12.1が想定されているようなのですが、わが家は13.1なのが問題のようです。



で、次の手段として、vLLM-omniを使う方法。こっちの方が速いらしいし。

# Build vLLM-enabled image
docker build -t qwen3-tts-api:vllm --target vllm-production .
docker run --gpus all -p 8880:8880  -e TTS_BACKEND=vllm_omni  -e TTS_WARMUP_ON_START=true  qwen3-tts-api:vllm

# Or use Docker Compose
docker-compose --profile vllm up qwen3-tts-vllm

この2択です。

ビルドでやってみます。

docker build -t qwen3-tts-api:vllm --target vllm-production .

しかし、ログを見ていると、途中でvLLM-omniのインストールに失敗している様子です。


DockerFile.vllmというファイルがあるので、これを使うようにしてビルドします。

docker build -f Dockerfile.vllm -t qwen3-tts-api:vllm .

--target vllm-production を残したままだと、Dockerfile.vllmの記述にそんなターゲットは無いとエラーが出たので消しました。



ビルドが完了したら、

docker run --gpus all -p 8880:8880  -e TTS_BACKEND=vllm_omni  -e TTS_WARMUP_ON_START=true  qwen3-tts-api:vllm

で、実行します。



http://localhost:8880/ にアクセスしてDEMO画面が表示されればOKです。

そのまま生成をスタートすれば、流暢な英語の音声が流れました。


「Hello! Welcome to Qwen3-TTS, a powerful text-to-speech system. This is an example of synthesized speech.」



テキストを日本語にしてみます。

「こんにちは!強力なテキスト読み上げシステム、Qwen3-TTSへようこそ。これは合成音声のサンプルです。」

Voiceは「Vivian」のままで生成してみます。




我ながらよく頑張ったので、褒めてもらおうと思います。




「Yuki さん、Qwen3-TTS のインストールお疲れさまでした。よく頑張りましたね。この note もきっと誰かの役に立ちますよ。」

かなり片言な感じですね。




スクリプトを書いて、モデルを日本語に指定してみます。

from openai import OpenAI

client = OpenAI(
    base_url="http://localhost:8880/v1",
    api_key="not-needed"
)

response = client.audio.speech.create(
    model="tts-1-hd-ja",
    voice="Vivian",
    input="Yuki さん、Qwen3-TTS のインストールお疲れさまでした。よく頑張りましたね。この note もきっと誰かの役に立ちますよ。"
)

response.write_to_file("output.mp3")

print("音声ファイルを保存しました")


どうかな。

まだ、ちょっと片言ですね。まぁいいです。Vivianありがとう。




Voiceをono_annaにしてみます。

さすが、日本語ネイティブです。annaありがとう。






では、後はAPIサーバとして接続するので、OpenWebUIなどで、

OpenAI
http://host.docker.internal:8880/v1
key: key (なんでもいい)
Voice:ono_anna
Model:tts-1-hd-ja

とか設定すればOKです。localhostではなく、host.docker.internal なところが注意です。




ではまた。

いいなと思ったら応援しよう!