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

複数エンジン対応: DEFAULT_ENGINE_INFOSに登録されたエンジンのプロセスをすべて起動する(Callback版) #741

Merged

Conversation

aoirint
Copy link
Member

@aoirint aoirint commented Mar 8, 2022

内容

これまで、PR分割のため仮の実装として、エディタ起動時にDEFAULT_ENGINE_INFOSの0番目に登録されたエンジンだけが起動するようになっていました。

このPRでは、エディタ起動時にすべてのエンジンのプロセスを起動するようにします。
この挙動は、今後エディタから各エンジンのAPIにアクセスする実装を開発するための暫定的なもので、変わる可能性があります。
将来的に、エンジンプロセスを並列起動できる可能性がありますが、実装の簡略化のため行っていません。
CPU/GPUフラグの個別化も考えられますが同様に省略し、設定UI上で決めた1つの設定がすべてのエンジンで使われます。これは別途Issueを立てて方針を検討したいです。
エディタ終了時は、すべてのエンジンのプロセスを終了するようにします。

また、Electronのメインプロセス(background.ts)で複数のエンジンプロセスを扱えるようにするため、
エンジンプロセスの起動関数runEngineAll/runEngine、再起動関数restartEngineAll/restartEngine、終了関数killEngineAll/killEngineを整備します。
すべてのエンジンを操作する*All関数は、既存のエンジンプロセス操作関数を置き換える形で簡易に実装するための暫定的なものです。今後、UI側のActionもいったん同様の実装で進めることを考えています。

動作テスト手順

プロセスの起動をテストするには、COEIROINK 0.2.0のエンジンのWindowsプレビュービルドをシロワニさんが作成してくださっています。
いまのところ、COEIROINKのエンジンAPIはhttp://127.0.0.1:50031で待ち受けるようになっているようです。

VOICEVOXエンジンは、以下のリリースが利用できます(製品版同梱のものでも問題ないはず)。

Windows上で、VOICEVOXエンジン・COEIROINKエンジンを適当なディレクトリに配置後、.envファイルを以下のように書き換えて、VOICEVOXエンジン・COEIROINKエンジンのプロセスの起動を確認できます(engineKeyはランダム)。

DEFAULT_ENGINE_INFOS=[{"key":"074fc39e-678b-4c13-8916-ffca8d505d1d","executionEnabled":true,"executionFilePath":"C:/Users/aoi/local/voicevox_engine_cpu-0.11.3/run.exe","host":"http://127.0.0.1:50021"},{"key":"d9212658-962f-4918-80b2-310b7de70c41","executionEnabled":true,"executionFilePath":"C:/Users/aoi/local/COEIROINK-CPU-c0.2.0+v0.10.preview.0/run.exe","host":"http://127.0.0.1:50031"}]
# DEFAULT_ENGINE_INFOS=[{"key":"074fc39e-678b-4c13-8916-ffca8d505d1d","executionEnabled":true,"executionFilePath":"C:/Users/aoi/local/voicevox_engine_cpu-0.11.3/run.exe","host":"http://127.0.0.1:50021"}]
VUE_APP_GTM_CONTAINER_ID=GTM-DUMMY

エディタ起動・初期設定後、閉じるボタンを押して以下のようなログになれば成功です。
エディタ終了時に二重にエンジンプロセスのkillが走ってしまっていますが、このPR以前からそういう実装になっています(エディタの終了・エンジンプロセスの終了をできる限り保証するためのはずです。今後改修できそうならしたいです)。

[05:12:37.631] [info]  Starting 2 engine/s...
[05:12:37.632] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Start launching
[05:12:37.633] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Starting process
[05:12:37.635] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d mode: CPU
[05:12:37.635] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d path: C:\Users\aoi\local\voicevox_engine_cpu-0.11.3\run.exe
[05:12:37.636] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d args: []
[05:12:37.655] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41: Start launching
[05:12:37.656] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41: Starting process
[05:12:37.657] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41 mode: CPU
[05:12:37.657] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41 path: C:\Users\aoi\local\COEIROINK-CPU-c0.2.0+v0.10.preview.0\run.exe
[05:12:37.658] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41 args: []
[05:12:40.654] [info]  Waiting engine 074fc39e-678b-4c13-8916-ffca8d505d1d
[05:12:43.702] [info]  Waiting engine 074fc39e-678b-4c13-8916-ffca8d505d1d
[05:12:45.043] [error] ENGINE d9212658-962f-4918-80b2-310b7de70c41 STDERR: Warning: Failed to read the user dictionary.
Traceback (most recent call last):
  File "voicevox_engine\synthesis_engine\make_synthesis_engine.py", line 39, in make_synthesis_engine
