728x90
반응형

리눅스 서버에 CUDA 세팅하기

 이전 포스트에서 CUDA 세팅에 필요한 CUDA와 cuDNN을 다운로드하였다. 이번 포스트에서는 CUDA를 설치해보도록 하겠다.

 

 

 

 

0. 다른 버전의 CUDA가 설치되어 있는지 확인하기

  • 현재 CUDA를 세팅하는 환경은 wsl2를 이용하여 만들어진 가상 환경이기 때문에 엔비디아 드라이버가 설치되어 CUDA가 꼬일 문제가 없지만, 윈도우 PC나 사용하려는 텐서플로우 버전과 기존 서버에 세팅된 CUDA 버전이 다른 경우, 기존 NVIDIA 파일과 CUDA를 제거해줘야 한다.
  • 현재 환경에 엔비디아 드라이버가 설치되어 있다면, 다음과 같은 방법으로 그래픽 드라이버 정보를 얻을 수 있다.
nvidia-smi
nvcc -V
  • CUDA가 설치되어 있다면, nvcc -V를 확인하면 된다.
  • 경우에 따라 nvcc -V에서 출력되는 쿠다와 nvidia-smi에서 출력되는 CUDA Version이 다른 경우가 있는데, 이는 CUDA가 꼬여 있는 것일 수 있기 때문에 이후에 Tensorflow 사용 시, 충돌이 일어날 수 있다. 때문에 CUDA 파일과 nvidia 관련 파일을 완전히 제거하여, CUDA를 맞춰주는 것이 좋다.
  • nvidia-smi 입력 시 출력되는 화면은 다음과 같다.

  • nvcc -V 입력 시 출력되는 화면은 다음과 같다.

  • 엔비디아 드라이버와 쿠다를 제거하는 방법은 다음과 같다.
# nvidia driver 삭제
sudo apt-get remove --purge '^nvidia-.*'

# CUDA 삭제
sudo apt-get --purge remove 'cuda*'
sudo apt-get autoremove --purge 'cuda*'

# CUDA 남은 파일 삭제
sudo rm -rf /usr/local/cuda
sudo rm -rf /usr/local/cuda-10.1
  • 엔비디아 드라이버와 쿠다 제거 후, 성공적으로 제거되었는지 확인하기 위해, nvidia-smi, nvcc -V와 같은 코드를 입력하여, 제대로 제거되었는지 확인하자.
  • 그러나, CUDA가 여러 개 깔려 있거나, 여러 개의 GPU 서버의 GPU가 연결 되어 있는 경우, 위 방법대로 제거하더라도, nvidia-smi나 nvcc -V가 다시 출력될 수 있다.

 

 

 

 

1. CUDA 설치하기

  • 이전 포스트에서 다운로드하였던 CUDA 파일을 실행하기 전에 권한을 부여하도록 하자.
  • 이전 포스트까지 Download 디렉터리에 받았던 파일들은 다음과 같다.

  • 위 사진에서 cuda_11.0.2_450.51.05_linux.run에 chmod를 사용하여, 777 권한을 부여하자.
chmod 777 cuda_11.0.2_450.51.05_linux.run
ll

  • 이제 cuda_11.0.2_450.51.05_linux.run을 실행하여 CUDA를 설치하도록 하자.
./cuda_11.0.2_450.51.05_linux.run

 

gcc 에러 발생

  • CUDA 설치 시, 다음과 같은 에러가 뜰 수도 있다.
  • Failed to verify gcc version. See log at /tmp/cuda-installer.log for details.
  • 관련 로그를 확인하기 위해 위 에러가 말해준 위치로 이동해보자.

  • 위 내용을 보니, gcc 가 없어서 발생한 문제임을 알 수 있다.
  • gcc를 설치하여, 위 문제를 해결해줘야 한다.
  • 위 문제가 뜬 경우 apt를 비롯한 가장 기본적인 세팅도 안되어 있는 것이므로, 가능한 위와 같은 상황에선 인터넷을 열어달라 하여, 위와 같은 기본적인 세팅은 해놓는 것을 추천한다.
  • 위 문제의 해결 방안은 다음과 같다.
