-
Notifications
You must be signed in to change notification settings - Fork 204
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
ランタイム CDLL ロードの仕組み #1146
Comments
私の理解では例えばonnxruntime.dllは、voicevox_core.dllのロード時点で
必要があります。1.だとWindows上では難しいため、2.とするために もし1.でも2.でもない場合、Linuxの場合はlibvoicevox_core.soのロード時にこのようになるはずです。 OSError: libvoicevox_core.so: cannot open shared object file: No such file or directory メッセージとしてはCOREのPyO3版で ImportError: libonnxruntime.so.1.14.0: cannot open shared object file: No such file or directory Windowsの場合は2.でない限り、強制的にC:\Windows\System32\onnxruntime.dllが解決されてしまい人間にはわかりにくいエラーになります。 (追記) 複数をロードした場合順番は…どうでしょうね。 |
今後の話ですが、VOICEVOX/voicevox_core#721ができるとlibvoicevox_core → libonnxruntimeの依存の関係が通常の動的リンクから さらにVOICEVOX/voicevox_core#721を達成すると、依存DLLがonnxruntime.dllからvoicevox_onnxruntime.dllに代わります。 今のところコアは、上記二つとも行った上でリリースする予定です。 |
@qryxip 現実装でのCORE ロード時についてなのですが、 |
強いて言うならビルド時に実行されるここでしょうか。onnxruntime.dll側の各関数シンボルを宣言し、それらの解決をonnxruntime.dllで行うように指示、というのを |
まさにこのコードが知りたい箇所の1つでした、ありがとうございます!
という感じですかね。 多重ロード時の実動作#1133 で議題になった多重ロード時の実動作に関して。 上記の情報に基づくと「CORE 側でロード順を制御してる」というより「Python ctypes の CDLL 複数回コール時挙動で実動作が左右される」が妥当そうに見えます。 |
(Discord から情報転記)
(#254 等を深堀り)
|
Python ctypes の CDLL 複数回コール時挙動は以下の形と推定されます(情報転記):
|
CORE 側の DLL 利用方法および Python 側の DLL 多重ロード挙動が理解されたため、本 issue は resolve につき close とします。 |
質問の内容
質問概要: ランタイム CDLL ロードの仕組みが知りたい
現在の ENGINE は
load_runtime_lib()
においてランタイム CDLL (例:onnxruntime.dll
) をロードしている。voicevox_engine/voicevox_engine/core/core_wrapper.py
Line 46 in e2a531a
この CDLL は純粋にロードのみがなされ、ENGINE 内ではその後明示的に利用されていない。
CORE 側の仕組みによって上手く利用されていると想定されるが、その挙動は ENGINE 的には不明である。
#709 や #1133 でランタイム CDLL の読み込み方式が論点となっているが、議論の前提としてこの仕組みの理解が必要となっている。
このような背景から、次の質問があります:
「ランタイム CDLL はロードされたのちどのように選択・利用されるのか」
ENGINE コントリビュータからすると CORE の理解は相当なハードルがあります。
可能であれば CORE 側のランタイムロード関連の仕組みについて簡単な解説があると非常に助かります。
もしご多忙でしたら、読むべき CORE 側のコードを示して頂ければ幸いです。
詳しそうな方々: @Hiroshiba @qryxip
VOICEVOXのバージョン
0.18.0
The text was updated successfully, but these errors were encountered: