Trouble Shooting-

 * Linux: apt install 에서 "Unable to locate package"에러가 나는 경우 sudo apt-get update를 해주면 해결 된다.

 * pip를 업데이트 하였다가 "cannot import name 'main'"이란 에러가 발생하는 경우

      1) which pip를 커맨드 라인에 치면 pip의 위치가 나옵니다. [/usr/bin/pip]

          보통 이 pip 위치에서 하면 되는데 가끔 전혀 다른 곳에서 pip가 문제가 되는 경우 상단의 에러메시지와 함께 어떤 위치에서 발생하였는지 나오기 때문에 그 위치의 pip 파일을 수정해 주시면 됩니다.

      2) sudo nano pip라고 치시면 nano editor가 작동하며 파일이 열립니다. vim으로 작성하셔도 크게 문제 없습니다.

      3) 파일을 열면
from pip import main
if __name__ == '__main__':
     sys.exit(main())

 

이렇게 나와 있을 것인데, 이것을

import sys
from pip import __main__
if __name__ == '__main__':
     sys.exit(__main__._main())

 

로 바꿔주시고, ctrl+o를 눌러서 저장한다고 하시고 엔터 치신 뒤 ctrl+x로 빠져나오시면 됩니다.

그리고 이후에 pip이용시에는 문제가 되지 않을 것입니다.

   

참고-

 복붙은, GUI환경에서 ctrl+c 후에 linux cli환경에서 마우스 오른쪽 클릭으로 됩니다.

 

리눅스-

먼저 리눅스 설치가 기반이므로 리눅스 설치를 일단 설명한 뒤 윈도우 설치로 넘어가도록 하겠습니다.

나이브 linux subsystem(ubuntu)에서 까는 것으로 가정하고 서술하겠습니다.

일단 python 2.7로 깔고 이후에 pyenv등을 통하여 3.대와 같이 사용하도록 하겠습니다.

 

1) 먼저 pip가 인스톨 되어 있지 않을 것이니 apt install python-pip(혹은 sudo apt install python-pip)를 해줍니다.

2) git도 안깔려 있을테니 apt install git 해줍니다.

3) unzip도 안깔려있습니다. apt install unzip 해줍니다.

4) pip install tensorflow-gpu

5) sudo apt-get install protobuf-compiler python-pil python-lxml python-tk

   pip install --user Cython
   pip install --user contextlib2
   pip install --user jupyter
   pip install --user matplotlib

6) git clone https://github.com/cocodataset/cocoapi.git

7) git clone https://github.com/tensorflow/models

8) cd cocoapi/PythonAPI

9) make

10) cp -r pycocotools [/root]/models/research/

   pycocotools를 앞서 다운받은 models 안에 있는 research 폴더 안에 넣어야 합니다. 앞에서 다운받은 models위치를 확인하여 주시고 (보통 위에것을 그대로 실행하셨다면 최상위 디렉토리에 models가 다운되었을 것입니다. 최상위 디렉토리 이름은 유저네임과 동일하므로 /[user name]/models...으로 진행하여 주시면 됩니다. 저는 유저네임을 root로 하였기에 다음과 같은 주소입니다. [/root/models/research/]

11) cd

12) curl -OL https://github.com/google/protobuf/releases/download/v3.2.0/protoc-3.2.0-linux-x86_64.zip

13) unzip protoc-3.2.0-linux-x86_64.zip -d protoc3

14) ~/protoc3/bin/protoc --help

     위 명령어를 입력한 후에 뭔가가 주르륵 나오면 설치 완료입니다.

15) cd models/research

