'TesorFlow'에 해당되는 글 2건


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 덕분에
함께 공부하게 되어 그야말로 일석이조다. 다만 간혹 오늘 적은 시행착오와 같은 문제로 불필요한 문제로 시간을
소모하게 되는 것은 불만스럽기도 하지만…앞으로도 새롭게 알게되는 내용들은 잘 정리를 해놓아야겠다.

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요


나…해도 될까?

이것 저것 벌여 놓은 일들이 산더미이지만 AI만큼은 왠지 수박 겉핦기라도 해야 할 것 같다.
그래서 올 2017년 목표 중 하나로 잡고 회사에도 함께 공부할 분들을 모아볼까 하고 동호회
제안도 해놓고 하긴 했는데…과연 내가 해도 될만한 분야인지 부담스럽기만 하다.


그래도…

쇠뿔은 단김에 뽑아야 하고 시작은 반이니 일단 무작정 시작해보기로 했다.
아무래도 지명도가 높고 그만큼 학습자료(특히 서적)가 많은 텐서플로우를 타겟으로 잡았다.
그리고 무작정 텐서플로우 홈페이지로 가서 당장 설치부터 해보기로 했다.


뭐라뭐라 설치 방법도 참 다양하다…-.-
그 중 눈에 띄는 것이 있었으니 바로 Docker 이미지로 설치하는 것이었다.
마침 올해 공부해야 할 것 중 Docker도 있었으니 겸사겸사 죽을 쒀보자는 생각으로 
홈페이지에 적힌대로 따라해보았다. 그나마 Docker는 전에 설치를 해놓은터라 바로
홈페이지에 있는 명령어만 치면 되었다.


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


음…근데 이상하다…뭔가 반응이 있어야 하는데 얘가 그냥 멍때리고 있다.
docker —version등 기초적인 명령어는 반응을 하는데 run을 하게 되면 콘솔에 아무런 
출력도 없고…혹시나 해서 메뉴 막대에 떠있는 Docker 아이콘을 클릭하여 Docker 메뉴를 
열어보니 아니나 다를까 맨 위의 ‘Docker is running’ 앞부분의 표시가 초록색이 아니라 
노란색이다. Docker를 처음 써보는터라 이유도 모르겠거니와 로그같은 것도 어디서 보는


지도 모르겠고…로그가 있기는 한건지…ㅠ.ㅠ


Docker is running 앞의 신호등이 노란색이었다...



이리저리 검색을 하다가 구글에서 다음과 같이 해보라는 계시를 받았다.


  1. Preferences… 선택
  2. 가장 우측 폭탄모양의 Uninstall/reset 선택
  3. Reset to factory defaults 선택
  4. Docker is running의 restart 선택


이렇게 했더니 다행히도 Docker is running 표시가 초록색으로 돌아왔다.
그리고 다시 한 번 docker run… 실행… 그런데 이번에는 콘솔창에 다음과 같은
메시지가 출력되면서 뭔가 진행이 안되는 듯하다…


Unable to find image 'gcr.io/tensorflow/tensorflow:latest' locally


이건 또 뭔가 하고 Ctrl-C를 눌러 취소하고 다시 실행하기를 몇 번…
사실 개발자 별거 아니다. 메시지만 잘 눈여겨보면 대부분의 문제는 해결이 되는
것을…-.- 처음에는 ‘Unable to find image’만 보고 왜 자꾸 이미지를 못찾는다고
하는 걸까 하며 성질만 벅벅 냈는데 찬찬히 보니 마지막에 ‘locally’가 있다…
그래…아직 이미지를 안받았으니 당연히 로컬에는 이미지가 없지…ㅠ.ㅠ 
메시지를 무시하고 잠시 기다려보니 뭔가 된다.^^




마지막에 보면 URL이 하나 나오고 브라우저를 열어서 접속하라고 부추킨다.
시킨다면 시키는 대로 하는 것이 인지상정~ 사파리를 열고 접속을 해보았다. 그러자
다음과 같은 화면이 등장한다.




화면을 보니 상단에 Jupyter라는 로고가 보이고 아래쪽으로는 뭔가 목록이 보인다.
목록을 보니 뭔가 tensorflow라는 이름도 보이고 mnist라는 이름도 보이는 것이
TensorFlow가 설치가 된 것 같긴 한데 도대체 이놈에 Jupyter라는 것은 뭐하는
놈인가…-.- 항목을 하나 클릭해보니 뭔가 영어로 잔뜩 설명이 나오고 Python 코드도
보이고…검색을 해보니 Python, iPython, Notebook 등등의 단어가 보이고…
결국 확인한 내용은 웹 기반의 Python IDE라는 것…


오늘은 여기까지 삽질기를 마치고 다음에는 Jupyter Notebook에 대해서 조금
알아보도록 하자. 아무래도 얘량 친해져야 텐서플로우든 뭐든 할 수 있을 것 같다.


Docker도 Python도 잘 모르는데…앞길이 구만리다…ㅠ.ㅠ

블로그 이미지

마즈다

이제 반백이 되었지만 아직도 꿈을 좇고 있습니다. 그래서 그 꿈에 다가가기 위한 단편들을 하나 둘 씩 모아가고 있지요. 이 곳에 그 단편들이 모일 겁니다...^^

댓글을 달아 주세요