본문 바로가기

DEV

장진만쌤의 Sung Kim 교수님의 모두의 RL 수업을 보고 나서 따라 하기


2017년 10월 8일 페이스북 에 올라온 글 Sung Kim 교수님 강의를 듣고 슈퍼마리오게임을 돌렸다고 한다.

슈퍼마리오 게임을 학습시켰다 ... 워 ... 그 강의(Sung Kim 교수님의 강의) 나두 들었는데 ... 


우 ... 나도 해보고 싶다. 나도 혼자 슈퍼마리오 게임을 스스로 학습하는 거 그거 해보고 싶당 +_+


나와 똑같은 궁금증을 가진사람이 질문했다.


혹시 슈퍼마리오를 어떻게 실행시켰나요 참고하신자료링크가있을까요

나두 궁금 나두 궁금 but ...

https://github.com/ppaquette/gym-super-mario

달랑 링크한줄 ...


아... 


GitHub 를 어떻게 사용하는 건지 부터 공부해야 할 듯하다 거기가서 다운받으라고 링크들 걸어놓았는데 뭔소린지 알 수가 없내


다음은 GitHub 설명

https://nolboo.kim/blog/2013/10/06/github-for-beginner/

SVN의 웹 버전인건가 ? 

음... 일단 당장은 내가 만든 어떠한 소스를 관리하고자 하는 목적이 아니여서 ... skip




그렇게 애절한 마음 갈망 ? 그렇게 시간이 흘러가는데 2017년 10월 15일 다시 글이 올라왔다.

헐 대박 짱 ... 해봐야겠다. 도전 !!!



1. 윈도우에 우분투와 openAI 설치 과정을 따라 하며 ...


1. 우분투(Ubuntu) 설치

출처 : http://jinman190.blogspot.kr/2017/10/openai-gym.htm

1. 윈도우용 우분투앱 설치

출처: http://prolite.tistory.com/830


아... 놔 .... 윈도우 10 용 ... 설명은 윈도우 10용 이였다 ... 

윈도우 10은 기본으로 서브 OS 를 지원하는구나 ... 아 ...  난 윈도7인데 ... 윈도7상에서도 가능은 하다는데 난 이미; vmware 를 알고 있다 ...

조회하다보니 아직  서비스단계라는 글이 나를 위로한다.


좌절고 포기하기엔 ... 살면서 보고 들은게 많다... ㅠㅠ

윈도10이 아니라면 !! 윈도 7 위에 vmware 를 설치하고 우분투를 설치 해야겠다

http://programmerchoo.tistory.com/36  <--- vmware 설치하기

http://programmerchoo.tistory.com/37  <--- 우분투(Ubuntu) 설치하기


vmware 위에 우분투(Ubuntu) 설치를 마쳤다. 한방에 되었으면 좋았으련만 이마저 삽질을 거쳤다.

내가 설치한 vmware 는 vmware player 라는 거였다. 생긴건 똑같이 생겼다. 외형상 타이틀 빼고 아무런 차이가 없다.

vmware player 가 아니라 vmware workstation 을 설치해야 하는거였다.


우여곡절 끝 드디어 vmware 설치완료 그리고 우분투(Ubuntu) 완료 이제 해볼만 해 졌다.


장진만쌤의 블러그 따라 하며 격었던 삽질 과정에서 얻은 교훈(?) 이랄까... 버리기 아까워 이렇게 접어둔다.




2. 텐서플로(TensorFlow) 설치

출처 : http://jinman190.blogspot.kr/2017/10/openai-gym.html

우분투 앱을 실행하고 그냥 일반 우분투용 텐서플로를 설치하면 된다.
$ sudo apt-get install python3-pip python3-dev python-virtualenv # for Python 3.n
$ virtualenv --system-site-packages -p python3 targetDirectory # for Python 3.n
$ source ~/tensorflow/bin/activate

(tensorflow)~$ pip3 install --upgrade tensorflow # for Python 3.n

1.$ sudo apt-get install python3-pip python3-dev python-virtualenv


2.$ virtualenv --system-site-packages -p python3 targetDirectory


