안녕하세요 이번글에서는 Jupyter NoteBook에 대해서 설명하려고해요~


Colab을 이용하려면 Jupyter NoteBook에 대해서 알아야하해요. Colab이 아니더라도 요즘 많은 분들이 Jupyter NoteBook을 이용하여 개발하시기 때문에 알아두시면 좋을거에요!



<1. Motivation>


우리가 보통 프로그램을 만들면 혼자서 만들진 않아요. 보통 팀단위로 모여서 코드를 작성하게 됩니다. 한 프로그램을 만들때 A라는 사람은 프로그램의 A기능을, B라는 사람은 프로그램의 B기능을 만들게되요. 하지만 A라는 사람이 A기능을 구현할때 B기능을 참고해야 할때가 있는데, 만약 B라는 사람이 만들어놓은 코드에 명확한 설명이나 주석없이 구현되어 있다면 어떻게 할까요? A라는 사람은 B라는 사람을 찾아가 하나씩 물어보게 될거에요;;

<사진1>


또한 프로그램의 C라는 기능에 두 사람이 붙어 작업하게되면 이들은 서로 코드를 공유해야할거에요. 그런데 이때마다 작업한 파일을 USB나 이메일로 매번 보내게된다면 조금 번거롭지 않을까요 (용량도 많을텐데...)? 하지만 우리가 작업한 코드를 특정 사이트에다 올리고 해당 코드를 알아서 다운받도록 한다면 조금더 편리할거에요. 





"프로그램을 개발할때 서로 효율적으로 코드를 공유할 방법이 있으면 좋지 않을까요?" 지금부터 이 질문의 해결책인 Jupyter Notebook에 대해서 천천히 알아보도록 할게요.








<2. IPython 프로젝트>


Jupyter 프로젝트는 IPython 프로젝트를 기반으로 하고 있어요. 


IPython이란 python+upgraded shell 이라고 생각하시면되요. Python은 알겠는데 shell에 대한 개념이 이해가 잘 안되시죠? 그럼 간단하게 살펴보도록 할게요.


1) Shell


우리(User)는 여러 application program을 사용해요. 카카오톡도 사용하고, chrome 브라우저도 사용하는 등 여러 프로그램을 사용합니다. 그런데 만약에 위와같이 누군가가 만들어놓은 application program에 내 hard-disk에 접근하게 권한을 주면 어떻게 될까요? 악의적으로 내 파일들을 전부 삭제할수도 있겠죠?


그래서 application program을 개발할때에는 내 컴퓨터의 물리적장치에 접근하는 목적에따라 엄격한 제한을 두게되요. 그래서 application program에서 물리적 자원 (리소스)에 접근할때 직접 접근시키는 것을 제한하고 중간관리자가 있어야 하는데 그 중간관리자가 Operating system이에요.


<사진2>



Operating System은 application program으로부터 물리적 자원을 쓰길 원한다는 요청을 받아요. 그런데 보면 여러 application program이 실행될때도 있고, 하나의 program에 여러 작업이 동시에 진행될때가 있어요. 그래서 Operating System은 여러 작업요청에 대해서 최적으로 스케줄링(작업순서를 결정)해준다음 kernel을 이용하게되요. Kernel을 간단히 말하자면 물리적자원을 이용할 수 있도록 만들어진 프로그램이라고 생각하시면되요. 보통 윈도우라는 운영체제를 사용하시면 이러한 운영체제를 만드는 회사들이 kernel program도 구현해놓아서 우리가 안전하게 물리적 자원인 CPU, Memory, Devices를 쓸 수 있게되는거에요 (상상해보세요 우리같이 컴퓨터에 대해서 자세히 모르는 사람들이 물리적 자원을 건들게 해놓으면..... 아마 금방 컴퓨터가 망가질거에요;;;)


<사진3>


그런데 우리는 가끔씩 hard-disk에는 뭐가 있는지, cpu가 어떤 상태인지 등 물리적자원에 대한 정보를 알아내고 싶을때가 있어요. 이럴때는 shell이라는 매개자를 이용해 우리가 원하는 내용을 shell에게 넘겨주면 shell은 해당 내용을 kernel에게 넘겨주게되요. 그리고 kernel은 shell이 요청한 부분에 대한 정보를 건네주고, 다시 shell은 우리에게 해당 정보를 출력해주게 되는거에요.


<사진4>





2) Python shell prompt


보통 Python을 설치하면 python (shell) prompt를 확인해볼 수 있어요. Python prompt를 이용해도 CPU 정보같은것을 알아낼 수 있어요.



하지만 python prompt는 일반적으로 사용되는 shell script들 예를들어 현재 디렉토리에 어떤 파일들이 있는지 확인할때 사용되는 ls 명령어와 같은 shell command가 제공되지 않는 문제가 있었어요.



또한 shell prompt의 기능이 더 다양해졌으면 하는 바람에서 Python shell prompt를 업그레이드 시킬 project를 준비하게 됩니다.





3) IPython shell prompt 


IPython은 Python의 shell prompt 기능을 더 강화시킨 버전이라고 보시면 될거에요.


3-1) 제공되는 shell 명령어 증가






3-2) 변수이름 입력시 자동완성기능 추가 (Tab키)






3-3) 자료형과 함수에 대한 description(설명서) 제공




이외에 더 많은 기능들이 추가 되었는데요. 핵심은 사용자가 좀 더 사용하기 쉽게 만들고, cell (inline; 코드 입력줄)에 명령어를 입력하면 곧바로 결과를 확인할 수 있기 때문에 (powerful interactive language), 개발자들이 더 자주사용하게 되었어요.



하지만 IPython은 python을 위한 shell과 kernel만 제공해주기 때문에 다양한 언어를 사용하기 힘들다는 단점이 있었어요. 또한 추가적으로 다른 기능들을 제공해주려는 시도가 있었는데 이러한 project가 Jupyter project였어요.








<3. Jupyter NoteBook>


Jupyter는 IPython과 달리 Julia, R, Ruby 등의 언어를 추가로 지원해고 있어요. 또한 더 강력한 기능으로 인해 많은 사람들의 호응을 얻고 있는데요. 지금부터 천천해 알아보도록 하겠습니다.


Jupyter NoteBook은 쉽게 말해 Jupyter shell prompt라고 생각하시면되요. 먼저 Jupyter Notebook에 제공하는 기본적인 기능들에 대해서 알아볼게요.




1) MarkDown 언어 제공


https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Working%20With%20Markdown%20Cells.html


우리가 코드를 작성하다보면 주석을 사용하게되죠? Jupyter Notebook은 주석의 기능을 좀 더 다양하게 만들어주었어요.



1-1)큰 제목 (Heading) 제공해주기


먼저 cell을 생성 (insert 메뉴에 있어요)하고 생성된 cell을 Heading으로 바꿔줍니다



#을 몇번 작성해주는지에 따라 글자 크기가 달라집니다.


해당 cell에 shif+enter or run cell을 실행시키면 아래와 같이 읽기 쉽게 작성된다.




1-2) Markdown


Heading과 마찬가지로 주석기능을 하지만 구체적으로 코드에 대한 설명을 추가할때 markdown을 사용합니다. (작성방식과 실행방식은 Heading과 동일합니다)







1-3) 함수식 제공


Jupyter Notebook은 아래와 같은 함수에 대한 주석도 가능하게 해주는데요. 함수 주석에 대한 문법은 LaTex를 기반으로해요. 보통 논문을 작성하시는 분들께서 LaTex를 이용해 논문을 작성하시는데요. Jupyter Notebook의 함수식은 LaTex 문법을 기반으로 합니다.


https://en.wikibooks.org/wiki/LaTeX/Mathematics







1-4) 그외 기능


그외의 기능들이 무엇이있고 어떻게 사용하는지는 아래를 참고하면 될것 같아요~


https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Working%20With%20Markdown%20Cells.html#LaTeX-equations


https://m.blog.naver.com/ssdyka/221301296717





2) Visualization (실시간 대화형 위젯)


또한 Jupyter Notebook은 cell을 실행하면 이미지관련 작업도 곧바로 NoteBook에 보여줍니다.


<사진5>







3) 코드공유


Jupyter Notebook을 이용하면 Github, Dropbox, Jupyter Notebook Viewer 를 이용하여 코드를 다른사람들과 공유할 수 있어요. 자세한 설명은 아래 영상 13:35초를 참고해주세요! (Github에 대한 설명은 추후에 하도록할게요~)



(주피터 노트북 사용법)




4) Jupyter Notebook 원격접속


Jupyter Notebook은 외부에서도 내 Notebook을 보고 작업할 수 있도록 해줄 수 있어요. 아래 영상 3:10~6:21 부분을 보시면 원격접속 방법에 대해서 자세히 설명해줄거에요.



비밀번호 관련된 부분은 아래 사이트를 참고해주세요. (위의 영상과 같이 보시면 원격접속 세팅하시는데 큰 어려움은 없으실거에요)


(아래사이트는 우분투환경입니다)

https://light-tree.tistory.com/111

(아래사이트는 윈도우환경입니다)

https://m.blog.naver.com/PostView.nhn?blogId=zephyrline&logNo=220980726155&proxyReferer=https%3A%2F%2Fwww.google.com%2F








<4. Jupyter hub>


Jupyter는 애초에 처음부터 다중 유저가 공동작업할 수 있는 Jupyter hub 서비스를 제공해주기도 합니다.

(Jupyter hub는 아직 사용해본적이 없어서 나중에 사용하게되면 따로 글을 작성해보도록 할게요!)






<5. Jupyter Lab>


또한 현재 Jupyter Notebook을 업그레이드한 Jupyter Lab 서비스도 제공하고 있으니 필요에따라 사용하시면 될 것 같네요.




아! 참고로 가상환경에서 따로 주피터 노트북을 설치해서 사용하지 않으시면 root 환경의 jupyter notebook





지금까지 Jupyter Notebook에 대해서 알아보았어요~!

다음글에서는 jupyter Notebook을 기반으로 하는 Colab 서비스에 대해서 알아보도록 할게요! 







[글 래퍼런스]

https://nittaku.tistory.com/104

https://soooprmx.tistory.com/entry/iPython-%EC%84%A4%EC%B9%98%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95



[사진 래퍼런스]

사진1

https://www.dreamstime.com/continuous-line-drawing-two-men-sitting-laptop-computers-talking-question-continuous-line-drawing-flat-vector-image139657404

사진2

