nvidia/parakeet-tdt_ctc-0.6b-jaをWindowsで動かす際のAttributeError: module 'signal' has no attribute 'SIGKILL'. Did you mean: 'SIGILL'?の対応

初めに

NVIDIAが公開している日本語音声向けの音声認識モデル nvidia/parakeet-tdt_ctc-0.6b-jaを Windowsで動かす際に以下のエラーが出た多ため、対応方法を記載します

packages\nemo\collections\asr\models\configs\asr_models_config.py", line 27, in <module>
    from nemo.core.config import modelPT as model_cfg
  File "C:\Users\.venv\Lib\site-packages\nemo\core\config\modelPT.py", line 22, in <module>
    from nemo.utils import exp_manager
  File "C:\Users\.venv\Lib\site-packages\nemo\utils\exp_manager.py", line 160, in <module>
    class FaultToleranceParams:
  File "C:\Users\.venv\Lib\site-packages\nemo\utils\exp_manager.py", line 169, in FaultToleranceParams
    rank_termination_signal: signal.Signals = signal.SIGKILL
                                              ^^^^^^^^^^^^^^
AttributeError: module 'signal' has no attribute 'SIGKILL'. Did you mean: 'SIGILL'?

開発環境

原因

このエラーは、PythonのsignalモジュールでSIGKILLシグナルが定義されていないことが原因です。Windows環境では、一部のUnix/Linux固有のシグナルがサポートされておらず、SIGKILLもその一つです。そのため、nemoライブラリがsignal.SIGKILLを使用しようとすると、Windows環境ではAttributeErrorが発生します。

対応方法

.venv\Lib\site-packages\nemo\utils\exp_manager.py にあるファイルの一部を書き換えます

class FaultToleranceParams内のrank_termination_signalを以下のように変更します。

修正前

rank_termination_signal: signal.Signals = signal.SIGKILL

修正後

import os
if os.name == 'nt':
    rank_termination_signal: int = signal.SIGTERM
else:
    rank_termination_signal: signal.Signals = signal.SIGKILL

備考

parakeetはnumpyが2.0.0以上だと以下のエラーになるため、1.x.xを使う必要があります

  File "C:\Users\.venv\Lib\site-packages\numpy\__init__.py", line 411, in __getattr__
    raise AttributeError(
AttributeError: `np.sctypes` was removed in the NumPy 2.0 release. Access dtypes explicitly instead.. Did you mean: 'dtypes'?