sudo apt update
sudo apt install build-essential
sudo apt-get install manpages-dev
  • 위 코드는 sudo 권한이 반드시 필요하기 때문에 지금까지와 달리 꼭 sudo를 입력해주도록 하자.
  • 기본적으로 gcc는 7.5.0으로 설치되므로, 버전도 업그레이드하도록 하자.
sudo apt -y install gcc-8 g++-8
sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-8 8
sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-8 8

 

CUDA 설치 재진행

  • 다시 CUDA 설치를 진행하도록 하겠다.
./cuda_11.0.2_450.51.05_linux.run

  • accept를 입력하여 진행하자

  • 위/아래 방향키로 이동, 왼쪽/오른쪽 방향키로 +가 있는 영역 세부 표시, 엔터 입력 시 X 체크 또는 해제를 실시할 수 있다.
  • 지금 같이 CUDA, cuDNN 관련 사항이 완전히 없는 경우, 모두 체크하여 설치를 진행하도록 하자.
  • Install을 눌러, 계속 진행해보자.

 

컴파일러 에러 발생

  • 이번에는 컴파일러 버전이 맞지 않아, 컴파일러 에러가 발생하였다.
sudo apt-get install build-essential

 

경로 문제

  • 위 명령어를 입력하여, 해당 오류 관련 패키지를 설치해주자.
  • 이번에는 다음과 같은 에러가 등장하였다.

  • 특정 디렉터리가 존재하지 않아 발생하는 에러로 보인다.
  • sudo 권한을 주어 설치하도록 하자.
sudo ./cuda_11.0.2_450.51.05_linux.run

  • 성공적으로 CUDA를 설치하였다.
  • Toolkit과 Cuda Samples가 설치된 위치를 볼 수 있으며, 이제 cuda를 사용하기 위해 PATH 설정을 하도록 하자.

 

CUDA PATH 설정

  • CUDA를 사용하기 위해선 전역 변수를 수정해줘야 한다.
  • 만약 우분투 사용자마다 다른 CUDA를 사용하고자 하는 경우, 사용자의 home 디렉터리의 .bachrc를 수정하면 된다.
cd
sudo vim /etc/bash.bashrc
  • cd를 입력하여 최초 경로로 돌아가자.
  • 위 명령어를 입력하여 출력된 화면의 맨 마지막에 위 CUDA 설치 후, 출력된 CUDA PATH를 다음과 같이 설정해주도록 하자.
export PATH=/usr/local/cuda-11.0/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.0/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.0/extras/CUPTI/lib64:$LD_LIBRARY_PATH

  • 위 입력된 사항을 esc > :wq 를 입력하여 저장하도록 하자.
  • PATH 지정 후, 위 사항을 터미널에 바로 적용해주도록 하자.
source /etc/bash.bashrc
  • nvcc -V를 입력하여 CUDA가 성공적으로 설치된 것을 확인하도록 하자.
nvcc -V

  • 성공적으로 CUDA가 설정된 것을 볼 수 있다.

 

 

 

 

2. cuDNN 설치

  • cuDNN 설치는 cuDNN 폴더의 압축해제 후, 그 안에 있는 파일들을 이전에 설치하였던 CUDA 파일의 안에 복사해서 옮겨줘야 한다.
  • 그러므로, 이전에 cuda를 설치하였던 경로를 먼저 보도록 하자.
whereis cuda

  • Download 디렉터리로 돌아가 이전에 다운로드하였던 cuDNN 파일의 압축을 풀도록 하자.
cd Download
ll
tar -xvf cudnn-11.0-linux-x64-v8.0.5.39.tgz

  • 압축 해제 후, 생성된 파일을 확인해보자
ll
cd cuda
ll

  • cuda 디렉터리 안에 있는 include, lib64 폴더의 하위 파일들을 이전에 설치하였던 cuda의 include와 lib64 폴더로 복사하면 된다.
  • 이전에 확인했던 cuda의 경로로 include의 하위 파일들 lib64 하위 파일들을 각각 해당하는 디렉터리로 이동시키자
sudo cp include/cudnn* /usr/local/cuda-11.0/include
sudo cp lib64/libcudnn* /usr/local/cuda-11.0/lib64/
sudo chmod a+r /usr/local/cuda-11.0/lib64/libcudnn*
  • cuDNN 설치가 제대로 되었는지 확인해보자