https://en.wikipedia.org/wiki/Operating_system

사진3

https://en.wikipedia.org/wiki/Kernel_(operating_system)

사진4

https://www.guru99.com/operating-system-tutorial.html

사진5

https://alistairwalsh.github.io/python-novice-gapminder/01-run-quit/


 

안녕하세요~


이번글에서는 VS code에 Docker를 연동시키는 방법에 대해서 알아보도록 할거에요~


보통 개발을 하실때 IDE (Integrated Development Environment; 통합개발환경)을 이용하실텐데요. 많은 분들이 Pycharm IDE를 이용하여 개발하시지만, 저 같은 경우에는 VS code를 이용하는편이 훨씬 좋은것 같더라구요. 


실제로 Pycharm IDE에 docker를 연동하려다보면 여러 문제가 발생하기 때문에 여기에서는 VS code IDE의 여러 기능과 손쉽게 docker와 연동해서 쓰는 방법에 대해서 설명해보도록 할게요~





<1. VS code 설치>


아래 사이트에 접속한 후 아래 다운로드를 진행하면 실행파일이 다운로드되요. 그리고 해당 실행파일을 install 해줍니다.


https://code.visualstudio.com/





그럼 아래와 같이 VS code가 설치될거에요~











<2. 필요한 기능 추가하기>


VS code의 장점은 여러 프로그램을 쉽게 plug-in 해주어서 써줄 수 있다는 점이에요.


우선 아래 extension 아이콘 (빨간색 네모) 부분을 클릭해서 'remote development'를 검색해주고 install 해줍니다. 'remote development'를 설치해주는 이유는 VS code IDE와 local host의 docker 컨테이너를 연동시켜주기 위함이에요. (install하면 reload 라는 문구가 뜰건데, reload 문구를 클릭해주시면 되요)







두 번째로는 docker를 검색하여 아래 두 가지 ('Docker', 'Docker Explorer')를 설치해줍니다. 'Docker', 'Docker Engine'을 설치해주는 이유는 terminal을 따로 실행시켜주지 않고 VS code IDE에서 GUI형태로 container를 손쉽게 on/off 해주기 위함이에요. (그리고 우측부분을 보면 해당 프로그램이 VS code IDE에 어떻게 될건지 텍스트와 영상으로 자세히 설명되어 있으니 참고하시면 좋아요!)






설치가 마무리되었다면 아래와 같이 plug-in 된 프로그램의 아이콘이 생성될거에요!












<3. VS code와 Docker 연동하기>


'ctrl+shift+p'를 클릭하시고 'remote-containers: attach to Running Container...'을 입력하시고 클릭해주세요. 





그럼 아래와 같이 현재 실행되고 있는 container 목록이 뜰거에요. 저는 지금 pytorch라는 docker container 하나만 실행시킨 상태라 pytorch container 하나만 생성되네요. 원하는 container를 클릭해줍니다.





그럼 아래와 같이 새로운 window 창을 통해 VS code IDE가 생겨날거에요. 여기서 "File->Open folder"를 클릭하고,




Docker에서 생성해주었던 container 디렉토리를 찾아 'ok'버튼을 눌러주면





왼쪽 부분에 pytorch container에 들어있던 파일들이 VS code IDE에 연동되는걸 확인하실 수 있으실거에요~

그리고 'test.py'파일을 만들어주고 





아래코드를 입력해주고 실행시켜주면??

에러가 생겨요 ㅜㅜ

 현재 'pytorch' container에는 locale이 설정이 되어 있지 않은가봐요 (제가 생성한 'pytorch' 컨테이너는 pytorch/pytorch 이미지를 기반으로 하고 있기 때문에 설정이 되어 있지 않은듯해요)





Terminal이 container에 접속한 상태이기 때문에 이곳에다가 'apt-get update', 'apt-get install locales' 명령어를 입력해줍니다.






자세히 안보이시겠지만 다음 명령어를 아래와 같이 입력해주세요

dpkg-reconfigure locales




그리고 계속 엔터를 누르시다가 아래 부분에서 

158

3

번호를 순차적으로 입력해주세요.



그리고 실행시키면~

아래와 같이 정상적으로 작동하는걸 볼 수 있어요!








<4. VS code IDE<--> Jupyter notebook>


처음에 VS code IDE에서 jupyter notebook 확장자인 .ipynb 파일을 열면 아래와 같이 실행할 수 없는 형태로 출력이되요. 이 문제를 해결하기 위해 다시 extension에 접속합니다.






 그리고 'python'을 설치해주세요. 'Python'을 설치하는 이유는 여러가지가 있지만, 제 경우에는 jupyter notebook을 VS code IDE에서도 자유롭게 쓰고, jupyter notebook으로 만든 .ipynb 파일을 손쉽게 python 파일 확장자 .py로 바꿔주기 위함이에요.(참고로 Python install에 많은 시간이 소요되요 ㅜㅜ)





설치가 완료되면 VS code IDE에서도 jupyter notebook 형태로 코드를 실행할 수 있게 바뀌게 된답니다!





VS code IDE에서 jupyter notebook의 markdown 기능을 이용하려면 똑같이 html 코드 (# GPU)를 입력해주고, 아래 M이라고 되어 있는 부분을 클릭해주시면




Jupyter notebook에서 사용했던것처럼 동일하게 markdown 기능도 사용할 수 있게되요~






<5. VS code IDE에서 Docker 컨테이너 실행 및 종료하기>


윗 부분에서 'Docker', 'Docker explorer' plug-in을 설치해준거 기억하시나요? 설치를 하셨다면, 왼쪽 bar 부분에 docker 아이콘을 클릭하시면 현재 실행중인 container 정보가 뜰거에요.


현재 제 컴퓨터에서는 'pytorch', 'pytorch2' 컨테이너가 실행되고 있네요.




아래 container중 사용하지 않는 컨테이너를 stop시켜주면 




아래와 같이 도커가 중단되었다는 표시를 해주게되요. (restart해주면 다시 'pytorch2' container가 실행된답니다.

 







<6. 재접속하기>


Docker가 아닌 다른 곳에서 VS code IDE를 접속하다가 다시 Docker에 있는 코드들을 작업하려고 할때는 간단하게 접속할 수 있어요.


'F1' 키를 누르고 다시 'remote container ~' 명령어를 통해 아래와 같이 순차적으로 입력해주면 됩니다~


















지금까지 VS code IDE에 Docker를 연동하고 그외 VS code IDE 기능들에 대해서 알아보았어요!


앞선 글에서도 Docker를 통해 pytorch를 설치하는 과정이 엄청 길었죠? 그리고 이곳에서도 docker와 연동시키기 위해 여러 작업들을 진행했어요. 또한 사용하시다보면 더 많은 에러가 생기는데, 이러한 부분을 해결하기 위해 docker 관련 내용을 숙지하고 있어야해요. 원래 목적은 docker를 이용하여 편하게 개발환경을 설치해주고 싶었던 것 뿐인데 "어떻게 된게 배우는 비용이 더 많이 들겠네"라는 생각을 하실수 있을거에요.


그래서 어떤 분들은 클라우드에서 개발환경을 구축하고 자신이 구축한 서버를 배포한다고 하더라구요. 


그래서 다음에는 클라우드와 관련된 Colab과 GCP (Google Cloud Platform)라는 서비스에 대해서 알아보도록 할게요!




안녕하세요~ 


이번에는 리눅스 환경에서 Docker를 이용하여 pytorch를 구축하려고해요! (윈도우 환경에서는 GPU docker가 제공이 안되요 ㅜㅜ)


(명령어 입력은 아래 사이트를 참고하고 복붙하시면될거에요!)

https://oi.readthedocs.io/en/latest/packages/gpu_env/ubuntu.html



<1. DOCKER 설치하기>


먼저 docker부터 설치해볼까요?

아래 명령어를 차례로 입력하시면 설치가 될거에요!


1) Set up the repository


sudo apt-get update






sudo apt-get install \
     apt-transport-https \
     ca-certificates \
     curl \
     gnupg-agent \
     software-properties-common








curl
-fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -







sudo apt-key fingerprint 0EBFCD88






sudo add-apt-repository \
     "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
     $(lsb_release -cs) \
     stable"




2) Install docker engine -community


sudo apt-get update






sudo apt-get install docker-ce docker-ce-cli containerd.io





자! Docker를 만들었으니 도커 위에 올릴 컨테이너를 만들어야겠죠? 그런데 내가 어떤 컨테이너안에서 GPU를 사용하려고 하면 문제가 발생해요. 왜냐하면 컨테이너는 OS와 격리된 상태이기 때문이죠. 그렇기 때문에 이를 해결해줄 방법이 필요한데 그것이 바로 nvidia-docker에요!



<사진1> 



<사진2>











<2. NVIDIA DOCKER 설치하기>


간단하게 nvidia-docker에 대해서 말씀드릴게요.


Docker 컨테이너에서 실행되는 응용프로그램은 OS와 분리 되어 있기 때문에 docker 컨테이너내에서 gpu를 실행할 수가 없어요. 



그래서 docker 내부에서 gpu (driver) 이용하기 위해서는 host gpu driver와 docker를 연동시켜주는 driver가 있어야 하는데, 그것이 바로 nividia-docker에요! 


아래그림을 보시면 'nvidia driver'가 이미 설치되어 있어야 한다는점 명심해주세요! 

(nividia driver는 보통 컴퓨터를 구매하고 우분투를 설치하면 설치할 수 있는데, 이 부분은 따로 우분투 설치하는 방법에 대한 글을 만들게 되면 그때 링크걸도록 할게요! 검색하셔도 많은 방법들이 나오니 참고하세요!)


<사진3>




1) NVIDIA-DOCKER 설치


# Add the package repositories
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update & sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker






2) docker 명령어 권한 변경해주기


아래 명령어를 입력해주는 이유는 docker에 접속하거나 관련 명령어를 수행시킬때 'sudo docker ~'와 같은 형태로 입력해주어야 하기 때문이에요. 그런데, 매번 sudo를 붙이는것이 번거로우니 user모드(root모드가 아닌 현재 user모드; 아래 커맨트창에 'hyunsu@hyunsu:' 있는 부분)에서도 docker 명령어를 실행시킬 수 있게 해주도록 하기위해서 아래 명령어를 입력한답니다.


sudo usermod -aG docker $USER







3) 재부팅


변경된 권한이 부여되기 위해서는 재부팅을 시켜주어야 한답니다!






