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

CPU版自動ビルドを有効化 #306

Merged
merged 29 commits into from
Oct 9, 2021
Merged

Conversation

aoirint
Copy link
Member

@aoirint aoirint commented Oct 7, 2021

内容

Windows・Linux用のCPU版自動ビルドを有効化します。

#264 では、GitHub Releaseにアップロードするインストーラ・分割7zのファイル名が重複する問題 https://github.com/Hiroshiba/voicevox/pull/264#issuecomment-927196258 が起き、対応を考えるため、CPU版対応はいったんコメントアウトして、別PR(このPR)にしました。

ファイル名重複の回避方法としては、以下のような候補を考えました。

  1. package.jsonnamepackageName)、vue.config.jsproductNameの一時的な書き換え(このPRで採用している方法)
  2. NSISインストーラ・分割7zをビルド後にファイル名変更し、installer.nshで分割7zのダウンロードURLを書き換え
  3. VOICEVOXはデバイス別リリースしない(ENGINEやCOREを別々にダウンロード)

このPRでは暫定的に、ほぼCIだけで簡単に対応できる1を採用しています。

ビルドの段階によって、packageNameproductNameが変わるのを防ぐため、VOICEVOX ENGINEが含まれないArtifactについて、CPU版とGPU版をそれぞれ作成するように変更しました。

productName内でスペースではなくハイフンを使用しているのは、GitHub Releaseにアップロードしたときにスペースがピリオドに置き換えられて名前の不一致が起こる可能性があること、シェルスクリプト上での扱いが不便なことが理由です。

追記:実行ファイルの名前をCPU版・GPU版で同一にするため、productNameの書き換えは廃止しました。

議論:VOICEVOX・ENGINE・COREのインストール方法

将来的には、回避方法3を実装するのが理想的なのかなと思っています。

