오늘 회사에서 부장님이 텐서플로우를 설치하는데 퇴근할때까지 완료하지 못하셨습니다. 실력이 좋은 분이신데도 역시 개발환경 세팅하는건 언제나 난제인가 봅니다.
이런 문제를 해결하기 위해, virtualEnv, Anaconda를 사용하는 방법이 있습니다. 설치 과정을 간소화 해주고, 생 컴퓨터에 설치하다 생기는 문제를 많이 해결해 줍니다. 그리고, 도커를 이용해 설치하는 방법이 있습니다.
“도커는 리눅스의 응용 프로그램들을 소프트웨어 컨테이너 안에 배치시키는 일을 자동화하는 오픈 소스 프로젝트이다” 라고 위키피디아에 명시되어 있으며, 저는 도커를 응용 프로그램을 실행시키기 위한 요소들을 컨테이너라는 요소로 묶어 가상화 하는 툴이라 생각하고 있습니다. 버추얼 박스보다 좀더 가볍고, 일관되게 사용할 수 있다고 보고 있고요. 또한, 최근 윈도우와 맥에서 사용할 수 있는 Docker Desktop이 제공되고 있기 때문에, 리눅스뿐만아니라 맥과 윈도우(Home에서는 바로 설치는 안되고, 툴박스를 이용해야 합니다.)에서도 사용할 수 있기 때문에 개발 환경을 일치 시키기도 좋습니다.
만약 도커로 텐서플로우 개발 환경을 설정하고, 모든 팀원이 같은 도커 이미지를 기반으로 작업 한다면 정말 좋겠죠? 작업하다 자꾸 문제가 생겨서 확인해보니 한명이 특정 항목의 버전이 다르다던가, 환경 설정이 꼬여서 안된다던가, 새로운 팀원이 왔을때 설치하느라 며칠을 허비하는 일을 막아줄것이라 봅니다.
그럼 도커를 이용해 텐서플로우 개발 환경을 세팅해 보겠습니다. 사실 이미 텐서플로우에서 제공되는 이미지가 많기 때문에, 그중에 원하는걸 찾으셔도 되지만, 찾는것 자체가 어려울 수도 있고, 또 내가 필요한 항목만 골라 사용하려면 약간의 도커 파일 작성을 활용하시는것이 좋을 듯 합니다.
여기서는 Tensorflow-gpu 2.2.0 버전에 OpenAI gym과 Jupyter Notebook을 설치하고, Jupyter Notebook을 이용해 Tensorflow를 임포트 하는 과정을 다루겠습니다. 추가로 필요한 항목이 있으면, 도커 파일 작성 방식을 참고해서 입맛에 맞게 설정하시면 됩니다.
도커 데스크탑 버전이 설치되었다고 가정하고 진행하겠으며, 순서는 다음과 같습니다.
- 도커 파일 작성
- 도커 이미지 빌드
- 도커 허브에 업로드(Option)
- 도커 컨테이너에 자산(소스코드 등)을 포함하여 실행
- Jupyter Notebook에서 tensorflow 임포트
1. 도커 파일 작성
FROM tensorflow/tensorflow:2.2.0-gpu
MAINTAINER ihwoo@r.comRUN apt-get -y update
RUN pip3 install jupyter
RUN pip3 install gym
FROM 라인은 텐서플로우에서 제공되는 tensorflow-gpu-2.2.0 버전을 베이스로 사용하겠다는 의미입니다.
MAINTAINER는 제 메일주소를 썼고,
RUN은 텐서플로우 베이스 이미지에서 실행할 명령들입니다. 기본적으로 우분투의 명령을 실행한다고 보시면 되고, apt-get을 업데이트하고, Jupyter Notebook과 OpenAI-gym을 설치하는 명령을 입력해 주었습니다. 추가로 세팅하고 싶은 부분이 있으시면, 이와 같은 방식으로 해주시면 됩니다.
2. 도커 이미지 빌드
도커 이미지 빌드는 작성한 도커파일이 있는 터미널에서 빌드 명령을 입력하시면 됩니다.
docker build -t 이미지명 .
이미지명에는 직접 이름을 지어주시면 됩니다. 저는 도커 허브에 업로드 하기 위해 계정명/이미지명 으로 입력해줬습니다. 예를들어, 계정이 ihwoo이고, 이미지명을 tf-gpu-jn-gym으로 쓰기로 했으면
docker build -t ihwoo/tf-gpu-jn-gym:2.2.0 .
이라고 입력하면 됩니다.
3. 도커 허브에 업로드(Option)
도커 이미지의 장점은 서로 공유가 가능하다는 것입니다. 또한, 이미지는 윈도우, 리눅스, 맥에서 모두 사용할 수 있기 때문에 장점이 더욱 극대화 됩니다.
도커 허브에 계정을 만들면, 기본적으로 저장소가 제공될 겁니다. 보통 아이디로 제공이 되며, 아이디/이미지명 으로 업로드 할 수 있습니다. 2.에서 사용한 형식을 따르면, 다음과 같이 입력하여 업로드할 수 있습니다.
docker push ihwoo/tf-gpu-jn-gym:2.2.0
그럼 다음과 같이 도커 허브에 업로드 됩니다.
4. 도커 컨테이너에 자산을 포함하여 실행
이제 도커 컨테이너를 실행하여 텐서플로우 개발을 시작할 수 있습니다. 단, 소스코드 등은 컨테이너 안에서 사용하기보단 호스트 PC에서 사용하게되는 경우가 있겠죠(git을 사용하면 되긴 하지만, 저같은 경우는 보안의 문제로 내부망의 svn을 사용합니다.).
docker run -it -p 8888:8888 -v /hostFolder:/ContainerFolder ihwoo/tf-gpu-jn-gym:2.2.0
- -it는 tty를 통해 실행하겠다는 옵션입니다.
- -p 8888:8888 은 컨테이너의 8888 포트를 호스트 PC의 8888 포트와 연결하겠다는 옵션입니다. Jupyter Notebook에서 8888 포트를 사용하기 때문이며, 상황에 맞게 설정해 주시면 됩니다.
- -v /hostFolder:/ContainerFolder는 호스트 PC의 /hostFolder를 컨테이너의 /ContainerFolder에 마운트 하겠다는 의미입니다. 필요에 따라 각 경로를 입력해 주시면 됩니다.
- 마지막엔 실행할 이미지명을 태그를 포함해 입력합니다.
5. Jupyter Notebook에서 tensorflow 임포트
마지막으로, Jupyter Notebook을 실행하고 Tensorflow를 임포트 하겠습니다.
Jupyter Notebook의 실행은 다음 명령을 입력하면 됩니다. 이왕이면 자산이 있는 폴더에서 실행하는것이 좋겠죠?
jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root
실행하면 아래 그림과 같이 접속 가능한 주소가 나오게 됩니다. 웹 브라우저에 http://127.0.~부분을 붙여넣기 하면 됩니다.
마지막으로, 실행한 Jupyter Notebook에서 Tensorflow를 임포트 해 보겠습니다.
잘 실행 되네요!