AI

mlagents-learnコマンドがエラーで実行できない時の対応

  • このエントリーをはてなブックマークに追加
  • LINEで送る

Unityプロジェクトでエージェント強化学習のプログラムを作成して、
いざPythonで学習しようとmlagents-learnコマンドを実行!
ても、エラーが…

この記事では、初心者がmlagents-learnコマンドを実行エラーを解消する方法に焦点を当てました。

    『エラーの解消方法は?』

    『エラーのパターンは?』

    『どうやってエラー内容を分析するの?』

    こんな疑問に答えます。

    SE歴25年のオッサンが解説するぞい!
    SEおっさん
    SEおっさん

    mlagents-learnコマンドのエラーで実行できない対処法

    mlagents-learnコマンドを実行時にエラーが良く発生します。

    エラーの対処法はで次の通り。シンプルです。

    エラーの対処法
    1. エラー内容の確認
    2. エラーの和訳
    3. エラーの分析
    4. 分析結果の対応

    まずは、落ち着いてエラー内容をみましょう。
    エラー内容がチンプンカンプンの英語でも、日本語に和訳すれば何を言っているのか意外とわかります。
    何をいっているかわかれば、分析もできて対応方法も簡単に思いつくのです。

    エラー内容を落ち着いて分析すれば大丈夫!
    食わず嫌いしないで、よくエラー内容を読んでみよう♪

    私が実際にmlagents-learnコマンド実行時に発生したエラーと対処方法もお伝えします。
    私が導入した環境は次の通りです。この環境でエラーが発生して対応しました。
    エラーはPythonライブラリのバージョン互換性による問題がほとんど。

    参考にしてください。
    では、頑張ってエラーメッセージを解読して対応しましょー

    『そもそもml-agentsって何?』という場合はこちら。

    UnityのML-Agentsとは!?仕組みをざっくり解説
    UnityのML-Agentsとは!?仕組みをざっくり解説
    この記事では、Unity ML-Agentsの仕組みをまとめることに焦点を当てました。(半分は備忘録です) 『UnityのML-agentsって何?』 『ML-.....


    スポンサーリンク

    ケース1: protobufバージョンエラー

    • エラー内容の確認
      File "c:\python\unity-ml-agents\env\lib\site-packages\google\protobuf\descriptor.py", line 561, in __new___message.Message._CheckCalledFromGeneratedFile()
      TypeError: Descriptors cannot not be created directly.If this call came from a _pb2.py file, your generated code is out of date and must be regenerated with protoc >= 3.19.0.
      If you cannot immediately regenerate your protos, some other possible workarounds are:
       1. Downgrade the protobuf package to 3.20.x or lower.
       2. Set PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=python (but this will use pure-Python parsing and will be much slower).
    • エラーの和訳&分析
      プロトをすぐに再生できない場合、他の回避策としては以下のようなものが考えられる:
      1. protobufパッケージを3.20.x以下にダウングレードする。
      2. 2.PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION=pythonに設定する(ただし、これは純粋なPythonパースを使用するため、かなり遅くなります)。

      「protobufパッケージを3.20.x以下にダウングレードすればいい」
      とわかりますね。次の対応でOKです。

    • 対応:バージョンを合わせる
      pip install protobuf==3.20

    ケース2: numpyバージョンエラー

    • エラー内容の確認
      File "c:\python\unity-ml-agents\env\lib\site-packages\numpy\__init__.py", line 305, in __getattr__ raise AttributeError(__former_attrs__[attr])
      AttributeError: module 'numpy' has no attribute 'float'.
      `np.float` was a deprecated alias for the builtin `float`. To avoid this error in existing code, use `float` by itself. Doing this will not modify any behavior and is safe. If you specifically wanted the numpy scalar type, use `np.float64` here.
      The aliases was originally deprecated in NumPy 1.20; for more details and guidance see the original release note at: https://numpy.org/devdocs/release/1.20.0-notes.html#deprecationsか
    • エラーの和訳&分析
      np.float`は、組み込み関数 `float` の非推奨のエイリアスです。
      既存のコードでこのエラーを回避するには、`float`を単独で使用してください。
      こうすることで動作が変更されることはなく、安全である。特に numpy のスカラ型が必要な場合は、ここで `np.float64` を使用する。
      このエイリアスは、NumPy 1.20で非推奨となりました。
      詳細とガイダンスについては、 https://numpy.org/devdocs/release/1.20.0-notes.html#deprecations のリリースノートを参照してください。

      『このエイリアスは、NumPy 1.20で非推奨となりました。』
      とありますね。
      1.20で非推奨なので、NumPy 1.19ならOKと分析しましょう。
      次の対応でOKです。意外と簡単ですね。

    • 対応:バージョンを合わせる
      pip install numpy==1.19


    スポンサーリンク

    ケース3: sixのエラー

    • エラー内容の確認
      File "c:\python\unity-ml-agents\env\lib\site-packages\torch\utils\tensorboard\writer.py", line 5, 
      in  import six ModuleNotFoundError: No module named 'six'
    • エラーの和訳&分析
      six' という名前のモジュールはありません

      エラーを分析して再インストールすれば良いと判断しました。
      次の対応で無事にエラーを解消です。

    • 対応:再インストールする
      pip uninstall six
      pip install six

    以上で、Unity ML-Agentsの環境が正しく構築され、開発環境が準備されます。
    各ステップでエラーが発生した場合は、エラーメッセージに従って対応策を実行してください。
    エラーメッセージを見てもわからない場合は、検索でググって同じエラーの事例を探してみましょう。

    ML-agents release19を導入する5つのステップ
    ML-agents release19を導入する5つのステップ
    UnityのML-agentsの導入は、多くのゲーム開発者や機械学習エンジニアにとって、新しい可能性を切り拓くための重要なステップです。 この記事では、初心者が.....

    SEおっさん
    SEおっさん
    ここまで読んでくれてありがとう!

    「記事を読んでもわからないトコがある」「内容が変だよ」
    という時は、お気軽にコメントください♪

    「もっとSEおっさんに詳しく聞きたい。何かお願いしたい!」
    という時は、ココナラまで。メッセージもお気軽に♪

    LINEでのお問合わせも受付中!
    LINE公式アカウント

    メッセージをお待ちしています!

    取得資格
    • 応用情報技術者
    • Oracle Master Gold
    • Java Silver SE
    • Java EE Webコンポーネントディベロッパ
    • Python エンジニア認定データ分析
    • 簿記2級


    スポンサーリンク
    • このエントリーをはてなブックマークに追加
    • LINEで送る

    コメントを残す

    *