여기서 잠깐! targetDirectory 를 그대로 쓰면 안.댄.다 ... 안대는건 아니지만 ... 

https://www.tensorflow.org/install/install_linux#InstallingVirtualenv

여기보면 나온다.... 영어라서 스킵햇엇는데 ㅠㅠ

다음명령어들과의 연관성을 위해 targetDirectory 대신 그냥 tensorflow 를 사용토록 하겠다.

$ ls

ls 는 dos 상에 dir 과 같은 리눅스 명령어다. 내가 까먹을 까바 적어놓은거다

tensorflow 라는 폴더가 만들어졌다는것을 알 수 있다.


3.$ source ~/tensorflow/bin/activate

앞대가리에 (tensorflow) 라고 붙기 시작했다.

나 아직 솔찍히 이게 뭐하는건지 모르겠다. ... 이게 뭘까 ㅠㅠ


4. (tensorflow)~$ pip3 install --upgrade tensorflow

캬... 뭔가 뽀다구난다. 검정 화면에 하양글씨 쭉쭉 마치 내가 해커댄 느낌



3. openAI gym 설치

3. 우분투에 openAI gym 인스톨
(tensorflow)~$ sudo apt-get install -y python-numpy python-dev cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev python-opengl libboost-all-dev libsdl2-dev swig
$ git clone https://github.com/openai/gym.git
$ cd gym
$ pip install -e '.[all]'    # 파이썬 3.5 설치

여기서 python 3.x 버전을 쓰는 사람은 python-XXX 라고 되어 있는 패키지들 몇개를 python3-XXX 라고 바꿔 써서 설치 하라는데 난 뭐뭐를 바꿔야 되는지 몰라서 그냥 다 깔았다.

python-numpy 라고 쳐서 한번 설치하고 python3-numpy 라고 쳐서 한번 설치하고...
어차피 없는 패키지는 알아서 넘어가니까.

그러니까 내 컴퓨터엔 지금 python2 버전과 python3 버전 용이 모두 깔려 있을 것이다.


1.(tensorflow)~$ sudo apt-get install -y python-numpy python-dev cmake zlib1g-dev libjpeg-dev xvfb libav-tools xorg-dev python-opengl libboost-all-dev libsdl2-dev swig


타이핑에 주의하자. 긇어다 붙여 넣기 하는것이 가장 깔끔한데 로컬PC예써 인터녰 창을 열어놓고 vmWarre 를 조작하고 있다면,

wmware 안에서도 브라우저를 열 수 있다는 사실을 알았으면 좋겠다.

이렇게 우분투안에서 FireFox 웹 브라우져를 열어 사이트에 들어가서 소스를 긁어다 붙여놓으면 편리하다. 이것도 내가 몰랐어서 적어놓는거 ... 타이핑 해서 오타가 ㅠㅠ


ㅇㅋ 좋았어!

다음!


2. $ git clone https://github.com/openai/gym.git

여기서 잠깐 ... 이대로 치면 안댄다. 아니 이대로 치면  되긴 되는데 진행하던 그대로 했어야 했다. 뒤에 가면 나온다.

(tensorflow) 라는 문구가 없길래 본인은 터미널에서 텨나온다음 위 명령어를 입력했었다... 굳이... 아무두 시키지 않았는데 ㅠㅠ

git 이 설치되지 않았다고 나온다. 

$ sudo apt install git

다음을 입력해서 설치할수 있단다. 그렇게 하자

password 를 묻고 입력 해 주면 업그레이드 한다.

자... 이제 git 있는거지 ?

그럼 다시

오호 ... 생각해보니 오희려 잘 한건가 ? 본인 계정 안에 받았으니 말이다.

그럼 다음!


3. $ cd gym


4. $ pip install -e '.[all]'

대쟈뷰 란게 이런건가 ???

프로그램 'pip'을(를) 설치하지 않습니다. 다음을 입력해 설치할 수 있습니다:

$ sudo apt install python-pip

아까 설치한건 뭐였지 ? 그래 ... 너두 설치 당해봐라


그리고 다시