cat /usr/local/cuda-11.0/include/cudnn_version.h | grep CUDNN_MAJOR -A 2

  • 위 내용을 보면 cudnn 8.0.5가 성공적으로 설치된 것을 볼 수 있다.
728x90
반응형
728x90
반응형

 

리눅스 서버에 가상 환경 활성화와 주피터 노트북 세팅

 지금까지 파이썬 기반 오프라인 분석 서버 구축을 위한 밑 작업을 해보았다. 이번 포스트에서는 오프라인 우분투 환경에 에 이전에 만들었던 가상 환경을 활성화시키고, 주피터 노트북을 세팅해보도록 하겠다.

 

 

 

 

0. 오프라인 우분투 환경 준비

  • 해당 포스트는 분석 환경 구축의 대상이 되는 서버가 오프라인, OS가 우분투이며, 우분투는 이미 설치되어 있다는 전제하에 진행하도록 하겠다.
  • 이를 실습하고 싶으나, 오프라인 우분투 서버가 존재하지 않다면, 가상 머신을 이용해 이와 유사한 환경을 만들어보겠다.
  • 가상 머신은 wsl2를 사용하며, 우분투 버전은 18.04이다.
  • wsl2 사용 방법은 이전 포스트인 "Python 리눅스 서버에 분석 환경 구축1 - 가상머신과 아나콘다 설치"를 참고하도록 하겠다.
  • 지금까지의 포스팅을 따라온 사람이라면, 기존에 설치하였던 우분투를 제거하고, 재설치하여 아나콘다가 깔려있지 않은 환경을 만들어주자.
  • 아래와 같이 아무것도 설치되지 않은 상태에서 진행하도록 하겠다.

 

 

 

 

 

1. 아나콘다 설치 및 가상 환경 활성화 준비

  • 이전 포스트에서 외부로 옮겨놓았던, 리눅스 아나콘다 설치 파일과 가상 환경 압축 파일을 리눅스 서버로 옮기자.
  • 옮기는 방법은 USB를 이용하거나, 파일질라(FileZilla) 등을 이용해서 이동시키도록 하자.
  • 이동시키는 가장 쉬운 방법은, Local PC와 리눅스 서버가 sftp 포트(22)가 뚫려 있다는 상태에서, 파일질라를 사용하는 것이다.
  • 해당 포스트는 위 과정이 해결되어 있다는 전제하에 진행하도록 하겠다.
  • 추후 필요에 따라 위 과정을 다뤄보도록 하겠다.
# Download 디렉토리 생성
mkdir Download
  • Donwload 디렉토리를 만들고, 이전에 준비한 파일들을 모두 이동시키자.
  • 이번 포스트는 wsl2 환경에서 진행하므로, 상황이 약간씩 다르지만, 전체적인 흐름은 동일하다.
# wsl2 환경에서 가상 환경 압축 파일과 아나콘다 설치 파일 이동
cd /mnt/c/Anal_Env_Set
mv ./Anaconda3-2020.11-Linux-x86_64.sh /home/gooopy123/Download
mv ./New_Env.tar /home/gooopy123/Download
# Download 디렉토리에 파일이 정상적으로 이동되었는지 확인
cd
cd Download
ll

 

1.1. 아나콘다 설치

 

1.2. 가상 환경 이동 및 압축 풀기

  • 아나콘다가 설치 완료되었다는 전제하에, 이전 포스트에서 만들었던 가상 환경 압축 파일을 아나콘다 디렉토리로 이동시켜보자.
# 가상 환경 압축파일 이동
mv New_Env.tar /home/gooopy123/anaconda3/envs
cd /home/gooopy123/anaconda3/envs
ll

  • 이동된 New_Env.tar 파일의 압축을 풀어보도록 하자.
# 가상 환경 압축 파일 압축 해제
tar -xvf New_Env.tar
  • tar -xvf 압축파일.tar: "압축파일.tar"의 압축을 푼다.
  • 가상 환경 압축을 해제 후, 해당 압축 파일을 인식하는지 확인해보자.
# 가상 환경 목록 확인
conda env list

  • 위와 같이 성공적으로 이전에 만들었던 가상 환경이 생성된 것을 확인할 수 있다.
  • 가상 환경의 압축파일은 용량만 차지하므로, 이제 삭제하도록 하자.
# 가상 환경 압축 파일 제거
rm New_Env.tar

 

 

 

 

 

