[TOAST Study] 8. Tensorflow 설치

다양한 환경에서 Tensorflow설치

Tensorflow란? 

Image result for tensorflow텐서플로우는 Google에서 만든 data flow graph 를 사용하여 수치 연산을 하는 오픈소스 SW 라이브러리이다. python이나 numpy는 변수를 정하고 곧바로 연산을 하여 결과를 볼 수 있다는 것과 다르게 텐서플로우는 그래프를 생성하고 오직 Session을 통해서만 연산을 수행하는 computational graph 방식을 사용한다. numpy는 우리가 정의한 모든 수학적 연산이 이루어지는데 반해 텐서플로우는 그래프안에서 다양한 연산이 정의 되어있더라도 sess.run()에서 사용자가 필요로 하는 값에 대한 것만 계산하기 때문에 더 효율적이라고 할 수 있다. 또한 그래프 구조로 표현된 정보를 이용해서 트랙잭션 간 의존성을 인식하고 노드에 입력 데이터로 들어 올 텐서가 준비될 때 디바이스 (cpu 혹은 gpu)에 비동기적, 병렬적으로 연산을 할당하여 복잡한 알고리즘을 빠르게 실행시킬 수 있다.

현재 가장 인기 있는 라이브러리로, 처음 출시되었을 때에 비해 커뮤니티가 많이 활성되었기 때문에 정보를 얻기도 어렵지 않다. 파이썬이 주 언어이지만 현재는 C++, Java 등 다양한 언어를 지원하고있다. 파이썬으로 개발한 모델을 java를 이용해 weight 를 계산한다거나 하는 작업이다. 꾸준히 업데이트가 되고있어 앞으로도 발전가능성이 무궁무진해 보인다.

텐서플로우 그래프의 Node는 수학적 연산을 나타내고 노드를 연결하는 그래프의 Edge는 다차원 데이터 배열을 나타낸다. 텐서플로우는 다양한 모듈을 지원하는데 예를 들어 텐서플로우의 큰 장점 중 하나인 Tensorboard module은 알고리즘의 동작을 조사해서 디스플레이 해주기 때문에 좀 더 효율적인 모델을 만들기에 매우 유용하다. 

0. Tensorflow 사용을 위한 환경 및 Tools

  기본적으로 텐서플로우 파이썬 API는 파이썬 2.7과 파이썬 3.3+를 지원한다. 크게 두가지 로 나뉘는데 CPU전용 텐서플로우와 GPU 활용 버전이다. 64비트 리눅스 환경에서 사용될 수 있으며 안드로이드나 iOS와 같은 모바일 플랫폼에서도 사용가능하다. 텐서플로는 공식적으로 Windows에 직접 소스를 컴파일하는 것은 지원하지 않기 때문에 Windows 개발환경에서 텐서플로우를 사용하고 싶다면 리눅스 환경을 구축해주어야 하는데 다양한 툴이 존재한다.

그 예로 Anaconda는 여러가지 수학, 과학 패키지를 기본적으로 포함하고있는 파이썬 배포판으로 머신러닝, 수학, 자연과학 관련 패키지를 Anaconda 상에 구축된 가상환경에서 손쉽게 관리 및 설치 삭제가 가능한 강력한 오픈소스 툴이다. Canopy(캐노피), ActivePython(액티브파이썬) 등 다른 툴도 있지만 범용적으로 가장 인기있는 툴은 아나콘다로 보인다. 일반적으로 파이썬으로 작업을 할 때는 Virtualenv라는 가상환경을 사용하는것이 권고된다. 한 컴퓨터에서 여러 프로젝트를 작업할 때 파이썬 패키지의 의존성이 충돌하지 않도록 관리하기 위해서다.  텐서플로우는 파이썬 패키지이기 때문에 또한 관리가 필요하고 Anaconda를 설치한 경우 가상환경의 관리가 간편하다.

python 쉘을 실행하여 텐서플로우 모듈을 import하여서도 사용가능 하지만 코드와 실행 결과를 함께 관리할 수 있는 Jupyter Notebook을 사용하는 것이 좋다. 주피터 노트북은 로컬 컴퓨터에서 실행되는 웹 서버 프로그램과 비슷하다. 브라우저로 코드를 실행하면 파이썬 커널에게 실행을 명령하고 그 결과를 브라우저로 전달하여 사용자가 쉽게 볼 수 있다.

GPU를 사용하는 텐서플로를 설치하기 위해서는 Nvidia 그래픽카드가 필요하다. 그 외에도 Nvidia에서 머신러닝을 위해 제공하는 gpu 병렬컴퓨팅 API모델 CUDA와 cuDNN을 설치해야한다. 텐서플로우는 글을 작성하는 현재는 CUDA 9.0버전 이상을 지원하지 않기 때문에 9.2 버전은 다운받지 않도록 주의하자. 클라우드 컴퓨팅 환경에서는 일반 instance와 gpu 지원 인스턴스가 따로 존재하기 때문에 주의하여야 한다.