이게 좀 시간 잡아먹는다 ... 

멍미 걍 막 하기 시작했다 ....

$ pip install --upgrade pip

진행 고고

혹시 몰라 다시 해봤는데 이미 최신이란다. ㅇㅋ


4. 주의사항

출처 : http://jinman190.blogspot.kr/2017/10/openai-gym.html

4. 주의사항

여기까지 설치하고 일반 딥러닝 코드를 실행하면 잘되는데 게임 러닝을 시도하면 NoSuchDisplayException 에러가 난다

파이썬 코드 실행 전에 우분투에서
export DISPLAY=:0
를 실행해주고
윈도우10 에서 윈도우용 xming을 설치하고 실행시켜 주면 저 에러가 나지 않는다. (윈도우용임!)

또는 클라우드 서버에서 실행하는 등의 이유로 디스플레이가 아예 없는 경우에 NoSuchDisplayException 에러가 나는데 이 때는
export DISPLAY=:99
를 실행하고 코드를 실행하면 된다. (화면 출력을 아예 안함)

... 일단 skip


5. 확인

출처 : http://jinman190.blogspot.kr/2017/10/openai-gym.html

5. 윈도우에서 코드 쓰고 우분투에서 실행
윈도우 메모장 같은 데서 파이썬 코드를 작성한다
import gym
env = gym.make('CartPole-v0')
env.reset()
for _ in range(1000):
    env.render()
    env.step(env.action_space.sample()) # take a random action
이 코드를 c:\abc\test.py에 저장했다고 치고
우분투 앱을 열어서 아래와 같이 입력하면 코드가 실행된다.
$ source ~/tensorflow/bin/activate
(tensorflow) $ export DISPLAY=:0
(tensorflow) $ cd /mnt/c/abc

(tensorflow) /mnt/c/abc $ python3 test.py

여기까지 설치한것을 예제를 통해 확인하는 단계

일단 장진만쌤께서는 윈도10 상에서 진행하셨기 때문에 메모장등에서 파이썬 코드를 작성하셨다.

우분투상에서 그것도 콘솔에서 작성하려면 vi 를 사용해서 코드작성이 가능한데

이건 또 새로운 도전이다. 

일단 소스를 모아놓을 공간을 만들기로 했다. 소스는 tensorflow 안에 만들었는데, 이 글을 쓰기위해 몇차례 tensorflow 재설치 및 gym 재설치 등의 과정을 거친 결과 별도의 공간에 소스를 모아 놓는것이 안전하다고 나혼자 결론 냈다.

다음 왼편 파일박스 모양을 클릭하쟈

방금 mkdir 명령어를 이용해서 만든 mysrc 폴더가 보인다.

마우스 우클릭해서 빈문서를 생성한다.

처음 만드는 소스 파일이니까 src001 로 하쟈 확장자는 py 로 하자 그리고 위 예제 소스를 넣어두쟈

파일이 생성된 상태에서 걍 엔터를 누르면 텍스트 편집기라는것이 열린다.

그 상태 그래도 사용해도 상관없지만 '편집>기본설정' 에 들어간다.

줄 번호 표시에 체크를 해 두면 앞으론 텐스트 편집기에서 줄번호가 보여진다. 소소한 팁


소스작성은 끝냈고 다시 터미널로 돌아와 소스를 실행시켜보도록 한다

엄청 당황스럽다.

솔찍히 걍 되도 어리둥절한데 저게 뭔소리야

ImportError : No module named 'gym'


수많은 삽질과 연단의 시간끝에 내려진 결론 ... 앞서 했던 단계로 다시 올라가서

(tensorflow) 환경에서 하지 않았던 pip install -e '.[all]' 이걸 다시 실행 시켜 주었다.


그리고 나서 실행시켜주니 ...

뭔가 휙 지나간다. 켑쳐뜨려는 찰라 사라진다. 내가 낼 수 있는 최대 속도로 !! 다시 켑쳐

음... range 를 변경시켜볼까? range 를 10000 으로 주니 계속 떠있긴 하다.  진작에 이렇게 할껄 ... ㅇㅋ 여기까지 성공