2. 주피터 노트북 설정

  • 가상 환경을 활성화하기 전에 반드시 해줘야 하는 것이 Base 환경에서 주피터 노트북을 설치하고, 설정하는 것이다.
  • 주피터 노트북 설치는 반드시 Base 환경에서 해주어야 한다.
  • Base 환경에서 주피터 노트북 설치는 pip install 사용 시, 오프라인에서도 진행 가능하다.
# 주피터 노트북 설치
pip install jupyter notebook

# 주피터 노트북 설정 파일 생성
jupyter-notebook --generate-config
  • 주피터 노트북 설치 후, 주피터 노트북 설정 파일을 생성하도록 하자.

  • 위 과정 진행 시, 위와 같이 .jupyter/ 디렉토리가 생성된 것을 확인할 수 있다.

 

2.1. 주피터 노트북 비밀번호 생성

  • 주피터 노트북 설정을 손대기 전에 주피터 노트북에서 사용할, 암호화된 비밀번호를 생성하기 위해 ipython을 실행하자.
# ipython 실행
ipython

  • 주피터 노트북 설치 시, ipython이 같이 설치되는데, ipython은 주피터 노트북의 셀과 동일한 기능을 수행한다.
# 암호화된 비밀 번호 생성
from notebook.auth import security
security.passwd()

  • 위와 같이 비밀 번호를 생성하면, 암호화된 비밀번호를 출력하는데, 이를 반드시 어딘가에 복사해놓도록 하자.
# ipython 빠져나오기
exit()
  • exit()를 입력하여 ipython에서 터미널로 빠져나오자.

 

2.2. 주피터 노트북 워킹 디렉토리 생성

  • 주피터 노트북을 설정하기 앞서, 주피터 노트북의 워킹 디렉토리를 미리 만들어놓자.
mkdir Analysis
cd Analysis

# 현 주소 확인
pwd

  • 주피터 노트북의 워킹 디렉토리로 사용할 디렉토리의 주소도 복사해놓도록 하자.

 

2.3. 주피터 노트북 설정

  • 아까 생성하였던, 주피터 노트북 설정 파일이 있는 경로로 이동하고, 설정 파일을 실행해보자.
# 경로 이동
cd ~/.jupyter

# 주피터 노트북 설정 파일 실행
vi jupyter_notebook_config.py

  • 위 코드 실행 시, 위와 같은 파란색 글로 가득 찬 화면이 뜨게 된다.
  • 여기서 특정 명령어를 입력하면, 주피터 노트북에 해당 기능이 반영된다.
  • 설정할 수 있는 유용한 몇 가지 기능을 소개하면 다음과 같다.
# 필수
c = get_config()
c.JupyterApp.config_file_name = 'jupyter_notebook_config.py'

# 접속 허용 ip
c.NotebookApp.allow_origin = '*' # 접속 허용 ip로 *는 전체 허용을 의미한다.

# 서버 ip
c.NotebookApp.ip = 'xxx.xx.xxx.xxx'

# 주피터 노트북 실행 시, 브라우저로 열지(True), url을 출력할지 정한다(False).
c.NotebookApp.open_browser = False

# 주피터 노트북 비밀번호
c.NotebookApp.password = u'아까 복사해놓은 암호화된 비밀번호를 넣어주자'

# 주피터 노트북 포트 설정
c.NotebookApp.port = 8888

# 주피터 노트북 홈 디렉토리 설정
c.NotebookApp.notebook_dir = '아까 복사해놓은 홈 디렉토리 주소를 넣어주자'
  • 위 코드 중 필요한 부분을 선택하여, 넣어주도록 하자.
  • 위 코드를 보기 쉽도록 위 파란 화면 최상단에 넣어주도록 하자.
  • 위 상태에서 i를 누르면 INSERT 모드로 바뀌며, 수정 가능해진다.

  • 필요한 코드를 전부 입력한 후, esc를 누르고, shift + ; 키를 누르면, 위 화면에서 빠져나올 수 있는 키를 입력할 수 있게 된다.
  • q를 입력 후 enter를 치면 현 상태를 저장하지 않고 그냥 빠져나오며, wq를 입력 후 enter를 치면 현 상태를 저장하고 빠져나온다.

 

