우분투 사용할 여건이 안되시면 이렇게 gym[atari]를 돌려보세요
windows 10 bash - WSL 환경은 windows 10 64bit build 14316 이상에서만 가능합니다.
한국에서 AI를 공부하다 보면 누구나 한 번쯤은 보게 되는 강의가 홍콩과기대 김성훈 교수님의 강의 라면,
누구나 한 번쯤 도전해보게 되는 예제가 openAI gym이라고 할 수 있다.
그런데 이 gym 안에서 Atari 쪽 예제들은 windows 환경을 지원하지 않는다.
나같이 windows 환경에 친숙한 개발자들에겐 참으로 안타까운 일이 아닐 수 없다.
atari 쪽 게임들이 재밌어 보여서 구글링을 시작했다.
그런데 a to z 까지 딱 이거다 하는 포스팅이 보이지 않아서 한 번 정리해 보았다.
사실 운영체제로 우분투를 사용하면 이런 복잡한 방법은 사용하지 않아도 된다.
당장 atari 게임에 도전해보고 싶은데 상황상 windows 환경에서만 가능할 때,
windows 10 bash 환경을 경험해보고 싶을 때,
한 번 사용해보자.
우선 이 모든 게 쉬워진 이유는 아래처럼 윈도우 10에서 bash shell 지원이 업데이트되었기 때문이다.
참고로 이 기능을 Windows Subsystem for Linux 줄여서 WSL이라고 많이들 부르는 것 같다.
https://blogs.msdn.microsoft.com/eva/?p=7633
위 블로그 포스팅의 핵심 내용은 아래와 같다.
윈도우 환경에서
리눅스 Command Line Interface를 사용하기 위해서 기존에는
윈도우 플랫폼에서 실행할 수 있는 유닉스 환경인 Cygwin을 이용하거나
가상 머신 혹은 컨테이너를 이용해야 했습니다.
기존 환경의 문제점을 개선하기 위해
마이크로소프트와 우분투를 창립한 캐노니컬(Canonical)이라는 회사가 합작하여
우분투 리눅스에서 수행되는 Bash shell 바이너리 그 자체를
윈도우에서 수행할 수 있도록 만들었습니다.
사용해보니 별도의 프로그램 설치 없이 윈도우에서 윈도우용 우분투만 다운로드하여 설치하면
바로 bash shell을 사용할 수 있다는 게 가장 큰 장점이다.
그럼 시작해보자.
설정은 아래 사이트대로 따라 하면 된다. 어렵지 않다.
https://docs.microsoft.com/en-us/windows/wsl/install-win10
위 포스팅은 영어다. 아직 한글 지원이 안된단다. 그래서 아래에 적당히 한글로 옮겨놨다.
일단 관리자 권한으로 파워쉘을 실행해서 아래 명령을 실행한다. WSL이 활성화된다.
Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Windows-Subsystem-Linux
다음으로 윈도우 빌드 버전을 확인한다. 빌드 버전에 따라 두 가지 방법이 있다. 어느 쪽이든 쉽다.
버전은 아래와 같이 확인하면 된다.
확인된 버전이 16215 이전 버전이라면 아래 링크를 따라 하면 된다.
16215 이후 버전이면 아래 내용대로 따라 하면 된다.
아래 3가지 버전이 제공된다.
Ubuntu 우분투
https://www.microsoft.com/store/p/ubuntu/9nblggh4msv6
OpenSUSE
https://www.microsoft.com/store/apps/9njvjts82tjx
SLE
https://www.microsoft.com/store/apps/9p32mwbh6cns
Ubuntu를 선택하고 다운로드 하자.
실행하면 아래와 같이 Ubuntu 인스톨 과정이 진행된다.
이후 계정 설정까지 완료하면 bash 환경이 나타난다.
자 이제 윈도우10 에서 우분투 환경 설정이 완료되었다.
여기선 윈도우용으로 설치했던 기존 프로그램들은 사용할 수 없으니,
다시 기본적인 개발환경 세팅이 필요하다.
sudo apt-get update
sudo apt full-upgrade
sudo apt-get install cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev libboost-all-dev libsdl2-dev swig git g++
(세 번째 명령을 실행하지 않으면 추후 gym[atari] 설치 시 에러가 난다. )
내 노트북은 nvidia geforce gtx 960m이다.
windows 10 bash 환경에선
sudo apt-get http://kr.download.nvidia.com/XFree86/Linux-x86_64/390.25/NVIDIA-Linux-x86_64-390.25.run
이 명령어로 드라이버를 깔면 실패한다.
정확한 원인은 잘 모르겠지만 애초에 X org 서버를 지원하지 않는 WSL이라서 그런 것 같기도 하다.
그래서 아래 명령어로 대신하였다.
sudo apt-get install nvidia-375
아래 링크를 읽어보면 문제가 발생하는 거 같기도 하지만 다른 대안을 찾을 수가 없어서 그냥 진행하였다.
gym[atari] 테스트까진 별 문제없었다.
혹시 대안을 아시는 분은 댓글로 알려주시면 정말 감사하겠다.
https://askubuntu.com/questions/836386/ubuntu-16-04-nvidia-drivers-dont-work-for-gtx-960m
이 프로그램은 우분투에서 GUI 프로그램을 실행하기 위해 윈도우에 설치하는 프로그램이다.
웹브라우저 firefox와 파일 관리자 nautilus, 압축 관리 프로그램 File Roller 등의 GUI Util 은 물론,
이후 Pycharm 실행하기 위해서 필요하다.
WSL은 GUI 프로그램을 실행하기 위한 X org 서버를 제공하지 않는다.
하지만 우분투에서 사용하는 X windows system은 기본적으로 서버-클라이언트 구조로 설계되어 있기 때문에 로컬뿐 아니라 원격지 서버로 화면을 띄우는 게 가능하다.
X org 및 우분투에서 사용하는 그래픽 시스템, X Windows System에 대해서 궁금하다면,
아래 링크를 참조해보자.
https://ko.wikipedia.org/wiki/X_%EC%9C%88%EB%8F%84_%EC%8B%9C%EC%8A%A4%ED%85%9C
따라서 GUI 프로그램을 실행하기 위해선 정보를 받아줄 X org 서버를 윈도우에 설치해야 한다.
설치된 X org 서버는 우분투에서 실행된 GUI 프로그램이 보내는 정보를 받아 윈도우 환경에서 화면을 띄워줄 것이다.
구글링 해보면 대표적인 X org 서버로 Xming과 VCXSRV 가 나온다.
(연관검색어로 Xming vs VCXSRV 가 뜨기도 한다)
난 먼저 손에 잡힌 VCXSRV로 설치했다.
https://sourceforge.net/projects/vcxsrv/files/vcxsrv/
설치하고 실행하면 아무 화면도 뜨지 않는다.
트레이 아이콘을 확인해보면 실행됐는지 알 수 있다.
위 사이트에 자세하게 설명 잘 되어 있다. 그대로 따라 하면 된다.
아래 명령어만 별도로 짧게 설명하겠다.
export DISPLAY=:0 (zero다)
export는 환경변수를 설정하는 명령어다.
X 윈도우 시스템은 서버 클라이언트 구조 특성상 여러 대의 디스플레이 사용이 가능하다.
디스플레이들은 0부터 차례대로 넘버링되며 따라서 :0 은 첫 번째 로컬 디스플레이를 의미한다.
윈도우에 X org 서버를 띄워놓았기 때문에 위와 같이 세팅하면 우분투 GUI 프로그램은 VCXSRV를 통해 윈도우에 뜨게 될 것이다.
같은 리눅스 시스템이라면 디스플레이될 pc1(x.x.x.x)에 아래 명령어를 실행해놓고
xhost + y.y.y.y
디스플레이를 내보낼 pc2(y.y.y.y)에서
export DISPLAY=x.x.x.x:0.0
이런 식으로 IP를 지정해서 띄울 수도 있다.
위 링크대로 잘 설치했다면, 아래 그림처럼 윈도우에서 firefox와 우분투 파일 관리 프로그램 nautilus가 제대로 나타난 걸 확인할 수 있다.
기본적으로 우분투에 python 3.5가 내장되어 있긴 하다. 3.5로도 실행되지만, 최신 버전을 사용하고 싶어서 아나콘다를 통해 3.6 버전으로 사용할 것이다.
firefox로 아래 링크 들어가서 파일 다운로드하고 실행하면 설치된다.
https://docs.anaconda.com/anaconda/install/linux
마지막에 ms visual studio code 설치할 거냐고 물어보는데 난 pycharm을 사용할 거라 안 한다고 했다.
아래와 같이 환경 변수만 세팅해놓았다.
export PATH=~/anaconda3/bin:$PATH
구글에 pycharm이라고 치면 제일 위에 pycharm 개발사 jetbrains 홈페이지가 나온다.
다운로드로 들어가면 os 인식해서 딱 맞는 버전으로 나온다.
유료인 professional 버전과 무료인 community 버전이 나오는데 난 커뮤니티 버전을 깔았다.
참고로 pycharm 커뮤니티 버전은 상업용으로 회사에서 써도 아무 문제없다.
(둘 간의 차이 중 내가 아쉬웠던 가장 큰 차이는 프로페셔널 버전에만 있는 원격지 환경 지원 기능이다. )
pycharm은 이클립스처럼 다운로드하고 압축 풀면 바로 사용 가능하다.
실행하면 몇 가지 세팅 절차 후 pycharm 이 실행된다.
난 ui 테마로 dracula를 선택했고, 추가로 markdown 지원과 bash 지원을 설치했다.
실행하면 아래와 같은 화면이 나온다.
난 기존에 작업하던 프로젝트가 없어서 create new project 했다.
1번에서 원하는 프로젝트 명을 써주고
2번 화살표를 눌러서
3번으로 콘다 환경으로 새로 만들도록 설정한다. (아나콘다 사용 안 한다면 불필요)
4번으로 아나콘다 환경 이름을 지어준다. (역시 아나콘다 사용 안 한다면 불필요)
이후 pycharm에서 이용할 라이브러리들을 세팅해준다.
project interpreter 선택해서 원하는 파이썬 버전 선택한 후
1번 눌러서 프로젝트에서 쓸 라이브러리 패키지들을
2번처럼 이름으로 찾아주어
3번을 눌러 인스톨해주면 된다.
4번처럼 성공메시지가 나오면 잘 된 거다.
마지막으로 atari를 세팅해준다.
가끔씩 라이브러리가 안 보인다거나 라이브러리 검색이 안 되는 경우가 있었다.
내가 pycharm에 익숙지 않아서 원인을 잘 모르겠는데 아래 그림에서 아래 녹색 동그라미(use conda package manage)를 클릭해주면 잘 나타난다.
아나콘다를 사용하면 pycharm 실행 후 저 메뉴를 처음 들어갈 때마다 저 동그라미를 한 번씩 눌러줘야 하는 건지 아직 잘 모르겠다.
import gym
env = gym.make("SpaceInvaders-v0")
env.reset()
for _ in range(1000):
env.render()
env.step(env.action_space.sample())
원래 텐서플로우까지 이용해서 코드를 작성 후 실행 확인을 해보려고 했는데
글이 너무 길어져서 다음 글에서 확인해보겠다.