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

モデルの数が多いとビルドできない #362

Closed
Hiroshiba opened this issue Jan 3, 2023 · 13 comments · Fixed by #365
Closed

モデルの数が多いとビルドできない #362

Hiroshiba opened this issue Jan 3, 2023 · 13 comments · Fixed by #365
Labels
バグ 要議論 実行する前に議論が必要そうなもの

Comments

@Hiroshiba
Copy link
Member

不具合の内容

モデルの数が多いとビルドに失敗することがわかりました。
再現しようといろいろやってみた感じ、メモリや容量などいろんな原因で落ちえそうでした。

製品版のビルドができないので、どうにかできないか探りたいです。

現象・ログ

条件によって発生するエラーが変わりそうです。とりあえず最低3箇所ほどコケる箇所を見つけました。

ビルド時にメモリ不足エラーになるパターン

条件 build_and_deploy (windows-2019, x86_64-pc-windows-msvc, windows-x64-cuda, cuda, true)
モデル数は10個くらい(製品版)

直前のコマンド
set CARGO=\\?\C:\Users\runneradmin\.rustup\toolchains\1.66.0-x86_64-pc-windows-msvc\bin\cargo.exe&&
set CARGO_CRATE_NAME=voicevox_core&&
set CARGO_MANIFEST_DIR=D:\a\voicevox_core\voicevox_core\crates\voicevox_core&&
set CARGO_PKG_AUTHORS=""&&
set CARGO_PKG_DESCRIPTION=""&&
set CARGO_PKG_HOMEPAGE=""&&
set CARGO_PKG_LICENSE=""&&
set CARGO_PKG_LICENSE_FILE=""&&
set CARGO_PKG_NAME=voicevox_core&&
set CARGO_PKG_REPOSITORY=""&&
set CARGO_PKG_RUST_VERSION=""&&
set CARGO_PKG_VERSION=0.14.0-preview.3&&
set CARGO_PKG_VERSION_MAJOR=0&&
set CARGO_PKG_VERSION_MINOR=14&&
set CARGO_PKG_VERSION_PATCH=0&&
set CARGO_PKG_VERSION_PRE=preview.3&&
set CARGO_WORKSPACE_DIR=D:\a\voicevox_core\voicevox_core\&&
set ORT_OUT_DIR=D:\a\voicevox_core\voicevox_core\target/debug/deps&&
set OUT_DIR=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\build\voicevox_core-b9f66362e93ab750\out&&
set PATH="D:\a\voicevox_core\voicevox_core\target\release\deps;C:\Users\runneradmin\.rustup\toolchains\1.66.0-x86_64-pc-windows-msvc\bin;C:\Users\runneradmin\.rustup\toolchains\1.66.0-x86_64-pc-windows-msvc\bin;C:\Program Files\PowerShell\7;C:\Users\runneradmin\AppData\Roaming\Python\Python38\Scripts;C:\hostedtoolcache\windows\Python\3.8.10\x64\Scripts;C:\hostedtoolcache\windows\Python\3.8.10\x64;C:\Program Files\MongoDB\Server\5.0\bin;C:\aliyun-cli;C:\vcpkg;C:\cf-cli;C:\Program Files (x86)\NSIS\;C:\tools\zstd;C:\Program Files\Mercurial\;C:\hostedtoolcache\windows\stack\2.9.1\x64;C:\cabal\bin;C:\\ghcup\bin;C:\tools\ghc-9.4.2\bin;C:\Program Files\dotnet;C:\mysql\bin;C:\Program Files\R\R-4.2.2\bin\x64;C:\SeleniumWebDrivers\GeckoDriver;C:\Program Files (x86)\sbt\bin;C:\Program Files (x86)\GitHub CLI;C:\Program Files\Git\bin;C:\Program Files (x86)\pipx_bin;C:\npm\prefix;C:\hostedtoolcache\windows\go\1.17.13\x64\bin;C:\hostedtoolcache\windows\Python\3.7.9\x64\Scripts;C:\hostedtoolcache\windows\Python\3.7.9\x64;C:\hostedtoolcache\windows\Ruby\2.5.9\x64\bin;C:\tools\kotlinc\bin;C:\hostedtoolcache\windows\Java_Temurin-Hotspot_jdk\8.0.352-8\x64\bin;C:\Program Files\ImageMagick-7.1.0-Q16-HDRI;C:\Program Files (x86)\Microsoft SDKs\Azure\CLI2\wbin;C:\ProgramData\kind;C:\Program Files\Eclipse Foundation\jdk-8.0.302.8-hotspot\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\System32\OpenSSH\;C:\ProgramData\Chocolatey\bin;C:\Program Files\PowerShell\7\;C:\Program Files\Microsoft\Web Platform Installer\;C:\Program Files\dotnet\;C:\Program Files\Microsoft SQL Server\130\Tools\Binn\;C:\Program Files\Microsoft SQL Server\Client SDK\ODBC\170\Tools\Binn\;C:\Program Files (x86)\Windows Kits\10\Windows Performance Toolkit\;C:\Program Files (x86)\Microsoft SQL Server\110\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\120\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\130\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\140\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn\;C:\Program Files (x86)\Microsoft SQL Server\160\DTS\Binn\;C:\Program Files\OpenSSL\bin;C:\Strawberry\c\bin;C:\Strawberry\perl\site\bin;C:\Strawberry\perl\bin;C:\ProgramData\chocolatey\lib\pulumi\tools\Pulumi\bin;C:\Program Files\TortoiseSVN\bin;C:\Program Files\CMake\bin;C:\ProgramData\chocolatey\lib\maven\apache-maven-3.8.6\bin;C:\Program Files\Microsoft Service Fabric\bin\Fabric\Fabric.Code;C:\Program Files\Microsoft SDKs\Service Fabric\Tools\ServiceFabricLocalClusterManager;C:\Program Files\nodejs\;C:\Program Files\Git\cmd;C:\Program Files\Git\mingw64\bin;C:\Program Files\Git\usr\bin;C:\Program Files\GitHub CLI\;c:\tools\php;C:\Program Files (x86)\sbt\bin;C:\SeleniumWebDrivers\ChromeDriver\;C:\SeleniumWebDrivers\EdgeDriver\;C:\Program Files\Amazon\AWSCLIV2\;C:\Program Files\Amazon\SessionManagerPlugin\bin\;C:\Program Files\Amazon\AWSSAMCLI\bin\;C:\Program Files (x86)\Google\Cloud SDK\google-cloud-sdk\bin;C:\Program Files (x86)\Microsoft BizTalk Server\;C:\Program Files\LLVM\bin;C:\Users\runneradmin\.dotnet\tools;C:\Users\runneradmin\.cargo\bin;C:\Users\runneradmin\AppData\Local\Microsoft\WindowsApps"&&
rustc \
    --crate-name voicevox_core \
    --edition=2021 crates\voicevox_core\src\lib.rs \
    --error-format=json \
    --json=diagnostic-rendered-ansi,artifacts,future-incompat \
    --crate-type lib \
    --emit=dep-info,metadata,link -C opt-level=z -C panic=abort -C linker-plugin-lto -C codegen-units=1 \
    --cfg "feature=\"default\"" -C metadata=ed3d2571d29b86cc -C extra-filename=-ed3d2571d29b86cc \
    --out-dir D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps \
    --target x86_64-pc-windows-msvc -C strip=symbols -L dependency=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps -L dependency=D:\a\voicevox_core\voicevox_core\target\release\deps \
    --extern anyhow=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libanyhow-e311d84d2ae5f1bd.rmeta \
    --extern cfg_if=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libcfg_if-1b2fefb99f35c1ac.rmeta \
    --extern derive_getters=D:\a\voicevox_core\voicevox_core\target\release\deps\derive_getters-bdc2b9be890608c2.dll \
    --extern derive_new=D:\a\voicevox_core\voicevox_core\target\release\deps\derive_new-193d5d398ca2b8b8.dll \
    --extern easy_ext=D:\a\voicevox_core\voicevox_core\target\release\deps\easy_ext-c8513404ba948c4d.dll \
    --extern humansize=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libhumansize-f92be8cf700737bf.rmeta \
    --extern once_cell=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libonce_cell-a8b363df0211d2af.rmeta \
    --extern onnxruntime=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libonnxruntime-745a3ab4dc786ce6.rmeta \
    --extern open_jtalk=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libopen_jtalk-10596d27880a956a.rmeta \
    --extern regex=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libregex-0ded4cbdca58710a.rmeta \
    --extern crypto=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libcrypto-0deec0492876c445.rmeta \
    --extern serde=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libserde-7a9f90bfb5f9363c.rmeta \
    --extern serde_json=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libserde_json-0d7954154b93def5.rmeta \
    --extern thiserror=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libthiserror-744b5f43c2548d0f.rmeta \
    --extern tracing=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libtracing-d7f48c81c4a45c7b.rmeta \
    --extern windows=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\deps\libwindows-fa63703c9fd56ce6.rmeta -L native=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\build\onnxruntime-sys-fe29254348da4667\out\onnxruntime_1.13.1_gpu\onnxruntime-win-x64-gpu-1.13.1\lib -L D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\build\open_jtalk-sys-535ef1e8a7775d9b\out\lib -L native=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\build\link-cplusplus-49b32c1d24ce522c\out -L native=D:\a\voicevox_core\voicevox_core\target\x86_64-pc-windows-msvc\release\build\rust-crypto-a1ce123bc792a06e\out -L native=C:\Users\runneradmin\.cargo\registry\src\github.com-1ecc6299db9ec823\windows_x86_64_msvc-0.42.0\lib