ModuleNotFoundError: No module named 'core'
Notice: mock-library will be used. Try re-run with valid --voicevox_dir
[05:12:45.060] [error] ENGINE d9212658-962f-4918-80b2-310b7de70c41 STDERR: INFO:     Started server process [33824]
INFO:uvicorn.error:Started server process [33824]
INFO:     Waiting for application startup.
INFO:uvicorn.error:Waiting for application startup.
[05:12:45.061] [error] ENGINE d9212658-962f-4918-80b2-310b7de70c41 STDERR: INFO:     Application startup complete.
INFO:uvicorn.error:Application startup complete.
[05:12:45.062] [error] ENGINE d9212658-962f-4918-80b2-310b7de70c41 STDERR: INFO:     Uvicorn running on http://127.0.0.1:50031 (Press CTRL+C to quit)
INFO:uvicorn.error:Uvicorn running on http://127.0.0.1:50031 (Press CTRL+C to quit)
[05:12:46.750] [info]  Waiting engine 074fc39e-678b-4c13-8916-ffca8d505d1d
[05:12:48.128] [error] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDERR: Warning: cpu_num_threads is set to 0. ( The library leaves the decision to the synthesis runtime )
[05:12:48.140] [error] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDERR: INFO:     Started server process [32576]
INFO:     Waiting for application startup.
[05:12:48.141] [error] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDERR: INFO:     Application startup complete.
[05:12:48.142] [error] ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDERR: INFO:     Uvicorn running on http://127.0.0.1:50021 (Press CTRL+C to quit)
[05:12:48.290] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDOUT: INFO:     127.0.0.1:55165 - "GET /version HTTP/1.1" 200 OK
[05:12:48.306] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDOUT: INFO:     127.0.0.1:55165 - "GET /speakers HTTP/1.1" 200 OK
[05:12:48.379] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDOUT: INFO:     127.0.0.1:55170 - "GET /speaker_info?speaker_uuid=35b2c544-660e-401e-b503-0e14c635303a HTTP/1.1" 200 OK
[05:12:48.405] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDOUT: INFO:     127.0.0.1:55172 - "GET /speaker_info?speaker_uuid=b1a81618-b27b-40d2-b0ea-27a9ad408c4b HTTP/1.1" 200 OK
[05:12:48.421] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDOUT: INFO:     127.0.0.1:55171 - "GET /speaker_info?speaker_uuid=3474ee95-c274-47f9-aa1a-8322163d96f1 HTTP/1.1" 200 OK
[05:12:48.474] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDOUT: INFO:     127.0.0.1:55165 - "GET /speaker_info?speaker_uuid=7ffcb7ce-00ec-4bdc-82cd-45a8889e43ff HTTP/1.1" 200 OK
[05:12:48.524] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDOUT: INFO:     127.0.0.1:55169 - "GET /speaker_info?speaker_uuid=388f246b-8c41-4ac1-8e2d-5d79f3ff56d9 HTTP/1.1" 200 OK
[05:12:48.536] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDOUT: INFO:     127.0.0.1:55170 - "GET /speaker_info?speaker_uuid=c30dc15a-0992-4f8d-8bb8-ad3b314e6a6f HTTP/1.1" 200 OK
[05:12:48.553] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDOUT: INFO:     127.0.0.1:55171 - "GET /speaker_info?speaker_uuid=4f51116a-d9ee-4516-925d-21f183e2afad HTTP/1.1" 200 OK
[05:12:48.563] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDOUT: INFO:     127.0.0.1:55172 - "GET /speaker_info?speaker_uuid=e5020595-5c5d-4e87-b849-270a518d0dcf HTTP/1.1" 200 OK
[05:12:48.576] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDOUT: INFO:     127.0.0.1:55166 - "GET /speaker_info?speaker_uuid=8eaad775-3119-417e-8cf4-2a10bfd592c8 HTTP/1.1" 200 OK
[05:12:48.936] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d STDOUT: INFO:     127.0.0.1:55166 - "POST /audio_query?text=&speaker=2 HTTP/1.1" 200 OK
[05:39:50.744] [info]  All windows closed. Quitting app
[05:39:50.744] [info]  Checking ENGINE status before app quit
[05:39:50.745] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: last exit code: null, signal: null
[05:39:50.745] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Killing process (PID=20668)
[05:39:50.745] [info]  Interrupt app quit to kill ENGINE
[05:39:52.879] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41: last exit code: null, signal: null
[05:39:52.879] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41: Killing process (PID=30092)
[05:39:52.917] [info]  All windows closed. Quitting app
[05:39:52.918] [info]  Checking ENGINE status before app quit
[05:39:52.918] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: last exit code: null, signal: null
[05:39:52.918] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Killing process (PID=20668)
[05:39:52.918] [info]  Interrupt app quit to kill ENGINE
[05:39:52.937] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41: last exit code: null, signal: null
[05:39:52.937] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41: Killing process (PID=30092)
[05:39:53.460] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Process terminated due to receipt of signal null
[05:39:53.460] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Process exited with code 1
[05:39:53.460] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Process closed
[05:39:53.460] [info]  ENGINE 1 / 2 processes killed
[05:39:53.460] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Process closed
[05:39:53.460] [info]  ENGINE 1 / 2 processes killed
[05:39:53.490] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41: Process terminated due to receipt of signal null
[05:39:53.490] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41: Process exited with code 1
[05:39:53.491] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41: Process closed
[05:39:53.491] [info]  ENGINE 2 / 2 processes killed
[05:39:53.491] [info]  All ENGINE killed. Quitting app
[05:39:53.491] [info]  Checking ENGINE status before app quit
[05:39:53.491] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: last exit code: 1, signal: null
[05:39:53.491] [info]  ENGINE 074fc39e-678b-4c13-8916-ffca8d505d1d: Process already closed
[05:39:53.491] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41: last exit code: 1, signal: null
[05:39:53.491] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41: Process already closed
[05:39:53.491] [info]  ENGINE d9212658-962f-4918-80b2-310b7de70c41: Process closed
[05:39:53.491] [info]  ENGINE 2 / 2 processes killed
[05:39:53.492] [info]  All ENGINE killed. Quitting app