1-1. Ubuntu 18.04에 Tensorflow 설치(cpu 전용)

토스트서버에 만든 첫번째 인스턴스의 호스트 os가 Ubuntu18.04 이기 때문에 바로 설치를 진행했다. 텐서플로우 공식 홈페이지의 설치 매뉴얼을 보고 그대로 따라갔다. https://www.tensorflow.org/install 

1
2
pip install --upgrade pip
pip install tensorflow
cs

이때 에러가 발생했다. 'No module named setuptools'

해결책을 찾아본 결과, 툴을 설치해주면 해결되는 문제였다. 
sudo apt-get install python-setuptools
sudo apt-get install python3-setuptools
하지만 용량이 인스턴스 용량이 부족해 새로운 ubuntu 18.04 인스턴스를 생성하고 다른 명령어로 설치했다.
1
2
3
sudo apt update
sudo  apt -y install python python-pip python-setuptools python-dev
pip install --upgrade tensorflow requests
cs

설치가 되는 중간중간 빨간 글씨의 에러코드가 보이지만 잠시 기다리면 간단하게 텐서플로우 (cpu only) 설치가 완료된다. 정상작동하는지 확인해보기 위해 간단한 예제를 실행해보자. 

1
python -"import tensorflow as tf; tf.enable_eager_execution(); print(tf.reduce_sum(tf.random_normal([1000, 1000])))"
cs


제일 마지막 줄을 보면 tensorflow 함수 reduce_sum()의 결과값이 출력됨을 볼 수 있다. 

1-2. Ubuntu 18.04에 Tensorflow 설치(gpu 활용)


2-1. Windows 10 에서 Tensorflow 설치(cpu 전용)

먼저 TOAST 클라우드에 Windows Server2016 으로 인스턴스를 새로 생성했다. 리눅스 기반이 아니기때문에 원격 접속을 하기 위해 인스턴스 관리에서 접속 정보를 확인해야한다.
여기서 비밀번호 확인을 누르면 아래 창이 뜨게 되고 