↓エラーログ

memory allocation of 2677983328 bytes failed
error: could not compile `voicevox_core`

whl作成時にディスク容量不足で落ちるパターン

条件 build_and_deploy (windows-2019, x86_64-pc-windows-msvc, windows-x64-cuda, cuda, true)
モデル数は15個くらい(OSS版)

Actions https://github.com/Hiroshiba/voicevox_core/actions/runs/3827454551/jobs/6512049285

↓エラーログ

LLVM ERROR: IO failure on output stream: no space on device
**m**merror**m:**m could not compile `voicevox_core`
💥 maturin failed
  Caused by: Failed to build a native library through cargo
  Caused by: Cargo build finished with "exit code: 1***1": `"cargo" "rustc" "--release" "--features" "," "--target" "x86_64-pc-windows-msvc" "--manifest-path" "./crates/voicevox_core_python_api/Cargo.toml" "--message-format" "json" "--lib"`
Error: Process completed with exit code 1.

エラーよくわからずubuntuでビルド中に落ちるパターン

条件 build_and_deploy (ubuntu-20.04, x86_64-unknown-linux-gnu, linux-x64-cpu, cpu, false)
モデル数は30個くらい(OSS版)

Actions https://github.com/Hiroshiba/voicevox_core/actions/runs/3827526829/jobs/6512187257