2. 우분투에서 슈퍼마리오 돌아가게 하기 과정을 따라 하며 ...


출처 : http://jinman190.blogspot.kr/2017/10/openai-gym_14.html

우선 슈퍼마리오 소스를 openAI gym에 추가 시켜줘야 한다.
gym에는 몇몇 아타리 게임 등이 있는데 슈퍼마리오는 들어있지 않다.

내가 받은 곳은
https://github.com/ppaquette/gym-super-mario

어떤 분이 수정 보완 되었다고 알려주신 링크 (난 이걸로 안했음)
https://github.com/chris-chris/gym-super-mario

를 보면서 따라서 진행하는 과정에서 또! 충격적인 ... 사실 하나 발견 ;;

윈도우가 익숙하다면 그냥 윈도우용 git 프로그램에서 위 소스를 받으면 된다. ???!!!

앜!!! 윈도우용 git 프로그램이라는게 있구나 ;; 아 놔 ... 무식이 죄다...

일단 우분투에 해 보고 있으니 이거 끝나면 그다음은 바로 너다!


다음은 진행과정에서 블로그에 정리 했던 삽질 전 과정



삽질과정에서 어떤분이 수정 보안 되었다고 한거 그것도 적용해 보았었다. 그런데 ... 안대따.

결론은 그게 문제가 아니였다는거.


되는과정을 켑쳐와 함께 정리해보도록 하겠다. 정말 이거 하느라 수많은 좌절과 인내 아 ... 스트레스 장난 아니였다는거... ㅠㅠ

어쩨껀 다 지나간일 난 해냈다!


https://github.com/ppaquette/gym-super-mario


장진만쌤이 사용했다는 소스 즉 위 url에서 슈퍼마리오 소스를 받을건데 

github 에서 소스를 받는것은 1. 윈도우에 우분투와 openAI 설치하기 과정을 응용했다.


$ git clone https://github.com/ppaquette/gym-super-mario


gym-super-mario 소스가 받아졌다.


그리고 장진만쌤 블러그를 보면 중간에 설치 하기가


$ pip install gym-pull

$ sudo apt-get install fceux


이렇게 두가지가 있는데 이것은 잠시 대기하고 장진만쌤의 블러그를 찬찬히 읽어보쟈

출처 : http://jinman190.blogspot.kr/2017/10/openai-gym_14.html

그리고 받은 소스를 gym 환경에 복사해줘야 한다.
만약에 gym을 가상환경 없이 깔았으면
/gym 폴더가 있을텐데

(tensorflow)$ 가상 환경을 켜놓은 채로 깔았으면 다음과 같은 폴더에 gym이 있을 것이다.
/tensorflow/local/lib/python3.5/site-packages/gym


그 곳에 이 슈퍼마리오 소스의 ppaquette_gym_super_mario 폴더를 복사해줘야 한다.
주의: git에서 제일 상위 디렉토리가 아니라 ppaquette_gym_super_mario 폴더

잘못 복사하면 나중에 소스를 실행할 때
No module named 'gym.envs.ppaquette_gym_super_mario' 같은 에러가 뜬다.



윈도우의 c:/gym-super-mario/에 소스를 받았다 치고 ->

가상 환경 없이 깔린 gym이면 이렇게
$ sudo cp -r /mnt/c/gym-super-mario/ppaquette_gym_super_mario ~/gym/gym/envs

가상 환경의 gym이면 이렇게
$ sudo cp -r /mnt/c/gym-super-mario/ppaquette_gym_super_mario /tensorflow/local/lib/python3.5/site-packages/gym/envs/

본인이 받은 소스가 c 드라이브의 어디 있는지 잘 보고 디렉토리를 입력하자
(리눅스에서 받았으면 리눅스의 어디에 받았는지 확인)

주의: /mnt/c/ 까지는 소문자로만 쳐야 함


gym 하위에 gym 하위에 envs 안에 내려받은 슈퍼마리오 안에 있는 폴더 ppaquette_gym_super_mario 를  복사해 넣어주란다.


현재 본인의 폴더구조는 다음과 같다.