Nvidia-docker까지 만들었으니 gpu 버전의 pytorch, tensorflow 개발환경을 구성할 준비를 끝냈어요! 그럼 pytorch 컨테이너를 만들어볼까요?











<3. Pytorch 컨테이너 만들기>


Docker의 큰 장점은 pytorch를 수행시켜주기 위해서 여러 패키지들을 설치할 필요가 없다는거에요. 그저 pytorch 이미지만 다운받아주면 설치가 끝나는거죠!




1) docker에서 Pytorch 이미지 찾아보기


먼저 아래와 같이 입력해주시면, pytorch와 관련된 이미지가 어떠한 것들이 있는지 알아 수 있어요. (STARS가 가장 많은게 제일 범용적인거겠죠?)


docker search pytorch




좀더 GUI 스럽게 보고싶다면 아래 사이트에 접속한 후, pytorch라고 입력해주시면 해당 이미지에 대한 설명을 볼 수 있어요.





커맨드 창에다 어떻게 입력해야 이미지가 다운받아지는건지도 나와 있네요.







2) Pytorch 이미지 다운로드


Docker에서 이미지를 다운받는 명령어는 'pull'이에요.


docker pull pytorch/pytorch








3) 이미지 확인


당연히 pytorch 이미지만 다운받았기 때문에 docker에 있는 이미지를 확인했을때 pytorch 이미지 밖에 없을거에요.


docker images








4) nvidia-docker와 연동하여 pytorch 컨테이너 만들기


pytorch라는 이름의 컨테이너 (--name pytorch) 가 pytorch/pytorch라는 이미지를  사용하겠다는 선언을 해주는 작업을 하는거에요. (restart option에 대한 설명은 바로 아래 추가적으로 설명해 놓았어요!)


먼저 아래 명령어를 실행시키기 전에 자신의 user 디렉토리 (/home/hyunsu)에다가 share 폴더를 만들어주세요!!!!!!!!! (만약 자신의 사용자 이름이 mike라면 user 디렉토리가 '/home/mike' 일거에요. 그럼 아래 명령어는 -v /home/mike/share ~~~~ 와 같이 바꾸면 되겠죠?


-v, -p 옵션은 뒤에서 jupyter 패키지를 설치하고 사용할때 추가적으로 설명해드릴테니 아래와 같이 명령어를 입력해주세요!


docker run -itd --name pytorch -v /home/hyunsu/share:/root/share -p 8888:8888 --gpus all --restart=always pytorch/pytorch







etc) "4)"에서 restart 옵션주는 이유


restart option을 준 pytorch라는 컨테이너와 restart option이 없는 pytorch2라는 컨테이너를 비교해볼게요.





일단은 두 컨테이너가 모두 정상적으로 만들어 졌음을 알 수 있어요.





그리고 컴퓨터를 꺼도 docker가 종료되지만 아래 명령어를 입력해줘도 백그라운드에서 실행되는 docker가 종료되고 다시 재시작되요.




Docker가 종료되고 나면 container또한 자동으로 종료되는데요. 이때 restart를 해주지 않은 컨테이너는 'docker run -itd ~'라는 명령어를 또 입력해주어 docker container를 실행시켜줘야해요. 그래야 containter에 접속이 가능해 져요. 하지만, restart 옵션을 주게되면 자동으로 docker가 실행될때 restart 옵션이 적용된 containter도 같이 실행되요. 그래서, 곧바로 해당 컨테이너에 접속을 할 수 있게 되는거죠. (보통 container를 실행킨다고 하지 않고 container를 띄운다고 많이 표현한답니다)



만약 restart 명령어 옵션을 설정해주지 않았다면, 아래와 같이 start 명령어를 이용해 pytorch2 컨테이너를 실행시켜주고 접속하셔야해요~







5) pytorch 컨테이너 실행시키기


docker exec -it pytorch bash









6) GPU 동작 확인하기


먼저 아래 명령어를 실행시키면 pytorch 컨테이너에 CUDA version 10.1 이 인식되고 있는걸 알 수 있어요. 

글을 작성하는 기준으로 pytorch는 cuda 10.1을 기반으로 하고 있네요.


nvidia-smi







아래 명령어를 입력해보고 pytorch가 정상적으로 gpu와 연동되는지 확인하면 끝!


import torch
torch.cuda.is_available()
x = torch.rand(5, 3)

print(x)






지금까지 아래와 같은 과정을 거치셨다고 생각하면 될거에요!


 "docker 생성 -> nvidia-docker 생성 -> pytorch 이미지 다운로드 -> pytorch 컨테이너 생성 - pytorch 실행"


Docker는 이미지가 실행된 형태라고 보시면 되는데요. 

<사진4>



도커 이미지를 start하면 해당 이미지의 컨테이너가 running하게 되는거에요. 그렇기 때문에 하나의 이미지에서 여러 컨테이너를 실행시킬 수 있는 거에요.



<사진5>






7) 추가 패키지 설치하기


pytorch 이미지에는 pytorch와 관련된 기본적인 패키지만 설치되어 있을거에요. 그렇기 때문에 다른 패키지들이 필요하다 싶으면 아래처럼 설치해주면 될거에요.


jupyter notebook 패키지를 설치할 예정인데, jupyter notebook에 대한 설명은 다음 글에서 하도록 할게요!


conda install jupyter






앞서 


 docker run -itd --name pytorch -v /home/hyunsu/share:/root/share -p 8888:8888 --gpus all --restart=always pytorch/pytorch


이와 같은 명령어를 이용해서 컨테이너를 만든것을 기억하시죠?

-v 옵션은 내 user 디렉토리의 share 폴더에 있는 파일들을 pytorch 컨테이너의 share 폴더와 공유하겠다는 의미를 지니고 있어요.



pytorch 컨테이너가 처음 실행되면 workspace라는 곳에 위치하게되는데, 그곳을 빠져나와 root/share 폴더로 접속하면, /home/share 폴더에 있는 이미지 파일들이 공유되는걸 알 수 있어요. 그래서 pytorch 컨테이너의 share 폴더의 파일을 삭제하면 /home/share 폴더의 파일도 삭제된답니다.






 docker run -itd --name pytorch -v /home/hyunsu/share:/root/share -p 8888:8888 --gpus all --restart=always pytorch/pytorch


-p 옵션은 local host의 8888 포트와 pytorch 컨테이너의 8888포트를 연결해준다는 의미에요.


만약에 위와 같은 작업을 해주지 않고 jupyter notebook을 실행시켜주면 에러가 날거에요.




share 폴더로 접속한 후 pytorch 컨테이너를 만들어줄 때 -p 옵션에 설정해준 포트번호를 입력하고 아래와 같이 jupyter notebook을 실행시켜주고 url 주소를 복사해서 웹브라우져에 붙여넣기 해주면


jupyter notebook --ip=0.0.0.0 --port=8888 --allow-root





jupyter notebook이 실행되는걸 보실 수 있어요!



만약 저같은 경우 다른 사람들이 짜놓은 코드를 다운받아서 쓰고 싶다면 pytorch 컨테이너의 share 폴더에서 git으로 다운받아쓰면 되겠죠? (git에 대한 설명은 추후에 하도록할게요~)



만약에 내가 딥러닝을 할때 컨테이너에서 내 local 디렉토리에 있는 이미지 파일들을 이용하여 학습을 시키려고 할때, 따로 폴더명이나 파일들을 잘 지정해두시면 사용하시기 수월하실거에요~








8) 배포하기


자신이 만든 특정 컨테이너에 여러 개발도구들을 설치하여 개발환경을 구성할 수 있는데요. 


만약 누군가에게 나의 프로젝트를 실행하고 싶어한다면, 자신이 만든 컨테이너를 이미지로 만들어주어 docker hub에 배포해주면되요. 그럼 누군가가 내가 만들어 놓은 이미지를 다운받고 사용하면 이것저것 설치할 필요없이 간단하기 프로그램만 실행시켜주면 될거에요! (물론 gpu를 사용하는 프로그램이라면 우분투기반에 nvidia docker는 설치되어 있어야겠죠?)



step1. 현재 실행중인 container 확인

docker ps -a



step2. 배포할 container를 중단하기

docker stop 컨테이너이름




step3. 배포할 container를 image 파일로 만들기

docker commit 배포할컨테이너이름 이미지파일이름:버전


이곳에서는 내가 배포할 컨테이너를 지정하고, 이미지 파일을 만들때 이미지 파일 이름을 지정해주는 작업이에요. 콜론 뒤에 숫자는 이미지파일 배포버전인데 나중에 같은 이름으로 버전만 다르게하면 같은 서버(이미지파일)의 업그레이드된 버전이라고 생각할 수 있겠죠?



pytorch_distribution_test 이미지는 pytorch 이미지를 기반으로 하고 있어요. 그리고 다른 패키지들도 설치하고 다음글에서 설명할 VS code IDE와 관련된 파일도 설치되어 있기 때문에 용량이 대략 2GB 정도 증가한걸 알 수 있어요.




step4. docker hub 로그인


앞서 가입한 docker hub를 기억하시나요?

제가 만든 'pytorch_distribution_test' 도커 이미지파일을 원격 저장소에 올려 배포하게 될 텐데요. 이때 원격저장소가 docker hub가 되는거에요. 그래서 terminal에서 원격저장소(docker hub)에 접속하는 작업을 거쳐야해요.






step5. 배포하기


docker push 도커허브아이디/배포할이미지파일:버전


(Mounted from pytorch/pytorch 메시지가 의미하는 바는 해당부분에서는 기존의 docker hub에 pytorch/pytorch 이미지가 존재하기 때문에 따로 배포하지 않는다는 맥락으로 이해하고 있으시면되요. 딱히 pytorch 부분을 변경하진 않았는데, 만약 바꾼 부분이 있다면 그 부분도 배포가 pushed 될거에요 (이 부분은 나중에 설명하는 git 부분을 보시면 더 자세히 알 수 있을거에요)

 




step6. 배포확인하기


정상적으로 배포되었는지 확인해 볼까요?

docker hub 접속 -> repositories







<사진6>








9) pytorch docker 컨테이너에서 아나콘다 가상환경 만들어줄 필요가 없는이유!


!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!이 글은 pytorch docker에 가상환경을 만들 필요가 없는 이유를 다룬 글이기 때문에 굳이 안보셔도 되요~!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


Pytorch는 anaconda 패키지를 제공하기 때문에 pytorch 이미지에도 역시 anaconda가 있을거에요.




