300x250

이번에는 OpenAI를 통해 본격적으로 실습을 시작하기 위한 환경 세팅 과정을 정리해보려 한다.

 

실습 내용은 아래 깃허브를 참조해보자.

https://github.com/JJukE/ReinforcementLearning

 

GitHub - JJukE/ReinforcementLearning: Reinforcement Learning Course

Reinforcement Learning Course. Contribute to JJukE/ReinforcementLearning development by creating an account on GitHub.

github.com

 

목차

     

     

     

     

     

     

    1. Set Environment using Docker

     

     

     

     

    1) 도커와 컨테이너의 개념

     

    Docker

     

    도커를 설치하기 이전에, 도커가 무엇인지 간단하게 살펴보자.

    도커는 가상 시스템의 일종으로, 소프트웨어가 실행되기위해 필요한 모든 것(라이브러리, 시스템 툴, 코드 등)을 포함시키는 컨테이너에 소프트웨어를 패키징해준다.

    도커를 사용하면 어떤 환경(Windows OS, Mac OS, Ubuntu 등의 환경에 상관없이)에서도 컨테이너를 만든 사람과 똑같은 환경에서 소프트웨어를 실행할 수 있다.

    Github와 비슷한 개념으로, Docker Hub에서 Docker Image를 pull 또는 push할 수 있다.

     

    Open Source의 경우, 소프트웨어를 만드는 사람의 환경, 특히 파이썬의 버전, 텐서플로우의 버전, 기타 라이브러리들의 버전 등을 맞춰주어야 정상적으로 코드가 돌아가는 경우가 많다.

    이를 Version Dependency라 하는데, 도커는 이 문제를 쉽게 해결해준다.

     

     

    (1) 컨테이너(Container)

     

    그렇다면 컨테이너(Container)는 무엇일까?

    예를 들어, 우리의 local 환경에 tensorflow 등의 라이브러리들을 활용하여 application을 하나 빌드했다고 가정해보자.

    이를 서버에 배포하고 싶다면, 서버에 모든 dependency들을 install해주어야 한다.

    하지만 도커를 사용하면, 컨테이너라 불리는 공간에 이러한 dependency들을 패키징하여 서버에 배포할 수 있고, 다른 사용자나 다른 환경에서 해당 서버에서 패키징된 도커 컨테이너로 application을 실행하기만 한다면 쉽게 그 환경에서 실행이 가능하다.

     

    컨테이너를 사용하면 다음과 같은 장점이 있다.

    1. Environment Consistency (환경의 일관성)
      • 컨테이너는 application이 서버간 portability를 가질 수 있도록 해주며, 개발, 검증, 생산 등의 lifecycle에서 application을 옮기는 데 발생하는 문제를 줄여준다.
      • 컨테이너는 모든 필요한 application 파일, dependency 등을 캡슐화(encapsulate)해주며, 소프트웨어, OS, 하드웨어 설정에 상관없이 빌드가 가능하도록 해준다.
      • 궁극적으로 서버마다 설정을 맞춰주지 않아도 되고, 새로운 feature들을 더 빠르게 배포할 수 있게 해준다.
    2. Operational Efficiency (실행에 있어서의 효율성)
      • 컨테이너는 해당 컨테이너 또는 서버에서 사용할 memory, disk 공간, CPU 등을 설정해줄 수 있어서 여러 application을 실행할 수 있도록 해주며, computing resource를 효율적으로 사용할 수 있게 해준다.
      • 컨테이너는 application을 실행시킬 때 os 상에서 부팅되기 때문에, 부팅 속도가 빠르다.
      • 하나의 image에 모든 application과 dependency가 저장되기 때문에 새로운 버전의 application과 기존 버전을 switching하는 blue-green deployment를 사용할 수 있다.
      • 한 서버에서 여러 컨테이너를 실행함으로써 여러 application을 독립적으로 실행할 수 있다. (각 container 또한 독립적이다.)
    3. Developer Productivity (개발자의 생산성)
      • Cross-service에서의 dependency와 충돌을 제거하여 개발자의 생산성을 높여준다.
      • 컨테이너 간 라이브러리의 충돌이 없기 때문에 각각의 service에서 업그레이드를 독립적으로 시켜줄 수 있다.
    4. Version Control (버전 컨트롤)
      • Git과 같이 version tracking이 가능하다.
      • 예를 들면, Docker Container Image는 'manifest file(Dockerfile)'을 갖게 되는데, 이는 파일의 log를 남김으로써 버전 트래킹을 가능하게 해준다.

     

    Container vs Virtual Machine

     

    컨테이너와 가상머신(Virtual Machine)의 큰 차이점은,

    컨테이너의 경우 OS 레벨 위에서 가상 환경을 만들어주는 것이기 때문에 가볍고, 부팅이 빠르지만

    가상머신의 경우 그 자체가 OS를 가짐으로써 부팅이 느리다.

     

     

     

     

     

    2. Installing Docker

     

    그럼 이제 도커를 어떻게 설치하는지 알아보자.

     

    먼저 다음 사이트에서 'Docker Desktop'을 자신의 OS에 맞춰 다운받는다.

    https://www.docker.com/get-started

     

    Get Started with Docker | Docker

    Learn about the complete container solution provided by Docker. Find information for developers, IT operations, and business executives.

    www.docker.com

     

    Docker Download

     

    그 다음, 도커를 실행시키면, 다음과 같이 컨테이너 목록이 보인다. (처음 실행시키는 경우, 어느 정도 시간이 소요된다.)

    처음 도커를 깔았다면, 빈 페이지가 보일 것이다.

     

    Docker 실행 화면

     

     

     

     

    1) 이미지파일 Pull

     

    이제 Git에서와 같이, openAI Gym과 Tensorflow를 사용하여 누군가 올려둔 Image 파일을 Pull 해오자.

    여기서 Pull이란, github, docker hub 등의 remote repository에 존재하는 파일들을 내 local repository로 당겨온다는 것을 말한다.

    (자세한 개념은 아래 링크를 참조하자.)

    https://jjuke-brain.tistory.com/55

     

    Pull해올 이미지 파일은 다음 github에 존재한다.

    https://github.com/jaimeps/docker-rl-gym 

     

    GitHub - jaimeps/docker-rl-gym: A Docker environment for RL & OpenAI Gym

    A Docker environment for RL & OpenAI Gym. Contribute to jaimeps/docker-rl-gym development by creating an account on GitHub.

    github.com

     

    그다음 맥의 터미널, 또는 윈도우즈의 cmd를 실행하자. 윈도우즈의 경우, 반드시 관리자 권한으로 실행해 주어야 한다.

    docker hub에서 image 파일을 가져오는(pull 하는) 명령은 다음과 같다.

     

    docker pull

     

    그다음 'docker images' 명령어를 통해 pull이 잘 되었는지 확인해본다.

     

    docker images

     

    위 사진과 같이, docker를 통해 pull 했던 이미지 파일들에 대한 정보가 표시된다.

     

     

     

     

    2) 컨테이너 생성

     

    이후에 이 image 파일을 사용하여 container를 만들어준다. 명령어는 아래와 같다.

     

    docker run -it -p 8888:8888 -e GRANT_SUDO=yes --user root --name openAI jaimeps/rl-gym

     

    기본적으로 'docker run'이라는 명령어를 실행하는 것이며, 이후는 옵션이다.

    위의 경우, pull 했던 'jaimeps/rl-gym' 이미지 파일을 sudo 권한을 주어 root user, port 8888로 설정하여 'openAI'라는 이름의 container를 생성하겠다는 의미이다.

    나는 이미 openAI라는 이름의 컨테이너가 존재하므로, openAI2라는 이름으로 포트를 할당하지 않고 다시 만들어보면, 아래와 같은 결과를 볼 수 있다.

     

    터미널에서 컨테이너 생성 결과

     

    docker 창에서 컨테이너 생성 결과

     

    docker 명령어는 다음 링크에서 자세히 살펴볼 수 있다.

    https://jjuke-brain.tistory.com/58

     

     

     

     

    3) docker 컨테이너 실행

     

    이제, 웹 브라우저에서 터미널에서의 컨테이너 생성 결과 생성해준 url을 입력해주고, 들어가면 jupyter notebook이 생성된다.

    나중에 실행시키려면, 다음과 같이 docker에서 'start'를 눌러준 후에 

     

     

     

    Open In Browser를 눌러주면 된다.

    물론 터미널에서 명령어를 통해 실행시켜줄 수도 있다.

     

     

     

     

     

    3. More Settings

     

    OpenAI Gym과 Tensorflow를 사용하여 실습을 진행하기 위한 추가 설정을 진행해보자.

     

     

     

     

    1) Docker CPU and Memory Setting

     

    먼저, 아직까지는 크게 상관 없지만, Docker에서 CPU와 메모리, 그리고 Disk size를 어떻게 설정하는지 알아보자.

    먼저, Docker App의 우측 상단에 톱니바퀴 모양을 클릭해준다.

     

     

    그리고 'Resources'탭을 누르면, Docker 환경에서 사용할 CPU 개수, 메모리 사이즈 등의 설정을 할 수 있다.

     

     

     

     

     

    2) Dependency 설정

     

    OpenAI Gym과 Tensorflow를 활용하기 위해 추가적인 dependency 설정을 해줄 필요가 있다.

     

    먼저, Jupyter notebook에서 터미널을 열어준다. (docker exec 명령어를 통해 CLI를 사용해도 된다.)

     

     

    그 후, pip3를 통해 'box2d'와 'jupyter-tensorboard'를 설치해준다.

     

     

    (1) Box2d-kengz

     

    pip3 install box2d box2d-kengz

     

    먼저 box2d란, 2D 상에서의 물리효과를 시뮬레이션하는 엔진이며, 오픈소스이다.

    객체간 충돌 처리 등의 머리아픈 물리 연산들을 알아서 처리해준다.

     

    jupyter notebook에서 설치

     

    터미널에서 설치

     

    나의 경우, 이미 설치되어 있기 때문에 위와 같은 결과를 보여준다.

     

     

     

    (2) jupyter-tensorboard

     

    pip3 install jupyter-tensorboard==0.1.0

     

    텐서보드란, 텐서플로우에서 지원하는 프로그램으로 텐서플로우에 기록된 로그를 시각화해주는 툴이다.

    원래 텐서보드를 사용하기 위해서는 텐서플로우 코드에서 FileWriter를 통해 그래프와 기록할 것을 로그로 만들어준 다음, 터미널에서 해당 로그위치에 텐서보드를 실행해야 하지만, jupyter-tensorboard를 사용하면 주피터노트북 환경에서 바로 텐서보드를 열 수 있다.

     

    그런데 2022년 03월 현재 jupyter-tensorboard의 최근 버전인 0.2.0 버전에서는 jupyter, jpyter-tensorboard, tensorflow의 python 버전이 통일되지 않았단 문제로 tensorboard가 실행되지 않는 문제가 발생하였다.

    옛날 버전인 0.1.0 버전으로 위와 같이 설치해주면 문제없이 jupyter notebook에서 tensorboard를 살펴볼 수 있다.

     

    만약 VS Code에서 텐서보드를 열고 싶다면, 다음과 같이 진행하면 된다.

    1. Command Palette 열기 (Ctrl/Cmd + Shift + P)
    2. 'Python: Launch Tensorboard' 입력 후 엔터
    3. Tensorboard 로그 파일이 위치한 폴더 선택 (default : 현재 경로)

    이같은 과정을 거치면, 새로운 탭에서 Tensorboard가 열리게 되고, 종료하고 싶다면 해당 탭을 끄면 된다.

    728x90
    • 네이버 블러그 공유하기
    • 네이버 밴드에 공유하기
    • 페이스북 공유하기
    • 카카오스토리 공유하기