From d788c254d38ff8327983065ac59ac25331423fea Mon Sep 17 00:00:00 2001 From: Googlefan Date: Thu, 12 Sep 2024 07:04:25 +0000 Subject: [PATCH] feat: tutorial --- README.md | 94 ++++++++++++++++++++++++++++++----------------- convert/README.md | 36 ++++++++++++++++++ 2 files changed, 96 insertions(+), 34 deletions(-) create mode 100644 convert/README.md diff --git a/README.md b/README.md index 0e78ac2..f196c80 100644 --- a/README.md +++ b/README.md @@ -1,57 +1,44 @@ -# sbv2-api +# SBV2-API -このプロジェクトは Style-Bert-ViTS2 を ONNX 化したものを Rust で実行するのを目的としています。 +## プログラミングに詳しくない方向け -学習したい場合は、Style-Bert-ViTS2 学習方法 などで調べるとよいかもしれません。 +[こちら](https://github.com/tuna2134/sbv2-gui?tab=readme-ov-file)を参照してください。 + +コマンドやpythonの知識なしで簡単に使えるバージョンです。(できることはほぼ同じ) + +## このプロジェクトについて + +このプロジェクトは Style-Bert-ViTS2 を ONNX 化したものを Rust で実行するのを目的としたライブラリです。 JP-Extra しか対応していません。(基本的に対応する予定もありません) -## ONNX 化する方法 +## 変換方法 -```sh -cd convert -# (何かしらの方法でvenv作成(推奨)) -pip install -r requirements.txt -python convert_deberta.py -python convert_model.py --style_file ../../style-bert-vits2/model_assets/something/style_vectors.npy --config_file ../../style-bert-vits2/model_assets/something/config.json --model_file ../../style-bert-vits2/model_assets/something/something_eXXX_sXXXX.safetensors -``` +[こちら](https://github.com/tuna2134/sbv2-api/tree/main/convert)を参照してください。 ## Todo -- [x] WebAPI の実装 +- [x] REST API の実装 - [x] Rust ライブラリの実装 -- [ ] 余裕があれば PyO3 使って Python で利用可能にする -- [x] GPU 対応(優先的に CUDA) -- [ ] WASM 変換(ort がサポートやめたので、中止) +- [x] `.sbv2`フォーマットの開発 +- [ ] PyO3 を利用し、 Python から使えるようにする +- [x] GPU 対応(CUDA) +- [x] GPU 対応(DirectML) +- [ ] WASM 変換(依存ライブラリの関係により現在は不可) ## 構造説明 - `sbv2_api` - 推論用 REST API - `sbv2_core` - 推論コア部分 - `docker` - docker ビルドスクリプト +- `convert` - onnx, sbv2フォーマットへの変換スクリプト -## API の起動方法 - -```sh -cargo run -p sbv2_api -r -``` - -### CUDA での起動 - -```sh -cargo run -p sbv2_api -r -F cuda,cuda_tf32 -``` - -### Dynamic Link サポート - -```sh -ORT_DYLIB_PATH=./libonnxruntime.dll cargo run -p sbv2_api -r -F dynamic -``` +## プログラミングある程度できる人向けREST API起動方法 ### models をインストール https://huggingface.co/googlefan/sbv2_onnx_models/tree/main -の中身を models フォルダに配置 +の`tokenizer.json`,`debert.onnx`,`tsukuyomi.sbv2`を models フォルダに配置 ### .env ファイルの作成 @@ -59,13 +46,52 @@ https://huggingface.co/googlefan/sbv2_onnx_models/tree/main cp .env.sample .env ``` -### テストコマンド +### 起動 + +CPUの場合は +```sh +docker run -it --rm -p 3000:3000 --name sbv2 \ +-v ./models:/work/models --env-file .env \ +ghcr.io/tuna2134/sbv2-api:cpu +``` + +CUDAの場合は +```sh +docker run -it --rm -p 3000:3000 --name sbv2 \ +-v ./models:/work/models --env-file .env \ +--gpus all \ +ghcr.io/tuna2134/sbv2-api:cuda +``` + +### 起動確認 ```sh curl -XPOST -H "Content-type: application/json" -d '{"text": "こんにちは","ident": "tsukuyomi"}' 'http://localhost:3000/synthesize' --output "output.wav" curl http://localhost:3000/models ``` +## 開発者向けガイド + +### Feature flags + +`sbv2_api`、`sbv2_core`共に +- `cuda` featureでcuda +- `cuda_tf32` featureでcudaのtf32機能 +- `tensorrt` featureでbert部分のtensorrt利用 +- `dynamic` featureで手元のonnxruntime共有ライブラリを利用(`ORT_DYLIB_PATH=./libonnxruntime.dll`などで指定) +- `directml` featureでdirectmlの利用 +ができます。 + +### 環境変数 + +以下の環境変数はライブラリ側では適用されません。 + +ライブラリAPIについては`https://docs.rs/sbv2_core`を参照してください。 + +- `ADDR` `localhost:3000`などのようにサーバー起動アドレスをコントロールできます。 +- `MODELS_PATH` sbv2モデルの存在するフォルダを指定できます。 +- `RUST_LOG` おなじみlog levelです。 + ## 謝辞 - [litagin02/Style-Bert-VITS2](https://github.com/litagin02/Style-Bert-VITS2) - このコードの書くにあたり、ベースとなる部分を参考にさせていただきました。 diff --git a/convert/README.md b/convert/README.md new file mode 100644 index 0000000..3dbf86d --- /dev/null +++ b/convert/README.md @@ -0,0 +1,36 @@ +# 変換方法 + +## 初心者向け準備 + +わかる人は飛ばしてください。 + +1. pythonを入れます。3.11.8で動作確認をしていますが、最近のバージョンなら大体動くはずです。 + +4. `cd convert` + +3. `python -m venv venv` + +4. `source venv/bin/activate` + +5. `pip install -r requirements.txt` + +## モデル変換 + +1. 変換したいモデルの`.safetensors`で終わるファイルの位置を特定してください。 + +2. 同様に`config.json`、`style_vectors.npy`というファイルを探してください。 + +3. 以下のコマンドを実行します。 +```sh +python convert_model.py --style_file "ここにstyle_vectors.npyの場所" --config_file "同様にconfig.json場所" --model_file "同様に.safetensorsで終わるファイルの場所" +``` + +4. `models/名前.sbv2`というファイルが出力されます。GUI版のモデルファイルに入れてあげたら使えます。 + +## Deberta変換 + +意味が分からないならおそらく変換しなくてもいいってことです。 + +venvを用意し、requirementsを入れて、`python convert_model.py`を実行するだけです。 + +`models/deberta.onnx`と`models/tokenizer.json`が出力されたら成功です。 \ No newline at end of file