만약 여러 python 버전으로 pytorch를 개발하고 싶다면 하나의 pytorch 컨테이너에서 가상환경을 만들어주면 되겠죠? (아! 그리고 굳이 mkdir 폴더를 만들어줄 필요는 없어요~)


conda create -n gpu-pytorch-1.4 python=3.6








하지만 만들어진 가상환경에 접속하려고 하면 아래처럼 에러 메시지가 나올거에요. 



에러메시지대로 conda init 을 실행시켜주고 container를 빠져 나온뒤


conda init

exit

.

.



다시  pytorch 컨테이너에 접속해서 앞서 만든 가상환경을 activate하면 성공적으로 activate되는걸 확인할 수 있으실 거에요!


docker exec -it pytorch bash

conda activate gpu-pytorch-1.4



python을 동작시켜주고 아래와 같이 torch를 실행시켜주면........ 에러가 생겨요...


그 이유는 지금 pytorch 컨테이너라는 가상환경이 있는데 그 안에 다른 독립된 가상환경을 만들었기 때문에 pytorch 컨테이너와 연동이 되지 않는것 같아요!















도커 기본명령어 관련 사이트1 (실행중인 컨테이너 확인, 정지된 컨테이너 확인, 컨테이너 삭제, 이미지 삭제)

https://brunch.co.kr/@hopeless/10


도커 기본명령어 관련 사이트2

https://ahribori.com/article/5912b3ee381ff41040995a40











지금까지 Docker를 통해 pytorch 환경을 구축해보는 과정을 설명드렸어요!

Tensorflow 환경을 구축하는건 나중에 tensorflow로 개발을 시작할때 설명해보도록 할게요~



다음글에서는 VS code IDE에서 docker의 파일들을 연동하여 개발하는 방법에 대해서 알아보도록 할게요!







[글 래퍼런스]

http://swartist.blogspot.com/2018/02/docker.html



[사진 래퍼런스]

사진1

https://www.docker.com/resources/what-container

사진2

https://itnext.io/how-to-install-kafka-using-docker-a2b7c746cbdc

사진3

https://collabnix.com/deploying-application-in-the-gpu-accelerated-data-center-using-docker/

사진4

https://medium.com/platformer-blog/practical-guide-on-writing-a-dockerfile-for-your-application-89376f88b3b5

사진5

https://www.researchgate.net/figure/High-level-overview-of-Docker-architecture_fig1_308050257

사진6

https://www.claranet.de/blog/2018-04-12-wie-funktionieren-docker-container



안녕하세요~


이번글에서는 Docker라는 개념에 대해서 알아보도록 할게요!



지난번에 아나콘다를 이용해서 가상환경을 구축하는 이유에 대해서 알아보았어요. 그런데, 아래 구조를 보면 아나콘다는 PC computer에 종속되어 있는걸 볼 수 있어요. 



예를들어, 내 PC에서 아나콘다를 설치해 가장환경을 구축했으면, 내 옆자리의 PC에서 (내 PC에서 만든) 가상환경을 사용할 수 없어요. 이때 내 PC를 로컬이라고 하는데요. 이러한 아나콘다 가상환경의 문제점은 로컬에 종속된다는거에요.


<사진1>


그래서 내 PC에서 하던 작업을 친구 PC에서 해야하는 경우에는 친구 PC에 똑같이 패키지들을 설치해줘야해요. "아.. 그냥 내 PC에 있는 개발환경들을 사진(이미지)로 만들어서 친구PC에 옮겨 그대로 사용하고 싶다..." 이런 생각을 하실텐데요. 이것을 가능하게 한것이 바로 'Docker'란 녀석이에요. 









<1. Docker>



1) 내가 직접 설치할 필요가 없어요!


아나콘다 가상환경에서는 내가 직접 가상환경을 구성해주고 패키지들을 설치해주었죠? 하지만, Docker를 사용하면 이런 불편함을 없앨 수 있어요.


내 PC에서 가상환경 A, B, C를 만들었다고 가정해볼게요. 가상환경A에는 파이토치 개발환경, B에는 텐서플로우 개발환경, C에는 케라스 개발환경으로 설정되어 있는데요. 이걸 다른 PC에서도 사용하기 위해 이러한 가상환경을 하나의 도커 파일(이미지)로 만들어 Docker hub라는 곳으로 보내요. (이때 이미지라는 용어는 '사진'이라는 개념으로 이해하면 좋을텐데요. 그냥 내가 우분투라는 OS를 설치를해서 "설치가 마무리 된 상태"를 하나의 사진으로 찍어서 파일로 만들어주면, 다른 사람들은 내가 만들어 놓은 이미지만 실행시키면 내가 OS를 설치 할때 여러 설정들을 해주었던 귀찮은 작업을 할 필요가 없어져요) 


그럼 친구 PC에서 파이토치 개발환경을 세팅하고 싶으면 Docker hub라는 곳으로가 내가 올려놓은 가상환경A에 해당하는 도커파일(이미지)을 다운받으면 자동으로 설치가되요. 간단하죠? 



<사진2>


아래 사이트에 접속하시면 좀 더 직관적으로 이해가 가능하실거에요!

http://taewan.kim/post/python_env_for_machine_learning/


그런데 보통은 개발자들이 '파이토치', '텐서플로우' 이러한 개발환경들을 도커파일(이미지)로 Docker hub에 올려놓는데요. 우리는 그 도커파일(이미지)만 다운받으면 따로 패키지 설치할 필요없이 간편하게 파이토치를 바로 사용할 수 있게되요~


 


또한 도커파일(이미지)는 OS 따로, 머신러닝에 필요한 패키지 따로 만들어져서 docker hub에 올려져 있는 경우도 있어서, 자신이 원하는 도커파일을 다운 받아서 개발환경을 구성할 수 도 있어요. 




2) Docker도 독립된 환경을 구축할 수 있어요!


앞서 Docker hub에서 이미지 파일을 다운받아 개발환경을 구축할 수 있다고 말씀드렸죠? Docker 역시 아나콘다 가상환경처럼 하나의 PC에 컨테이너라(아래그림의 App A)는 독립된 공간을 제공해줘요.  



           

<사진3>






3) Docker VS VM


우리가 사용하고 있는 운영체제가 우분투인데 레드헷, CentOS, 윈도우와 같은 운영체제 기반에서 개발을 하고 싶을때 보통 Virtual Machine을 사용하는데요. 가상머신 또한 배포해서 사용할 수 있기 때문에 내PC에서 작업했던 것을 다른 PC에서 다운받아 사용할 수 있어요. 


도커도 컨테이너 내에서 배포된 OS 이미지를 다운받아 설치할 수 있기 때문에 A라는 컨테이너에서는 윈도우를 B라는 컨테이너라는 곳에서는 우분투를 사용할 수 있다고 했어요. 그렇다면 VM과 Docker의 차이는 무엇일까요? 




보통 컴퓨터가 실행이되면 Memory에서 정보를 읽어들어와 CPU에서 처리해줍니다. 


<사진4>


CPU가 process단위로 작업을 하다보면 프린터와 같은 I/O 디바이스를 실행시켜야 할때가 있는데요. 이런 경우에는 I/O 디바이스를 처리하는데 CPU가 너무 많은 시간을 잡아먹기 때문에 운영체제 한테 권한을 넘겨줘서 처리하게 해줍니다. 그러면 운영체제는 I/O 같은 물리적 device를 독점해서 사용하게되죠. 이러한 작업이 끝나기 전까지는 어떤 process도 현재 I/O에서 수행하고 있는 process를 방해하지 못해요.


<사진5>



VM은 Hypervisor라는 기반 위에 Guest OS가 실행되는 개념이에요. 이러한 Guest OS는 Host Operating System의 메모리와 물리적 장치를 직접 접근하여 사용합니다.


<사진6>


OS라는건 용량이 많아 메모리를 굉장히 많이 차지하게 되고 이러다 보면 실제 프로그램을 위해 할당되는 메모리 양이 부족하다보니 프로그램 속도가 굉장히 느려지는 단점이 있어요. 또한 OS별로 물리적 장치를 나누어 쓰기 때문에 더욱 문제가 심화될거에요.


<사진7>


<사진8>


하지만 도커를 사용하게되면 컨테이너 내부에서 실행하기 때문에 따로 Host Operating System에 접근할 필요가 없어 조금 더 효율적으로 컴퓨터 시스템(메모리)을 사용할 수 있게 됩니다.


<사진9>








<2. Docker 단점>


이렇게 장점이 많다면 모든 개발자들이 Docker를 써야하는거 아닌가?라고 반문할 수 있을거에요. 사실 많은 개발자들이 Docker를 이용하고 있지만 Docker 역시 몇몇 단점들을 갖고 있어요.


1) 윈도우에서 GPU docker 이미지 파일은 제공이 안되요 


딥러닝 개발환경을 구축할 때 빠지지 않는 것이 GPU 설치에요. 그래서 도커에서 tensorflow 설치환경을 다운받으면 당연히 GPU 관련 패키지나 파일들이 설치되어야 하는데요. 아직까지는 윈도우 환경에서 GPU 도커 이미지파일이 제공되지 않기 때문에, 윈도우에서는 도커 컨테이너에 tensorflow-gpu가 설치되지 않는다고 해요ㅜㅜ


하지만 리눅스에서는 Nvidia-Docker를 제공해주기 때문에 관련 이미지를 다운받고 설정해줄 수 있다고 합니다. Docker의 가상환경은 실제 GPU와 연결될 수 없는데, 리눅스 운영체제에서 Nvidia-docker를 이용하면 Docker에서도 GPU를 인식할 수 있도록 해줍니다. 


<사진10>




지금까지 Docker에 대해서 알아보았어요.

다음장에서는 Docker를 통해 Pytorch, Tensorflow 개발환경을 구축하는 방법을 알아보도록 할게요!















[글 래퍼런스]

https://www.youtube.com/watch?v=tPjpcsgxgWc


[사진 래퍼런스]

사진1

https://m.gettyimagesbank.com/view/computer-monitor-icon-vector-illustration-on-isolated-background-business-concept-computer-pictogram/921163788

사진2

https://www.javainuse.com/devOps/docker/docker-hub

사진3

https://gist.github.com/qpzm/f25ac49cc7568cbc084a6b2c10288d59

사진4

http://bimresources.blogspot.com/2011/09/normal-0-false-false-false-en-us-x-none_29.html