直前のコマンド

0***になっててよくわからなくなってる)

CARGO=/home/runner/.rustup/toolchains/1.66.***-x86_64-unknown-linux-gnu/bin/cargo \
CARGO_CRATE_NAME=voicevox_core \
CARGO_MANIFEST_DIR=/home/runner/work/voicevox_core/voicevox_core/crates/voicevox_core \
CARGO_PKG_AUTHORS='' \
CARGO_PKG_DESCRIPTION='' \
CARGO_PKG_HOMEPAGE='' \
CARGO_PKG_LICENSE='' \
CARGO_PKG_LICENSE_FILE='' \
CARGO_PKG_NAME=voicevox_core \
CARGO_PKG_REPOSITORY='' \
CARGO_PKG_RUST_VERSION='' \
CARGO_PKG_VERSION=***.***.*** \
CARGO_PKG_VERSION_MAJOR=*** \
CARGO_PKG_VERSION_MINOR=*** \
CARGO_PKG_VERSION_PATCH=*** \
CARGO_PKG_VERSION_PRE='' \
CARGO_WORKSPACE_DIR=/home/runner/work/voicevox_core/voicevox_core/ \
LD_LIBRARY_PATH='/home/runner/work/voicevox_core/voicevox_core/target/release/deps:/home/runner/.rustup/toolchains/1.66.***-x86_64-unknown-linux-gnu/lib:/home/runner/.rustup/toolchains/1.66.***-x86_64-unknown-linux-gnu/lib:/opt/hostedtoolcache/Python/3.8.15/x64/lib' \
ORT_OUT_DIR=/home/runner/work/voicevox_core/voicevox_core/target/debug/deps \
OUT_DIR=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/build/voicevox_core-238e8c15cdeefd83/out \
rustc \
    --crate-name voicevox_core \
    --edition=2***21 crates/voicevox_core/src/lib.rs \
    --error-format=json \
    --json=diagnostic-rendered-ansi,artifacts,future-incompat \
    --crate-type lib \
    --emit=dep-info,metadata,link -C opt-level=z -C panic=abort -C linker-plugin-lto -C codegen-units=1 \
    --cfg 'feature="default"' -C metadata=1eeee7***1b6db7cb7 -C extra-filename=-1eeee7***1b6db7cb7 \
    --out-dir /home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/deps \
    --target x86_64-unknown-linux-gnu -C strip=symbols -L dependency=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/deps -L dependency=/home/runner/work/voicevox_core/voicevox_core/target/release/deps \
    --extern anyhow=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/deps/libanyhow-f5c8cf85eb83ed9a.rmeta \
    --extern cfg_if=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/deps/libcfg_if-29861b95ab48e18a.rmeta \
    --extern derive_getters=/home/runner/work/voicevox_core/voicevox_core/target/release/deps/libderive_getters-9ff99167fb7***3ef2.so \
    --extern derive_new=/home/runner/work/voicevox_core/voicevox_core/target/release/deps/libderive_new-77b61***8dda354e88.so \
    --extern easy_ext=/home/runner/work/voicevox_core/voicevox_core/target/release/deps/libeasy_ext-5948e2ed9784755f.so \
    --extern once_cell=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/deps/libonce_cell-9a9ef365db46ccc6.rmeta \
    --extern onnxruntime=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/deps/libonnxruntime-2ee5***1deeb3ede***7.rmeta \
    --extern open_jtalk=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/deps/libopen_jtalk-a***693558ae2a8399.rmeta \
    --extern regex=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/deps/libregex-9***7cc5b41894985.rmeta \
    --extern serde=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/deps/libserde-2e***cfba92712d32c.rmeta \
    --extern serde_json=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/deps/libserde_json-3be7a6d916ee7812.rmeta \
    --extern thiserror=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/deps/libthiserror-8794de6c89319ad***.rmeta -L native=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/build/onnxruntime-sys-2***65e4eedc33aee5/out/onnxruntime_1.13.1_cpu/onnxruntime-linux-x64-1.13.1/lib -L /home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/build/open_jtalk-sys-86159944b2***fd882/out/lib -L native=/home/runner/work/voicevox_core/voicevox_core/target/x86_64-unknown-linux-gnu/release/build/link-cplusplus-ed73d1f25e411385/out

