TensorFlow 학습을 위한 간단한 Tip ~ #1

TensorFlow 공부를 시작하면서 몇가지 도구를 사용하게 되었다. 하지만 그 도구들에 대해 자세힌 알고있는
상태에서 시작을 한 것이 아니라 학습을 진행하면서 시행착오를 통해 알게되는 사실들이 꽤 많다.
이 그룹의 게시물들은 바로 이러한 팁을 정리하는 공간이 될 것이다.


첫 포스팅은 Docker와 Jupyter에 대한 몇가지 내용들을 다룰 것이다.


Docker에서 TensorFlow 관리하기

우선 처음 설치에 대한 내용과 1.0.0으로 업그레이드 하는 내용에서 Docker에 대한 약간의 내용들이 언급되었다.
오늘은 거기에 더해서 Container를 다루면서 실수했던 내용 몇가지를 정리한다.


처음 Docker를 통해 텐서플로우 이미지를 다운로드 받고 실행을 시키면 바로 Jupyter가 실행되면서 사용가능한
상태가 된다. 바로 그저께까지도 Docker의 container 사용 방법을 몰라 조금 미련한 짓을 하고 있엇다.


내가 분명 Jupyter상에서 ‘텐서플로우 첫걸음’의 예제를 업로드하여 학습을 하고 난 뒤 Jupyter를 종료시켰다가
다시 실행을 하면 이상하게도 내가 업로드한 내용들이 모두 사라지고 없었다. 처음 Jupyter를 실행했을 때의
상태로 초기화 되어있는 것이다.


이 것은 내가 Docker의 container에 대한 개념을 잘 몰랐기 때문에 발생한 문제였다.


일단 처음 이미지를 다운로드 받을 때 사용하는 명령어는 다음과 같다.

docker run -it -p 8888:8888 -p 6006:6006 gcr.io/tensorflow/tensorflow


이 명령어를 실행하면 이미지가 없는 경우에는 이미지를 다운로드 받은 후 container 하나를 생성하여 바로
Jupyter를 실행하고 이미지가 있는 경우에는 그 이미지를 이용하여 새로 container를 생성하여 Jupyter를 실행한다. 


나는 이 사실을 모르고 계속 Jupyter를 실행할 때마다 위의 명령어를 사용했던 것이다. 그러니 항상 새로운
container가 만들어진 것이고 이전에 작업했던 내용은 이전에 작업했던 container에 있을 뿐이나 당연히
초기화된 새로운 Notebook 목록이 열렸던 것이다.


따라서 이전에 했던 작업을 계속 진행하려고 한다면 당연히 이전에 작업했던 container를 실행시켜 진행해야
하는 것이다.


우선 콘솔에서 다음과 같이 입력하여 자기가 사용했던 컨테이너의 ID나 이름을 확인해두자

docker ps -a


그러면 다음과 같이 현재 생성된 container의 목록과 그 상태가 나온다. STATUS 항목에 Exited라고 표시된
container는 정지된 container이고 실행되고 있는 container들은 Up xx hours 처럼 표시된다.


이 container 목록 중 사용하고자 하는 것에 대해 start 또는 stop 명령을 통해 시작하거나 종료할 수 있게 되는
것이다. 그러니 run 명령은 최초 한 번만 실행하고 이후에는 start/stop을 사용하면 된다.

docker start trusting_booth
docker stop trusting_booth


이 때 주의할 것은 Jupyter가 실행되면 Jupyter에 로그인할 때 필요한 token이 생성되는데 이 token을
잘 기억하고 있어야 나중에 동일한 Jupyter 커널에 접속하여 사용할 수 있다. 만일 token이 올바르지 않다고
한다면 다음과 같이 진행하자


우선 아래와 같이 현재 실행 중인 container의 shell로 들어간다.

docker exec -it trusting_booth bash
root@cbec422fa6de:/notebooks#


여기서 다음과 같이 입력한다. 그러면 현재 실행 중인 Jupyter의 URL이 token과 함께 표시된다. 이 주소를 이용하여
접속하면 된다.

docker exec -it trusting_booth bash
root@cbec422fa6de:/notebooks# jupyter notebook list
Currently running servers:
http://localhost:8888/?token=2587d5ea8dd373c169e8042c4ab15dd956a2a0dc9a50bac9 :: /notebooks
root@cbec422fa6de:/notebooks# 


Jupyter에서 필요한 라이브러리 추가하기


사실 이 부분도 위에 설명한 Docker container의 사용 방법만 제대로 알고 있엇다면 실수를 하지 않았을 부분이다.
나는 다중 선형 회귀에서 사용하는 산점도 행렬을 그리기 위해 pandas라는 라이브러리를 추가하기 위해 작업을
진행했다.


우선 Jupyter에서 라이브러리를 추가하는 것은 매우 쉽다. 아무 Notebook이나 하나 실행해서 code cell에
다음과 같이 입력하고 실행하면 된다. 내가 pandas를 설치했으니 pandas를 설치하는 명려어를 쓴다.

!pip install pandas


그러면 다음과 같이 설치되는 모습이 보여진다.


이제는 현재 실행된 커널의 어떤 Notebook에서도 pandas를 import하여 사용할 수 있다.
처음에는 앞서 Docker에서의 실수로 매번 Jupyter를 실행할 때마서 라이브러리를 추가해주어야 하나 했는데
동일한 container를 사용한다면 그런 실수는 할 일이 없을 것이다.


Jupyter Notebook 활용하기

아직 사용한 지 얼마 되지 않지만 그 짧은 시간에 Jupyter가 얼마나 유용한 툴인지 깨닫고 있다. 바로 직전에
포스팅한 다중 선형 회귀에 대한 내용은 Jupyter Notebook에서 아래 메뉴를 실행하여 다운로드 받은 후
MacDown이라는 Markdown 편집기를 이용해 열어 그 preview를 그대로 복사해 붙여넣은 것이다.


File > Download as > Markdown (.md)


만일 바로 다른 Jupyter에서 실행 가능한 상태로 저장하고 싶다면 다음과 같이 선택하여 저장하면 된다.


File > Download as > Notebook (.ipynb)


어쩧게 저장하느냐에 따라 문서가 될 수도 있고 싫행 가능한 소스가 될 수도 있는 것이다.


참고로 나는 현재 다부분의 블로그를 작성할 때 Ulysses라는 편집기를 사용하고 있다. 이 글도 역시 Ulysses로
작성한 글이다. 그런데 이 Ulysses가 다수의 문서를 관리하고 publishing하는데는 매우 좋은데 일반적인
Markdown과 좀 다른 듯하다. 그래서 Jupyter에서 Markdown으로 저장한 문서를 열면 제대로 표현이 안되는
경우가 많다. 그래서 Jupyter에서 저장한 Markdown 문서는 무료 편집기인 MacDown을 사용한다.


꿩먹고 알먹고

사실 Docker도 그렇고 Python도 그렇고 앞으로 공부해야 할 목록에 들어있었는데 이렇게 TensorFlow 덕분에
함께 공부하게 되어 그야말로 일석이조다. 다만 간혹 오늘 적은 시행착오와 같은 문제로 불필요한 문제로 시간을
소모하게 되는 것은 불만스럽기도 하지만…앞으로도 새롭게 알게되는 내용들은 잘 정리를 해놓아야겠다.

저작자 표시
신고
  1. 수인 2017.11.18 22:05 신고

    감사합니다.. 덕분에 정말 좋은 팁들 알았습니다!!

+ Recent posts

티스토리 툴바