사진5

https://googler700.blogspot.com/2015/03/os-memory-management.html

사진6

https://medium.com/@darkrasid/docker%EC%99%80-vm-d95d60e56fdd

사진7

https://www.vembu.com/blog/vmware-memory-metrics/

사진8

https://www.youtube.com/watch?v=tPjpcsgxgWc

사진9

https://tech.peoplefund.co.kr/2017/04/03/what-is-docker-ko.html

사진10

https://github.com/NVIDIA/nvidia-docker


안녕하세요~


이번시간에는 아나콘다를 통해 2개의 가상환경을 만들고 각각의 가상환경에서 pytorch, tensorflow를 설치하는법을 배워볼거에요~


Pytorch: Python 3.7버전/ CUDA 10.1 버전/  Pytorch=1.4버전


Tensorflow: Python 3.6버전/ CUDA 9.0 버전/ cuDNN 7.6버전/ Tesorflow GPU=1.8 버전








<1. Pytorch 가상환경>



1) Pytorch 가상환경 생성 (Python=3.7 버전)







2) 가상환경에 conda 패키지 설치 (이 작업을 하지 않으면 나중에 CUDA 설치할때 에러가 나더라구요)






3) CUDA=10.1, Pytorch=1.4 버전 설치

conda install pytorch==1.4 torchvision cudatoolkit=10.1 -c pytorch


(예전 버전 설치하려면 아래 페이지참고)

https://pytorch.org/get-started/previous-versions/


위의 명령어를 입력하면 아래와 같이 pytorch를 위한 패키지들이 설치될거에요.






4) 그외 추가적으로 아나콘다 패키지들을 설치해줍니다. 딥러닝을 할때 Pytorch에서 제공해주는 패키지 말고도 아나콘다에서 제공하는 패키지들을 쓰는 경우가 많기 때문에 '아나콘다 패키지'를 설치해주는거에요.



아래 데이터 사이언스에서 자주 쓰이는 pandas라는 패키지가 추가로 설치되는게 보이네요.






5) Pytorch 실행

- Pytorch 가 제대로 설치되어 있는지 확인 --> import torch

- 그외 cuda, cudnn 설치가 제대로 됐는지 확인 (pytorch 설치할때 cudnn을 따로 설치하지 않아도 cuda 버전에 맞는 cudnn이 자동적으로 설치되는거 같아요. 자세한건 아니지만요;; ㅎㅎ) 




##############################################################################


<2. Pytorch 가상환경과 Pycharm 연동>


일반적으로 IDE 툴(ex: Pycharm)을 이용해서 개발을 많이 하시죠? 

그런데 pytorch 가상환경 공간에서 pycharm과 같은 툴을 이용하려면 interpreter를 setting해주어야해요 (interpreter에 대한 설명은 따로 하지 않을게요~ )


1) 먼저 project 파일 만들어주기





2) File -> Setting





3) Project:CNN -> Project Interpreter -> 톱니바퀴 아이콘 클릭!






4) 톱니바퀴 모양 아이콘 클릭하고, show all 클릭!



  


5) '+' 아이콘 클릭



6) 자신의 가상환경 경로가 어디있는지 확인후 아래와 같이 설정해주고 'ok'버튼 클릭



(참고로 제 가상환경 경로는 아래와 같이 숨긴 폴더에 있었어요~)




7) 생성된 pytorch 가상환경 interpreter 선택및 ok 버튼 클릭





8) 아래 네모박스 부분이 현재 setting 중이라는 의미이며, 없어질때까지 기다렸다가  





다 없어지면 'Apply' -> 'Ok' 순으로 클릭





9) 아래 네모박스 부분은 progress bar를 의미하며 현재 pytorch 가상환경의 interpreter가 setting 중이라는 의미이기 때문에 없어질때까지 대기





10) python 파일 생성 후, pytorch 기본 코드 작성


아래와 같이 정상적으로 출력이 된다면 끝!


 











##############################################################################

<3. Tensorflow 설치하기>


1) Tensorflow gpu 버전을 아래와 같이 설치해주셔도되고 "conda install tensorflow-gpu"라고 해주시면 최신버전이 설치됩니다. 이때 설치되는 패키지 목록을 보시면 CUDA, cuDNN 모두 설치되기 때문에 따로 CUDA, cuDNN을 설치해줄 필요가 없어요!!!


[Note]

참고로 "conda install tensorflow" 처럼 gpu 버전이 아닌 tensorflow를 미리 설치하셨거나 추후에 설치되어 있으면 "conda uninstall tensorflow" 해주시고, tensorflow-gpu 버전을 따로 설치하세요. 왜냐하면 종종 tensorflow 패키지가 tensorflow-gpu 패키지를 override하여 tensorflow-gpu 패키지를 이용못하게 하는경우가 생기기 때문이에요!!!




2) CUDA 9.0 버전 설치


Note: 만약 CUDA 버전을 manually 설정해주고 싶은경우 아래와 같이 패키지를 설치해주시면되요!


conda install -c anaconda cudatoolkit=9.0








3) cuDNN 7.6 버전 설치


Note: 만약 CUDA 버전을 manually 설정해주고 싶은경우 아래와 같이 패키지를 설치해주시면되요!


conda install -c anaconda cudnn=7.6




4) Tensorflow 설치 되었는지 python을 통해 확인








5) Tensorflow GPU 확인 및 경고메시지 해결


Tensorflow GPU가 제대로 설치되어있는지 보려면 아래 그림과 같은 코드를 넣어주면되요. 


import tensorflow as tf

s = tf.constant("hello")

sess=tf.Session()


그럼 GPU 정보들이 출력될거에요 (출력된 메시지에 device:GPU:0 이라고 되어있는데, GPU가 없다는 뜻이 아니라 0번째 GPU에 할당되어 있다는 뜻이에요. 컴퓨터에 GPU를 여러개 설치해서 쓰시는 경우가 있으신데 이때 GPU 순서가 0, 1, 2 순서로 진행되요)


가끔 패키지가 여러개 깔리다 보면 최신버전의 패키지들이 설치되는 경우가 많아요. 그래서 아래와 같은 경고창이 뜨기도 합니다.


conda\envs\tensorflow\lib\site-packages\tensorflow\python\framework\dtypes.py:519: FutureWarning: Passing (type, 1)


위와 같은 메시지는 자세히 보면 numpy 버전이 현재 tensorflow 1.8버전이 요구하는것 보다 더 높다고 경고메시지를 띄우고 있어요. 그래서 자신들이 높은 버전의 numpy 패키지를 낮은 버전의 numpy 패키지로 중간중간 코드를 변경하겠다는 메시지를 띄운거에요. 사실 경고메시지로 굳이 따로 신경쓰실 필요는 없는데 그래도 거슬린다고 하신다면 




아래와 같이 numpy 버전을 낮춰주시고


다시 아래와 같이 같은 코드를 입력해주시면 문제없이 출력되는걸 알 수 있어요.








8) 아나콘다 가상환경에서 tensorflow version upgrade하기


기존에 1.8 버전이 설치되어 있으다면



아래와 같이 2.0 버전으로 upgrade할 수 있습니다.













<4. VS code IDE를 아나콘다와 연동하기>



step1. VS code IDE 다운받기




step2. VS code IDE 설치해주기




Step3. VS code IDE 실행하기




Step4. Python 플러그인 Extension(확장)하기

이 플러그인을 통해, python interpreter, jupyter notebook, ipynb(주피터 확장자)와 py(파이썬 확장자)간의 자동코드변환 등을 할 수 있게됨





Step5. VS code IDE와 아나콘다 연동해주기

①ctrl+shift+p



②"python: select Interpreter" 클릭




③아나콘다에서 자신이 사용하는 tensorflow2 패키지 경로 확인후 (위에서 설치한 가상환경은 tensorflow 가상환경이지만, 저는 tensorflow2라는 가상환경을 하나 더 만들어준 후 VS code IDE 예제에 적용시켰습니다. 혼동하지마세요!)





④해당되는 경로 클릭






Step5. 작업공간 만들어주기

①바탕화면에 DL_project 폴더 생성해주기



②Open Folder 클릭 후, DL_project 경로 선택






Step7. 'test.ipynb' 파일 생성해주기

:ipynb 파일로 만드는 이유는 jupyter notebook 환경으로 코드를 작성하기 위함



파일 생성시, 아래 밑줄친 파일 클릭해야 주피터 실행화면이 생성됨




Step8-1. ipykernel 설치 (첫 번째 방법)

아래와 같이 'import tensorflow as tf'를 입력하고 실행('shift+enter')시키면 아래메시지 ("Data Science library ipykernel is not installed, install?")가 생성됨 --> yes 클릭






아래 코드가 실행되면 정상적으로 환경이 setting된 것!

(혹시 에러가 나는경우에는 조금 기다리시거나, VS code IDE를 재실행 해보시길 권장드립니다)




Step8-2. ipykernel 설치 (두 번째 방법)

"Step8-1. ipykernel 설치 (첫 번째 방법)"에서 설치 후, 코드가 정상적으로 동작하면 "Step8-2"는 무시해주세요!!


①anaconda prompot에서 해당 가상환경을 activate해준 후, ipykernel 설치해주기




②설치 완료 후, VS code "재실행" 해주고 아래 코드 실행하기



지금까지 가상환경을 설치하고 IDE 툴과 연동하는 방법들에 대해서 알아보았습니다!



[참고 사이트]

https://zereight.tistory.com/224

https://discuss.pytorch.org/t/cudatoolkit-9-2-unavailable/60488

https://gldmg.tistory.com/73

안녕하세요~


제가 이전글에서 했던 질문을 다시 가져와 볼게요.


"여러분이 진행하는 프로젝트에서 딥러닝과 관련된 프로그램을 3개(A,B,C) 정도 사용한다고 했을때 여러분의 PC는 하나라고 가정해볼게요. 그리고, 이미 CUDA 버전=9.0, cuDNN=7.0, 아나콘다=Python 3.6를 설치했다고 해볼게요. 그런데, 프로그램A에서는 이미 설치된 개발환경에서 무리없이 실행이되지만, 프로그램B (CUDA=10.0, cuDNN=8.0, python=3.7), 프로그램C (CUDA=10.2, cuDNN=8.0, Python=3.8)는 각각 요구하는 사항이 다르다고 한다면 어떻게 할까요? 프로그램을 실행할때마다 다시전부 삭제해주고 다시 설치하는 작업을 반복해야 하나요?"


