티스토리 뷰

Study/AI

[RL] Windows 10에서 mujoco_py 구동

생각많은 소심남 2021. 1. 26. 22:21

이전에 Linux에서 mujoco-py를 돌릴 때 발생할 수 있는 그래픽 라이브러리 관련 오류를 해결하는 방법에 대해서 공유한 적이 있다. 사실 그것도 그러려니와 Linux에서 할 수 있는게 많아, 집에서도 Windows 10이랑 Linux랑 듀얼부팅으로 설치해서 사용하고 있다. 그런데 아무래도 Windows 10에서 Linux로 넘어가려면 재부팅도 해야되고, 신경쓸게 많아져 Windows 10에서 할 수 있는 방법이 있지 않을까 찾아보다가, 마침 이와 관련된 이 있어서 직접해보고 공유해보고자 한다.

 

Install OpenAI Gym with Box2D and Mujoco in Windows 10

How to install OpenAI Gym[all] with Box2D v2.3.1 and Mujoco200 in Windows 10 using Anaconda3 and python3.6+

medium.com

우선 mujoco 엔진 (+ mujoco-py)를 윈도우 환경에서 구동시키려면 중간에 소스 빌드를 해줘야 한다. linux에서야 gcc가 기본 컴파일러지만, windows 10에서는 기본으로 설정되어 있지 않기 때문에 MS에서 제공하는 Visual C++ build tool을 설치해준다. 아마 여기에 가면 하단부에 Build Tools for visual studio 2019 가 있을텐데, 해당 파일을 받고 설치해준다. 참고로 설치시 여러가지 설치 항목이 있을텐데, 우리는 C++ build만 되면 되므로 C++ 항목만 선택하고 설치해준다.

다음은 mujoco 엔진을 받아준다. 역시 mujoco사이트에 가면 v1.3부터 최신버전인 v2.0까지 있다. 예전에는 호환성 이슈때문에 v1.5을 써라 말이 많았는데, 지금은 v2.0도 정상적으로 잘동작하는 것 같다. 내 환경에서도 mujoco200 win64를 설치했다.

 

MuJoCo

MuJoCo 2.0 was released on October 1, 2018. The list of changes is below. MuJoCo    (formerly MuJoCo Pro) MuJoCo is a dynamic library with C/C++ API. It is intended for researchers and developers with computational background. It includes an XML parser,

www.roboti.us

아마 다운로드 받으면 하나의 압축파일이 나올텐데, 그 파일을 원하는 경로에 풀어넣는다. 중요한 것은 되도록이면 경로에 한글이 들어있으면 안되고, 추천하는 것은 계정폴더 밑에 .mujoco라는 폴더를 만들고 그 안에 집어넣는 것이다. 경로가 어디든 상관이 없고, 중요한 것은 환경변수의 PATH에서 해당 경로가 포함되어야 한다는 점이다. 예시로 내가 지정한 경로이다.

그림 1. 환경변수 PATH 정의

참고로 mujoco는 license의 영향을 크게 받기 때문에 아래 설치 과정을 진행하기 전에 반드시 license 발급을 받아야 한다. 역시 이에 대한 링크가 제공되고, 상업적으로 사용하지 않는 이상 학생이면 1년 무료 계정을 발급받을 수 있다. 아무튼 정상적으로 license를 발급받으면 메일로 mjkey.txt 파일이 오는데, 그 파일을 앞에서 mujoco를 압축해제한 폴더에 넣어준다. 그리고 key와 mujoco binary에 대한 PATH도 따로 경로를 잡아준다.

그림 2. 환경 변수 추가

이제 소스를 컴파일해야 되는데, 우선 모든 설치가 anaconda에서 이뤄지므로 conda environment를 하나 만들고 다음과 같이 패키지를 쭉 설치한다.

# gym 설치
pip install gym

# pystan swig 설치
conda install -c conda-forge pystan swig

# Box2D 설치
pip install Box2D

# pyglet 설치
conda install -c conda-forge pyglet

# Atari-py 설치
pip install atari-py

# Mujoco-py 설치를 위한 선행 패키지 설치
pip install cffi
pip install pygit2

# mujoco-py 소스 빌드를 위한 패키지 설치
git clone https://github.com/openai/mujoco-py.git
pip install -r requirements.txt
pip install -r requirements.dev.txt

아마 여기까지는 Linux에서 설치하는 것과 비슷할텐데, 이제부터 windows에서 빌드하기 위해서 일부 코드를 고쳐야 한다. 바로 이전에 mujoco-py의 repository로 들어가서 "./scripts/gen_wrappers.py", "./mujoco_py/generated/wrappers.pxi" 두 개의 파일을 연다. 여기서

isinstance(addr, (int, np.int32, np.int64))

를 아래와 같이 바꿔준다. 

hasattr(addr, '__int__')

(아마 내 기억에는 수정할 부분이 그렇게 많지 않았었던 것 같다. 한 두군데 정도?)

이제 mujoco 엔진을 빌드하면 된다. 다음 명령을 수행하면, 정상적으로 compiler와 license가 잘 설치되어 있다면, 컴파일이 이뤄질 것이다.

# mujoco_py compile
python -c "import mujoco_py"

# mujoco-py install
python setup.py install

(내가 경험했던 오류는 처음에는 Compiler Path가 정상적으로 인식되지 않아, 발생한 문제였었고, 해당 문제는 재부팅한후에 Path가 정상적으로 인식되는 것을 확인하고 진행했었다. 두번째 오류가 바로 License 오류인데, 간혹 windows 환경임에도 mjkey가 Linux 용일 경우가 있는 것 같다. 이는 mjkey.txt를 한번 확인해봐야 한다. 그래서 중간에 나와있는 system과 내 환경이 일치해야 컴파일된다.)

그리고 마지막으로 원래는 openai gym에 포함되어 있는 mujoco example을 같이 설치하면 된다.

# gym install
pip install gym[all]

여기까지 오류가 없었으면, 이제 mujoco 엔진을 돌릴수 있는 환경이 마련된 것이다. openai gym에서는 다양한 mujoco environment가 구현되어 제공되고, 그중 하나인 halfcheetah-v2를 한번 돌려본다.

import gym # openAi gym
from gym import envs

env = gym.make('HalfCheetah-v2')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample()) # take a random action
env.close()

아마 render가 이뤄지면서 다음과 같은 창이 뜰 것이다.

그림 3. halfcheetah-v2 수행

사실 실제 학습할때는 render를 꺼버리고 하고, agent가 잘 학습되었는지 확인하는 차원에서 render가 되는지 확인해보는 정도이다. 중요한 것은 terminal에서도 보이는 것처럼 action에 대한 interaction으로 state와 reward가 같이 나오는 것까지 확인할 수 있다는 점이다.

혹시나 윈도우 환경에서 강화학습 환경을 구축해보고자 하는 사람한테는 도움이 되었으면 좋겠다.

댓글