메뉴 건너뛰기

개발강좌/정보

  • 텐서플로우로 이미지인식 모바일앱 만들어보기 - 2 (가상환경에 텐서플로우 설치하기) [머신러닝/딥러닝]
  • 공돌이
    조회 수: 3527, 2017.04.24 14:55:13
  • 필요한 환경은 (아마도...^^;;) 다 갖추어졌으니 이제 가상환경을 생성하고, 최신버전의 텐서플로우를 설치할 차례입니다.

     

    이 장은 아래와 같은 순서로 설명하겠습니다.

     

    1) 가상환경 생성 (virtualenv)

    2) 최신버전의 텐서플로우 설치

    3) 깃허브에서 최신버전의 텐서플로우 소스 설치

    4) 학습 / 테스트 / 모바일용 그래프 만드는데 필요한 파일들 빌드하기

     

    1) 가상환경 생성 (Virtualenv 기준)

    앞으로 텐서플로우관련한 작업은 모두 가상환경을 만들어 그 안에서 진행할 예정입니다.

    Virtualenv 이외에도 Anaconda 나 Docker 등의 가상환경을 이용하는 방법과 native pip 로 설치하는 방법이 있으며, 각각의 장단점이 있습니다.

    Docker 는 제일 간단하지만 현재로서는 GPU버전의 텐서플로우를 사용할 수가 없고,

    Anaconda는 GPU버전을 사용할 수 있는 가상환경이지만, 공식적으로 텐서플로우에서 지원하는 환경은 아니라는 단점이 있습니다.

    기존에 파이썬을 사용하지 않는 분들은 native pip를 쓰셔도 좋습니다만, 나중에라도 다른 패키지를 사용하실 때 버전상의 충돌이 일어나는 상황이 있을 수 있습니다.

     

    여튼, virtualenv로 가상환경을 만드는 명령어는 심플합니다.

     

     

    터미널을 열어서

     

    $ virtualenv -p python3.6 --system-site-packages 디렉토리이름

     

    -p 는 가상환경에서 사용할 파이썬 실행파일(버전)을 지정해주는 역할을 합니다. 파이썬3을 쓰시려면 python3.6 을, 파이썬2를 쓰시려면 python2.7 을 지정해주시면 됩니다. (이건 맥 기준이고, 윈도우나 리눅스에서는 버전별 실행파일경로를 적어주시면 되겠지요)

    디렉토리이름에서 지정한 이름으로 새로운 디렉토리가 생성되며 가상환경에서 사용할 시스템파일들이 다 설치가 됩니다. 

     

    가상환경이라고 해서 virtualBox나 패럴랠즈 처럼 완벽히 분리된 그런 환경이 아니고, 파이썬과 관련한 패키지관리, 파이썬실행파일 등을 별도로 관리해주는 환경정도로 생각하시면 될겁니다. 

     

    디렉토리가 생성되면

     

    다음의 명령어로 가상환경으로 진입하실 수 있습니다. (디렉토리명을 tensor 라고 했다고 가정하겠습니다)

     

    $ source tensor/bin/activate

     

    그러면 앞부분의 프롬프트가 아래와 같이 가상환경임을 알 수 있도록 (가상환경명) 이렇게 표시됩니다.

     

    (tensor) $

     

    앞으로 텐서플로우 관련해서 작업을 하실 때는 이 가상환경 내에서 진행하시면 되고, 작업이 완료되어 가상환경에서 빠져나오시려면, 간단히 deactivate 라고 해주시면 됩니다.

     

    (tensor) $ deactivate

     

    2-1) 최신버전의 텐서플로우 설치

     

    이제 최신버전의 텐서플로우 파이썬패키지를 설치해야겠지요.

    저는 python3.6 을 설치했다고 가정하고 pip3 를 이용해서 패키지를 설치하겠습니다 (python2.7을 쓰신다면 pip3 대신 pip 명령을 이용하세요)

     

    가상환경이 실행된 상태에서,

     

    (tensor) $ pip3 install --upgrade tensorflow-gpu   #GPU버전으로 설치할 경우. 자신의 맥북이 NVIDIA 그래픽카드로 GPU버전을 지원하는지 확인필요

     

    혹은

     

    (tensor) $ pip3 install --upgrade tensorflow-cpu   (CPU버전으로 설치할 경우. 대부분의 일반 맥을 쓰는 경우)

     

    그리고 잠시 기다리면 설치가 완료되었다는 메시지가 뜹니다.

     

    혹시 제대로 설치가 안되거나 오류가 발생한다면 여기 를 참고하셔서 직접 whl 파일을 다운받아서 설치하세요.

     

     

    2-2) 제대로 설치되었는지 확인해보기

     

    텐서플로우 설치가 정상적으로 되는지 확인하시려면, 아래와 같이 python을 실행시켜서 tensorflow를 import 해서 제대로 동작하는지 확인해보시면 됩니다.

     

    (tensor) $ python

    >>> import tensorflow as tf

    >>> hello = tf.constant('Hello, TensorFlow!')

    >>> sess = tf.Session() 

    >>> print(sess.run(hello))

     

    Hello, TensorFlow! 가 나오면 잘 된거겠지요.


    * GPU버전으로 설치했다면 tensorflow를  import 할 때 아래와 비슷한 메시지가 뜹니다. cuda 관련 라이브러리를 로딩했다는 메시지인데요,

     

    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcublas.8.0.dylib locally

    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcudnn.5.dylib locally

    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcufft.8.0.dylib locally

    I tensorflow/stream_executor/dso_loader.cc:126] Couldn't open CUDA library libcuda.1.dylib. LD_LIBRARY_PATH: /usr/local/cuda/lib:

    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcuda.dylib locally

    I tensorflow/stream_executor/dso_loader.cc:135] successfully opened CUDA library libcurand.8.0.dylib locally

     

    Couldn't Open 어쩌구 하는 부분이 보인다면, 그건 해당 파일을 못찾아서 나는 오류인데 대부분 버전별 라이브러리 이슈입니다. 메시지를 잘 보고 없는 것들은 원본파일에서 심링크를 생성하거나 복사해주시면 됩니다.

    위의 메시지를 예를 들면 , libcuda.1.dylib 이 없다고 하네요... 이경우 /usr/local/cuda/lib 밑의 libcuda.dylib 에 대해 libcuda.1.dylib 으로 심링크를 만들어주세요.

     

    (tensor) $ sudo ln -sf /usr/local/cuda/lib/libcuda.dylib /usr/local/cuda/lib/libcuda.1.dylib

     

    그리고 다시한번 import tensorflow 해보시면 전부 잘 오픈했다고 메시지가 나올겁니다.

     

    * 그리고, 세션을 만들거나 관련 명령을 실행할때 앞으로도 보면 가끔 "The TensorFlow library wasn't compiled to use XXXX instructions, 어쩌구저쩌구" 하는 메시지들이 나올 수 있습니다. 이것은 자신의 맥북(혹은 PC) 가 SSE4.1, SSE4.2, AVX, AVX2, FMA등의 명령어셋을 잘 수행할 수 있기때문에, 이걸 지원하도록 컴파일하면 성능이 훨씬 좋아질텐데 지금 현재 설치된 텐서플로우패키지는 그 명령어를 지원하지 않도록 컴파일되었다는 안내메시지입니다.

    귀찮은거 싫으시면 그냥 신경 안쓰셔도 되구요, 조금이라도 성능을 올리고 싶다 하는분은 3)에서 깃헙에서 소스전체를 내려받았을 때 소스에서부터 새로 컴파일하셔도 됩니다.

    (여기서 소스 전체를 새로 컴파일하는 방법은 다루지 않겠습니다...)

     

    일단 여기까지 해서 import 및 Session생성, run 하실 때 오류없이 잘 돌아간다면 (안내메시지나 약간의 워닝은 무시하셔도 상관없습니다) 텐서플로우패키지까지 잘 설치가 되었고, 이제 텐서플로우로 새로운 모델을 만드시거나 가지고 노실 기반이 마련된 겁니다.

     

    그러나, 통계학과 파이썬, 텐서플로우 자체에 대해 깊은 지식을 가지고 있는게 아니라면 사실 여기서 더 뭘 해야될지 모르는 상황이 발생하죠....^^

    처음부터 텐서플로우로 뭘 만드는건 기본적인 지식이 없으면 쉽지 않죠.

     

    그래서 이 글에서는 그런사람들을 위해서 텐서플로우에서 기본적으로 예제형태로 만들어놓은 인셉션엔진을 활용한 이미지인식/학습기능을 가져다가 어떻게 활용할 수 있지를 설명하도록 하겠습니다.  

    그러기 위해서는 약간의 노력을 더 투자해야 합니다...만 별로 어렵진 않습니다. 시간이 걸릴 뿐이죠...ㅎㅎ

     

    우선 얘네들이 잘 만들어서 공개해놓은 깃헙의 소스를 다운로드 받도록 하겠습니다.

     

    3) 깃허브에서 최신버전의 텐서플로우 소스 설치

     

    설치는 어느 디렉토리에 하든 큰 상관은 없겠지만, 관리상의 편의를 위해서 아까 만들어놓은 가상환경디렉토리 안에 깃헙소스를 다운로드 받도록 하겠습니다.

     

    이미 터미널을 닫으셨다면, 다시 터미널을 열고

     

    $ cd tensor

    $ source bin/activate

     

    하신 후

     

    (tensor) $ git clone https://github.com/tensorflow/tensorflow

     

    하시면 tensor 폴더 안에 tensorflow 디렉토리가 만들어지면서 깃헙의 소스가 통째로 다운로드받아집니다.

    (에디터 로직땜에 clone과 url 부분이 줄바꿈되어있는데 그냥 붙여서 쓰시면 됩니다)

    여기는 앞으로 우리가 사용할 학습, 모바일용 파일빌드, 모바일용 예제 등 모든 소스들이 다 들어가있습니다. 완전 handy 하죠!

     

     

    4) 학습 / 테스트 / 모바일용 그래프 만드는데 필요한 파일들 빌드하기

     

    이제 본격적으로 학습을 하기....전에 몇개 파일들을 빌드해서 실행파일로 만들어줘야 합니다...^^

     

    이 파일들의 빌드는 시간이 꽤 오래 걸립니다. 빌드 걸어놓고 큰 이상 없으면 커피나 식사하고 오시는게 좋을듯...ㅎㅎ

     

    만들어야 하는 파일은 아래와 같습니다.

     

    - retrain

    - optimize_for_inference

    - quantize_graph

    - convert_graphdef_memmapped_format

    - label_image

     

    각각의 파일들이 어떤 역할을 하는지 간단하게 설명하고, 빌드하는 방법을 말씀드리겠습니다.

     

    4-1) 각 빌드된 파일들의 역할

    a) retrain

    : 이미지파일들을 입력받아서 실제 학습을 진행하고, 학습한 결과를 그래프파일( .pb) 과 라벨파일(.txt) 로 생성해주는 역할을 합니다.

     

    b) optimize_for_inference

    : retrain 에 의해 생성된 그래프파일은 모바일에서 사용하기에는 맞지 않습니다. retrain에서 나온 pb파일에서 모바일버전에서 호환되지 않는 부분 (DecodeJpeg)을 삭제해서 모바일에 호환되는 버전으로 바꿔줍니다.

     

    c) quantize_graph

    : optimized 된 것은 일단 모바일에서 읽을 수는 있지만 파일사이즈가 커서 로딩하다가 메모리 크래쉬가 날 수 있다고 하네요. 그래서 quantize(연산상에서 float숫자들을 일부 반올림)라는 과정을 통해 약간~의 정확도를 희생하고 압축하기 좋은 형태로 만들어줍니다. 실제로 optimzed_for_inference 에서 나온 그래프는 압축이 거의 되지 않지만, quantize하고 나면 압축했을때 원래크기의 거의 20~30% 크기로 줄어듭니다.

     

    d) convert_graphdef_memmapped_format

    : quantize된 그래프를 모바일메모리에 매핑시켜 안정성과 속도가 향상되도록 한번 더 변경해줍니다. 이 그래프파일은 모바일메모리에 매핑시키는 버전이다 보니 PC에서는 읽을수가 없습니다. iOS에서는 로딩시키는 방법이 있는데, 아직 안드로이드에서는 이 파일을 로딩하는 방법을 못찾았네요 ㅠㅜ... 일단 optimized나 quantized된 그래프도 충분히 잘 동작하니 안드로이드는 일단 그걸로 만족을...(혹시 방법을 아시는분 계시면 알려주세요!).

     

    e) label_image

    : 만들어진 그래프파일이 잘 동작하는지 테스트해볼 수 있습니다.

     

    4-2) 빌드하는 방법

    터미널을 열고,  가상환경을 설정해둔 디렉토리로 가서 텐서플로우 가상환경을 activate 합니다.

    (위에선 생략했기 때문에 혹시나 헷갈리실까봐, $ 프롬프트 앞의 My-MacBook:~ jpkim 부분은 bash 환경에서 컴퓨터명과 현재폴더, 사용자명을 나타냅니다. 환경마다 다르겠죠. 그리고 activate 하면 가상환경임을 나타내도록 제일앞쪽에 괄호와 함께 가상환경명이 표시됩니다)

     

    My-MacBook:~ jpkim$ cd tensor

    My-MacBook:~ tensor jpkim$ source bin/activate

    (tensor) My-MacBook:~ tensor jpkim$

     

    그리고 위에서 받아놓은 텐서플로우 깃헙 소스폴더로 들어갑니다.

     

    (tensor) My-MacBook:~ tensor jpkim$ cd tensorflow

     

    ./configure 를 실행해서 빌드환경을 설정해줍니다.

     

    (tensor) My-MacBook:~ tensor jpkim$ ./configure

     

    몇가지 선택하거나 입력을 해야 하는데, 대부분 디폴트값을 선택하시면 됩니다.

     - GPU 연산을 활용 하시려면 CUDA support 를 Y로 선택하셔야 합니다. 이경우도 clang을 사용할 건지 여부와 제일 마지막에 compute capability ( 여기를 참조해서 하드웨어에 맞게 입력)부분만 제대로 입력해주시면 됩니다.

     

    다음은 ./configure를 했을때 나오는 메시지 예시입니다. 제가 엔터로 넘어가지 않고 별도로 입력한 부분은 붉은색으로 표시했습니다.

     

    (tensor) My-MacBook:tensor jpkim$ ./configure

    Please specify the location of python. [Default is /Users/jpkim/tensorflow/bin/python]: 

    Please specify optimization flags to use during compilation when bazel option "--config=opt" is specified [Default is -march=native]: 

    Do you wish to build TensorFlow with Google Cloud Platform support? [y/N] 

    No Google Cloud Platform support will be enabled for TensorFlow

    Do you wish to build TensorFlow with Hadoop File System support? [y/N] 

    No Hadoop File System support will be enabled for TensorFlow

    Do you wish to build TensorFlow with the XLA just-in-time compiler (experimental)? [y/N] 

    No XLA support will be enabled for TensorFlow

    Found possible Python library paths:

      /Users/jpkim/tensorflow/lib/python3.6/site-packages

    Please input the desired Python library path to use.  Default is [/Users/jpkim/tensorflow/lib/python3.6/site-packages]

     

    Using python library path: /Users/jpkim/tensorflow/lib/python3.6/site-packages

    Do you wish to build TensorFlow with OpenCL support? [y/N] 

    No OpenCL support will be enabled for TensorFlow

    Do you wish to build TensorFlow with CUDA support? [y/N] y

    CUDA support will be enabled for TensorFlow

    Do you want to use clang as CUDA compiler? [y/N] y

    Clang will be used as CUDA compiler

    Please specify which clang should be used as device and host compiler. [Default is /usr/bin/clang]: 

    Please specify the CUDA SDK version you want to use, e.g. 7.0. [Leave empty to use system default]: 

    Please specify the location where CUDA  toolkit is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: 

    Please specify the cuDNN version you want to use. [Leave empty to use system default]: 

    Please specify the location where cuDNN  library is installed. Refer to README.md for more details. [Default is /usr/local/cuda]: 

    Please specify a list of comma-separated Cuda compute capabilities you want to build with.

    You can find the compute capability of your device at: https://developer.nvidia.com/cuda-gpus.

    Please note that each additional compute capability significantly increases your build time and binary size.

    [Default is: "3.5,5.2"]: 3.0

     

    그러면 이제 차례차례 빌드를 진행해주시면 됩니다.

     

    (tensor) My-MacBook:tensor jpkim$ bazel build tensorflow/examples/image_retraining:retrain

    (tensor) My-MacBook:tensor jpkim$ bazel build tensorflow/python/tools:optimize_for_inference

    (tensor) My-MacBook:tensor jpkim$ bazel build tensorflow/examples/label_image:label_image

    (tensor) My-MacBook:tensor jpkim$ bazel build tensorflow/tools/quantization:quantize_graph

    (tensor) My-MacBook:tensor jpkim$ bazel build tensorflow/contrib/util:convert_graphdef_memmapped_format

     

    몇몇 파일은 빌드하는데 상당히 오랜시간이 걸립니다 (특히 위의 3가지 - 1시간 내외 소요)

    빌드하면 워닝이나 정보가 계속 뜨는데 일단은 오류가 아니면 그냥 넘어가셔도 괜찮습니다. 오류가 발생했다면 빌드에 필요한 파일이 제대로 경로에 포함되어 있지 않거나 버전이 안맞는 등의 이유일 가능성이 높습니다. 오류메시지를 잘 살펴보시면 대부분 해결이 가능한 문제입니다. 뭐 자세한 부분은 여기서는 생략하고, 진행하겠습니다 ㅎㅎ

     

    팁)

    1. 만약 오류가 났다면, 조치 후 bazel clean --expunge 해주시고 다시 build 하시는게 좋습니다.

    2. 빌드가 잘 됐는데, 실행시 워닝이 뜰 수 있습니다. 이중 "The TensorFlow library wasn't compiled to use XXX ~~~어쩌구" 하는 워닝이 뜬다면, 빌드시에 아래처럼 옵션을 줘서 다시 빌드하시면 학습및 연산성능을 올릴 수 있습니다.(모든 빌드에 대해 각각, 워닝에 나오는 인스트럭션명을 넣어주시면 됩니다)

     

    (tensor) My-MacBook:tensor jpkim$ bazel build -c opt --copt=-msse4.1 --copt=-msse4.2 --copt=-mavx --copt=-mavx2 --copt=-mfma tensorflow/examples/image_retraining:retrain

     

    3. 유닉스쉘에 익숙하신 분들은  && 이용해서 한방에 빌드 걸어놓고 다른 일 보셔도 괜찮겠죠 ...^^ 

     

     

    빌드가 다 되었다면 디렉토리를 살펴보시면

    bazel-bin

    bazel-out

    bazel-genfiles

    bazel-tensorflow

    bazel-testlogs

     

    라는 폴더가 생성되었고, 각각 /priavate/tmp 밑의 템프디렉토리를 심링크 하고 있다는걸 아실 수 있을겁니다.

    아마 빌드를 여러번 다른 조건으로 할 수 있어서 임시폴더를 만들어 거기서 빌드파일을 관리하는거 같은데, (build clean 하면 사라짐)

    저같은 경우는 그것도 모르고  build clean 했다가 첨부터 다시 빌드했던 아픈기억이...ㅠㅜ

    그래서 아예 임시폴더를 통째로 카피해서 썼슴다...빌드 다시 해도 이전것도 쓸 수 있도록

     

     

     

    자, 이제 필요한 소스들이 다 갖춰졌으니, 학습을 시작해볼 차례입니다. 그건 다음시간에...^^

     

     

     

     