関連 Issue

スクリーンショット・動画など

その他

log.info("ENGINE killed. Quitting app");
onAllKilled: () => {
// executed asynchronously to catch all process closed event
log.info("All ENGINE killed. Quitting app");
app.quit(); // attempt to quit app again
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

VOICEVOXエディタがエンジンのプロセスを管理していない場合(ターミナルでエンジンを起動しているなど)、app.quitが呼ばれない問題が発生しそう(修正したい)

Copy link
Member Author

@aoirint aoirint Mar 11, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

こちらの修正作業をするか、Promise版 #750 を代わりにレビューしてもらうか悩み中なのでDraftにしています

(Promise版は手元での動作確認中)

Copy link
Member Author

@aoirint aoirint Mar 11, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

いま db81c2b はbefore-quitからの非同期なapp.quitの呼び出しがループするようになっている...

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

#654 の段階で外部で起動されたエンジンがあるときにapp.quitが呼ばれない不具合が入っている気がする

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

ちょっと状況を性格に把握できていないかもですが、自分で起動したエンジンは自分で終了するロジックにすると綺麗かもと思いました!

Copy link
Member Author

@aoirint aoirint Mar 11, 2022

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

自分で起動したエンジンは自分で終了するロジック

自分で起動していないエンジンは終了させないようにしています(プロセスを検索する必要がある+勝手に終了させるのは他のアプリケーションにとってよくなさそう)。

app.quitの呼び出しがループ

修正を入れました。直ったと思います。

(プロセスを1つもキルする必要がないときにapp.quitを呼び出して無限ループしていた)

@aoirint aoirint marked this pull request as draft March 10, 2022 16:36
@aoirint aoirint changed the title 複数エンジン対応: DEFAULT_ENGINE_INFOSに登録されたエンジンのプロセスをすべて起動する 複数エンジン対応: DEFAULT_ENGINE_INFOSに登録されたエンジンのプロセスをすべて起動する(Callback版) Mar 10, 2022
@aoirint aoirint marked this pull request as ready for review March 11, 2022 16:30
Copy link
Member

@Hiroshiba Hiroshiba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM!!

制御変数がなかなか多くなってきましたね・・・!
別途エンジンマネージャを作って、そちらで状態変数などを全部管理しちゃうとコードがかなり読みやすく・書きやすくなる気がしました!
もしよければ切り出しをお願いしたいかもです。

@Hiroshiba Hiroshiba merged commit e7456f3 into VOICEVOX:main Mar 11, 2022
@aoirint
Copy link
Member Author

aoirint commented Mar 11, 2022

background.tsにエンジンプロセスの制御のための実装が多くなっているので、とりあえずファイル分けはできるといいなと思いました!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants