본문 바로가기

머신러닝

[강화학습 LR] 0. python 가상환경 구성하기

728x90

안녕하세요 여러분 오랜만에 포스팅입니다.

 

허허 의도하진 않았지만 어쩌다보니 머신러닝을 하게 되었습니다. 아예 배경지식이 없어서 공부를 먼저하는게 맞지만 저도 필요에 의해서 진행하는거다보니 예제부터 먼저 해보게되었습니다.

 

이론적인 공부는 나중에 천천히 같이 해봅시다.

 

우선 머신러닝 중에서도 강화학습 파트를 하게되었는데 조금 찾아보니 강화학습 = 알파고 라고 생각하는 편이 편했습니다.

간단하게 특정 '환경'에서 특정 '행동'을 취했을 때 얻게되는 '점수'를 기준으로 닥터스트레인지 마냥 무수히 많은 경우를 찾아내서 가장 점수가 높도록 행동하는게 강화학습의 기본 원리라고 이해했습니다.

 

 

우선 가장 기본이 되는 python 가상환경부터 구성해봅시다.

 

저는 다른 코딩을 할 때 웬만하면 가상환경을 구성해서 쓰지 않았는데 이번에는 좀 예외케이스였습니다.

 

처음 하려고했던 예제가 cartpole 이라고해서 카트위에 폴(막대)를 안쓰러뜨리게 하는건데 이 예제를 굴릴 때는 대충 구현이 가능했는데 좀 더 나아가서 atari game의 SpaceInvaders 라는 게임으로 예제를 하려해봤는데 강화학습 예제로 사용되는 웬만한 게임들은 open ai의 gym이라는 라이브러리를 사용해야합니다. 근데 이게 예제마다 사용된 버전이 다르고 사용된 버전에 따른 tensorflow, keras, numpy 등등 진짜 다양한 것들이 종속성이 다 깨져버려서 여간 열받는게 아니더라구요. 그래서 여러분들도 가상환경을 사용하는 것을 추천합니다.

 

 

 

아 그리고 가장중요한건 윈도우던 리눅스던 사용하는 환경에 따라서 렌더링 즉 애니메이션이 나타나지 않을 수 있습니다.

이게 무슨소리냐면 밑에 그림처럼 실행되는 작업을 확인 할 수 있어야하는데 이게 윈도우에서는 기본 기능으로 제공이 안된다는 사실을 저는 한참 후에 알았습니다. 

따라서 이런 식으로 애니메이션을 확인하려면 결과물을 gif로 프레임단위로 저장해서 그 결과값을 불러오는 방식으로 해야합니다.

 

 

 

가장 간단한 cartpole과 atari game 중 하나인 SpaceInvaders

 

 

 

아무튼 예제에 대한 얘기와 트러블 슈팅에 대해서는 다음 포스팅 때 하고 우선 가상환경 구축부터 작성해보겠습니다.

 

우선 주피터 노트북 부터 설치해봅시다. 

 

OS는 윈도우든 리눅스든 상관없지만 저는 ubuntu20.04 서버에 구축되어있는 주피터 노트북에 윈도우 컴퓨터로 원격접속해서 실험하는 환경을 구축합니다.

 

0. 주피터 구축

 

ubuntu에서 원격으로 접속할 수 있는 주피터 노트북을 설치해봅시다.

pip3 install jupyter

설치가 완료되면 .jupyter라는 디렉토리가 숨김파일로 생깁니다. 이상태에서 jupyter notebook 명령어를 입력하기만 하면 실행이 되는데 우리의 목적은 원격 접속이기 때문에 바로 실행하면 안됩니다.

 

jupyter notebook --generate-config

요 명령어를 입력하면 jupyter_notebook_config.py 파일이 생성됩니다. 해당 파일에서 수정할 부분을 수정해줍시다.

요 컨피그 파일은 .jupyter 숨김 파일안에 있으니 ll 명령어로 위치를 찾아보세요

 

그리고 이제 nano 나 vi나 vim 등의 편집기로 내용을 수정해줍시다.

 

c.NotebookApp.notebook_dir = '/home/taeil/ml_workspace/'  # jupyter 시작위치 변경

c.NotebookApp.port = 8888 # 접속 포트변경인데 바꾸셔도 좋고 안바꾸셔도 좋습니다.

c.NotebookApp.ip = '*'  # 접속가능한 ip설정인데 외부로 노출하기 위해서는 '*' 을 하셔야합니다.

 

그 후 비밀번호를 추가하려면 여러가지 방법이 있지만 간단하게 명령어를 통해 추가할 수 있습니다.

jupyter notebook password

패스워드 입력하면 설정이됩니다.

 

외부 접속을 위한 준비는 끝났습니다. iptime같은 공유기를 사용하고 계시다면 포트포워딩 등의 작업이 필요하겠지만 여기서는 그냥 생략해봅니다. 혹시나 외부 퍼블릭 클라우드나 다른 걸 사용하고 계시는데 접속하는 법을 모르겠다 하시는 분들은 댓글 달아주세용

 

 

1. python 가상환경 구축하기 

자 이제 가상환경을 구축해봅시다. 다행히 python 3.5버전 이상부터 venv를 지원해서 구축하기 쉬워졌다고하니 다행이네요. 가상환경에 대해서 간략하게 설명을 해보면 python은 버전이 여러개고 여러개의 버전 중에서도 각각의 lib가 호환되는 버전이 또 제각각입니다. 근데 문제는 최신버전이 모든 것을 호환해주면 좋겠지만 안타깝게도 어떤코드에서 메서드가 달라졌다는 이유로 실행이 안되거나 심지어는 함수 호출명이 달라져버리는 경우가 있어서 이걸 모두 찾기엔 스트레스가 받기때문에 그냥 가상환경을 만들어서 그 프로젝트만 실행할 수 있는 환경을 박아버리는 겁니다.

 

순서는

1) 기존에 설치되어있는 python3.8 외에 가상환경으로 사용할 python 버전을 추가로 설치합니다. (저같은 경우는 3.7)

2) 그 후 원하는 버전의 python으로 가상환경을 구축하고 활성화 시킨 후 그 안에서 pip를 통해 각종 패키지를 설치하면됩니다.

 

 

필요한 파이썬 버전을 추가적으로 설치해봅시다.

현재 PC에 설치되어있는 파이썬 버전 목록을 보려면 다음 명령어로 확인할 수 있습니다.

ls /usr/bin/ | grep python

설치된 파이썬 버전 종류

 

 

저같은 경우는 파이썬 3.8이 설치된 환경에서 추가적으로 파이썬 3.7버전을 설치했습니다. 

확인해보니 직접 소스코드를 받아서 설치하는 경우도 있지만 저는 그냥 apt로 설치했습니다.

 

# 패키지 목록 업데이트
sudo apt update

sudo apt install software-properties-common

# PPA추가(개인 패키지 저장소)
sudo add-apt-repository ppa:deadsnakes/ppa

# 설치
sudo apt install python3.7


# 버전확인
python3.7 -V

 

자 이렇게 해서 우리는 파이썬 3.8버전과 3.7버전을 둘 다 사용할 수 있게되었습니다.

 

이 상태에서 구축해 둔 주피터에 파이썬 3.7버전의 가상환경을 만들어 커널을 추가해봅시다.

# test_venv 는 가상환경 이름
virtualenv test_venv --python=python3.7


# 시스템 사이트 패키지를 설치할지 말지에 대한 권한입니다. 
virtualenv test_venv --system-site-packages

 

자 이상태에서 source 명령어로 activate를 해주면 가상환경에 들어오게됩니다.

source test_venv/bin/activate

가상환경에 들어오면 명령줄 앞에 괄호로 가상환경이름이 보입니다. (test_venv)

 

deactivate 명령어를 해주면 가상환경에서 나가집니다.

 

 

자 이제 생성된 가상환경을 주피터 노트북에 연결해봅시다.

 

가상환경에 들어온 상태로 pip 명령어를 통해 ipykernel을 설치해줍시다.

pip install ipykernel

 

다음 명령어를 입력해줍니다.

python -m ipykernel install --user --name (가상환경 이름) --display-name "(가상환경 이름)"

# 예시
python -m ipykernel install --user --name test_venv --display-name test_venv

 

자 이제 주피터 노트북으로 들어가서 커널을 추가해줍시다.

 

 

이번시간엔 간단하게 강화학습 예제를 위해 python 가상환경 구축에 대해서 알아봤습니다.

 

다음 시간엔 cartpole 예제와 아타리 게임 예제를 같이 진행해봅시다.

반응형

'머신러닝' 카테고리의 다른 글

[강화학습 LR] 1. Cartpole 예제 돌려보기  (1) 2023.01.31