Tensorflow 개발환경 설정하기

jesus-kiteque-224069

0. Intro.

요즘 Tensorflow(이하 텐서플로우)를 이리 저리 써보고 있다. 운이 좋게도 과제도 적당히 머신러닝과 엮여있는 것들을 수행하다보니 텐서플로우 세팅이 꽤나 번거롭다고 느꼈고, 그 이유는 텐서플로우의 활발한 업데이트 (…) 와 Cuda를 쓰려고 하니 이래저래 힘들더라고. 거기에 맥과 우분투라는 두 가지 운영체제에서 개발을 병행하다보니 어디서 개발하더라도 일관성 있는 개발경험을 가져가고 싶었다.

1. Docker Intro.

언제나 그래왔듯, 답은 Docker(이하 도커)다. 의외로 윈도우에서는 텐서플로우 개발환경을 세팅하는 것이 원클릭에 가깝게 쉽다고 들었는데, 난 죽어도 개발 윈도우에서 못하겠어… 우못잃.. 맥못잃..!! 위 링크를 클릭해서 자신의 운영체제에 맞는 도커를 설치한다.


이후에는 텐서플로우 도커 레포에 들어가 적당한 태그를 찾는다.

놀랍게도 현 시점에서  (2017 May 23) latest를 설치해도 텐서플로우 1.1.0이 설치되고,  1.1.0으로 설치해도 1.1.0이 설치되는데, 둘의 업데이트 날짜가 다르고 latest는 cuda library를 못불러온다는 오류가 뜬다. (…) 텐서플로우가 정상적으로 임포트 되는지 가장 먼저 확인하는 것이 좋다.


1.1.0
1.1.0-py3
1.1.0-devel-py3
1.1.0-devel-gpu-py3
1.1.0-devel-gpu
1.1.0-devel
1.1.0-gpu-py3
1.1.0-gpu

도커 레포의 태그를 확인하면 위와같이 여러개의 태그가 붙는데, py3이 붙으면 python3을 쓴다는 뜻, devel이 붙으면 텐서플로우 개발용인 것 같고, gpu가 붙으면 Cuda를 지원한다는 뜻. 만약에 쿠다를 사용할 예정이라면 docker를 설치한 후에 nvidia-docker도 같이 설치해준 뒤에 앞으로 설명한 모든 명령어를 docker대신에 nvidia-docker로 실행해야한다.

2. Create Docker Container

이제는 위에서 고른 태그 + 텐서플로우 이미지를 사용하여 컨테이너를 실행해보자.


위와같은 명령어로 실행한다. 각각의 파라미터를 간단히 설명하자면,

-v 파라미터는 왼쪽의 호스트 디렉토리가 오른쪽의 도커 컨테이너 경로에 링크된다는 뜻이다.

-p 파라미터는 호스트 포트(8888)을 컨테이너 포트(8888)과 같이 가져가겠다는 뜻이고,

–name은 이 컨테이너의 이름,

이 컨테이너를 생성할 때 사용할 이미지,

컨테이너에서 실행할 커맨드이다.

3. Tips

3.1 Docker Commands

docker ps: 현재 실행중인 도커 컨테이너를 보여준다.

docker ps -a: 모든 도커 컨테이너를 보여준다.

docker rm tf: tf라는 이름을 가진 도커 컨테이너를 지운다.

docker rmi tensorflow/tensorflow:1.1.0-py3: 해당 이미지를 지운다.

docker start tf: tf라는 이름을 가진 도커 컨테이너를 시작한다.

docker attach tf: 현재 실행중인 컨테이너에 한해 사용할 수 있는 명령어인데, 여기까지 잘 따라왔다면 tf의 셸로 연결된다.

3.2 Jupyter Command

이후 tf 컨테이너의 셸에 접속하게되면 /notebook 경로로 들어가게된다. 여기서 jupyter notebook --allow-root를 실행하면 주피터 노트북이 실행된다.

3.3 Port Forwarding

맥에서는 GPGPU를 돌릴 수 없어서 요즘은 아침에 우분투 데스크탑을 켜놓고 집을 나와서, 공유기에 DDNS로 도메인도 따놓고, 공유기 설정에서 22번 포트는 데스크탑의 22번으로, 80번은 데스크탑의 8888번으로 포트포워딩 시켜 DDNS 설정한 도메인으로 데스크탑의 주피터 노트북에 접근할 수 있게 설정해놨다.

3.4 How To Check Cuda Imported

Screen Shot 2017-05-23 at 9.46.29 AM.png

  1. python 인터프리터를 실행
  2. import tensorflow as tf, tf.Session()을 실행하면 gpu device blah blah라고 뜨면 성공~

Leave a Reply