만약 여러분이 위와같은 문제에 봉착한다면 프로그램A를 실행시키고, 프로그램 A에 있던 버전들을 모두 삭제하고 다시 다른 버전들을 설치하고나서 프로그램B or C를 실행시켜주어야 할거에요. 물론 여러 버전을 전부 설치해서 사용할 수는 있지만 이런 경우에는 프로그램 도중 버전들끼리 충돌하는 현상이 발생하여 여러 에러를 경험하게 될거에요.



하지만 여러분이 만약 아나콘다를 설치하신다면 위와 같은 문제를 쉽게 해결하실 수 있으실거에요. 왜냐하면 아나콘다는 '가상환경'을 지원(제공)하기 때문이죠.


만약 가상환경을 사용하시게 된다면 가상환경이라는 곳에 "가상환경A=CUDA 버전=9.0, cuDNN=7.0, 아나콘다=Python 3.6/ 가상환경B=CUDA 버전=10.0, cuDNN=8.0, 아나콘다=Python 3.7/ 가상환경C=CUDA=10.2, cuDNN=8.0, Python=3.8"라고 설정해주고 해당 프로그램들을 실행시켜주면 서로 버전들끼리 충돌도 생겨나지 않게된답니다.





<1. 아나콘다 가상환경 만들기>


여러분이 아나콘다를 설치하시면 아래와 같은 실행프로그램들이 생길거에요. 아나콘다 가상환경을 만드는데는 두 가지 방법이 있어요. 하나는 Command 방식인 아나콘다 Prompt를 이용하는것이고, 다른 하나는 Anaconda Navigator를 이용하는거에요.






1-1) Prompt 생성 및 패키지 설치


아나콘다 prompt를 실행하고, python 3.7버전의 test2라는 가상환경을 만들어 주었어요. 






가상환경을 활성화 해주고 현재 설치되어 있는 패키지들이 무엇이 있는지 살펴보았어요. 어? 그런데 numpy, pandas 같이 딥러닝에 필요한 패키지들이 없네요?





그래서 직접 가상환경에 제가 원하는 numpy라는 패키지를 설치했어요. 그리고 다시 확인해보니 numpy 패키지가 설치되어있는게 보이시죠? 이렇게 가상환경을 별도로 만들어주시고 원하는 패키지들을 설치하실 수 있습니다! ㅎㅎ








1-2) Naviator을 통한 가상환경 생성 및 패키지 설치


아나콘다를 통해 가상환경을 사용하는 또 다른 방법은 Navigator를 사용하는거에요. Navigator는 GUI로 되어있기 때문에 사용자들이 더 쉽게 사용하실 수 있을거에요. (아나콘다를 설치하면 자동으로 설치된답니다~)


먼저, Navigator를 실행시키고, Environment를 들어가서 Creat 아이콘을 클릭하여 가상환경 계정을 생성해줄 수 있어요.




그리고 생성한 계정의 재생버튼을 클릭하면 terminal을 오픈하면 Prompt에서 conda activate -n test2 라고 직접입력하지 않고서도 test2라는 가상환경이 활성화가되요!






현재 설치되어 있는 패키지는 기본적으로 python과 관련된 패키지들이에요. 





Not installed 로 들어가면 설치가되지 않은 패키지들이 나오는데요. 제가 pillow라는 패키지를 설치하고 싶다면 아래와 같이 검색해서 'apply'를 클릭하여 설치해주시면되요.





그리고 prompt에서 다시 확인하시면 제대로 설치가 되어있는걸 보실 수 있으실거에요.





이번엔 반대로 Prompt에서 설치한 패키지를 Navigator에서 확인해볼까요? 이전에 prompt에서 numpy를 설치했었죠? 아래 사진보니 잘 설치가 되어있네요. 그런데 조심하셔야 할 부분이 있는데, prompt에서 설치하고나서 바로 확인하려고 하니까 설치가 안되어 있다고 뜨더라구요 (조금 시간이 지나야 Navigator에서 패키지가 설치되었다고 확인할 수 있더라구요). 그래서 보통 기다렸다가 보시거나 한번 Navigator를 종료하고 다시 들어오시면 설치가 되어있는걸 확인하실 수 있으실거에요.









<2. 아나콘다 가상환경 삭제>


아래와 같이 입력해주면 가상환경이 삭제된답니다.






다음 시간에는 아나콘다 가상환경을 통해 Tensorflow와 Pytorch를 설치하는 방법을 알려드릴게요~


안녕하세요~


이번장에서는 딥러닝 개발환경에 대해서 알아보도록 할거에요.


개발환경이란 개념자체가 어려운건 아니에요. 


개발환경이란 말 그대로 내가 개발을 하려고 했을 때 필요한 환경을 말하는거에요. 그렇다면 환경이라는 것이 구체적으로 무엇을 의미할까요? 딥러닝 개발환경은 어떤 순서로 구축해야 하는걸까요?


(여기서는 설치방법에 대해서 따로 다루지 않을거에요. 설치방법은 인터넷에 검색하면 쉽게 나와있으니 그걸 그대로 따라하시면되요!)


설치순서: 운영체제(OS) -> CUDA -> cuDNN -> 프로그래밍 언어 or 패키지(Anaconda) -> Pytorch





1. Framework 설치하기


앞선 글에서 Framework에 대해서 설명드렸죠? 딥러닝 개발환경을 구축하기 위해서 제일 먼저 해야할 일은 내가 사용하고자 하는 Framework를 선정하는거에요.


저같은 경우에는 Pytorch를 딥러닝 Framework로 선정했어요.


"PyTorch 홈페이지 -> Get Started"로 들어가면 아래와 같은 화면이나와요. 보시면 Pytorch를 사용하기 위해 필요한 사항들이 나와있어요. 즉, Pytorch라는 딥러닝 framework를 사용하려면 아래와 같은 사양들이 필요한데, Pytorch, 운영체제, 패키지, 프로그래밍언어, CUDA 이러한 것들을 통칭하여 '딥러닝 개발환경'이라고 불려요.  


-운영체제

-패키지

-프로그래밍 언어(API)

-CUDA

<사진1>


그런데 Pytorch를 설치하면 이러한 사양들이 자동으로 설치가 되지는 않기 때문에 여러분들이 직접 설치를 해주시고 나서 Pytorch를 설치해주셔야해요.






2. 운영체제


여러분들은 보통 윈도우만 사용하셨을거에요. 그런데 딥러닝과 같은 작업을 할때는 심심치않게 리눅스 운영체제를 만나기도해요. 그렇기 때문에 종종 pytorch로 구현되어 있는 프로그램을 실행시키려고 하는데, 그 프로그램이 리눅스만 지원하는경우가 생겨요. 그래서 어떤 운영체제를 설치할까가 매우 중요하답니다.


<사진2. 윈도우>


<사진3. 리눅스>





딥러닝 개발환경을 구축하기 위해서 제일먼저 설치해야하는 요소라고 생각하시면되요!







3. CUDA


Compute Unified Device Architecture의 약자로 오늘날 많은 사람들은 'CUDA=병렬처리 시스템=GPU사용을 위한 툴' 이라는 인식을 갖고 있어요. 딥러닝이라는 학문이 보통 행렬연산이라든지 병렬처리가 필요한 구조로 되어있는 연산이 많다보니 GPU와 같은 device가 꼭 필요한 경우가 많아요.


그래서 NVIDIA라는 회사에서는 GPU라는 하드웨어를 만들고 이를 사용자가 쉽게 사용할 수 있도록 driver를 제공해줍니다. (보통 우리가 GPU를 그래픽카드라는 개념으로 많이 인식하고 있죠)


그래서 딥러닝 framework 진영인 pytorch나 tensorflow같은 곳에서는 최신 GPU driver 버전을 사용하도록 노력하고 있어서 지속적으로 버전을 업그레이드 하고 있어요.


<사진4>









<3. cuDNN 설치>


이상하게 Pytorch 홈페이지에서는 cuDNN을 설치하라는 말이 없죠? 하지만 NVIDA에서는 cuDNN (CUDA Deep Neural Network)라는 딥러닝을 위한 라이브러리를 따로 제공해줍니다. 


Pytorch에서는 cuDNN 라이브러리를 이용하는 기능(함수)들이 많기 때문에 cuDNN을 따로 설치해주는 것이 좋습니다.


<사진5>







<4. 프로그래밍 언어 or 패키지>


이제 Pytorch의 기반이 되는 프로그래밍 언어를 설치할거에요. 그런데, 이전글에서 설명했듯이 프로그래밍 언어를 설치한다는건 보통 python api, java api 등 을 설치한다는거에요. 그런데 이런 프로그래밍 api는 굉장히 기본적인 패키지들만 있어서 딥러닝을 위한 패키지들을 따로 설치해주어야해요.


이런 수고를 덜기 위해서 Data science (or 과학관련분야)에 필요한 패키지들을 따로 모아서 제공해주는 플랫폼인 '아나콘다'가 등장하게 됩니다.  


<사진6>



그래서 '아나콘다'를 설치하게 되면 Python API도 저절로 설치되면서 과학과 관련된 패키지들이 자동적으로 설치되는 셈인거죠! 


그래서 보통 딥러닝 하시는 분들이나 과학관련 업무를 하시는 분들은 '파이썬+여러 패키지'를 개별적으로 따로 설치하지 않고 아나콘다 하나만 설치해서 쉽게 프로그래밍을 하신답니다.





<5. 딥러닝 framework; Pytorch>


이제 모든것이 세팅되었으면 딥러닝 framework를 설치해주시면되요.


딥러닝 framework 종류(Tensorflow, Pytorch, Keras 등)에 따라서 개발환경이 달라져요. 하지만 대부분 '운영체제, CUDA, cuDNN, 아나콘다(Python)' 정도 설치해주시면 어떤 framework라도 쉽게 사용하실 수 있으실 거에요!


<사진7>





지금까지 '딥러닝 개발환경'에 대해서 알아보았어요! ㅎㅎ


그런데 제가 여기서 질문하나만 던져 볼게요.


