oss-gate / workshop

OSSの開発に未参加または参加したことはあるけどまだ自信がない人を後押しするワークショップ用のリポジトリー
124 stars 547 forks source link

OSS Gate Workshop: Tokyo: 2024-09-21: kamakiri1192: SBV2-API: Work log #1883

Closed kamakiri1192 closed 2 months ago

kamakiri1192 commented 2 months ago

This is a work log of a "OSS Gate workshop". "OSS Gate workshop" is an activity to increase OSS developers. Here's been discussed in Japanese. Thanks.

作業ログ作成時の説明

以下のテンプレートを埋めてタイトルに設定します。埋め方例はスクロールすると見えてきます。

OSS Gate Workshop: ${LOCATION}: ${YEAR}-${MONTH}-${DAY}: ${ACCOUNT_NAME}: ${OSS_NAME}: Work log

タイトル例↓:

OSS Gate Workshop: Tokyo: 2017-01-16: kou: Rabbit: Work log

OSS Gateワークショップ関連情報

kamakiri1192 commented 2 months ago

リポジトリGitHub: https://github.com/tuna2134/sbv2-api ライセンス: MITライセンス https://github.com/tuna2134/sbv2-api/blob/main/LICENSE

PythonのAIのTTS(読み上げ)機能のプロジェクトをもとにRustで書き直したプロジェクト

kamakiri1192 commented 2 months ago

READMEをわかりやすくする事を目標にする。

一旦、環境を構築してつまづいたポイントなどをまとめる。

kamakiri1192 commented 2 months ago

README通りに進めると、docker/run_cpu.sh から起動した際に起動できない。

envファイルの配置位置がシェルと同一ディレクトリにある想定になっているが、READMEに記載されていないため。

kamakiri1192 commented 2 months ago

macのarm系cpuに対応していない。 ベースとなった元のプロジェクトではintel非対応・armのみ対応なので、起動時の回避策が記載されていると丁寧。

docker $ ./run_cpu.sh
Unable to find image 'ghcr.io/tuna2134/sbv2-api:cpu' locally
cpu: Pulling from tuna2134/sbv2-api
docker: no matching manifest for linux/arm64/v8 in the manifest list entries.
See 'docker run --help'.
kamakiri1192 commented 2 months ago

一旦ChatGPTに聞いてみて、いくつか方法があるようです。

一旦時間があまりないので、使用したことのあるplatformで対応

ChatGPT 4o の回答 ### 方法 1: `--platform` フラグを使用する `docker run` または `docker pull` コマンドに `--platform` フラグを指定することで、x86_64(amd64)アーキテクチャのイメージをARMシステムで実行することができます。 ```sh docker run --platform linux/amd64 ghcr.io/tuna2134/sbv2-api:cpu ``` あるいは[`docker pull --platform`フラグを使用して画像を先に引き出してから、実行することもできます。] ```sh docker pull --platform linux/amd64 ghcr.io/tuna2134/sbv2-api:cpu docker run ghcr.io/tuna2134/sbv2-api:cpu ``` ただし、これはエミュレーションを使用するため、パフォーマンスが低下する可能性がある事に注意してください。 ### 方法 2: buildx を使用して、イメージを新しいアーキテクチャ用に再構築する Dockerの `buildx` を使用して、イメージをARMアーキテクチャに合わせて再構築することができます。まず `buildx` を有効にする必要があります。 ```sh # Docker Buildx を有効にする docker run --rm --privileged docker/binfmt:a7996909642ee92942dcd6cff44b9b95f08dad64 # Buildx ビルダーを作成 docker buildx create --use # イメージを再構築 docker buildx build --platform linux/arm64 -t ghcr.io/tuna2134/sbv2-api:cpu . ``` この方法は、イメージが公開されている場合には少し複雑かもしれませんが、自分でホストする場合には非常に有効です。 ### 方法 3: マルチアーキテクチャのスタブを作成する もしDockerイメージがマルチアーキテクチャをサポートしている場合、 `docker manifest` を使用して、特定のアーキテクチャ用のスタブを作成することができます。 ```sh docker manifest create ghcr.io/tuna2134/sbv2-api:latest --amend ghcr.io/tuna2134/sbv2-api:cpu docker manifest annotate ghcr.io/tuna2134/sbv2-api:latest ghcr.io/tuna2134/sbv2-api:cpu --arch arm64 docker manifest push ghcr.io/tuna2134/sbv2-api:latest ``` これで、 `docker run` コマンドで最新イメージが適切なアーキテクチャでプルされるようになります。 以上の方法で試してみてください。場合によっては、イメージの作成者に連絡して、ARMアーキテクチャに対応する正しいイメージを提供してもらうことも考慮してください。
kamakiri1192 commented 2 months ago

platformで対応した。起動はしているようだ。 ただ、おそらくプロジェクト内のコード側のエラーでクラッシュしている。

