티스토리 뷰

아마 로봇과 관련된 강화학습을 시도하려다 보면 거의 한번쯤 마주치게 될 것이 mujoco라는 robot simulator이다. 그런데 아마 그리고 이를 실제로 python에서 개발하려면 openai에서 개발한 mujoco_py라는 wrapper를 활용하게 될 것이다. 그런데 아마 나와있는 가이드대로 설치하고 테스트하려다보면 다음과 같은 에러가 출력되는 경우가 있다.

ERROR: GLEW initalization error: Missing GL version

 mujoco에서는 Visualization시 그래픽 라이브러리로 OpenGL을 사용하는데, 위 오류는 mujoco에서 요구하는 opengl을 찾지 못했다는 것이다. 이는 현재 사용하는 PC상에 OpenGL라이브러리 (libGLEW.so, libGL.so)가 설치되어 있지 않아서 일수도 있고, 혹은 해당 프로그램 실행시 라이브러리 로드에 실패해서 일수도 있다. 

 우선 이 문제를 해결하기 위해서는 다음 Path에 위의 라이브러리가 있는지를 확인해본다.

/usr/lib/x86_64-linux-gnu/libGLEW.so
/usr/lib/nvidia-<현재 설치된 nvidia driver의 major version>/libGL.so

(* nvidia driver의 버전을 알고 싶으면 terminal에서 nvidia-smi -h를 수행해보면 된다. 그러면 상단에 나온다.)
$ nvidia-smi -h
NVIDIA System Management Interface -- v396.44

 그리고 OpenGL특성상 프로그램에서 렌더링을 할경우 사전에 해당 라이브러리를 preload시켜줘야 하는데 이는 시스템 환경변수(LD_PRELOAD)를 활용한다.

$ export LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGLEW.so:/usr/lib/nvidia-396/libGL.so

 이렇게 하면 mujoco 렌더링이 되는 것을 확인할 수 있다. 다음은 openai gym내의 FetchReach라는 env를 rendering해본 것이다.

(추가 :2020/04/27)

nvidia에서 기본적으로 제공하는 드라이버를 사용하다보면 libGL.so 가 위에서 명시한 폴더가 아닌 default library(/usr/lib/x86_64-linux-gnu/libGL.so)에 있는 경우가 있다. 또는 libGLEW.so가 없는 경우도 있는데 이 때는 설치해주고 LD_PRELOAD에 해당 경로를 지정해주면 된다.

$ sudo apt install libglew-dev libgl-dev

$ echo LD_PRELOAD=/usr/lib/x86_64-linux-gnu/libGL.so:/usr/lib/x86_64-linux-gnu/libGLEW.so


댓글