16) ~/protoc3/bin/protoc object_detection/protos/*.proto --python_out=.

17) export PYTHONPATH=$PYTHONPATH:`pwd`:`pwd`/slim

18) python object_detection/builders/model_builder_test.py

 

윈도우-

 윈도우 버전에서는 저번에 CUDA환경을 만들어 놓은 Anaconda 환경에서 진행하도록 하겠습니다. [https://omnil.tistory.com/64?category=777916]

 리눅스와 다르게 GUI시스템 기반이라 수기로 옮겨주고 처리해야 하는 등 리눅스보다는 조금 더 많이 왔다갔다 해야 합니다.

 0) Anaconda prompt를 열어줍니다.

 1) pip install git

    일단은 git 정도가 깔려있는지 확인해 줍니다.

 2) 이미 tensorflow는 전에 CUDA환경을 만들면서 설치하였기 때문에 넘어갑니다.

 3) windows는 apt-get 을 통한 protobuf-compiler의 인스톨이 불가하므로 pip로 대체합니다.

  pip install --user Cython 
  pip install --user contextlib2 
  pip install --user pillow 
  pip install --user lxml 
  pip install --user jupyter 
  pip install --user matplotlib

  보통 아나콘다를 깔면 위의 것들 중 많은 것이 깔리지만 일단은 확인 차원에서 한번씩 다 실행해 줍니다.

 4) git clone https://github.com/tensorflow/models

  이번에는 모델을 먼저 받아줍니다. cocoapi부분이 윈도우에서는 좀더 설명이 필요하기 때문에 간단한 것 먼저 진행합니다.

 5) linux와 다르게 윈도우에서는 깃에서 클론한 cocoapi를 사용하는 대신 바로 설치를 해버릴 것입니다.

  그 이유는 일단 윈도우 안에서 make 명령어가 없으며, make를 돌아가게하는 패키지를 conda로 깔아도(conda install makeconda install -c anaconda make) 마이크로 소프트 비쥬얼 스튜디오 버전이니 cl.exe니 하면서 과거 CUDA에서 저를 괴롭혔던 것들이 막 튀어나오거든요..

  그리고 다른 이유로는 과거에는 cocoapi가 공식적으로 windows를 지원하지 않았으나 이번에는 지원하는 것으로 나왔기 때문에 시스템 안정성 측면에서도 공식 서포트되는 것이 좋기 때문입니다. [https://github.com/philferriere/cocoapi]

  명령줄에

    pip install git+https://github.com/philferriere/cocoapi.git#subdirectory=PythonAPI

  를 입력해주시면 됩니다. 그러면 알아서 다운받고 설치까지 합니다. 이 상황에서 위의 리눅스와는 다르게 따로 설치하고 파일을 옮겨줄 필요 없이 자동으로 잘 동작합니다.

 6) protoc도 윈도우즈 용으로 따로 받아줄 것 입니다.

  아나콘다 프롬프트에서도 CURL 명령어가 먹기는 하지만, 그냥 브라우저상에서 https://github.com/protocolbuffers/protobuf/releases/download/v3.4.0/protoc-3.4.0-win32.zip를 입력하거나 그냥 링크를 클릭하셔서 protoc를 다운 받으십시오. 윈도우에서는 3.4 이상에서 버그픽스가 있었는지 많이들 권하는 버전이 3.4입니다.

 7) 이 파일을 받으신 뒤 윈도우에서 GUI로 압축을 해제하여 주시고 폴더 이름을 단순하게 지어주십시오. 경로는 가장 간편한 경로가 좋습니다. 왜냐하면 윈도우즈에서는 CLI환경에서 상대주소를 사용하기가 힘들(저는 거의 불가능이)기 때문에 시스템 path로 등록해주고 그냥 바로 이름만 써서 사용할 것 입니다.

 8)  시스템 패스를 설정합니다.

 => 시작메뉴 오른클릭 '시스템'

    -> 검색창에 '고급' 검색

      -> 검색된 결과 중 '고급시스템설정보기' 클릭

        -> 하단의 '환경변수' 버튼 클릭

          -> 하단의 '시스템 변수' 리스트 중 'Path'를 찾아 클릭하고 하단의 '편집' 버튼 클릭

            -> '새로만들기' 버튼 클릭 후 새로나오는 입력창에서 '압축푼 폴더\[압축 푼 이름]\bin\'을 입력합니다. 경로는 절대경로이어야 하며, 보통의 경우 '사용자' 아래에 바로 저장할 경우 C:\Users\[유저 이름]\압축 푼 폴더 이름\bin\'이라고 입력하면 됩니다.

              -> 이후 모든 창에서 '확인'을 눌러서 종료해주시면 됩니다.

 9) protoc --help 치면 무언가가 주르륵 뜰 것입니다. 절반의 성공입니다.

 10) 왜냐하면 위의 리눅스처럼 윈도우는 *.proto 가 먹지 않기 때문입니다. 그럼 지옥처럼 모든 proto파일마다 하나하나 protoc를 먹여주어야 하느냐.. 하면 그건 또 아닙니다. models/research 폴더로 가셔서,

      명령줄에

       for /f %i in ('dir /b object_detection\protos\*.proto') do protoc object_detection\protos\%i --python_out=.

      를 입력하여 주십시오. 명령줄에서 for문이라니! 하실 수도 있지만, 제대로 잘 작동합니다. 위의 linux의 *.proto와 같은 기능으로 파일 내 모든 .proto 파일을 protoc로 컴파일 합니다.

      잘 되었는지는 object_detection\protos에 가서 보시면 .py파일이 .proto아래 생겨있으면 성공입니다.

 11) CLI상에서 환경변수 설정하는 방법도 linux와는 약간 다르게, models/research 폴더 상에서

       SET PYTHONPATH=%cd%;%cd%\slim

      를 입력하시면 됩니다. 특이점이라면 %cd%와 %cd%사이가 콜론(:)이 아니라 세미콜론(;)입니다.

      지금까지 사용해 본 결과로는 매번 실행할 때마다 새로 해주어야 하는 것 같은데, 이는 추후에 더 확인해보고 계속 초기화 되면 시스템 패스에 등록한 뒤 제대로 작동되나 확인해보고 추가하겠습니다.

 12) python C:\Users\[유저 이름]\models\research\object_detection\builders\model_builder_test.py 를 입력하시면 OK사인이 나옵니다. GPU환경에서요. (여담이지만 윈도우즈에서는 대괄호 안에 넣은 절대주소를 이용하는 것이 속이 편합니다.)

제작년에 keras로 CUDA환경을 구축하려다가 정말 정보의 심각한 부족으로 실패한 적이 있었는데, 이번에는 별 문제 없이 한번에 성공하여서 그 과정을 기록하려고 합니다.


저에게도 의미있는 기록이지만, 다른 분들도 많은 도움이 되셨으면 좋겠네요.



이번에는 keras같은 상위 wrapper 없이 텐서플로 그대로 진행하였습니다.


도움을 많이 받은 문서는

https://www.tensorflow.org/install/gpu

로, 텐서플로 페이지 자체에서 제공해주고 있습니다.


아래는 제 컴이 윈도우즈인 관계로 윈도우즈를 기본으로 합니다.

만약 linux와 같은 운영체제이신 경우 위의 텐서플로 홈페이지에서 리눅스는 어떻게 설치하는지 잘 알려줍니다!


1) 본인의 GPU가 CUDA GPU 환경을 제공하는지를 확인해 봅니다.

기본적으로 CUDA가 엔비디아nVidia사에서 만든 플랫폼이므로 엔비디아의 지포스 제품이면 일단 가능성은 있지 않을까 생각해 볼 수 있을 것 같습니다.

그리고 GTX 붙으면 일단 된다고 보시면 될 것 같습니다.

요기로 가시면 CUDA가 가능한 GPU인지 확인해 보실 수 있습니다. https://developer.nvidia.com/cuda-gpus

저는 GTX 1060이라 묻지도 따지지도 않고  그냥 설치했습니다.


2) 차례대로 NVIDIA® GPU drivers, CUDA® Toolkit, CUPTI, cuDNN을 깔아줍니다.

텐서플로-gpu는 먼저 깔아도 되고 위의 4가지 프로그램을 다 깔고 깔아도 되는 것 같습니다.

CUPTI는 굳이 안깔아도 될 것 같기는 한데, 저번에 한번 CUDA하려다 안되서 작은 가슴에 그냥 깔고 진행했습니다.


2*) gpu환경을 사용하기 위해서는 tensorflow-gpu를 깔아야 합니다. 아나콘다를 사용하시면 아나콘다 프롬프트에서 conda install tensorflow-gpu를, 아니시라면 pip install tensorflow-gpu를 입력하시면 tensorflow-gpu가 깔립니다. tensorflow-gpu가 깔리면, 이전과 같이 import tensorflow하시면 됩니다.


3) 다 깐 뒤에 시스템 PATH를 설정해 주어야 합니다.

여기서는 시스템 PATH를 설정해 주는데, 깔린 위치가 정확해야 합니다.

드라이버와 툴킷을 깔면 설치파일처럼 설치가 되고, CUPTI와 cuDNN은 압축파일로 풀리게 될 것 입니다.

여기서 설치파일은 상관이 없는데, CUPTI과 cuDNN은 압축을 푼 뒤 폴더 이름을 각자 'CUPTI'와 'tools'로 바꾸어 줍니다.

그리고 CUPTI 폴더는 'C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras'아래에 폴더를 통채로 복사 붙여넣기 해주시고, tools 폴더는 C드라이브 아래 바로 붙여넣어 주세요.


이후 아무 명령 프롬프트나 여시고(예를 들어 실행->cmd)

SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\bin;%PATH%

SET PATH=C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\extras\CUPTI\libx64;%PATH%

SET PATH=C:\tools\cuda\bin;%PATH%

요렇게 세 개를 써주시면 됩니다.


텐서플로에서 9.0만 지원한다고 그래서 찾다가 저는 9.1로 설치하였는데, v10도 텐서플로에서 잘 작동하는 것 같습니다. 만약에 오류가 나시면 v9.1로 시도해 보세요.


4) 제대로 깔려서 gpu에서 사용되는지 확인하기 위해서

파이썬을 켜시고(명령프롬프트에서 python 치셔도 되고, jupyter notebook에서 cell에 입력하셔도 됩니다.)

from tensorflow.python.client import device_lib 

print(device_lib.list_local_devices())

이렇게 입력해서 무언가 주르륵 나온다 하면 설치가 제대로 된 것입니다.

그리고 이후에 tensorflow 소스코드에서


device_name = "/gpu:0"

log_device_placement = True


with tf.device(device_name):

    x = tf.placeholder(tf.float32, shape=[None, 32, 32, 3])

    y = tf.placeholder(tf.float32, shape=[None, 10])

    .

    .

    .


with tf.Session(config=tf.ConfigProto(log_device_placement=log_device_placement)) as sess:

    sess.run(tf.global_variables_initializer())

    .

    .

    .


요런식으로 소스 코드를 수정해주시면 프로그램 실행 중 명령 프롬프트에서 실제로 GPU가 사용되는 현황을 볼 수 있습니다.

요 근래에 꾸준하게 통계에서부터 머신러닝을 거쳐 딥러닝을 배우고, 딥러닝을 배우고, 딥러닝을 또 배우다보니 뭔가 정리를 하고 싶은 욕망이 꾸물꾸물 올라오네요.


사실 인터넷에 찾아보면 정말 한 포스팅 내에 삐까뻔쩍하게 사진이랑 막 수식이랑 코드랑 막막 쓰이면서 그런 포스팅들이 넘쳐날 것을 알지만..


그래도 실제로 계속해서 배우는 사람의 입장으로 뭔가 거창한 거 빼고 담담하게 중요한 부분들만 간단하게 정리한 포스팅은 없지 않을...까? 해서 적어보는 포스팅입니다.


사실 한 포스팅안에 그 많은 딥러닝에 대한 내용을 담는 것도 어렵고 해서 제가 시간이 날 때마다 차근차근 써 볼 생각입니다.


그리고 제가 아는 한도 안에서 거창하지 않게 쓸 것이라, 이 부분에서는 이 글을 읽으시며 틀을 잡으시고 관련된 부분들을 찾아보시면 더 좋을 것 같습니다.(그리고 사실 그것이 제가 이 블로그를 만든 이유이기도 하지요.. 문턱에너지를 낮춰주는 블로그...)


그럼 시작해보겠습니다.


일단 역사보다는...


자, '딥러닝'은 왜 '딥러닝'일까요?


사실 딥러닝을 알기 전에 '머신러닝'이라는 것을 먼저 알아야 합니다.


딥러닝은 '기계가 스스로 학습한다'는 기계 학습 혹은 머신 러닝의 한 부분이기 때문이지요.


그리고 머신러닝에서는 입력과 출력 사이의, 사람으로 치자면 '추론의 단계'를 스스로 공부하는 것이죠.


이 추론의 단계를 '블랙 박스'라고 그냥 생각해 보자면


머신러닝은


'입력 -> 블랙 박스 > 출력'


이렇게 됩니다.


그리고 이 '블랙 박스'를 사람이 어느정도 수학적 알고리즘으로 만들어 주게 되면, 시행과 오차를 반복하며 스스로의 로직을 찾아갑니다.


그런데 딥러닝은 요 '블랙 박스' 부분이, "진짜로" 블랙 박스입니다.


머신 러닝은 사람이 어느정도의 수학적 알고리즘을 부여해 주고 그에 따른 답을 찾는 것이었다면(즉, 대략 찾아가는 방식을 아는 것이라면), 딥러닝에서는 아예 사람이 요 부분에 손을 대지 않습니다.


그래서 결국에 답이 나와도 '어째서 이 답이 이렇게 나오지?'하는 부분을 모르는 것입니다.


그리고 요 블랙 박스 부분이 머신 러닝과 다르게 긴 여러개의 과정을 가지기 때문에 '딥' 러닝이라고 부르는 것입니다. (긴것을 깊다고 볼수도 있지요)


반대로 머신러닝을 'Shallow learning'이라고 부르는 경우도 있습니다.


그리고 이 블랙박스 부분은 로젠 블라트라는 사람이 고안한 퍼셉트론에서 출발한 '인공 신경망'이 기본인데, 이 부분은 제가 이후에 다룰 수도 있고, 이 부분 부터는 인터넷에 정말 많은 정보들이 있으니 직접 찾아보셔도 좋을 것 같습니다.



사실 딥 러닝이라는 어려운 분야를 정말 짧고 단숨에 읽히는 포스팅으로 쓰기 위해 여러 지식을 한번에 묶어서 쓰려니 힘드네요...


그래도 이 글을 읽고 '와! 딥러닝! 아시는구나!' 하셨으면 좋겠습니다.


그럼 다음에 뵈어요~

윈도우즈에서 torchvision 깔기(with 파이토치(pytorch)깔기)


윈도우즈에서 파이토치(pytorch) 깔기는 굉장히 쉽다.


아나콘다 받아서 설치하고 -> 아나콘다 프롬프트를 실행시키고 ->

(엔비디아(nvidia) 계열 그래픽카드(gpu) 사용 시) conda install -c peterjc123 pytorch

(그 외 그래픽카드 혹은 cpu만으로 사용 시) conda install -c peterjc123 pytorch-cpu


끝!


확인할 수 있는 방법은 jupytor notebook을 켜거나 그냥 아나콘다 프롬프트에서 python입력해서 python 인터프리터 창으로 들어가서

import torch

실행해서 에러가 없으면 설치 성공!


근데 문제는 딥러닝을 조금 더 공부해서 cnn(convolutional neural network)으로 넘어가게 되면 torchvision이 필요하게 되는데, 이게 설치하는 방법이 구글링을 해봐도 잘 안나온다.


바로 아나콘다 클라우드에 

conda install -c anaconda torchvision

이라는 명령어가 나오기는 하는데, 윈도우즈에서 돌리면 채널이 없다고 나온다!


홈페이지 들어가 보았더니 osx와 linux만 지원한다고 한다.


그러면 윈도우즈에서는 깔 수가 없는 것인가?

아니다!


pip 명령어를 사용하면 아주 쉽게 깔 수 있다.


pip install torchvision


끝.


위와 같이 import torchvision 해서 에러가 안나면 제대로 깔렸다고 볼 수 있다.


만약 pip에서 에러가 나면 이전 포스팅인 pip에러 수정하는 방법에 대해서 확인해보자!

+ Recent posts