댓글 18 ...

  • ㅋㅋ

    2017.04.26 16:25

    글 잘 보고 있습니다. 다음 순서가 기대되네요^^
  • 공돌이

    2017.04.26 16:28

    앗 읽는분이 있으시군요! ㅎㅎ 이번주중에 다음편 올릴 예정입니다...다른작업땜에 정신이 없어서...ㅠㅜ 

  • kkjs

    2017.06.30 17:43

    안녕하세요 잘 보고 있습니다^^ 질문이있습니다. 현재 저도 맥북 사용중이고, nvidia가 아니어서 gpu 버전 텐서플로우를 사용 못하고 있는데 문제없이 이 프로젝트'모바일앱 만들기'를 마칠 수 있을까요??
  • 공돌이

    2017.07.03 22:17

    넵 GPU 버전은 사실 이 강좌에서는 별 의미 없습니다. GPU버전이 힘을 발휘하는 경우는, 튜토리얼처럼 기존 인셉션그래프를 재훈련하는게 아니라 완전히 scratch 부터 새로 학습시킬때입니다.(처음부터 학습데이터를 만들때는 재학습하는것과는 비교할수 없을정도로 오래 걸립니다. 이때 GPU파워에 따라 시간이 좀 단축되는거죠)

    참고로 맥은 1.2 버전부터는 아예 GPU 지원이 중단되었습니다...ㅠㅜ 

    CPU버전으로도 모든 작업은 다 수행가능합니다. 

  • 공돌이

    2017.07.14 12:07

    @GB 님, 안녕하세요!

    일단 아래 사항 확인 부탁드립니다.

    - virtual memory 라고 나와있는걸로 봐서...혹시 docker 에서 사용하고 계신지요?  docker를 사용하고 계시거나, 사용환경에서 메모리등의 리소스가 적은 경우, bazel build에 리소스를 제한하는 옵션을 추가해야하는 경우가 있거든요... 현재 환경을 좀 자세히 알려주시면 방법을 한번 찾아보겠습니다.

  • GB

    2017.07.14 12:28

    아 제가 이 댓글을 확인못하고 댓글을 삭제했네요ㅠㅠ configure을 다시하고 돌려보니까 아까 올린 에러메세지와는 또 다른 결과가 나오더라구요..! 도커는 아니고 virtualenv에서 하고있습니다. aws에서 받은 ec2 기본 프리티어 서버라 올려주신 글 그대로 따라가면서 GPU관련부분만 건너뛰었어요!

  • GB

    2017.07.14 12:10

    안녕하세요! 글 감사히보면서 열심히 따라가고 있는 학생입니다.
    bazel build tensorflow/examples/image_retraining:retrain를 실행하는데 있어서 아래와같은 에러가 뜨는데 혹시 도움을 주실수있을까요?ㅜㅜ

    ERROR: /home/ubuntu/tensorflow/tensorflow/tensorflow/contrib/boosted_trees/BUILD:316:1: C++ compilation of rule '//tensorflow/contrib/boosted_trees:python/ops/_split_handler_ops.so' failed: gcc failed: error executing command /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -B/usr/bin -B/usr/bin -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG ... (remaining 54 argument(s) skipped): com.google.devtools.build.lib.shell.BadExitStatusException: Process exited with status 4.
    gcc: internal compiler error: Killed (program cc1plus)
    Please submit a full bug report,
    with preprocessed source if appropriate.
    See <file:///usr/share/doc/gcc-5/README.Bugs> for instructions.
    Target //tensorflow/examples/image_retraining:retrain failed to build
    Use --verbose_failures to see the command lines of failed build steps.
  • 공돌이

    2017.07.14 13:30

    @GB 님, ㅎㅎㅎ 댓글 달고보니 없어져버려 당황했습니다.

    일단 오류 자체는 처음보는 오류인데요... internal compiler error 라고 하면 텐서플로우와 상관없이 gcc 에서 뭔가 문제가 생겼다는걸로 보이네요.

    아무래도 일단 아까 memory 관련 오류가 있었으니 우선 bazel build 를 하실 때에,  --jobs 1 --local_resources 10000,1.0,1.0 --verbose_failures 요렇게 한번 옵션을 줘봐주실래요? ( local_resources 에서 10000 은 램 10GB 를 의미합니다. 본인 환경에 맞춰 사용하실 램 용량을 지정해주시고, 첫번째 1.0 은 CPU코어갯수, 뒤 1.0 은 I/O 를 의미하는데 아마 1.0 쓰시면 될것 같아요) 이 옵션을 주고 빌드해보시고 계속해서 오류가 나신다면

    오류메시지와 함께 컨피규레이션도 알려주시면 한번 더 고민해보겠습니다!

    ==========

    추가:  jobs 옵션은 동시실행할 작업갯수입니다. 1부터 시작하셔서 괜찮으면 늘려나가시는게 좋아요 ( 200이 디폴트값)

  • GB

    2017.07.14 16:48

    알려주신대로, bazel build --jobs 1 --local_resources 10000,1.0,1.0 --verbose_failures //tensorflow/examples/image_retraining:retrain 로 다시 돌려보았습니다.

    한참실행되다가 아래와 같은 에러를 뿜고 또 멈췄습니당ㅠㅠ Python Path에 뭔가 문제가 있는걸까요..? configure에서 Python library는 /usr/lib/python3/dist-packages 에 설치하였습니다. 
    ERROR: /home/ubuntu/tensorflow/tensorflow/tensorflow/contrib/batching/kernels/BUILD:10:1: C++ compilation of rule '//tensorflow/contrib/batching/kernels:batch_kernels' failed: gcc failed: error executing command
      (cd /home/ubuntu/.cache/bazel/_bazel_ubuntu/8e2a671084b463197a99c831e01c3300/execroot/org_tensorflow && \
      exec env - \
        PWD=/proc/self/cwd \
        PYTHON_BIN_PATH=/usr/bin/python3 \
        PYTHON_LIB_PATH=/usr/lib/python3/dist-packages \
        TF_NEED_CUDA=0 \
        TF_NEED_OPENCL=0 \
      /usr/bin/gcc -U_FORTIFY_SOURCE -fstack-protector -Wall -B/usr/bin -B/usr/bin -Wunused-but-set-parameter -Wno-free-nonheap-object -fno-omit-frame-pointer -g0 -O2 '-D_FORTIFY_SOURCE=1' -DNDEBUG -ffunction-sections -fdata-sections '-std=c++0x' -MD -MF bazel-out/local-py3-opt/bin/tensorflow/contrib/batching/kernels/_objs/batch_kernels/tensorflow/contrib/batching/kernels/batch_kernels.pic.d '-frandom-seed=bazel-out/local-py3-opt/bin/tensorflow/contrib/batching/kernels/_objs/batch_kernels/tensorflow/contrib/batching/kernels/batch_kernels.pic.o' -fPIC -DEIGEN_MPL2_ONLY -iquote . -iquote bazel-out/local-py3-opt/genfiles -iquote external/bazel_tools -iquote bazel-out/local-py3-opt/genfiles/external/bazel_tools -iquote external/protobuf -iquote bazel-out/local-py3-opt/genfiles/external/protobuf -iquote external/eigen_archive -iquote bazel-out/local-py3-opt/genfiles/external/eigen_archive -iquote external/local_config_sycl -iquote bazel-out/local-py3-opt/genfiles/external/local_config_sycl -isystem external/bazel_tools/tools/cpp/gcc3 -isystem external/protobuf/src -isystem bazel-out/local-py3-opt/genfiles/external/protobuf/src -isystem external/eigen_archive -isystem bazel-out/local-py3-opt/genfiles/external/eigen_archive -fno-canonical-system-headers -Wno-builtin-macro-redefined '-D__DATE__="redacted"' '-D__TIMESTAMP__="redacted"' '-D__TIME__="redacted"' -c tensorflow/contrib/batching/kernels/batch_kernels.cc -o bazel-out/local-py3-opt/bin/tensorflow/contrib/batching/kernels/_objs/batch_kernels/tensorflow/contrib/batching/kernels/batch_kernels.pic.o): com.google.devtools.build.lib.shell.BadExitStatusException: Process exited with status 1.
    virtual memory exhausted: Cannot allocate memory

     

    ㅠㅠ 귀찮으실텐데 성심껏 도와주셔서 정말로 감사드려요~!

  • 공돌이

    2017.07.14 17:12

    @GB 님, virtualenv 에서 실행하시는 거면 virtualenv 내의 bin 폴더의 python을 사용하도록 해야 할텐데, PATH가 잘못잡힌거 같아요...

    ./configure 하실때 virtualenv 가 실행된 상태인가요? 그렇다면 디폴트로 {{virtualenv 의 홈폴더}}/bin/python 이 잡히고, library path 도  {{virtualenv홈}}/lib/pythonx.x/dist-packages 이렇게 잡힐텐데요...

    혹시 가상환경을 activate 안하신 상태였다면 activate 하시고 다시 configure 해보세요... 

     

    그리고, 아래쪽의 메시지를 보니까 또 virtual memory 어쩌구 하는 에러가 나네요... 혹시 지금 AWS에서 쓰시는 EC2서버의 사양이 어떻게 되나요? 램크기요...

  • GB

    2017.07.14 17:39

    t2.micro (Variable ECUs, 1 vCPUs, 2.5 GHz, Intel Xeon Family, 1 GiB memory, EBS only) 입니다. 위에 명령들 다 가상환경 안에서 실행했습니다ㅠ

  • 공돌이

    2017.07.14 19:06

    일단 램이 1GB 이니, 옵션에서 10000 이 아니고 1000 으로 하시고 다시 돌려봐주세요... (10000은 10GB)

    그리고, 가상환경에서 실행하셨다면 python 이 가상폴더로 지정될텐데...이상하네요. 올려주신 로그로 봤을때는 시스템환경값을 쓰고 있거든요...-_-?

    activate 가 제대로 안된듯 해요...

    귀찮으시겠지만 두가지만 더 확인해봐주세요...

    1) 가상환경내에서 which python  (어떤 파이썬을 쓰는지)

    2)터미널에서 python 실행해서  import tensorflow as tf 해서 제대로 텐서플로우가 로드되는지

     

     

  • GB

    2017.07.14 20:56

    답변감사합니다!! 확인해보니까 텐서플로우가 안깔렸더라구요ㅠ 다른거 지우고 수정하는 와중에 망가졌었나봅니다. 

    다시 깔고 bazel build --jobs 1 --local_resources 1000,1.0,1.0 --verbose_failures //tensorflow/examples/image_retraining:retrain 명령어가 지금 1시간반째 돌아가고 있습니다..

    Still waiting for 1 job to complete: Running(standalone): Compiling tensorflow/contrib/batching/kernels/batch_kernels.cc

    이 상태메세지가 무한반복되고 있네요ㅠ

  • 공돌이

    2017.07.14 22:42

    아 넵 다행이군요...
    디폴트로 빌드해도 시간이 많이 걸리니까(맥 32기가 메모리에서 jobs 수 200개로 돌려도 30분정도) 메모리와 쓰레드를 제한하면 훨씬 오래 걸리긴 할겁니다...ㅠㅜ jobs 옵션수를 적당히 올려가면서 (혹은 200뷰터 내려가면서) 테스트 해보셔도 되는데 그럼 멈추고 첨부터 다시 해야하니...애매하군요...

    얼마나 걸릴지 저도 감이 안오네요...
  • 교수님C만은제발

    2018.05.27 04:21

    tensorflow_hub 가 나오면서 examples/image_retraining 안에 있는 파일이 사라졌던데 저가 아직 초보자라 사용하는데 많은 문제를 겪고 있는데 혹시 시간이 있으시면 몇가지 질문좀 할 수 있을까요?
  • 공돌이

    2018.05.30 14:47

    네 1.7부터 바뀌었습니다. 별도로 깃헞에서 받으셔야 하는데, c 모듈이 제거되어 컴파일 없이 그냥 retrain.py를 실행해주시면 될거예요...

    제가 요즘 좀 자빠져서 로그인을 안하다보니 늦게 확인했네요. 궁금한거 있으심 제가 아는 한도내에선 최대한 도와드릴테니 글 남겨주세요. (요즘은 yolo 랑 cyclegan쪽으로 하느라 텐서에 좀 소홀합니다...^^)
  • 뚜넨네

    2018.07.05 11:00

    그 전에 단계 모두 따라했고, 다 잘 됐는데 bazel 하는 데서 자꾸 오류가 나요 ㅠㅜ
    ERROR: Skipping 'tensorflow/examples/image_retraining:retrain': no such package 'tensorflow/examples/image_retraining': BUILD file not found on package path
    WARNING: Target pattern parsing failed.
    ERROR: no such package 'tensorflow/examples/image_retraining': BUILD file not found on package path
    INFO: Elapsed time: 0.734s
    INFO: 0 processes.
    FAILED: Build did NOT complete successfully (0 packages loaded)

    이런 오류가 나는데 경로도 맞는데 왜 패키지를 못찾는거지 모르겠어요...ㅠㅜㅠㅜ 어떻게 해야할까요?ㅠ
  • 공돌이

    2018.07.05 23:12

    바로 위의 댓글에도 적혀있습니다만, 1.7버전부터 image_retrain.py 를 포함해서 많이쓰이는 예제와 모듈을 따로 모아서 저장소를 새로 만들었습니다.(https://github.com/tensorflow/hub) 기존의 저장소에서는 빠졌구요. hub 를 클론하시거나 혹은 retrain.py 파일만 따로 받으셔서 (https://github.com/tensorflow/hub/tree/master/examples/image_retraining 폴더 안에 retrain.py ) 바로 실행하시면 됩니다. (빌드하실 필요 없구요).

    예전에 제가 강좌올렸을때 보다 버전이 올라가면서 새로운 옵션도 많이 생겼고 약간 바뀐부분도 있고 하니 --help 하셔서 가능한 옵션들에 대한 설명을 한번 보시기를 권해드립니다.

https://meisteruser.net/devflow/2241
번호
제목
닉네임
10 머신러닝/딥러닝 공돌이 1776 2017.07.05
9 머신러닝/딥러닝 공돌이 2061 2017.06.05
8 머신러닝/딥러닝 공돌이 6379 2017.05.26
7 머신러닝/딥러닝 공돌이 2257 2017.05.02
6 머신러닝/딥러닝 공돌이 7928 2017.04.27
머신러닝/딥러닝 공돌이 3527 2017.04.24
4 머신러닝/딥러닝 공돌이 2530 2017.04.23
3 머신러닝/딥러닝 공돌이 5398 2017.04.19
2 머신러닝/딥러닝 공돌이 19022 2017.03.22
1 공지 공돌이 511 2017.03.21
태그
위로