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

Pythonサンプルコード: 数値型の縮小変換により実行時例外が起きる問題の修正(32bit環境) #35

Merged
merged 2 commits into from
Nov 2, 2021

Conversation

aoirint
Copy link
Member

@aoirint aoirint commented Nov 2, 2021

内容

ONNX版コアのRaspberry Pi(32bit armv7l hardware float環境)向けのビルドを試しています。

そこで、サンプルコード実行時、example/python/forwarder.py 内のnumpy.repeatの呼び出しでTypeError: Cannot cast array data from dtype('int64') to dtype('int32') according to the rule 'safe'というエラーが発生しました。

このPRは、numpy.repeatの繰り返し回数repeatsとしてnumpy.int64型を渡していた部分をnumpy.int32型に変更し、numpy内部で縮小変換(int64→int32の変換)させないようにすることで、実行時例外が起きないようにします。

32bit環境か64bit環境かによって変わるかもしれないので、こちらで検証したらドラフトを外します。
変更が必要であれば、このPRのまま対応するつもりです。

→ 64bit環境でもint32で動作しました。

Raspberry Pi 4B実機でのログ

$ pip3 show numpy --version
Name: numpy
Version: 1.21.3

$ python3 ../../example/python/run.py --text "これは本当に実行できているんですか" --speaker_id 1
Traceback (most recent call last):
  File "/home/pi/.local/lib/python3.7/site-packages/numpy/core/fromnumeric.py", line 57, in _wrapfunc
    return bound(*args, **kwds)
TypeError: Cannot cast array data from dtype('int64') to dtype('int32') according to the rule 'safe'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "../../example/python/run.py", line 48, in <module>
    run(**vars(parser.parse_args()))
  File "../../example/python/run.py", line 32, in run
    f0_correct=f0_correct,
  File "/home/pi/git/voicevox_core/example/python/forwarder.py", line 150, in forward
    phoneme_list_s, numpy.round(phoneme_length * rate).astype(numpy.int64)
  File "<__array_function__ internals>", line 6, in repeat
  File "/home/pi/.local/lib/python3.7/site-packages/numpy/core/fromnumeric.py", line 479, in repeat
    return _wrapfunc(a, 'repeat', repeats, axis=axis)
  File "/home/pi/.local/lib/python3.7/site-packages/numpy/core/fromnumeric.py", line 66, in _wrapfunc
    return _wrapit(obj, method, *args, **kwds)
  File "/home/pi/.local/lib/python3.7/site-packages/numpy/core/fromnumeric.py", line 43, in _wrapit
    result = getattr(asarray(obj), method)(*args, **kwds)
TypeError: Cannot cast array data from dtype('int64') to dtype('int32') according to the rule 'safe'

@aoirint
Copy link
Member Author

aoirint commented Nov 2, 2021

手元の64bit Ubuntu環境ではint32を使用してエラーは発生しませんでした(int64への変換が走る場合でも拡大変換=int32→int64だから動作しそう)。

また、ENGINEのSynthesisEngineの実装ではint32になっているのかなと思いました。

https://github.com/Hiroshiba/voicevox_engine/blob/6802185a2db89b53f5b1683a6d354eee15026ce1/voicevox_engine/synthesis_engine.py#L429

@aoirint aoirint marked this pull request as ready for review November 2, 2021 11:47
@aoirint aoirint changed the title numpy.repeatのrepeatsにnumpy.int32を渡すようにする Forwarderの処理中にダウンキャストに失敗する問題の修正 Nov 2, 2021
@aoirint aoirint changed the title Forwarderの処理中にダウンキャストに失敗する問題の修正 Forwarderの処理中にダウンキャストに失敗する問題の修正(32bit環境) Nov 2, 2021
@aoirint aoirint changed the title Forwarderの処理中にダウンキャストに失敗する問題の修正(32bit環境) Forwarderの処理中に縮小変換に失敗する問題の修正(32bit環境) Nov 2, 2021
@aoirint aoirint changed the title Forwarderの処理中に縮小変換に失敗する問題の修正(32bit環境) Forwarderの処理中に数値型の縮小変換に失敗する問題の修正(32bit環境) Nov 2, 2021
@aoirint aoirint changed the title Forwarderの処理中に数値型の縮小変換に失敗する問題の修正(32bit環境) Forwarder: 数値型の縮小変換により処理に失敗する問題の修正(32bit環境) Nov 2, 2021
@aoirint aoirint changed the title Forwarder: 数値型の縮小変換により処理に失敗する問題の修正(32bit環境) Forwarder: 数値型の縮小変換により実行時例外が起きる問題の修正(32bit環境) Nov 2, 2021
@aoirint aoirint changed the title Forwarder: 数値型の縮小変換により実行時例外が起きる問題の修正(32bit環境) Pythonサンプルコード: 数値型の縮小変換により実行時例外が起きる問題の修正(32bit環境) Nov 2, 2021
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!!
64→32がエラーになるのを知りませんでした・・・!

@Hiroshiba Hiroshiba merged commit 3fcdc73 into VOICEVOX:main Nov 2, 2021
@aoirint aoirint deleted the patch-repeat-int32 branch October 17, 2022 08:03
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