Unity/Unity ML-Agents

Unity ML-Agents 2.3.0 업데이트

pnltoen 2022. 6. 30.
반응형

ML-Agents 2.3.0

ML-Agents Updates


ML-Agents가 2.3.0으로 업데이트 되었습니다. 3.30 기준 현재 Github에는 반영되어 있지 않지만, Unity LTS 버전 Package Manager에서 설치 및 changelog를 확인할 수 있습니다. 반년정도 잘 업데이트가 되지 않았는데.... 다시 열심히 개발하는 것 같습니다.

 

 

Refactored to support USP

 

몇몇 코드가 리팩토링되었습니다. 리팩토링이란, 간단하게 말해서 기능에는 달라진 것이 없으나 코드를 재작성했다는 이야기입니다. 하지만 직접 확인해보니까 몇가지 바뀐 것 같습니다.

유니티에서 사용하는 몇몇 함수 (awake, onenable은 확실하게 확인하였습니다)와 ML-Agents를 같이 사용할 때 예전에는 별다른 조치를 취하지 않아도 됐지만, 이제는 아래와 같이 base.Awake() 또는 base.OnEnable()을 호출해주어야 합니다.

        /// <summary>
        /// Called when the Agent is being loaded (before OnEnable()).
        /// </summary>
        ///<remarks>
        /// This function registers the RpcCommunicator delegate if no delegate has been registered with CommunicatorFactory.
        /// Always call the base Agent class version of this function if you implement `Awake()` in your
        /// own Agent subclasses.
        /// </remarks>
        /// <example>
        /// <code>
        /// protected override void Awake()
        /// {
        ///     base.Awake();
        ///     // additional Awake logic...
        /// }
        /// </code>
        /// </example>
        protected internal virtual void Awake()
        {
#if UNITY_EDITOR || UNITY_STANDALONE
            if (!CommunicatorFactory.CommunicatorRegistered)
            {
                Debug.Log("Registered Communicator.");
                CommunicatorFactory.Register<ICommunicator>(RpcCommunicator.Create);
            }
#endif
        }

        /// <summary>
        /// Called when the attached [GameObject] becomes enabled and active.
        /// [GameObject]: https://docs.unity3d.com/Manual/GameObjects.html
        /// </summary>
        /// <remarks>
        /// This function initializes the Agent instance, if it hasn't been initialized yet.
        /// Always call the base Agent class version of this function if you implement `OnEnable()`
        /// in your own Agent subclasses.
        /// </remarks>
        /// <example>
        /// <code>
        /// protected override void OnEnable()
        /// {
        ///     base.OnEnable();
        ///     // additional OnEnable logic...
        /// }
        /// </code>
        /// </example>
        protected virtual void OnEnable()
        {
            LazyInitialize();
        }

 

onenable, awake는 사실 자주 사용하는 것으로 알고있는데 업데이트를 하실 경우에 위의 주석과 같이 수정해주시길 바랍니다. Unity Simulation Pro 서포트를 하면서 위의 내용이 바뀌었네요...ㅎㅎ

***Unity Simulation Pro의 경우에는 정리해서 별도의 포스팅을 작성하도록 하겠습니다***

 

PettingZoo Multi-Agent API

 

Petting Zoo를 지원한다고 하는데 PettingZoo: A Standard API for Multi-Agent Reinforcement Learning 논문을 보니 MARL의 스탠다드한 라이브러리라고 합니다. Unity ML-Agetns Gym Wrapper 참고!

기존 Limitations 을 보면 싱글 에이전트만 지원하는 한계가 있었는데 아무래도 강화학습의 동향이 멀티-에이전트 (MARL) 그리고 Offline Learing이다 보니 관련한 내용을 지원하고자 하는 것을 확인할 수 있습니다.

이는 제가 지난번에 발표한 Unity Live 1월 영상 RoadMap 에서도 확인하실 수 있습니다.

 

Min Supported Version

 

이제 파이썬 3.7.2 ~ 3.9.10까지 지원합니다. Unity Barracuda 의존성을 3.0.0으로 올렸는데 이는 앞으로 적용할 Custom Python Trainer 때문인 것으로 보입니다. Barracuda 3.0.0의 경우에는 기존 Barracuda 2.4.0 베타에서 넘버링만 변경된 것으로 개발자를 통해 확인하였습니다.

 

Bug Fixes

 

버그 픽스...라고만 되어있고 특별한 내용이 없습니다. ML-Agetns 2.2.1 버전에서 Joint script가 들어간 trained model의 성능이 낮은 것을 확인하고 티켓을 발급 받았는데 관련 코멘트가 없네요. f/up 하고 추후 포스팅 작성하도록 하겠습니다.

반응형

댓글