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

DirectMLを使用する #81

Merged
merged 82 commits into from
Mar 10, 2022
Merged

DirectMLを使用する #81

merged 82 commits into from
Mar 10, 2022

Conversation

Oyaki122
Copy link
Member

@Oyaki122 Oyaki122 commented Feb 22, 2022

内容

DirectMLを用いた推論を可能ができるようにし、Windows-cpu版dllをdirectml版に変更します。

DirectMLはDirectX12を用いて推論を行うことができ、これによってAMD製GPUやIntel内蔵グラフィックスでの推論が可能になります。

DirectML版のcore.dllでは DirectML.dll を同じディレクトリに配置し、initializeのuse_gpuをtrueにすることでDirectMLを用いて推論を行います

DirectMLに対応したonnxruntimeはそれ以外のディレクトリ構造と異なり、nugetパッケージ用のものになっているため、cmakeやconfigure.pyの実行時にオプションをつける必要があります

--追記--
動作検証を行う際はREADMEの「コアライブラリのビルド」に従って自前でビルドして検証していただくか、configure.py実行時にオプションをつけていただくことで可能です
configure.pyを用いる場合、

python configure.py --use_directml --voicevox_download_link https://github.com/Oyaki122/voicevox_core/releases/download/dml-test20220223/core.zip

の様にし、またexample/pythonを実行する際は

python run.py --text=<テキスト> --speaker_id=<話者ID> --use_gpu --root_dir_path="../../model"

としてください。
今回のプルリクエストは開発版のcoreであるため、Releaseにある実際のモデルを使用することはできません。 modelフォルダにあるモックのみ可能です

関連 Issue

ref #74

その他

Radeonでの推論が検証できていないため、お持ちの方がいらっしゃいましたら検証よろしくおねがいします

@Oyaki122
Copy link
Member Author

Oyaki122 commented Feb 22, 2022

比較

日本国憲法50字を用い、exampleのforwarder.forward()を5回実行するのにかかった平均時間を検証する。単位は秒

PC1

  • Corei7 8700
  • 内蔵グラフィックス(Intel HD Graphics 630)
  • Geforce GTX1060 6GB
平均 標準偏差
DirectML(内蔵) 33.93 0.58
DirectML(グラボ) 2.124 0.437
cpu 10.86 1.07
cuda 1.710 0.006

PC2

  • Corei5 7200U
  • 内蔵グラフィックス(Intel HD Graphics 620)
平均 標準偏差
DirectML 46.32 0.44
cpu 38.41 1.07

この様に、グラフィックボードを搭載したPCではcudaの1.2倍程度の時間で合成できる。
一方内蔵グラフィックスではcpuよりも遅くなる事がわかった

@Oyaki122 Oyaki122 marked this pull request as ready for review February 22, 2022 14:07
@Oyaki122 Oyaki122 marked this pull request as draft February 22, 2022 14:07
@Oyaki122 Oyaki122 marked this pull request as ready for review February 22, 2022 14:14
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.

おおお、すごい!!
結構範囲の広い変更なので見るのに時間がかかっちゃうかもですが、これくらいの量なら1つのプルリクエストで完結したほうが楽かなと感じました。

かなり素人っぽい質問ですが1つだけコメントしてみました。

@Yosshi999 さん、またレビューお願いしてもよろしいでしょうか 👀

DetermineTargetArchitecture.cmake Show resolved Hide resolved
@Patchethium
Copy link

横から失礼します。

日本国憲法50字を用い、exampleのforwarder.forward()を5回実行するのにかかった平均時間を検証する。単位は秒

Radeonでの推論が検証できていないため、お持ちの方がいらっしゃいましたら検証よろしくおねがいします

I have a Radeon GPU and ran a similar[1] test on it, here's the result:

Environment:
cpu: Ryzen 3600
gpu: Radeon RX 570
(cpu_num_threads=8)

avg var
cpu 4.314 0.0005
gpu (DirectML) 1.089 0.009

The acceleration is pretty decent, good job!

It's also worth noting that I experienced some noticeable lag on the whole computer while running the test. A resource regulator like cpu_num_threads may be needed in order to avoid that.

[1] Google won't tell me what 日本国憲法50字 is so I went here and simply took the first paragraph, this could make some difference.

@o108minmin
Copy link

o108minmin commented Feb 23, 2022

突然すいません。
別の方も検証されていますがRadeon RX 6700 XTで --use_directmlを使い example/python の動作を確認しました(特にエラーなく合成できるところまで)

以下実施ログ

https://gist.github.com/o108minmin/10216558ce22669e33097020d2b24438

[edit: 実施手順が間違っていたようなので、 @Oyaki122 さんに教えていただきました。無事ダミー音声も生成できました。ありがとうございます! ]

@Yosshi999
Copy link
Contributor

このPRに含める必要は無いですが、configure.pyの実行オプションが変わった時にダウンロードしてくるonnxruntimeが変わるので、既に展開済みのものがあったらダウンロードのスキップをするという処理は変更したほうがよさそうですね

Copy link
Contributor

@Yosshi999 Yosshi999 left a comment

Choose a reason for hiding this comment

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

LICENSEだけちょっと追加しました

DetermineTargetArchitecture.cmake Show resolved Hide resolved
Co-authored-by: Yosshi999 <Yosshi999@users.noreply.github.com>
Copy link
Contributor

@Yosshi999 Yosshi999 left a comment

Choose a reason for hiding this comment

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

LGTM!

@Oyaki122 Oyaki122 requested a review from Hiroshiba February 26, 2022 17:58
@Hiroshiba
Copy link
Member

こちらの機能は次の次の大きめのアップデート(0.12)の目玉機能とさせてください・・・!
検証の時間を長めにとったほうが良さそうなのと、次のアップデートは今月中に行いたいというのがコンフリクトしているためです。
プレビュー版を作って1~2週間ほどプレリリースし、いろんな方に試してもらうフェーズを用意しましょう・・・!

@Oyaki122
Copy link
Member Author

@Hiroshiba
承知しました
引き続きよろしくおねがいします

@Oyaki122
Copy link
Member Author

WindowsでCPU版のVOICEVOXは必要なくなるかもしれませんが、coreには需要があるのではないかと思ったのでcpu版coreを復活させました

@Hiroshiba Hiroshiba mentioned this pull request Mar 10, 2022
5 tasks
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!!

製品版をなるべく早くビルドしてみたいと思います。
(ちょっとしばらく忙しいのですが、忘れてそうだったらリプライ頂けると嬉しいです🙇)

こちらのissueで試していければなと思います。

@Hiroshiba Hiroshiba merged commit 8c607b4 into VOICEVOX:main Mar 10, 2022
@Oyaki122 Oyaki122 deleted the dml branch March 10, 2022 16:02
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.

5 participants