포스팅 개요
이번 포스팅은 Ubuntu20.04 LTS 환경에서 텐서플로우(tensorflow) GPU 설치 및 환경 설정을 셋팅하는 방법에 대해 정리합니다.
Ubuntu20.04 환경에 Python을 설치하고 관련 cuda, cudnn 등을 설치해 최종적으로 tensorflow에서 gpu가 동작되는 것을 확인해보고자 합니다.
본 포스팅을 작성하기 전 테스트해본 Ubuntu 환경은 아래와 같습니다.
- AWS EC2 g4dn 인스턴스 장비
- AWS EC2 P3 type 인스턴스 장비
- AWS EC2 P2 type 인스턴스 장비
- AWS EC2 g3 type instance 장비
위 4개의 환경에서 전부 잘 동작됨을 확인하였으며, 본 포스팅에서는 그 중 g4dn 장비를 기준으로 설명합니다.
g4dn, p3, g3, p2 type 전부 똑같이 진행해서 동작되는 것을 최종적으로 확인해보았습니다.
제가 참조한 자료는 아래와 같습니다. 이는 tensorflow에서 tensorflow version에 따른 Python 버전, 컴파일러, cudnn, cuda 버전을 테스트해본 것을 정리한 표입니다. 이를 확인하시어 각자 환경에 맞게 cuDNN과 CUDA를 설치하시면 될 것 같습니다.
포스팅 본문
이제 Ubuntu20.04 LTS 환경에서 GPU 관련한 것(CUDA, cuDNN)을 설치하고 Python tensorflow와 연동하는 방법에 대해 정리하고자 합니다. 위 개요에서도 말씀드렸지만, 저는 아래와 같은 환경에서 테스트를 해보았고 블로그 글은 g4dn 환경을 기준으로 설명드립니다.
- 테스트 해본 환경 : EC2 G4, G3, P3, P2 인스턴스
- 블로그에서 진행하는 환경 : g4dn instance
정리하자면, 블로그 포스팅 기준으로는 아래와 같은 환경에서 진행하였습니다.
Instance type
- g4dn.4xlarge ( 블로그 기준 )
OS
- Ubuntu 20.04 LTS
GPU
- Tesla T4
Python
- 3.7
- tensorflow == 2.3.0
본 포스팅에서는 아래와 같은 순서로 작성하겠습니다.
- Python Anaconda 설치 및 가상환경 셋팅
- GPU 설치 및 셋팅
1. Python Anaconda 설치 및 가상환경 셋팅
먼저, 다시 한번 환경에 대해서 언급해드리겠습니다. 일단, 제가 시작한 위치는 /home/{user_name} 경로입니다.
이렇게요! 해당 경로에서 시작하고 여기 경로에서 변하지 않습니다.
또한, ubuntu의 lsb_release -a 명령어로 os 버전 등을 확인할 수 있는데요. 이 명령어를 통해 확인해보면
제가 진행하는 환경은 ubuntu 20.04.2 LTS 환경임을 확인할 수 있습니다.
자! 이제 본격적으로 설치 및 셋팅을 진행해보겠습니다.
가장 먼저, Anaconda를 설치해주겠습니다. Anaconda는 홈페이지(https://www.anaconda.com/products/individual-d)에 가셔서 linux의 64-bit installer를 통해 받았습니다.
그리고 쭉쭉 설치해주면 됩니다.
참고로 설치되는 위치가 /home/{user_name}/anaconda3에 default로 설치가 되는 것을 확인할 수 있습니다.
그 다음 sudo vi ~/.bashrc 명령어를 통해 bashrc를 열어서 사용자 환경에 anaconda path를 추가해줍니다.
sudo vi ~/.bashrc
# 안에 아래처럼 내용 삽입
export PATH=~/anaconda3/bin:$PATH
# 저장 후
. ~/.bashrc
(혹은 source ~/.basrch)
그리고 나서 Anaconda 가상환경(venv)를 만들어줍니다. 가상 환경 이름과 파이썬 버전은 여러분들 환경에 맞추어서 진행하시면 됩니다.
저는 Python3.7을 사용했으며 가상환경 이름은 soojin으로 했습니다.
conda create -n soojin python=3.7
그리고 저는 편의를 위해서 sh 스크립트를 만들어 해당 anaconda python 가상환경이 쉽게 activate가 되도록 설정하였습니다.
아래 셋팅은 하셔도 되고 안하셔도 됩니다. 자는 편의상 아래와 같이 진행하였습니다.
vi set_env.sh
# 아래와 같이 내용 삽입
#!/bin/bash
. ~/.bashrc
. ~/anaconda3/etc/profile.d/conda.sh
conda activate soojin
# 저장 후 아래와 같이 명령어 실행
. set_env.sh
(혹은 source set_env.sh)
그리고 tensorflow를 설치해줍니다.
pip install pandas numpy tensorflow==2.3.0
( 참고로 tensorflow 2.X 부터는 gpu 버전이 따로 없습니다. 통합되어서 설치됩니다. )
이렇게까지 진행하게 되면 linux ubuntu 환경에 Anaconda 설치 및 Python 가상환경 셋팅이 완료되었습니다.
2. Ubuntu20.04 LTS 환경에 맞는 GPU setting
이제 본격적으로 ubuntu 20.04 LTS 환경에서 tensorflow gpu가 동작할 수 있도록 gpu 설치 및 셋팅을 해주겠습니다. 추가적으로 위에서 환경을 작성할 때도 말씀드렸지만, GPU는 Telsa T4입니다.
**만약, 기존에 cuda 및 nvidia가 설치되어 있다면 아래 명령어로 삭제해주시면 됩니다.
# nvida삭제
sudo apt-get remove --purge '^nvidia-.*'
# cuda 삭제
sudo apt-get autoremove --purge 'cuda*'
2-1. cuda 설치
가장 먼저, cuda를 설치해줍니다. 이를 위해서 아래와 같은 명령어로 nvidia-cuda-toolkit을 설치해줍니다.
sudo apt install -y nvidia-cuda-toolkit
이렇게 명령어를 입력하면 cuda와 관련된 것들이 설치되기 시작합니다.
설치가 다 끝나면 nvcc -V 명령어로 cuda compiler driver가 나오는지 확인해봅니다.
nvcc -V
whereis cuda
또한, whereis cuda 명령어로 cuda 위치를 확인해줍니다. 뒤에 설치할 cuDNN 파일을 해당 경로에 옮겨줄 것이기 때문에 꼭 저 경로를 기억해둡시다. /usr/lib/cuda와 /usr/include/cuda.h 가 기본 경로로 잡히긴 할 것입니다.
그리고 지금 cuda가 10.1이 설치되었습니다. cuDNN 설치할 때 꼭 참고해야하므로 저 버전도 놓치지 말아주세요!
2-2. cudnn 설치
이제 cuDNN 설치를 진행합니다. 저는 ubuntu 20.04 LTS 환경이며 Telsa T4 gpu입니다. 이 환경에서는 위에서 본 것과 같이 cuda가 10.1이 설치되었습니다.
( 다시 한번 더 말씀드리지만, G3, P3, P2 장비 전부 동일했습니다!!! )
그리고 해당 버전에서는 cuDNN이 7.6.5가 동작됩니다. 이는 제가 참고에 올려드린 tensorflow gpu 환경 테스트 (https://www.tensorflow.org/install/source?hl=ko#linux)에 나와있으니 참고해주세요!
nvidia developer에 가서 해당 cudnn을 받습니다. 해당 파일을 다운 받으려면 nvidia 회원가입 등을 해야하는 번거로움이 있을 수도 있습니다. 이렇게 다운로드 받은 cudnn을 압축해제합니다.
- tar -xvzf cudnn-10.1-linux-x64-v7.6.5.32.tgz
압축을 풀면 파일들이 나오는데요. 이 파일들을 아까 whereis cuda로 봤던 그 경로에 복사해줍니다. cp 명령어로 cudnn.h와 libcudnn* 파일들을 복사해주고 권한을 설정해줍니다.
sudo cp cuda/include/cudnn.h /usr/lib/cuda/include/
sudo cp cuda/lib64/libcudnn* /usr/lib/cuda/lib64/
sudo chmod a+r /usr/lib/cuda/include/cudnn.h
sudo chmod a+r /usr/lib/cuda/lib64/libcudnn*
이후 path 설정을 해줍니다. bashrc 파일에 가서 아래와 같은 경로를 추가해주고 bashrc를 다시 활성화시켜 줍니다.
# bashrc 파일을 열고
sudo vi ~/.bashrc
# 아래와 같은 내용을 아까 anaconda path 아래에 추가
export LD_LIBRARY_PATH=/usr/lib/cuda/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/lib/cuda/include:$LD_LIBRARY_PATH
# 저장 후 종료
# bashrc activate
. set_env.sh
혹은 source set_env.sh
2-3. nvidia driver 설치
이제 nvidia driver를 설치해줍니다. 굳이 설치 안해주셔도 되지만, nvidia-smi 명령어 등이 동작되기 때문에 해주시면 여러모로 편리합니다. 먼저, 아래와 같은 명령어로 ubuntu-drivers-common을 설치해줍니다. 이게 설치되어 있어야 ubuntu-drivers 명령어가 동작이 되고 어떤 nvidia driver를 설치해야 할 지 확인할 수 있습니다.
#설치
sudo apt-get -y install ubuntu-drivers-common
# 명령어 입력
ubuntu-drivers devices
이렇게 하면 nvidia-driver 목록이 나오게 되는데 이 중 recommended로 되어 있는 것을 설치해주시면 됩니다. 해당 nvidia driver를 설치하면 nvidia-smi 명령어가 동작되고 nvidia 관련 옵션을 확인할 수 있습니다.
# nvidia driver 설치
sudo apt install -y nvidia-driver-470
# 재부팅!
sudo reboot
재부팅까지 완료하고 나면 아래와 같은 명령어로 nvidia gpu 옵션을 확인할 수 있습니다.
- nvidia-smi
참고로 여기서는 cuda version이 11.4라고 나오는데 권장 cuda를 설치 했을 때 (nvcc -V)는 10.1로 설치 되어 있음을 확인할 수 있습니다.
10.1로 설치되어 있는 것이므로 이렇게 확인하시면 됩니다.
2-4. 설치 점검 및 확인
자! 이렇게 하면 ubnutu 20.04 LTS 환경 및 Telsa T4 GPU 환경에 cuda 설치 및 cuDNN 설치가 끝났습니다. 그리고 Anaconda 설치 후 tensorflow도 설치하였습니다. 이제 gpu가 잘 동작되는지 확인해봐야겠죠?
아래와 같은 명령어 들을 통해 GPU가 나오는 것을 확인할 수 있습니다.
from tensorflow.python.client import device_lib
import tensorflow as tf
gpus = tf.config.experimental.list_physical_devices('GPU')
print(gpus)
print(device_lib.list_local_devices())
print("GPU Available: ", tf.test.is_gpu_available())
이렇게 하면 TRUE가 나오는 것을 확인할 수 있으며 gpu device list 또한 확인됨을 확인할 수 있습니다.
( 참고로 tensorflow 2.X 부터는 gpu 버전이 따로 없습니다. 통합되어서 설치됩니다. )
마무리
이번 포스팅에서는 ubuntu 20.04 lts 환경에서 tensorflow gpu 설치 방법에 대해서 알아보았습니다.
도움이 되시길 바랍니다.
'Data Engineering 및 Infra' 카테고리의 다른 글
Apache 에어플로우(Airflow) 시작하기 - Airflow란?, Airflow 설치 및 기본 예제 (16) | 2022.02.06 |
---|---|
Python MLflow example 정리 - machine learning lifecycle 관리 (2) | 2021.10.11 |
BentoML 예제 정리 - 딥러닝(tensorflow) 모델 적용, docker image 생성, 다중 predict (2) | 2021.09.13 |
MLflow란? 머신러닝 라이프 사이클을 관리하는 mlflow 사용법 및 예제 (8) | 2021.08.16 |
BentoML이란? 사용법과 example 정리 - 머신러닝(machine learning) 모델을 API로 serving하기 (0) | 2021.08.02 |