🤖

Error:Couldn't connect to trainer on port 5004(Unity ml-agents )

2021/05/21に公開

ml-agentsの環境構築におけるエラー

Unityでml-agentsを用いて強化学習をする際に環境構築が終わりいざ学習を始めようとするとCouldn't connect to trainer on port 5004~ というエラーが出ました。検索して出てきた解決方法ではうまくいかず、試行錯誤している中で解決方法を発見したので記載します。

発生している問題・エラーメッセージ

ml-agentsを導入し学習をスタートする以下のコマンドを入力

mlagents-learn ./config/trainer_config.yaml --run-id=~~~`

すると、

2020-05-28 19:37:39.944015: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2020-05-28 19:37:39.948579: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
WARNING:tensorflow:From D:\Anaconda\envs\ml-agents\lib\site-packages\tensorflow\python\compat\v2_compat.py:96: disable_resource_variables (from tensorflow.python.ops.variable_scope) is deprecated and will be removed in a future version.
Instructions for updating:
non-resource variables are not supported in the long term


                        ▄▄▄▓▓▓▓
                   ╓▓▓▓▓▓▓█▓▓▓▓▓
              ,▄▄▄m▀▀▀'  ,▓▓▓▀▓▓▄                           ▓▓▓  ▓▓▌
            ▄▓▓▓▀'      ▄▓▓▀  ▓▓▓      ▄▄     ▄▄ ,▄▄ ▄▄▄▄   ,▄▄ ▄▓▓▌▄ ▄▄▄    ,▄▄
          ▄▓▓▓▀        ▄▓▓▀   ▐▓▓▌     ▓▓▌   ▐▓▓ ▐▓▓▓▀▀▀▓▓▌ ▓▓▓ ▀▓▓▌▀ ^▓▓▌  ╒▓▓▌
        ▄▓▓▓▓▓▄▄▄▄▄▄▄▄▓▓▓      ▓▀      ▓▓▌   ▐▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▌   ▐▓▓▄ ▓▓▌
        ▀▓▓▓▓▀▀▀▀▀▀▀▀▀▀▓▓▄     ▓▓      ▓▓▌   ▐▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▌    ▐▓▓▐▓▓
          ^█▓▓▓        ▀▓▓▄   ▐▓▓▌     ▓▓▓▓▄▓▓▓▓ ▐▓▓    ▓▓▓ ▓▓▓  ▓▓▓▄    ▓▓▓▓`
            '▀▓▓▓▄      ^▓▓▓  ▓▓▓       └▀▀▀▀ ▀▀ ^▀▀    `▀▀ `▀▀   '▀▀    ▐▓▓▌
               ▀▀▀▀▓▄▄▄   ▓▓▓▓▓▓,                                      ▓▓▓▓▀
                   `▀█▓▓▓▓▓▓▓▓▓▌
                        ¬`▀▀▀█▓


 Version information:
  ml-agents: 0.16.0,
  ml-agents-envs: 0.16.0,
  Communicator API: 1.0.0,
  TensorFlow: 2.2.0
2020-05-28 19:37:41.755400: W tensorflow/stream_executor/platform/default/dso_loader.cc:55] Could not load dynamic library 'cudart64_101.dll'; dlerror: cudart64_101.dll not found
2020-05-28 19:37:41.760354: I tensorflow/stream_executor/cuda/cudart_stub.cc:29] Ignore above cudart dlerror if you do not have a GPU set up on your machine.
WARNING:tensorflow:From D:\Anaconda\envs\ml-agents\lib\site-packages\tensorflow\python\compat\v2_compat.py:96: disable_resource_variables (from tensorflow.python.ops.variable_scope) is deprecated and will be removed in a future version.
Instructions for updating:
non-resource variables are not supported in the long term
2020-05-28 19:37:43 INFO [environment.py:201] Listening on port 5004. Start training by pressing the Play button in the Unity Editor.

と表示されるので、Unity上でPlayボタンを押す。すると、

Couldn't connect to trainer on port 5004 using API version 1.0.0. Will perform inference instead.
UnityEngine.Debug:Log(Object)
Unity.MLAgents.Academy:InitializeEnvironment() (at C:/Users/USERNAME/OneDrive/ドキュメント/ml-agents-release_1/ml-agents-release_1/com.unity.ml-agents/Runtime/Academy.cs:394)
Unity.MLAgents.Academy:LazyInitialize() (at C:/Users/USERNAME/OneDrive/ドキュメント/ml-agents-release_1/ml-agents-release_1/com.unity.ml-agents/Runtime/Academy.cs:218)
Unity.MLAgents.Academy:.ctor() (at C:/Users/USERNAME/OneDrive/ドキュメント/ml-agents-release_1/ml-agents-release_1/com.unity.ml-agents/Runtime/Academy.cs:206)
Unity.MLAgents.<>c:<.cctor>b__80_0() (at C:/Users/USERNAME/OneDrive/ドキュメント/ml-agents-release_1/ml-agents-release_1/com.unity.ml-agents/Runtime/Academy.cs:78)
System.Lazy`1:get_Value()
Unity.MLAgents.Academy:get_Instance() (at C:/Users/USERNAME/OneDrive/ドキュメント/ml-agents-release_1/ml-agents-release_1/com.unity.ml-agents/Runtime/Academy.cs:93)
Unity.MLAgents.DecisionRequester:Awake() (at C:/Users/USERNAME/OneDrive/ドキュメント/ml-agents-release_1/ml-agents-release_1/com.unity.ml-agents/Runtime/DecisionRequester.cs:49)

このようなエラーが表示される。

ネットにはバージョンを下げたらうまくいったなどの記事があり、様々なバージョンを試したが私の環境ではうまくいかなかった。

解決方法

pathから日本語を取り除く。
私の環境で言うと C:/Users/USERNAME/OneDrive/ドキュメント/ml-agents-release_1/ml-agents-release_1/com.unity.ml-agents/Runtime/~~~ このドキュメントという部分です。これをローマ字のみのpath名に変更してあげると解決しました。

備考

このエラー文で検索するとバージョン関係の解決策がヒットするので、ずっとml-agentsのバージョンが原因だと考えていました。まさか、日本語のパスに対応していないとは想像していなかったのでかなり時間を取られました。やはり、パス名に日本語は禁物ですね。デフォルトで日本語名なの悪魔です。誰かの役に立つと幸いです。

Discussion