いまのところ優先度が低いと思うのでメモとしてですが、実現には以下のような候補を考えました。
https://github.com/Hiroshiba/voicevox/issues/298, https://github.com/Hiroshiba/voicevox_core/issues/16 で、ENGINEがCOREの対応デバイスを認識して変更できるようになるとして、インストール方法3くらいがいいのかなと思っています(配布物のURLは別々でもインストーラは1つかもしれない)。

  1. インストーラでCPU版・GPU版どちらをダウンロードするか選択(できるかわからない)
  2. VOICEVOXとENGINEの配布物を分離(別々にダウンロードする。インストーラが1つの場合、1と同じ)
    • VOICEVOX(いまのnoengineビルド)
    • CORE(四国めたん、ずんだもん)を含むENGINE
  3. VOICEVOX・ENGINEとCOREの配布物を分離
    • VOICEVOX・COREの含まれないENGINE(同梱)
    • CORE(四国めたん、ずんだもん)
  4. VOICEVOXとENGINEとCOREの配布物を分離( APIの接続先の変更を容易にする #220 でローカルエンジンをインストールしない場合を想定)
    • VOICEVOX(いまのnoengineビルド)
    • COREの含まれないENGINE
    • CORE(四国めたん、ずんだもん)

関連 Issue

ref https://github.com/Hiroshiba/voicevox/pull/264#issuecomment-927196258
ref https://github.com/Hiroshiba/voicevox/issues/218#issuecomment-933569505

Artifactの種類

全Artifactリスト

  • linux-cpu-appimage
  • linux-cpu-appimage-release
  • linux-cpu-prepackage
  • linux-cpu-prepackage-targz
  • linux-noengine-cpu-prepackage
  • linux-noengine-prepackage
  • linux-nvidia-appimage
  • linux-nvidia-appimage-release
  • linux-nvidia-prepackage
  • linux-nvidia-prepackage-targz
  • windows-cpu-nsis-web
  • windows-cpu-prepackage
  • windows-noengine-cpu-prepackage
  • windows-noengine-prepackage
  • windows-nvidia-nsis-web
  • windows-nvidia-prepackage

ReleaseにアップロードするArtifact

  • linux-nvidia-appimage-release(GPU版Linux AppImageインストーラ用)
  • linux-cpu-appimage-release(CPU版Linux AppImageインストーラ用)
  • windows-nvidia-nsis-web(GPU版Windows NSISインストーラ用)
  • windows-cpu-nsis-web(CPU版Windows NSISインストーラ用)

展開して、中のファイルをすべてReleaseにアップロード

gh release upload --repo=Hiroshiba/voicevox 0.x.x *

Google DriveにアップロードするArtifact

  • linux-nvidia-appimage(GPU版Linux AppImage)
  • linux-cpu-appimage(CPU版Linux AppImage)
  • windows-nvidia-prepackage(GPU版Windows zip配布)
  • windows-cpu-prepackage(CPU版Windows zip配布)

オプション

  • linux-nvidia-prepackage-targz(GPU版Linux tar.gz配布)
  • linux-cpu-prepackage-targz(CPU版Linux tar.gz配布)

Linux AppImageインストーラ

# GPU版
NAME=linux-nvidia-appimage VERSION=0.x.x curl -fsSL https://raw.githubusercontent.com/Hiroshiba/voicevox/main/build/installer_linux.sh | bash

# CPU版
NAME=linux-cpu-appimage VERSION=0.x.x curl -fsSL https://raw.githubusercontent.com/Hiroshiba/voicevox/main/build/installer_linux.sh | bash

@Hiroshiba
Copy link
Member

プルリクエストありがとうございます!

vue.config.jsのproductNameの一時的な書き換え

すみません、実際にダウンロードしてみて気づいたのですが、exeファイルの名称も変わることに気づきました。
できれば実行ファイルの名称はVOICEVOXで統一したいのですが、可能でしょうか。
GPU版とCPU版で使い方に齟齬が起きる可能性を考えています。

議論:VOICEVOX・ENGINE・COREのインストール方法

こちらに関して、分離することの利点はストレージの容量削減でしょうか。
複数をダウンロードする運用にすると、ユーザーとしては手順が約2倍に増えるからちょっと手間かもと感じました。。
話がそれるかもですが、キャラが複数になった場合は、好きなキャラのCOREを追加でダウンロードする形式にしようかなと少し思っています。

Artifactの種類

まとめありがとうございます、非常に助かります!
Google DriveにアップロードするArtifactがなかなか大きいことに気づきました。
linux版かwin版のどちらかはartifactから落としてもらう運用になるかもです・・・。

@aoirint
Copy link
Member Author

aoirint commented Oct 8, 2021

実行ファイルの名称はVOICEVOXで統一したい

Windows版については、packageNameのみを置き換える形で変更できそうです。

インストーラの名前だけ変えたい場合、vue.config.jsnsisWeb.artifactName${productName} Web Setup ${version}.${ext}をデフォルト値として、CPU版ではVOICEVOX-CPU Web Setup ${version}.${ext}のように置き換えることで変更できそうです。

Linux版については、AppImageやtar.gz内の、実行ファイルの名前はlinux.executableNameで変更できそうです。
AppImageの名前はlinux.artifactNameで変更できそうです。

@aoirint
Copy link
Member Author

aoirint commented Oct 8, 2021

分離することの利点はストレージの容量削減でしょうか

Artifact・配布物の数や容量、自動ビルドにかかる時間を減らしたいということを考えていました。

VOICEVOXは、ENGINE・CORE・LibTorchをコピーとして同梱していますが、
CIの容量制限を回避するため、ビルドを複数ステージ(Job)に分けることで、同梱物を追加しています。
このため、容量の大きい中間Artifactが発生して、アップロードやコピーのため、ビルド時間も伸びています。

このあたりをうまく解決したい、という意図です。

ユーザーとしては手順が約2倍に増える

ユーザの手間は、インストーラの実装で吸収することを考えていました。
試していませんが、installer.nshcustomInstallマクロを追加して、ENGINE・COREのダウンロードと配置ができるのかなと思っています(分割7zをダウンロード)。

msiを実行するサンプル( https://www.electron.build/configuration/nsis#custom-nsis-script

!macro customInstall
  File /oname=$PLUGINSDIR\extramsi.msi "${BUILD_RESOURCES_DIR}\extramsi.msi"
  ExecWait '"msiexec" /i "$PLUGINSDIR\extramsi.msi" /passive'
!macroend

@Hiroshiba
Copy link
Member

Windows版については、packageNameのみを置き換える形で変更できそうです。
AppImageの名前はlinux.artifactNameで変更できそうです。

そちらの方式に変えて頂けるととても助かります・・・!

Artifact・配布物の数や容量、自動ビルドにかかる時間を減らしたいということを考えていました。

たしかに!理由がとてもよくわかりました。

ユーザの手間は、インストーラの実装で吸収することを考えていました。

インストーラ側で吸収できるのであれば、ぜひそれぞれダウンロードに切り替えたいです。
インストーラでインストーラを実行する方法、目からうろこでした。

@aoirint
Copy link
Member Author

aoirint commented Oct 9, 2021

以下のようなファイル名にしようとしています。

OS 種類 GitHub Release(重複名不可) Google Drive(仮) ファイル名
Windows GPU NSISWebインストーラ VOICEVOX Web Setup 0.6.1.exe
NSISWebインストーラ用分割7z voicevox-0.6.1-x64.nsis.7z.1
NSISWebインストーラ用7z voicevox-0.6.1-x64.nsis.7z
実行ファイル VOICEVOX.exe
zip配布 (手動リネーム) VOICEVOX 0.6.1.zip
zip配布 (Artifact) windows-nvidia-prepackage.zip
Windows CPU NSISWebインストーラ VOICEVOX-CPU Web Setup 0.6.1.exe
NSISWebインストーラ用分割7z voicevox-cpu-0.6.1-x64.nsis.7z.1
NSISWebインストーラ用7z voicevox-cpu-0.6.1-x64.nsis.7z
実行ファイル VOICEVOX.exe
zip配布 (手動リネーム) VOICEVOX-CPU 0.6.1.zip
zip配布 (Artifact) windows-cpu-prepackage.zip
Linux GPU AppImageインストーラ用分割7z VOICEVOX.AppImage.7z.001
AppImage VOICEVOX.AppImage
実行ファイル voicevox
tar.gz配布 (✔) VOICEVOX-0.6.1.tar.gz
tar.gz配布 (Artifact) linux-nvidia-prepackage-targz.zip
Linux CPU AppImageインストーラ用分割7z VOICEVOX-CPU.AppImage.7z.001
AppImage VOICEVOX.AppImage
実行ファイル voicevox
tar.gz配布 (✔) VOICEVOX-CPU-0.6.1.tar.gz
tar.gz配布 (Artifact) linux-cpu-prepackage-targz.zip

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!! 表もありがとうございます!

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