강화 학습/ML-Agent

Unity ML-Agent 설치하기

with-RL 2023. 8. 5. 11:53

이번 포스팅은 가상공간에서 강화학습을 이용해 인공지능을 학습할 수 있는 환경을 제공하는 Unity ML-Agent를 설치하는 과정입니다.

 

이 포스트는 아래 내용을 참고했습니다.

이 포스트의 실행 환경은 아래와 같습니다.

  • M1 Mac Ventura 13.5 / Windows 11
  • Unity 2021.3.* LTS 버전

1. ML-Agent 소스코드 다운로드

  • 터미널에서 적당한 위치로 이동 후 아래 명령을 실행해서 ML-Agent 소스코드를 clone 후 폴더로 이동합니다.
$ git clone --branch release_20 https://github.com/Unity-Technologies/ml-agents.git
$ cd ml-agents

2. Python 환경 설정 (Windows)

  • Windows에서 Python 환경을 설정하는 과정입니다.
  • 터미널에서 아래 명령을 실행해서 Anaconda를 이용해 Python 가상환경을 만듭니다. Anaconda가 설치 돼 있지 않다면 'Windows에서 Python Minoconda 설치하기'를 참고하세요.
$ conda create -n robot python=3.9
$ conda activate robot
  • 다음은 터미널에서 아래 명령을 실행해서 딥러닝 프레임워크인 Pytorch를 설치합니다.
$ pip install torch -f https://download.pytorch.org/whl/torch_stable.html
  • 다음은 터미널에서 아래 명령을 실행해서 ML-Agent 동작에 필요한 라이브러리를 설치합니다.
$ pip install -e ./ml-agents-envs
$ pip install -e ./ml-agents
  • 다음은 터미널에서 아래 명령을 실행해서 protobuf를 설치합니다.
$ pip install --upgrade "protobuf<=3.20.1"

3. Python 환경 설정 (M1 Mac)

  • M1 Mac에서 Python 환경을 설정하는 과정입니다. Windows와 달리 설치과정이 조금 더 번거롭습니다.
  • 터미널에서 아래 명령을 실행해서 Anaconda를 이용해 Python 가상환경을 만듭니다. 
$ conda create -n robot python=3.9
$ conda activate robot
  • 다음은 터미널에서 아래 명령을 실행해서 딥러닝 프레임워크인 Pytorch를 설치합니다. M1 Mac에서는 Pytorch 최신 버전과는 호환성 문제가 있는 것으로 보입니다.
$ pip install torch==1.12.1 torchvision==0.13.1 torchaudio==0.12.1
  • 다음은 터미널에서 아래 명령을 실행해서 hdf5 라이브러리를 설치합니다.
$ brew install hdf5
$ export HDF5_DIR=/opt/homebrew/Cellar/hdf5/1.14.1/
$ pip install --no-binary=h5py h5py
  • 다음은 Editor에서 'ml-agents/setup.py' 파일의 내용 중 torch 관련 내용에 기존 내용을 comment 하고 아래 내용을 추가합니다.
"torch>=1.8.0,<=2.0.1;(platform_system!='Windows' and python_version>='3.9')",

  • 다음은 터미널에서 아래 명령을 실행해서 ML-Agent 동작에 필요한 라이브러리를 설치합니다.
$ pip install -e ./ml-agents-envs
$ pip install -e ./ml-agents
  • 다음은 터미널에서 아래 명령을 실행해서 protobuf를 설치합니다.
$ pip install --upgrade "protobuf<=3.20.1"
  • 다음은 터미널에서 아래 명령을 실행해서 grpcio를 설치합니다.
$ conda install grpcio

4. Unity에서 ML-Agent Project 열기

  • Unity HUb에서 'Open'을 누릅니다.

  • Git에서 clone 받은 ml-agent 폴더 아래 Project 폴더를 선택합니다.

  • Unity 버전이 맞이 않을 경우 아래와 같은 확인창이 뜨면 계속 진행합니다.

  • 아래 그림과 같이 ml-agent Unity 프로젝트가 실행된 것을 확인할 수 있습니다.

5. 3DBall 예제 실행해 보기

  • Project 텝에서 ‘Assets’ >> ‘ML-Agents’ >> ‘Examples’ >> ‘3DBall’ >> ‘Scenes’ >> ‘3DBall’ Scene을 선택합니다. 아래 그림과 같이 공을 머리에 얹은 상자들이 보입니다.

  • Project 탭에서 ‘Assets’ >> ‘ML-Agents’ >> ‘Examples’ >> ‘3DBall’ >> ‘Prefabs’ >> ‘3DBall’ Prefab 선택 후 'Hierarchy' 창에서 'Agent'를 선택하면 우측 'Inspector' 창에서 정보를 확인할 수 있습니다.

  • 'Inspector' 창에서 버튼을 클릭하면 아래 그림과 같이 모델을 선택할 수 있습니다. 아래 그림과 같이 3DBall 모델을 선택합니다.

  • Unity에서 Play 버튼을 누르면 Agent가 동작하는 것을 확인할 수 있습니다.

6. 3DBall 모델 학습하기

  • 3DBall 모델을 직접 학습하는 과정입니다.
  • 기존에 학습된 모델이 아닌 새로운 모델을 학습하기 위해서 Project 탭에서 ‘Assets’ >> ‘ML-Agents’ >> ‘Examples’ >> ‘3DBall’ >> ‘Prefabs’ >> ‘3DBall’ Prefab의 'Agent'의 모델을 None으로 설정합니다.

  • 터미널에서 아래 명령을 실행해서 학습을 시작합니다.
    모델은 PPO를 사용하겠습니다.
    --run-id 값은 적당한 값을 주시면 됩니다.
$ mlagents-learn config/ppo/3DBall.yaml --run-id=first3DBallRun
  • 아래 그림과 같이 '[INFO] Listening on port 5004. Start training by pressing the Play button in the Unity Editor.' 메시지가 뜹니다.

  • Unity에서 Play 버튼을 누릅니다.

  • 터미널에서 아래와 같이 진행 내용을 확인할 수 있습니다.

  • 학습 Step이 진행됨에 따라서 Reward도 증가하는 것을 확인할 수 있습니다.

  • 학습이 완료되면 ml-agents/results/first3DBallRun/3DBall.onnx 파일을 확인할 수 있습니다. 이 파일이 학습된 결과 파일입니다.

  • ml-agents/results/first3DBallRun/3DBall.onnx 파일을 ml-agents/Project/Assets/ML-Agents/Examples/3DBall/TFModels 폴더로 복사합니다.

  • Project 탭에서 ‘Assets’ >> ‘ML-Agents’ >> ‘Examples’ >> ‘3DBall’ >> ‘Prefabs’ >> ‘3DBall’ Prefab의 'Agent'의 모델을 3DBall.onnx로 설정합니다.

  • 실행을 해보면 새로 학습한 모델 역시 잘 동작하는 것을 확인할 수 있습니다.