2.4. 주피터 노트북 실행

  • 위 과정까지 마친 후, 터미널에 jupyter notebook을 입력하면, jupyter notebook으로 이동할 수 있는 url이 나온다.
  • 위 방법을 통해, 특정 url과 port를 설정하면, 해당 주소를 즐겨찾기 설정하여, 쉽게 이동할 수 있다.
# 주피터 노트북 실행
jupyter notebook

  • 해당 포스트는 서버가 아닌, Local PC에 분석 환경을 구축하였기 때문에, IP주소를 따로 입력하지 않아도 괜찮다.
    (위 화면이 뜨지 않는다면, 무언가 오타를 내지 않았는지 꼭 확인해보자)
  • 출력된 위 http:localhost:8892/를 복사하여, 크롬에 붙여 넣어 보자.
  • 그러면, 우리에게 익숙한 주피터 노트북 화면이 출력된다.

  • 아까 만들었던 비밀 번호를 입력하고 이동해보자

  • 이제 우리에게 익숙한 주피터 노트북을 우분투 환경에서 사용할 수 있다.

 

 

 

 

 

3. 가상 환경 주피터 노트북에 연결하기

  • 아까 실행했던 주피터 노트북을 종료해보자
  • 주피터 노트북 종료는 브라우저의 우측 상단에서 Quit를 클릭하거나, 터미널에서 ctrl+z를 입력하여 중지시키면 된다.
  • ctrl+z는 리눅스에서 특정 기능이 수행 중일 때, 사용하면 그 기능을 중지시킬 수 있다.
  • 윈도우에서는 가상 환경 생성 시, 해당하는 주피터 노트북 실행 파일과 커널이 따로 생성되므로, 실행하기 쉬웠으나, 우분투에서는 가상 환경 커널을 추가하여 가상 환경을 사용한다.
  • 먼저 사용할 가상 머신을 활성화 하자.
# 가상 환경 활성화
conda activate New_Env

# 가상 환경 커널 추가
python -m ipykernel install --user --name=New_Env --display-name="New_E_Kernel"

# base로 환경 변경
conda activate base

# 주피터 노트북 실행
jupyter notebook
  • --user --name 뒤에는 연결하고자 하는 가상 환경의 이름을 넣으면 된다.
  • --display-name 뒤에는 주피터 노트북에서 출력하고 싶은 커널 이름을 넣어주면 된다.

  • 다시 주피터 노트북을 실행하고, 방금 만들었던 New_E_Kernel 커널로 파이썬 쉘을 만들어보자.

  • 주피터 노트북을 실행하여 New를 클릭해보면 New_E_Kernel라는 추가한 커널이 생긴 것을 볼 수 있다.
  • 파이썬 파일을 만들어보자.

  • Kernel의 Change kernel에 New_E_Kernel이 추가된 것도 볼 수 있다.
  • 이를 이용해서 커널도 얼마든지 바꿀 수 있다.
  • 적용되어 있는 커널은 우측 상단에서 확인할 수 있다.

  • 커널 변경 시, 아나콘다에서 기본적으로 제공하지 않는 패키지인 tensorflow가 성공적으로 가동되는 것을 볼 수 있다.

 

3.1. 가상 환경 커널 제거

  • 추가로 생성된 가상 환경 커널을 삭제하고 싶다면 다음과 같이 하면 된다.
# 적용되어 있는 가상환경 커널 목록을 확인한다.
jupyter kernelspec list

# 적용되어 있는 가상환경 커널의 적용을 해제한다.
jupyter kernelspec uninstall 가상환경이름

# 가상환경 삭제
conda env remove -n 가상환경이름
  • 가상 환경 커널 추가 시, 표시되는 커널의 이름과 가상 환경의 이름이 일치하지 않을 수 있으므로, kernelspec list를 확인하는 것이 좋다
  • 커널을 제거하지 않더라도 가상 환경은 삭제 가능하다.

 

 

 

 지금까지 우분투 환경에서 주피터 노트북을 사용하는 방법에 대해 알아보았다. 지금 상태에서도 데이터 분석을 진행할 수는 있으나, 현재 GPU 설정을 하지는 않은 상태기 때문에, CPU만 사용해서 분석을 진행할 수 있다.

 다음 포스트에서는 우분투 환경에 CUDA를 세팅하는 방법에 대해 알아보도록 하자.

728x90
반응형

+ Recent posts