이전에 Anaconda3을 설치하고 오늘은 Tensorflow, Keras, Gensim 라이브러리 환경을 구축한다.
tensorflow2 부터 패키지 이름으로 CPU와 GPU를 구분하지 않는다.
Mac의 경우엔 패키지 이름으로 CPU와 GPU를 구분하던 tensorflow1.* 에서도 GPU 모드를 사용할 수 없었다. GPU모드를 사용하기 위해서는 CUDA를 지원하는 그래픽 카드여야 하는데 이는 NVIDIA의 기술로 맥북 프로는 Radeon 계열의 분리형 그래픽 카드 또는 Intel의 내장 그래픽 카드이기 때문에 사용할 수 없다. 아쉽긴 하지만 Radeon과 NVIDIA의 주타겟 영역이 다르다고 생각하면 될 것 같다.
tensorflow 공식 웹페이지에서는 pip와 virtualenv를 활용한 방법을 제안하나 conda를 활용하기로 했다.
virtualenv와 conda는 일종의 가상(?) 환경을 구축하는 방식으로 더 익숙한 Docker나 virtual box와의 차이는 아래 그림 정도의 의미로 받아들이면 될 것 같다. Docker나 Virtual Box와 같이 host system에 특정 범위까지 독립적인 환경을 제공한다는 의미보다는 host에 기존에 설치된 라이브러리 패키지들과의 의존성 문제를 독립시켜주기 위한 목적(관리상의 편리)으로 활용한다.
개발 후 배포가 목적이라면 대상 환경과 개발된 산출물의 규모에 따라서 docker나 더 큰 가상환경을 고려해야겠으나, 나의 경우 의존성 문제로 부터 자유롭다는 것으로 충분하다.
케라스(keras)도 함께 설치할 계획이었으나, conda install keras로 다운로드되는 keras 패키지는 tensor flow2를 지원하지 않는다. 다행히도, keras의 backend로 tensor flow를 활용 계획이라면 tensor flow2 내에 tf.keras를 import 하여 keras 문법으로 모델을 만들 수 있다하여 당장은 생략하기로 했다. 자세한 내용은 tensor flow 공식 웹페이지와 케라스 github에서 확인 할수 있다.
1. 가상 환경 생성
- virtualenv --system-site-packages -p python3 ./venv
- conda create -n venv python=3.7.4
가상 환경을 생성하면, ~/anaconda3/envs/venv 디렉터리가 생성된다. 활성화 상태에서 모든 패키지는 venv 내에 설치된다. 이제 일이 꼬이면(?) 의존성 걱정 없이 이 디렉터리를 날리면 된다.
2. 가상 환경 활성화 및 패키지 설치
- source./venv/bin/activate zsh와 pip install tensorflow, pip install gensim를 입력 (virtualenv를 사용하는 경우)
- conda activate와 conda install tensorflow, conda install gensim을 입력
conda 환경을 활성화시키면 prompt의 앞부분이 디렉터리 명으로 변경된다. (virtualenv도 같다.)
3. 패키지 설치 확인
python -c "import tensorflow as tf; tf.reduce_sum(tf.random.normal([10,10])))"을 입력하여 이상 없이 결과가 출력되는 것을 확인하면 끝이다.
아래와 같이 "Your CPU supports ~ AVX2 FMA" 등과 같은 경고 메시지가 나올 수 있다. 이 메시지는 CPU에 선형대수 연산에 최적화된 Instruction set이 있으며 빌드 단계에서 해당 Instruction을 사용할 수 있도록 커스터마이징 해주면 성능 향상을 기대할 수 있다는 의미로 tensorflow로 모델을 학습하고 예측을 위한 사용 문제는 없다고 한다. 이와 같은 경고 메시지가 발생하는 이유는 conda install, pip install과 같은 명령어는 설치될 환경의 임의의 CPU에 대해서 범용성을 갖도록 pre-build 된 패키지를 설치하기 때문이라고 한다. 자세한 내용은 이 곳에서 볼 수 있다.
jupyter notebook을 사용하는 경우 이 메시지를 볼일이 없으나, 다른 개발 도구를 사용하는 상황에서 최적화 빌드업이 당장은 필요 없을 것 같고, 경고 메시지도 신경 쓰인다면 출력되는 log level을 보지 않는 방법도 있는데 그 방법은 아래와 같다.
- import os; os.environ['TF_CPP_MIN_LOG_LEVEL']='2';
4. 가상 환경 비활성화 및 기타
- deactivate
- conda deactivate를 입력하여, 가상 환경을 비활성화시킬 수 있다.
특정 패키지를 활용하다가 다른 목적으로 host system(Mac)을 사용하는 경우 비활성화 후 다른 환경을 활성화시키는 방식으로 운영과 관리의 편안함을 얻을 수 있다.
당연하지만, tensorflow 패키지를 설치한 conda 환경을 활성화시킨 경우와 비활성화시킨 경우, 패키지가 host system(Mac)과 구분되는지와 의도치 않은 실수(?)등의 유무를 확인하고 싶어서 Jupyter notebook에서 import tensor flow as tf로 확인했다. conda 환경을 활성화했을 때 문제없던 tensor flow 패키지가 비활성화시 찾지 못하는 것을 보고 의도대로 제대로 설치했다는 것을 확인할 수 있었다.
conda, tensor flow, keras 등의 환경을 구축하는 것은 워낙 잘 알려진 라이브러리다 보니 그 과정은 명령어 몇 줄의 간단한 과정인데, 그 과정 속에서 '왜 지원 안 하지? 왜 안 되는 거지? 이건 뭐지? 왜 그렇지?' 하다 보니 이것저것 찾아볼게 많아졌다.
다음에 Radeon과 NVIDIA, tensorflow 커스터마이징 빌드업, docker를 활용한 환경 구축 등을 자세히 알아봐야겠다.
오늘은 마무리.
댓글