↓エラーログ

Error: Process completed with exit code 1***1.

(たぶんexit codeは101

再現手順

crates\voicevox_core\src\include_models.rsModelをいっぱいコピーしてビルド

期待動作

ビルドが通る

その他

モデル15個くらいはビルドできると嬉しいけど、難しそう。

たぶんモデルバイナリをinclude_bytesしてるのが重い原因・・・?
他に組み込みにできる方法あるとコード書き換え量が少なくて済むので嬉しい。

↑の実現が難しい場合は、クラス構造議論でも検討中な「外部ファイルモデルの読み込み」に対応させるしかない気がする。

@Hiroshiba Hiroshiba added バグ 要議論 実行する前に議論が必要そうなもの labels Jan 3, 2023
@Yosshi999
Copy link
Contributor

rust-lang/rust#65818 (comment)
こちらに大きなblobファイルをinclude_bytes!すると莫大なメモリを消費してコンパイルにやたら時間がかかることが報告されていますね

rust-lang/rust#103812
おそらくこのPRでコンパイル速度については解決されているようなので、これが入ったバージョン1.67.0からメモリ問題も解決される可能性がありますが、まだnighty buildのようです

@qwerty2501
Copy link
Contributor

qwerty2501 commented Jan 3, 2023

代替手段を利用したとしても似たような問題はでそうなので根本的な解決はこれじゃないでしょうか

↑の実現が難しい場合は、クラス構造 議論でも検討中な「外部ファイルモデルの読み込み」に対応させるしかない気がする。

@qwerty2501
Copy link
Contributor

qwerty2501 commented Jan 3, 2023

とりあえず今回を乗り切るためにincludeの展開先のファイルを分けてみたりcrateを分けてみたりするのを試してみても良いかもしれません。成功する保証はないですが

1.67リリースされるのを待ってみたほうが良いかも?

@Hiroshiba
Copy link
Member Author

個人的には @qwerty2501 さん意見に賛成で、抜本的な解決は外部ファイル化だと感じています。
メモリだけではなくディスク容量の不足とかもわりと近そうなので、抜本的にはこれかなと。

crate分けるのもそこそこ簡単にできそうなのであればぜひという感じではあります。
可能なら0.14を1月末辺りにリリースしたいなと思っていて、1.67が1月23日っぽく、ちょっと厳しいかも・・・?
(かなり大規模アプデになるのでちょっと1月末リリースは難しいかもという雰囲気を感じていますが)

うーーーーーん。

@qryxip
Copy link
Member

qryxip commented Jan 3, 2023

とりあえず30個くらいのモデル (Hiroshiba@9985ce6) を手元で試しましたが、メモリを8GBちょっと使ったあたりで次のエラーになりました(Actionsに出ているのと同じ)。

thread '<unnamed>' panicked at 'called `Result::unwrap()` on an `Err` value: TryFromIntError(())', compiler/rustc_metadata/src/rmeta/table.rs:234:49

この文面を見た感じ、計算機のリソースとは関係がなさそうに見えます。

@qryxip
Copy link
Member

qryxip commented Jan 3, 2023

Rust 1.67ですが、今からNightly Rust (nightly-2023-01-03)に切り替えるというのもできると思います。1.67が出たらそっちにする感じで。

@qryxip
Copy link
Member

qryxip commented Jan 3, 2023

nightly-2023-01-03ですが少なくともモデル30個版は駄目っぽいですね (同様のエラー)。

@Hiroshiba
Copy link
Member Author

お試しありがとうございます!!

駄目っぽいですね

なるほど~~~~

@qryxip
Copy link
Member

qryxip commented Jan 3, 2023

モデル15個版は私のPCだと1.66でも余裕なのでそもそも違いがわからず。maturin buildについては手元で実験するのが怖い...

@Hiroshiba
Copy link
Member Author

Hiroshiba commented Jan 3, 2023

僕も手元の環境だと動いたんですが、pushしてactions回すと(勝手に回る)エラーになったので悲しかったです。

まあ外部ファイル読み込み化かな~という気持ちになりつつあります!!
VOICEVOX初期は外部ファイルだったのでそこに戻る形になりそうな気持ちです。
ちょっと提案をissue化してみますね!

@qryxip
Copy link
Member

qryxip commented Jan 3, 2023

nightly-2023-01-03に切り替えたやつを私のフォークにpushしてみました。違いが出るかどうか...

https://github.com/qryxip/voicevox_core/actions/runs/3830907932

@qryxip
Copy link
Member

qryxip commented Jan 3, 2023

あ、駄目ですね落ちた。

@Hiroshiba
Copy link
Member Author

issue作成してみました!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
バグ 要議論 実行する前に議論が必要そうなもの
Projects
None yet
Development

Successfully merging a pull request may close this issue.

4 participants