メインコンテンツへスキップ
見出し画像

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 なところが注意です。




    ではまた。

     
     

    Yuki

     
     
    最近はComfyUIで、メカニカルガールとかCyberpunkとか描いてます。

    あなたへのおすすめ