sbv2-api $ docker run --platform linux/amd64 -it --rm -p 3001:3000 --name sbv2 \
-v ./models:/work/models --env-file .env \
ghcr.io/tuna2134/sbv2-api:cpu
Error: No such file or directory (os error 2)

追記: modelファイルを配置すれば解決した。

kamakiri1192 commented 2 months ago

arm mac向けの回避策をreadmeに記載するPRはしても良さそう。 ただ根本的な対策ではないので、取り込まれるかは不明。

kamakiri1192 commented 2 months ago

Error: No such file or directory (os error 2)

具体的に何のファイルやディレクトリが見つからなかったのか、コンソール上でも確認できると丁寧。

kamakiri1192 commented 2 months ago

起動したが、動作しない。 envでログレベル変更できそうなので、debugに変更。

.env

BERT_MODEL_PATH=models/deberta.onnx
MODEL_PATH=models/tsukuyomi.sbv2
MODELS_PATH=models
TOKENIZER_PATH=models/tokenizer.json
ADDR=localhost:3001
#RUST_LOG=warn
RUST_LOG=debug

rustのログレベルの記事: https://qiita.com/fujitayy/items/590145c0f4b4e7d06de7 rustのログレベルは小文字表記らしい。

起動コマンド

sbv2-api $ docker run --platform linux/amd64 -it --rm -p 3001:3001 --name sbv2 \
-v ./models:/work/models --env-file .env \
ghcr.io/tuna2134/sbv2-api:cpu
kamakiri1192 commented 2 months ago

起動はしているようだ。

[2024-09-21T05:54:23Z INFO  sbv2_api] Loaded: tsukuyomi
[2024-09-21T05:54:23Z INFO  sbv2_api] Listening on localhost:3001

dokcerのネットワーク系の問題の可能性がある 参考: https://qiita.com/wang_chang/items/b6ea4294215f1b34cc07

kamakiri1192 commented 2 months ago

こちらもenvで書き換えできるようになっていたので、試しに変更してみる。

BERT_MODEL_PATH=models/deberta.onnx
MODEL_PATH=models/tsukuyomi.sbv2
MODELS_PATH=models
TOKENIZER_PATH=models/tokenizer.json
#ADDR=localhost:3001
ADDR=0.0.0.0:3001
#RUST_LOG=warn
RUST_LOG=debug

env変更前

sbv2-api $ curl http://localhost:3001
curl: (56) Recv failure: Connection reset by peer
sbv2-api $ curl http://0.0.0.0:3001
curl: (56) Recv failure: Connection reset by peer

env変更後

sbv2-api $ curl http://localhost:3001
Hello, World!%
sbv2-api $ curl http://0.0.0.0:3001
Hello, World!%

応答は返ってるようになった

kamakiri1192 commented 2 months ago

モデル一覧APIとTTSでの音声ファイルの生成APIの動作確認済み。

sbv2-api $ curl http://localhost:3001/models

["tsukuyomi"]%
sbv2-api $ curl -X POST -H "Content-type: application/json" -d '{"text": "こんにちは","ident": "tsukuyomi"}' 'http://localhost:3001/synthesize' --output "output.wav"
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  164k  100  164k  100    48  65687     18  0:00:02  0:00:02 --:--:-- 65696
kamakiri1192 commented 2 months ago

動作確認までできたので、issueとPRに載せる文章を作成する。

README: https://github.com/tuna2134/sbv2-api


docker run --platform linux/amd64 -it --rm -p 3000:3000 --name sbv2 \ -v ./models:/work/models --env-file .env \ ghcr.io/tuna2134/sbv2-api:cpu



- ネットワーク 0.0.0.0 の問題は表記方法を検討する
  - おそらく、linux上などのdockerなど環境によっては動作する可能性があるため
  サンプルのenvを変更する形だと問題が発生する可能性がある。macでしか検証できていないので、もう少し調査してみる。
kamakiri1192 commented 2 months ago

ネットワーク 0.0.0.0 の問題

kamakiri1192 commented 2 months ago

ネットワーク 0.0.0.0 の問題は表記方法を検討する

kamakiri1192 commented 2 months ago
kamakiri1192 commented 2 months ago

こんな感じ?

Apple Silicon搭載のMac(M1以降)の場合 docker上で動作させる場合、.envのADDRをlocalhostから0.0.0.0に変更してください。 ```yaml ADDR=0.0.0.0:3000 ``` CPUの場合 ```bash docker run --platform linux/amd64 -it --rm -p 3000:3000 --name sbv2 \ -v ./models:/work/models --env-file .env \ ghcr.io/tuna2134/sbv2-api:cpu ```
kamakiri1192 commented 2 months ago

PR作成済み https://github.com/tuna2134/sbv2-api/pull/50

github-actions[bot] commented 2 months ago

おつかれさまでした!

ワークショップの終了にともないissueを閉じますが、このまま作業メモとして使っても構いません :ok_hand:

ワークショップの感想を集めています!

ブログなどに書かれた際は、このページへリンクの追加をお願いします :pray:

またの参加をお待ちしています!