sbv2-coreml-common / README.md
AILogDev's picture
INT8/float32を並べて選べる配置と取得方法に整理 (#1)
61e8edc
|
Raw History Blame Contribute Delete
6.69 kB
---
license: cc-by-sa-4.0
language: ja
tags: [coreml, style-bert-vits2]
base_model: ku-nlp/deberta-v2-large-japanese-char-wwm
---
[English](README.en.md)
# SBV2 Core ML 共通モデル・辞書
iPhone/Apple Silicon Mac用の共通BERTとOpen JTalk辞書です。
[SDK・サンプルアプリ](https://github.com/Corvelis/sbv2-coreml)と、別配布の[声モデル](https://huggingface.co/AILogDev/sbv2-coreml-jvnv-f1-jp)を合わせて使います。
## 使う版を選ぶ
**INT8版は`int8/`、元のFP32版は`float32/`です。** 各フォルダにBERT・辞書・ライセンス・取得用マニフェストが揃っています。
声モデルは両方で同じものを使えます。
| 版・ファイル一覧 | 共通BERT・辞書 | JVNV込み | 選ぶ目安 | アプリ用マニフェスト |
|---|---:|---:|---|---|
| [INT8](https://huggingface.co/AILogDev/sbv2-coreml-common/tree/973d6e239af305f0d78a8bf30c6af5093c0fd47d/int8) | 約503 MB | 約797 MB | ファイル容量を抑えたい | [INT8版を取得](https://huggingface.co/AILogDev/sbv2-coreml-common/resolve/973d6e239af305f0d78a8bf30c6af5093c0fd47d/int8/download.json) |
| [FP32(float32)](https://huggingface.co/AILogDev/sbv2-coreml-common/tree/973d6e239af305f0d78a8bf30c6af5093c0fd47d/float32) | 約1.52 GB | 約1.81 GB | 重み量子化による数値差を避けたい、準備時間を短くしたい | [FP32版を取得](https://huggingface.co/AILogDev/sbv2-coreml-common/resolve/973d6e239af305f0d78a8bf30c6af5093c0fd47d/float32/download.json) |
INT8版はBERTの重みを8bitで保存します。BERTの演算と入出力は、両版ともFP32です。
iOS 18以上、macOS 15以上のApple Siliconに対応します。コンパイルキャッシュ用に追加の空き容量が必要です。
容量は配布ファイルの概算であり、RAMの削減率を示すものではありません。
## サンプルアプリから取得する
**モデル設定 → URLからモデルを取得 → 取得するモデル:共通モデル**を開き、
**共通モデルの版**で**INT8(約503 MB)**または**FP32(約1.52 GB)**を選び、**ダウンロード**を押します。
取得URLが自動設定されます。カスタムURLで取得する場合やSDKから取得する場合は、次のURLを使えます。
以下はファイル一式の版を固定したURLです。
**INT8版**
```text
https://huggingface.co/AILogDev/sbv2-coreml-common/resolve/973d6e239af305f0d78a8bf30c6af5093c0fd47d/int8/download.json
```
**元のFP32版**
```text
https://huggingface.co/AILogDev/sbv2-coreml-common/resolve/973d6e239af305f0d78a8bf30c6af5093c0fd47d/float32/download.json
```
取得後に**モデルを準備**を押します。声モデルは別途取得するか、自分で変換した声フォルダを選びます。
取得後の音声合成はオフラインで動作します。
## Macで片方だけ取得する
[Hugging Face CLI](https://huggingface.co/docs/huggingface_hub/guides/cli)を使います。
`--include`で選んだ版だけを取得してください。リポジトリ一式の取得では両版と互換用ファイルもダウンロードされます。
**INT8版 → `models/int8/`**
```sh
hf download AILogDev/sbv2-coreml-common \
--revision 973d6e239af305f0d78a8bf30c6af5093c0fd47d \
--include "int8/*" --local-dir models
```
**元のFP32版 → `models/float32/`**
```sh
hf download AILogDev/sbv2-coreml-common \
--revision 973d6e239af305f0d78a8bf30c6af5093c0fd47d \
--include "float32/*" --local-dir models
```
サンプルの**共通モデル**には、取得した`int8/`または`float32/`を選びます。
SDKにはそのフォルダの`bert/`と`dictionary/`、別の声フォルダを渡します。
`.mlpackage`の中身を含め、選んだフォルダ全体を取得してください。
## 切り替えと音質・速度
取得済みモデルを切り替えるには、合成・再生を停止し、**共通モデル**で使う版のフォルダを選び、**モデルを準備**を押します。
フォルダ表示にINT8/FP32の版も表示します。取得欄での版選択だけでは、準備済みモデルは切り替わりません。
SDKでは処理の終了を待ってから、選んだ共通フォルダで`load`と`warmUp`を行います。
古いモデルとキャッシュは自動削除されません。不要な共通フォルダを削除する場合はアプリを終了するかSDKで`unload`し、共用する声フォルダは保持します。
| iPhone 17 Pro・JVNV Neutralの測定例 | INT8版 | 元のFP32版 |
|---|---:|---:|
| コンパイル済みキャッシュがある再ロード後の準備(`load`+`warmUp`) | 約18秒 | 約6秒 |
| 準備後の3文合成RTF中央値 | 0.071 | 0.067 |
初回コンパイル、再生時間、LLMとの同時実行は含みません。声・文章・端末で値は変わり、INT8版が常に高速になるわけではありません。
BERTの量子化によって抑揚・間・音声の長さ・波形に差が生じる場合があります。声モデルの重みと辞書は変更しません。
JVNV Neutralの比較音声では聴き比べで気になる差はありませんでした。採用する声と文章でも確認してください。
[SDK導入](https://github.com/Corvelis/sbv2-coreml/blob/main/docs/sdk-guide.ja.md) ·
[サンプルの起動](https://github.com/Corvelis/sbv2-coreml/blob/main/docs/getting-started.ja.md) ·
[自分で共通BERTを圧縮する](https://github.com/Corvelis/sbv2-coreml/blob/main/docs/compression.ja.md)
## 以前の取得URL
以前の固定リビジョンの取得URLは引き続き使えます。ルートの`download.json`・`bert/`・`dictionary/`は既存URLの互換用INT8モデルです。
これから取得する場合は、上の選択表から`int8/`または`float32/`を選んでください。
## 出典とライセンス
BERTは京都大学の自然言語処理研究グループによる[DeBERTa日本語モデル](https://huggingface.co/ku-nlp/deberta-v2-large-japanese-char-wwm)からの変換物です。
原本のコミットは`547b0e8b044fba3f9b84d0ab9f990440bd130c8b`です。
BERTは**CC BY-SA 4.0**です。各版の`LICENSE.md`、出典と変換記録の`provenance.json`を参照してください。
Open JTalk 1.11 UTF-8辞書には別のBSD系条件があり、各版の`dictionary/COPYING`に記載しています。
各版の`checksums.json`でファイルを検証できます。SDK・サンプル・変換ツールのコードは**AGPL-3.0**です。
非公式の変換物であり、原作者による承認・推奨を示すものではありません。