여러분이 진행하는 프로젝트에서 딥러닝과 관련된 프로그램을 3개(A,B,C) 정도 사용한다고 했을때 여러분의 PC는 하나라고 가정해볼게요. 그리고, 이미 CUDA 버전=9.0, cuDNN=7.0, 아나콘다=Python 3.6를 설치했다고 해볼게요. 그런데, 프로그램A에서는 이미 설치된 개발환경에서 무리없이 실행이되지만, 프로그램B (CUDA=10.0, cuDNN=8.0, python=3.7), 프로그램C (CUDA=10.2, cuDNN=8.0, Python=3.8)는 각각 요구하는 사항이 다르다고 한다면 어떻게 할까요? 프로그램을 실행할때마다 다시전부 삭제해주고 다시 설치하는 작업을 반복해야 하나요?



이러한 문제점 때문에 대부분의 개발자들은 '가상환경'이라는 시스템을 이용한답니다. 그래서 다음글에서는 아나콘다를 활용하는 '가상환경'시스템에 대해서 알아보도록 할게요! 











[사진 래퍼런스]

사진1

https://pytorch.org/get-started/locally/

사진2

https://1boon.kakao.com/slownews/20161005n

사진3

https://namu.wiki/w/%EB%A6%AC%EB%88%85%EC%8A%A4

사진4

https://nyu-cds.github.io/python-gpu/01-introduction/

사진5

https://m.blog.naver.com/PostView.nhn?blogId=sogangori&logNo=220965933190&proxyReferer=https%3A%2F%2Fwww.google.com%2F

사진6

https://jjeongil.tistory.com/766

사진7

https://venturebeat.com/2020/01/30/openai-facebook-pytorch-google-tensorflow/

안녕하세요~


이번글에서는 '코딩'과 관련된 여러 용어들을 설명드리려고해요.


여러분이 만약 이제 코딩을 시작하신분이라면 '프로그래밍 언어'문법을 보시것만으로도 굉장히 힘드실거에요.


그런데 '프로그래밍 언어'를 시작도 해보기전에도 좌절하는 경우가 굉장히 많아요. 예를들어, 인문학만 하다가 프로그래밍을 처음했는데 직속상사가 "XX님 딥러닝 Framework 뭐써요?" 라고 물어본다면 멘붕이 오실거에요.


Framework는 또 뭐람.....


그래서 이번에는 Framework라는 개념을 이해하기 위해 필요한 여러 개념들에 대해서 알아보도록 할거요 ㅎㅎㅎ






<1. API>


여러분이 프로그래밍을 한다는건 컴퓨터와 대화를 한다는거에요. 컴퓨터는 기계기 때문에 전기신호만 받을 수 있어요. 그래서 전기신호가 켜진경우를 1, 꺼진경우를 0으로 간주하는 이진법체계위에서 발전해왔답니다.


<사진1>


우리가 컴퓨터를 하면 프린터, 모니터와 같은 출력장치와 키보드, 마우스와 같은 입력장치를 이용하게되죠? 그런데 우리가 아무생각없이 했던 이러한 행위가 실제 컴퓨터 본체에 있는 CPU라는 곳에 도달하게 되면 이진법으로 번역되서 전달되게되요. 



<사진2>


그러면 CPU는 또다시 그입력을 받아 본체 내부에 있는 memory(ram)를 통해 주변 장치들을 제어하게 된답니다.


<사진3>


<사진4>



그래서 초기에는 '010101000'과 같은 언어를 사용해야만 컴퓨터를 다룰 수 있었어요. 그런데 사람들이 사용하기 어려워서 컴퓨터를 멀리하려고 하자 조금더 쉬운 assembly lanugage라는 것이 나왔고, 오늘날 programming language라는 용어로 사용되는 좀더 고급(추상)언어인 java, C, python 같은 언어들이 만들어 졌어요.


<사진5>


하지만 컴퓨터를 실제로 제어하기 위해서는 '010100001'과 같은 이진법을 사용해야해요. 그런데 일반 사용자들이 이런것까지 만들 필요가 있을까요? 그리고 우리가 python과 같은 고급(추상) 프로그래밍언어를 사용할때 보면 우리가 코드를 입력하고 관련된 결과를 받게되는데요. 이렇게 입력과 출력을 하기 위해서 우리가 직접 관련기능(함수)들을 만들어 주어야 할까요? 아마 이렇게 되면 실제 입출력장치에도 접근해야하기 때문에 많은 시간들이 소요가 될거에요.


개발자들이 응용프로그램을 만들려고 할때마다 이러한 수 많은 작업들을 해야한다면 아마 많은 사람들이 포기할거에요. 그래서 여러 회사들은 개발자들이 응용프로그램을 만들기 위해 편하게 사용할 수 있는 인터페이스를 제공하는데 이것이 API (Application Programming Interface)에요.


회사들은 개발자들이 low level (01010과 같은 기계어) language와 assembly language를 직접 만들지 않고 고급(추상) 프로그래밍 언어만 간단하게 사용할 수 있게 사전작업을 하게되요. 그리고 이러한 사전작업을 마치면 회사들의 고유 API가 만들어 지는데 사용자들은 이를 이용해 간단히 프로그램을 만들 수 있게 되는거에요.


그래서 제가 python 언어를 사용한다는건 python API를 사용한다는 말과 같은거에요. abs(-10)이라는 언어는 절대값을 뱉어주는 함수에요. 아래와 같이 언어를 입력할 수 있는 것도 python을 만든 회사가 키보드를 통해 CPU로 값을 전달하는 과정과 모니터에 결과값을 출력해주는 과정에 필요한 low level, assembly level 작업들을 abs라는 함수에 내장시켜 준 것이지요.  



그런데 우리가 python api를 이용하려면 어떤 설명서 같은 것들이 있어야 하잖아요? 그래야 python 언어 문법도 이해하고, 함수가 뭐가 있는지도 알 수 있겠죠.


그래서 이러한 설명들을 모아둔 곳을 Document or Library라고 한답니다. 즉 설명서들을 도서관에 모아놓은 이미지를 생각하시면 될거에요. (Python API Library Link)


(API) document에는 사용자들이 자주 사용하거나 기본적인 연산을 다루는 함수들을 미리 만들어서 제공하기도해요. 그래서 따로 함수를 만들어줄 필요가 없게되는데요. 보통 이런 함수들을 '내장함수'라고 한답니다.


<사진6>






<2. Packages>


우리가 Python API를 사용한다고 해서 딥러닝에 필요한 기능들을 다 사용할 수 있을까요?


사실 Python API, Java API 같은 것들은 아주~~~ 기본적인 기능들만 제공하고 있기 때문에 Python API 만으로는 우리가 할 수 있는것들이 제한적이에요.


그래서 여러 분야에 있는 사람들은 이러한 기본적인 기능을 갖고 자신들의 분야에 맞추어서 새로운 것들을 만들기 시작했어요.


예를 들어, 행렬을 연산하려고 하는데 Python API는 너무 기본적인 연산만 제공하고 있고, 행렬연산을 매우 비효율적으로 하기 때문에 수치해석이나 이미지 분야와 같이 다차원의 행렬을 이용할 때 많은 문제가 발생할 수 밖에 없었어요. 그래서 이런 분야에 있는 사람들은 행렬연산을 할 수 있겠금 자신들이 Python API를 이용해 여러 함수들을 만들기 시작했는데요. 이렇게 해서 만들어진 것이 numpy package라는 거에요.


그래서 package라는 개념을 일반화해서 설명하자면 기본적인 Python API를 이용하여 자신들 분야에 맞는 함수들을 만들고, 이와 관련된 모든 함수를 하나의 package라는 큰 단위로 묶는거에요. 



Python API 자체도 여러 내장 함수들이 존재하기 때문에, 이와 관련된 package 도 존재할거에요. 하지만, 일반적으로는 Numpy와 같이 만들어서 사용하는 경우가 많아요. 그래서 Python을 설치하고 딥러닝 환경을 구축한다고 하면 딥러닝과 관련된 여러 package들 (ex: Numpy, Pandas, Scikit-learn ..) 을 추가적으로 설치해주어야 한답니다.





<5. Framework>


그럼 마지막으로 Framework에 대해서 알아보도록 할거에요.


우리가 앞서 Python API를 설치했다고 해볼게요. 그럼 우리가 이러한 Python API를 통해 딥러닝을 해본다고 가정합시다. 딥러닝은 하나의 학문 체계이기 때문에 굉장히 많은 수식과 개념들이 혼재되있어요. 그런데 이러한 개념들을 Python API로 하나씩 구현해주다보면 딥러닝을 하기도 전에 그만둘거에요.


그래서 딥러닝을 주력으로 하는 회사들은 자신들이 기본적인 틀을 제공해주고 사용자들은 이를 쉽게 이용하기만 하면되는 장치를 마련해주었는데 이것이 바로 Framework에요. 이러한 Framework는 여러 프로그래밍 API들 (C++, JAVA, Python API 등) 을 이용하여 딥러닝에서 사용되는 개념들을 함수로 만들기도하고, 딥러닝 체계에서 사용되는 프로그래밍 문법같은걸 따로 만들어서 학자들이 쉽게 프로그래밍 할 수 있도록 도와주었답니다.


어떻게 보면 API가 만들어지는 과정과 일맥상통하죠? 왜냐하면 사용자들이 구현하기 힘든부분을 회사들이 해결해주고 기능을 만들어주면 사용자들은 기능만 골라서 쓰면 되니까요 ㅎㅎ 그래서 보통 Framework를 API라는 용어랑 혼재해서 사용하기도 한답니다.





<6. Deep Learning Framework>


그렇다면 요즘 deep learning framework에는 어떤것들이 있을까요? 물론 많은 framework들이 만들어지고 있지만 역시 최근에 가장 이슈가 되는 framework은 Tensorflow(made by Google), Pytorch (made by Facebook)일 거에요.



<사진7>


<사진8>



어떤 Framework를 쓸지에 대해서는 좀 더 깊은 지식들이 필요하지만 보통 아래 원칙을 기준으로 선택을해요.


1. 사용하려고하는 Framework가 내 분야에서 효율적으로 동작하는것인가?

2. 사용하기 쉬운것인가?

3. 얼마나 많은 시장점유율을 갖고 있는가?


사실 Tensorflow가 굉장한 시장점유율을 갖고 있지만 최근 PyTorch가 좀 더 효율적이고, 사용하기 쉽다는 장점이 부각되면서 Tensorflow를 따라잡고 있는 추세라고 하던군요. 








다시 직장상사가 했던 질문 "XX님 딥러닝 Framework 뭐써요?"라고 물어보면 대답하실 수 있겠죠? ㅎㅎ






[사진 래퍼런스]

사진1

http://blog.daum.net/_blog/BlogTypeView.do?blogid=0myQv&articleno=32