cp 명령어를 쳐주려니 빡시더라, 그래서 우분투UI 이용해서 걍 옮겨주었다.



이건 걍 이케 하면 끝 그리고 소스를 준비하자

장진만쌤도 에러나셨던 소스는 skip 하고 마지막 소스 바로 투입


출처 : http://jinman190.blogspot.kr/2017/10/openai-gym_14.html

자 이제 아래 코드를 실행하면 된다.


import gym
from gym.envs.registration import register
from gym.scoreboard.registration import add_group
from gym.scoreboard.registration import add_task

register(
     id='SuperMarioBros-1-1-v0',
     entry_point='gym.envs.ppaquette_gym_super_mario:MetaSuperMarioBrosEnv',
)

add_group(
     id='ppaquette_gym_super_mario',
     name='ppaquette_gym_super_mario',
     description='super_mario'
)

add_task(
    id='SuperMarioBros-1-1-v0',
    group='ppaquette_gym_super_mario',
    summary="SuperMarioBros-1-1-v0"
)

env = gym.make('SuperMarioBros-1-1-v0')
env.reset()
for _ in range(10000):
    env.render()
    env.step(env.action_space.sample()) # take a random action
중요한 내용은 아니고 고칠 일도 없으니 그냥 복사해서 쓰면 된다.



ㅇㅋ 소스도 준비되었고

일단 위에서 말한 설치하기 두가지가 있었다는 사실만을 기억하고 소스를 실행시켜서 오류 메시지좀 확인하고 가쟈

이거다 gym.scoreboard.registration 이런게 없단다.

아 놔 ... 이것때문에 삽질한 시간을 생각하면 ㅎㄷㄷ

정말 그런지 한번 가서 확인해 보았다.

당연히 없다 ... 

그럼 왜 없나 ? 찾아낸과정은 다음과 같다. openai gym 을 내려 받은 사이트

https://github.com/openai/gym 로 이동했다.

그리고 해당 폴더 gym/gym/scoreboard 로 이동 해보았다.

없다... 오른편 상단에 History 를 눌러보았다.

나도 아는 단어 보인다. Remove ... 아 놔 ...


장진만쌤의 소스

import gym

from gym.envs.registration import register

from gym.scoreboard.registration import add_group

from gym.scoreboard.registration import add_task

이 부분 뿐 아니라 참조하는 소스가 더 있다.

바로 우리가 내려받은 ppaquette_gym_super_mairo 의 __init__.py 파일에도 삭제된 registration 파일을 참조하고 있다.


이거 찾느라 정말 몇일 날렸다... 왜 ? 난 아무것도 모르니까!! 아 놔 왜 지웠냐공 ㅠㅠ

그래서 지운거 복구해보았다. 간단하다. 아까 history 에 보았던 삭제된 소스를 보고 그대로 만들어 주었다.

난 무.식.하.니.까 ...


지워진 파일 확인

쭈욱 드레그

복사

동일한 파일 생성. 확장자는 py

완성!!


그럼 다시 돌려보자

...

복붙하는 과정에서 'background' 중 'b' 가 지워진듯 하다.

다시 실행 시켜보니 오홋!!

드디어 fceux 오류 즉 ! 다른 오류 하핫

그럼 아까 skip 하고 넘어갔던 설치명령중 하나를 쓰도록 하자.


$ sudo apt-get install fceux


다시 실행

머... 지 ? ... 

난 아직 


$ pip install gym-pull 


설치 안했는데? ;; 하핫 필요하면 오류 뜨겠지...






3. 슈퍼마리오에 DQL 2015 이용하기 를 보고 ... 공부 중 진행 중 계속 쭈욱 이해 될때까지 ...




'DEV' 카테고리의 다른 글

1.Installing OpenCV for Java (java 용 OpenCV 설치)  (0) 2017.12.08
JAVA 오토 타이핑 프로그렘 만들기  (11) 2017.11.15
eclipse + SVN (subversion) 설치  (0) 2017.08.03
eGov context-root 조작  (0) 2017.08.02
eGov + Bootstrap  (0) 2017.08.01