여기서 개인키에 키페어로 사용하는 개인키 pem 파일을 올려주면 비밀번호가 확인된다. 이것을 복사해서 계정 이름은 Administrator로 접속 할 수 있다. 
앞서 말했듯이 Windows 환경에서 Tensorflow를 사용하기 위해서 리눅스 환경을 가상환경으로 조성해주어야 한다. 나는 Anaconda를 설치하여 사용하기로 했다. 웹브라우저를 통해 아나콘다를 설치해준다. (https://www.anaconda.com/distribution/ )
설치파일을 다운받고 Next를 누르다보면 간편하게 설치가 완료된다. 설치되는 프로그램은 다음과 같다.
아나콘다에 텐서플로우를 설치해보자. 먼저 콘다 및 파이썬 패키지를 업데이트 해 준다. Anaconda Prompt를 실행하여 아래 명령어를 입력한다

1
2
conda update -n base conda
conda update --all
cs


텐서플로우를 설치하기 전에 아나콘다 가상환경을 만들어서 그 안에서 작업하는 것이 좋다. 프로젝트에 따라 필요한 패키지가 다르기때문에 패키지끼리 충돌이 일어날 수도 있으므로 이를 방지하고, 버전관리에도 수월하기 때문이다.
(+ 처음부터 텐서플로우가 설치된 환경을 구성하는 방법도 있다. )

1. 텐서플로우 직접 설치
1
2
3
4
5
##가상환경 생성
conda create -n [가상환경 이름] python=3.5
##가상환경 진입
activate [가상환경 이름]
cs


그리고 텐서플로우를 설치한다. 텐서플로 1.15.0버전과 2.1.0 버전부터는 cpu & gpu 패키지가 통합되어 다운로드 용량이 커졌기 때문에 cpu 버전을 다운받고 싶다면 tensorflow-cpu 패키지를 설치해야한다. pip를 이용하여도 되지만 텐서플로 1.9.0 버전부터는 콘다를 사용하여 설치하는 것이 권장된다. MKL-DNN 라이브러리에 최적화되어 있어서 CPU 만을 사용하는 경우 보다 나은 성능을 기대할 수 있기 때문이다. (하지만 콘다 패키지는 최신 텐서플로를 지원하지 않을 수도 있다는 점을 염두에 두자)

1
2
3
pip install tensorflow
##혹은
conda install tensorflow
cs

만약 permission 오류가 발생한다면 프롬프트를 관리자 권한으로 재실행하여 해결할 수 있다. 설치 완료 후 ipython 쉘을 실행하여 tensorflow module이 제대로 import된다면 정상적으로 텐서플로가 설치된 것이다.


ipython 쉘을 통해서도 작업할 수 있지만 위에서 설명했듯이 코드와 실행 결과를 함께 관리하기 위해서 주피터 노트북을 사용하는 편이 좋다. 주피터 노트북 브라우저에서 코드를 실행하면 ipython 커널에 실행이 명령되고 그 결과를 브라우저에서 확인하는 방식이다. 실행하기 위해서 jupyter notbook 명령을 사용한다.


> jupyter notebook
명령을 입력한 결과 화면이다. 주피터 노트북이 실행되면 자동으로 기본 브라우저가 실행되어 서버에 접속하다. 로컬 컴퓨터의 주피터 노트북 서버 주소는 http://localhost:8888/ 이다. 주피터 노트북을 실행한 현재 폴더가 기본 홈 페이지로 설정되며 이 폴더 하위에 파이썬 주피터 노트북을 만들고 실행 할 수 있다. 접속하면 아래 화면이 출력된다.

Untitled.ipynb는 내가 만든 임시 파일이다. 새로 시작하면 아무 파일이 없는 것이 정상이다. 오른쪽 위의 New를 눌러 Python3를 누르면 새 작업창이 만들어진다.


다음과 같이 tensorflow module을 Import 하는 명령어를 입력하고 Shift+Enter 키를 입력했을 때 오류가 발생하지 않고 다음 블럭이 생성된다면 텐서플로를 주피터 노트북에서 사용할 수 있도록 제대로 설치가 완료된 것이다.

2. 텐서플로우를 이용하는 가상환경 만들기

아나콘다 공식 홈페이지에서는 텐서플로우의 설치를 다음과 같이 설명하고 있다.
cpu만 지원하는 가상환경을 만드는 명령어는

> conda create -n tf tensorflow

gpu도 지원하는 가상환경은

> conda create -n tf-gpu tensorflow-gpu

(-n 뒤에 나온 인자는 환경의 이름이므로 마음대로 바꿔도 된다)
설치되는 패키지를 살펴보면 gpu지원 텐서플로우 패키지는 CUDA 와 cudnn toolkit 등을 포함하고 있다. 가상환경에서 텐서플로우의 설치를 완료했다면

> conda activate '환경이름'

명령어를 통해 환경으로 들어가자. 왼쪽에 (base)가 ('환경이름')으로 바껴있을 것이다. 이것으로 우리가 현재 어느 환경에서 작업하고있는지를 알 수 있다. 아나콘다를 설치하면 주피터 노트북도 동시에 같이 설치되지만, 새로운 가상환경을 만들었다면 이 환경에도 주피터 노트북을 따로 설치해주어야 한다. 그렇지 않고 주피터 노트북을 실행하려고 하면 명령어를 이해하지 못한다.

> conda install jupyter notebook

명령어로 설치해주자. 그리고 tensorflow가 import 되는지 확인해보면 설치 완료!

(가상환경에서 빠져나오고 싶을때는 'conda deactivate'명령어를 사용하면 된다)

2-2. Windows 10 에서 Tensorflow 설치 (gpu 활용)


gpu를 사용하는 텐서플로우를 사용하기 위해서는 GPU 병렬컴퓨팅 API모델 CUDA와 cuDNN을 설치해야 한다.

CUDA 9.0 설치 : https://developer.nvidia.com/cuda-90-download-archive
cuDNN for CUDA 9.0 설치 : https://developer.nvidia.com/rdp/cudnn-download#a-collapse705-9

설치가 완료 되었다면 CUDA의 bin 폴더의 위치를 시스템변수 Path에 추가해준다. cuDNN은 다운로드 후 압축을 해제하고 그 속의 cuda 폴더를 CUDA의 bin폴더 내에 넣어준다. 이제 재부팅을 한 번 해주면 GPU 텐서플로우 설치를 하기 위한 준비는 끝이다.

1
pip install -upgrade tensorflow-gpu
cs

-

컴퓨터에 NVIDIA 그래픽 카드가 내장되어있다면 사용이 가능하다. 먼저 nvidia 홈페이지에서 자신의 그래픽카드 드라이버를 최신버전으로 업데이트 하자.
https://www.nvidia.com/download/index.aspx?lang=en-us

그래픽카드는,  내컴퓨터 > 오른쪽 마우스 클릭 후 속성 > 왼쪽 탭의 '장치 관리자' > '디스플레이 어댑터 '탭 에서 확인이 가능하다. 업데이트가 완료 되었다면 아나콘다 프롬프트 창을 관리자 권한으로 실행시킨다. 패키지간 충돌을 막기 위해 가상환경을 먼저 만들어주었다.

윈도우 환경에 tensorflow-gpu 설치를 찾아본 결과 대부분이 옛날에 포스팅된 글 들이었고 몇몇 포스트는 cuda, cuDNN을 받아야 한다고 하는 반면에 몇몇은 별다른 설치없이 conda 명령어로 간단하게 실행되는 것을 보여줬다. 나는 nvidia 드라이버 업데이트까지 마친 상황에서 CUDA toolkit은 받지 않고 계속해서 찾아보던 중 tensorflow 2.0부터는 anaconda cloud에서 별다른 cuda 설치 없이 사용이 가능함을 알게되었다.
https://anaconda.org/anaconda/tensorflow-gpu
아나콘다 공식 홈페이지에서도
 conda install -c anaconda tensorflow-gpu
명령어를 사용하면 tensorflow 2.0 이 설치 된다고 명시되어있고
https://medium.com/@shaolinkhoa/install-tensorflow-gpu-2-0-alpha-on-anaconda-for-windows-10-ubuntu-ced099010b21
해당 글을 읽어보면 더 자세히 알 수 있다. 무엇보다도 아나콘다 프롬프트에서 tensorflow-gpu 설치를 요청하면

이와 같이 cudatoolkit과 cuDNN등의 패키지들이 자동으로 설치되는것을 볼 수 있다.

새로운 가상환경을 만들어준다.

1
2
3
4
5
6
7
8
9
10
11
#가상환경 목록 확인
conda info --envs
#가상환경 생성
conda create [환경 이름] [설치할 패키지]
conda create test_env python=3.6
#가상환경 진입
activate [환경 이름]
#비활성화는 activate 대신 deactivate사용
cs

나는 python 3.6으로 환경을 만들어줬다. 만든 환경을 activate 시키면 왼쪽 ( ) 안 환경명이 새로운 환경으로 바뀐다. conda 자체 업데이트 후 텐서플로를 설치했다.

1
2
3
4
5
6
conda update -n root conda
conda update --all
#경우에따라 conda update --all 명령을 두 번 해줘야 완전히 업데이트가 될 수도 있다
#tensorflow 다운로드
conda install -c anaconda tensorflow-gpu
cs

그리고 간단한 예제를 실행시켜 보았다. gpu를 사용했다는 것을 볼 수 있었는데 수행시간이 꽤 길었다. 이유는 아직 잘 모르겠다.

3-1. Ubuntu Docker에서 Tensorflow 설치 (cpu 전용)

위에서 만든 우분투 18.04 인스턴스에 docker를 설치하고 tensorflow이미지를 다운받아보았다. 도커 허브에서 tensorflow를 검색하면 공식 이미지가 제일 위에 뜰 것이다. 가장 최신의 default tensorflow image를 설치할 수 있는 커맨드다. 하지만 설치를 하고 컨테이너를 생성하여 파이썬에서 import를 하려고 보면 오류가 발생한다.
libnvinfer.so.6: cannot open file: No such file or directory

오류를 자세히 보니 GPU 를 사용하려면 nvidia를 설치하라는 말인것 같았다. 한참 구글링을 해보니 Tensorflow 1.15 이후 버전들은 GPU, CPU가 통합되면서 GPU 가 default mode고 CPU가 default 인 mode를 사용하기 위해서는 1.15버전을 설치해야 했다. 
도커 태그로 1.15.0 버전을 설치하는 것으로 이미지를 받아 정상적으로 실행되는것을 확인했다.


간단하게 Hello 를 출력하는 예제를 실행해보았다.


3-2. Ubuntu Docker에서 Tensorflow 설치 (gpu 활용) 


4-1. Windows 10 Docker에서 Tensorflow 설치(cpu 전용)

windows 10 에 docker를 설치한 이후의 단계부터 진행했다. 나는 이미 컴퓨터에 깔려있었기때문에 설치과정은 따로 남기지 않겠다.
docker quickstart terminal을 실행하고 다음의 명령어를 입력하여 cpu기반인 1.15.0 버전 텐서플로우 이미지를 다운로드 받는다. 이번에는 jupyter notebook을 사용해 실행해 보자.

1
docker run -it --rm -8888:8888 tensorflow/tensorflow:1.15.0-jupyter
cs

주피터 노트북으로 접속하기 위해서는 도커 아이피 주소를 확인해야한다. 도커를 실행하고 맨 위에 나오는 ip주소를 확인한다. 


[아이피 주소]:8888 로 웹브라우저에서 실행하면 주피터 노트북 홈 화면이 나온다.

4-2. Windows 10 Docker에서 Tensorflow 설치(gpu 활용)

windows 환경에서 텐서플로우는 vm 환경 위에서만 실행가능한데 vm은 nvidia gpu를 지원하고 있지 않기때문에 windows 자체에서는 구동이 불가능하다.





No comments:

Powered by Blogger.