사진2

https://clipartstation.com/input-and-output-devices-clipart-11/

사진3

https://www.web-stt.com/2019/05/04/what-does-the-inside-of-your-pc-look-like/

사진4

https://www.computerscience.gcse.guru/theory/von-neumann-architecture

사진5

https://guide.freecodecamp.org/computer-science/assembly-language/

사진6

https://docs.python.org/3/library/functions.html

사진7

https://ko.wikipedia.org/wiki/%ED%85%90%EC%84%9C%ED%94%8C%EB%A1%9C

사진8

https://venturebeat.com/2020/01/30/openai-facebook-pytorch-google-tensorflow/

안녕하세요~


이번 시간에는 코딩을 배워야하는 이유를 설명드리면서 동기부여(?)를 해드리려고해요.



<1. 과거 - 컴퓨터의 등장>


여러분 아래 그림에 있는 도구가 무엇인지 아시나요? 바로 주판이에요~ 

예전에는 주판을 다루는 능력이 굉장히 중요하다고 생각하여 '주산학원'도 있었어요. 1970년대 전까지만 해도 은행에 들어가려면 2급 이상의 주산 자격증이 필요했다고 해요.


<사진1>

하지만 요즘 10대들은 저 그림을 보면 어디에 쓰는 도구일지 모를거에요 (사실 저도 주판 어떻게 사용할지 몰라요 ㅎㅎㅎ)


요즘은 계산을 어떻게 할까요? 


계산과정을 1도 몰라도 그냥 수식만 입력해주면 컴퓨터가 자동으로 계산을 해줍니다. 그렇기 때문에 계산을 빨리 정확하게 할줄 아는 능력이 중요한게 아니라, 얼마나 컵퓨터에 입력을 빨리 정확하게 하는지가 더 중요한 능력이 되는거죠.



제가 1970년대로 돌아가 "여러분은 일하실 때 컴퓨터를 사용하시나요?"라는 질문을 던지면 대략 80%(2:8) 비율로 컴퓨터를 사용하지 않는다고 이야기 하실거에요.


하지만 1980년대로 돌아가 다시물어보면 3:7, 1990년대에는 4:6, 2000년대에는 5:5 로 대답하실거에요. 2010년에는 6:4 정도로 이제는 대다수의 사람들이 컴퓨터를 사용하는 시대가 도래했겠네요. 


그런데 여전히 6:4라고 하면 컴퓨터 사용하지 않는 사람들이 많은거 아니냐라는 말을 하실 수 있으실거에요.


그래서 제가 질문을 다시 바꿔 볼게요 ㅎㅎㅎ

"현재 여러분은 컴퓨터와 스마트폰을 사용하시나요?"

아마 경제활동을 하는 분들 같은 경우 위 질문을 받으셨을 때 9:1 정도의 비율이 나오지 않을까 싶어요. 


제가 이런 질문들을 던지는 이유는 현재 대다수의 서비스는 컴퓨터와 핸드폰 위에서 이루어진다는 사실이에요. 내가 사업을 하더라도 사람들에게 먼저 눈에 띄어야 하는데, 그 수단이 접근성이 뛰어난 핸드폰과 컴퓨터면 더욱 효율적이지 않을까요?











<2. 현재 - 일상생활에서의 변화>


흔히 영어를 잘하면 인적 네트워크가 더 댜양해 진다고 하죠?


그렇다면 코딩을 할 줄 알면 무엇이 더 다양해질까요? 





두 가지 영상을 보시면 기본적으로 삼성이나 LG에서 제공하는 제품들만 써야할 것 같죠? ㅎㅎ 물론 엄청 비싼가격으로 말이죠 ㅎㅎ


그런데 여러분이 코딩을 할 줄 아신다면 더 싸고 좋은 제품을 구매할 수 있어요. 구입한 물건에 코딩을 하여 여러 기능들을 자신의 편의에 맞게 수정하여 사용할 수 있게되요. 서로 기계들끼리도 연결을 시킬 수 도 있으니까 더 좋겠죠? ㅎㅎㅎ



또한 코딩을 할 줄 아시면 여러분들이 직접 1인 사업을 시작할 수 있으실거에요.


예를들어, 내가 좋은 아이템이 있어서 물건을 올리고 싶으면 HTML, CSS 라는 프로그래밍언어를 이용해 홈페이지를 만들고 데이터베이스를 구축해야해요. 하지만, 일반적으로 불가능 하니까 그냥 업체에 부탁하고 일정 금액을 지불하는데 매번 문제도 생겨서 AS도 받아야 하고, 원하는 기능을 추가하려고 할때 또 추가금액도 주어야하고 하니 매번 사이트를 운영하는게 보수적으로 바뀔거에요. 그렇다면 소비자의 니즈를 빠르게 충족시키지 못하실 가능성도 크게 되는거죠!


<사진2>


보통 코딩이 어렵다고 생각하셔서 도전을 안하시는 분들이 많으세요. 그런데, 만약 그 코딩이라는 것이 생각했던것보다 쉽다면 어떻게 하시겠어요? 아니, 어렵다고 하더라도 내 분야에 어떤 사람이 코딩을 배워 시장을 독식하는 모습을 모시면 어떻게 하시겠어요? (조금 어조가 강한듯 하네요 ㅜㅜㅜㅜㅜㅜ)









<3. 미래 - 산업계에서의 변화>


지금도 굉장히 많은 사람들이 코딩을 배워야 하지만 정말 미래에는 배우지 않으면 살아남지 못할 가능성이 있지 않나 싶어요. 


미래를 예측하는 가장 좋은 방법은 현재 산업계가 어떻게 변화해가고 있나를 파악하는거에요. 그리고 가장 핫한 키워드는 딥러닝이죠.


1) 의학


최근 의료산업계는 딥러닝을 적용하여 새로운 변화를 시도하고 있어요. 특히 구글은 AACR18 이라는 암학회에서 기조연설을 했어요. 이들이 발표한 내용에 따르면 자신들의 모델이 굉장히 저명한 의사들이 내린 진단과 유사한 판단을 내렸다고 해요. 



<사진3>


최근에는 의사들보다도 더 뛰어난 성능을 보이는 모델들이 나오고 있는데요. 만약 구글이 의사들의 영역이였던 이런 부분들을 스마트폰으로 쉽게 서비스화 한다면 어떻게 될까요? 이렇게만 된다면 우리는 세계에서 굉장히 저명한 의사를 주치의로 두게 될거에요.



2) 비즈니스


사실 의료분야 뿐만아니라 지금 Data science, Machine Learning, Deep Learning을 통해 다양한 마케팅 기법이 생겨나고 있어요. 그래서 기업들이 최근 위와 같은 이력을 갖고 있는 사람들을 더 우대하려고 하고 평균적으로 높은 연봉을 지급하고 있어요. 이러한 능력을 갖고 계신분들은 사실 이직도 어렵지 않게 할 수 있고 개인이 스스로 비지니스 모델을 만들 수 도 있으니 굉장한 이점을 갖게 되는거죠.




3) 스포츠


사실 예술, 스포츠 분야에서도 여러기술을 통해 발전할 소지들이 많아요. 


예를들어, 축구경기를 한다고하면 실시간으로 경기를 분석하여 선수들의 체력과 움직임 패턴등을 분석할 수 있어요. 그래서 실제 경기도중에도 작전을 변경할 수 있고, 데이터가 쌓이면 전술을 짜는데 굉장히 도움이 많이 될거에요. 그외에 선수들 관리하는 것까지 이러한 기술들을 이용한다고 하네요 ㅎㅎ (뭰헨이 이런 프로그램에 적극적인가봐요. 벌써 몇번 기사를 본거 같아서 ㅎㅎ)



야구는 말할 것도 없는 분야죠. 머니볼이라는 영화에서도 잘 나와있지만 빅데이터를 이용해서 분석하고 새로운 지표를 만들어내어 팀을 완전히 탈바꿈시키기도해요.









지금까지 다룬 내용들을 보시면 굉장히 흥미로운 이야기들이 많으실거에요. 


하지만, 이러한 일들을 하기 위해선 '코딩'이 필수적이에요. 코딩을 어느정도 알고 프로그램 툴을 다루는것과 그렇지 않은 것에는 많은 차이가 있어요. 


보통 영어라는 외국어를 알면 다른 언어들도 쉽게 배울 수 있다고 하죠? 같은 맥락으로 프로그래밍 언어 하나만 배우면 다른 프로그래밍 언어를 접근하실때 거부감이 생기진 않으실거에요. 그렇기 때문에 꼭 프로그래밍 언어 하나라도 배워보시는걸 추천해요! ㅎㅎㅎ



<사진4>







[글 래퍼런스]

AACR18 기사

https://m.medigatenews.com/news/2012584533


[사진 래퍼런스]

사진1

http://m.blog.daum.net/yup/14?tp_nil_a=2

사진2

https://m.gettyimagesbank.com/view/mock-up-design-website-flat-design-concept-digital-marketing-content-marketing-vector-illustration/963201500

사진3

http://www.yoonsupchoi.com/2018/04/24/aacr18-google/

사진4

https://www.quora.com/Why-is-learning-programming-important


안녕하세요~ 


'딥러닝 개발환경' chapter는 실제로 딥러닝 이론을 적용해 프로그래밍하려고 하시는 분들을 위해 만들었어요.


'프레임워크', '패키지', '가상환경' 등 여러 용어들이 나오는데 처음 프로그래밍을 접하시는 분들이 의외로 많으시더라구요. 


또한 딥러닝을 통해 개발을하려고 하시는 분들을 위해 여러 서비스들이 지속적으로 개발되어 있기 때문에 관련 툴을 잘 이용하시면 더욱 도움을 될 것 같아 이 챕터를 개설하게 되었어요 ㅎㅎㅎ 


또한 개발을 하시다보면 여러 에러에 부딪히게 되는데 그때마다 관련 내용들을 다룰예정이에요.


사실 제목을 딥러닝 개발환경이라고 했는데, 앞으로 딥러닝 뿐만 아니라 자신이 다른 목적으로도 개발을 하실 수 있기 때문에 범용적인 내용들이 다루어 질거에요. 그렇기 때문에 더 많은 분들이 이 챕터를 보시고 쉽게 개발을 접하실 수 있도록 많은 도움을 드리고자 합니다.


그렇다면 이제 차근차근 알아보도록 하겠습니다~




+ Recent posts