Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Dockerイメージで起動したEngineに対して/add_presetにPOSTすると500 Internal Server Errorになってしまう #1451

Open
2 of 3 tasks
saitetu opened this issue Jul 27, 2024 · 4 comments
Labels

Comments

@saitetu
Copy link

saitetu commented Jul 27, 2024

不具合の内容

 docker run --rm -it -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-ubuntu20.04-latest

にて起動し、以下のcurlを叩くと500エラーが返ってきてしまいます。

curl -X 'POST' \
 'http://localhost:50021/add_preset' \
 -H 'accept: application/json' \
 -H 'Content-Type: application/json' \
 -d '{
   "id": 2,
   "name": "サンプルプリセット",
   "speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
   "style_id": 0,
   "speedScale": 1,
   "pitchScale": 0,
   "intonationScale": 1,
   "volumeScale": 1,
   "prePhonemeLength": 0.1,
   "postPhonemeLength": 0.1,
   "pauseLength": null,
   "pauseLengthScale": 1
}'

内容はデフォルトプリセットからID以外変更していないおりません。
また、swaggerに用意されているサンプルリクエスト含め、パラメータを変えるなど様々試してみましたが、全て500エラーとなりました。

なお、Docker以外では同じリクエストでも問題なく動作するため、バグではないかと思いご報告させていただきました。

現象・ログ

INFO:     Started server process [1]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://0.0.0.0:50021 (Press CTRL+C to quit)
INFO:     172.17.0.1:65490 - "GET /docs HTTP/1.1" 200 OK
INFO:     172.17.0.1:56646 - "POST /add_preset HTTP/1.1" 500 Internal Server Error

再現手順

 docker run --rm -it -p '127.0.0.1:50021:50021' voicevox/voicevox_engine:cpu-ubuntu20.04-latest

で起動後に、

curl -X 'POST' \
 'http://localhost:50021/add_preset' \
 -H 'accept: application/json' \
 -H 'Content-Type: application/json' \
 -d '{
   "id": 2,
   "name": "サンプルプリセット",
   "speaker_uuid": "7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff",
   "style_id": 0,
   "speedScale": 1,
   "pitchScale": 0,
   "intonationScale": 1,
   "volumeScale": 1,
   "prePhonemeLength": 0.1,
   "postPhonemeLength": 0.1,
   "pauseLength": null,
   "pauseLengthScale": 1
}'

などの形で/add_presetに対してPOSTを行う

期待動作

登録IDが返ってくること

なお、Dockerではなく、VOICEVOXを通常通りダウンロードした上で同じようにcurlを叩いた場合は問題なく登録できました。

VOICEVOXのバージョン

core_version: 0.15.4
(Engine: latest)

OSの種類/ディストリ/バージョン

  • Windows
  • macOS Sonoma 14.5 (Docker DesktopにてDocker起動後にcurl)
  • Linux (Github actionにてDocker起動後にcurl)

その他

@saitetu saitetu added the バグ label Jul 27, 2024
@Hiroshiba
Copy link
Member

Hiroshiba commented Jul 28, 2024

issue作成ありがとうございます!

おそらくデフォルトのプリセットファイルのパスに書き込み権限がないのだと思われます!
デフォルトのプリセットファイルのパスは現在エンジンパス/preset.yamlです。

アンドキュメントな仕様なのですが、このプリセットファイルのパスを書き込み権限のある場所に変えてあげれば動きました。
とりあえずこうすれば動くと思います!

# ホストのtmpディレクトリに空っぽのプリセットファイルを作る
echo "[]" > /tmp/preset.yaml

# 空っぽのプリセットファイルがdockerコンテナ内で見えるようにしつつ、そのプリセットファイルを指定して起動
docker run \
  --rm \
  -it \
  -p '127.0.0.1:50021:50021' \
  -e VV_PRESET_FILE=/tmp/preset.yaml \
  -v /tmp/preset.yaml:/tmp/preset.yaml \
  voicevox/voicevox_engine:cpu-ubuntu20.04-latest

-eで環境変数VV_PRESET_FILEを指定しています。
-vでホストで作ったプリセットファイルをコンテナ内で見えるようにしています。

ちなみに有効なプリセットファイルにするために空っぽの配列[]を書き込んでいますが、この仕様は将来変わってそもそもファイルを用意しなくてもよくなるかもしれません。

@saitetu
Copy link
Author

saitetu commented Aug 2, 2024

ありがとうございます!
教えていただいた方法で動作しました!

今後の仕様変更で修正されることも承知しました!

@aoirint
Copy link
Member

aoirint commented Aug 3, 2024

Dockerイメージ VOICEVOX/voicevox_engine は、エンジンの実行ユーザがUID:GID=1000:1000となるように構成されているので、
Docker DesktopではないLinux上のDocker Engineで使用する場合(GitHub Actionsなど)は、プリセットファイルの所有者の変更が必要になる場合があるかもしれません。

あらかじめホスト側でプリセットファイルの所有者がUID:GID=1000:1000になっていることを確認して、異なっていれば変更することで書き込めるようになると思います。

$ ls -n /tmp/preset.yaml
-rw-r--r-- 1 1001 1001 3 Aug  3 09:20 /tmp/preset.yaml
             ^UID ^GID

$ sudo chown '1000:1000' /tmp/preset.yaml
              ^UID ^GID

$ ls -n /tmp/preset.yaml
-rw-r--r-- 1 1000 1000 3 Aug  3 09:20 /tmp/preset.yaml
             ^UID ^GID

@Hiroshiba
Copy link
Member

あっ 確かにファイルへの書き込み権限付与しないとですね!!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants