코딩 기록

우분투 아나콘다 주피터 텐서플로

JPaul 2022. 1. 21. 16:12

이번에는 우분투 아나콘다 환경에서 주피터 노트북 서버를 설치하는 방법을 정리해보자

저번과 동일하게 nvidia 그래픽 카드를 사용하는 환경을 기준이다.

 

우분투의 경우에는 그래픽 드라이버와 cuda toolkit 을 설치하는 과정에서 문제가 많이 생기는데

보통 우분투만 설치된 클린한 환경이라고 생각하지만 이미 설치되어 사용하고 있는 패키지들에 차이가 있기 때문이다

게다가 로컬로 접속해 있는 환경인지 원격 환경인지에 따라서도 조금 다르다.

 

가장 간단한 방법을 기준으로 정리해 보도록 하자.

 

리눅스용 cuda-toolkit 스크립트를 받아서 설치할 경우

해당 cuda 버전에 권장되는 드라이버를 같이 설치하도록 되어 있다.

 

그러나 그렇게 할 경우 잘 설치 되지 않는 경우가 많다. 

우분투의 경우 아래의 명령어로 권장 드라이버를 설치하는 것이 좋다. 

 

sudo ubuntu-drivers autoinstall

 

가상 머신일 경우 아래 명령어로 권장 그래픽 카드 드라이버를 확인 하고

ubuntu-drivers devices

 

apt 저장소를 추가해서 apt로 설치하는 방법이다. 이것도 괜찮다.

sudo add-apt-repository ppa:graphics-drivers/ppa
sudo apt update
sudo apt install nvidia-driver-xxx

 

그래픽카드와 그래픽카드 권장 드라이버를 확인 하셨으면 다음 명령어를 입력 해줍니다.

그리고 만약 다른 방법으로 그래픽 드라이버를 먼저 설치한 경우 아래 명령어로 삭제한 후에

위 명령어를 이용해서 다시 설치해 주자

 

sudo apt-get remove --purge *nvidia*

sudo apt-get autoremove

sudo apt-get autoclean

 

만약 cuda 도 재설치 해야할 경우 아래 명령어로 삭제하자

 

sudo rm -rf /usr/local/cuda*

sudo apt-get --purge remove 'cuda*'

sudo apt-get autoremove --purege 'cuda*'

 

드라이버 재설치가 생각보다 매우 귀찮기 때문에 주의하자.

드라이서 설치가 끝났다면 Windows의 소스에서 빌드  |  TensorFlow 링크를 참고해서

설치할 텐서플로와 cuda toolkit 버전을 고른다.

 

그리고 다운로드 링크에서 사용할 우분투의 버전에 적절한 인스톨러를 다운로드한다.

https://developer.nvidia.com/cuda-11.2.0-download-archive?target_os=Linux&target_arch=x86_64&target_distro=Ubuntu&target_version=2004 

 

installer type 세가지가 나오는데 어떤걸 받아도 상관은 없지만 나는

runfile(local)을 이용해서 설치했다

 

예를 들어 우분투 20.04는 아래 코드를 이용해서 설치할 수 있다.

wget https://developer.download.nvidia.com/compute/cuda/11.2.0/local_installers/cuda_11.2.0_460.27.04_linux.run

sudo sh cuda_11.2.0_460.27.04_linux.run

 

설치 스크립트가 실행되면 설치항목을 이미 드라이버가 설치되어있으니 드라이버를 삭제 후에 다시 설치하는게 어떻냐고 물어보는데 그냥 무시하고 설치한다고 한뒤에 드라이버는 빼고 설치하면 된다. 매우 중요함 ㅎ

 

환경 변수 설청을 해준다. 아래를 입력해서 파일을 열고

nano /etc/profile

 

아래를 맨 밑에 입력한다.

export PATH=$PATH:/usr/local/cuda-11.2/bin

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda-11.2/lib64

export CUDADIR=/usr/local/cuda-11.2

 

환경변수 적용.

source /etc/profile

 

버전이나 위치는 알맞해 수정해주면 된다.

주의할 것이 있는데 주피터 노트북을 서비스로 실행할 경우 해당 환경변수를 인식하지 못해서

gpu가 안잡힌다. 이 부분은 따로 설정을 해줘야 하는데 아래에서 다시 언급하겠다.

 

 

cudnn 도 설치해야 하는데 이건 nvidia 계정이 있어야 받을 수 있다.

https://developer.nvidia.com/cudnn

매우 매우 귀찮지만 아무튼 가입하고 다운 받자

 

아래 코드를 입력해서 압축해제 하고 파일을 복사해준다. 어쩌다 11.3을 받았네.

아무튼 다운받은 파일을 압축해제 하면된다. 아오

 

tar xvzf cudnn-11.3-linux-x64-v8.2.1.32.tgz sudo cp cuda/include/cudnn* /usr/local/cuda-11.3/include

sudo cp cuda/lib64/libcudnn* /usr/local/cuda-11.3/lib64

sudo chmod a+r /usr/local/cuda-11.3/include/cudnn.h /usr/local/cuda-11.3/lib64/libcudnn*

 

버전와 설치 위치는 각자 맞게 수정하면 된다.

 

이제 아나콘다를 설치하자. 이부분은 윈도우랑 똑같다.

아래는 복붙이다.

 

Anaconda | Individual Edition

 

그리고 아나콘다 콘솔을 열어서 가상환경을 하나 만들어 주자.

예를 들어 가상환경 이름을 tf27, 파이썬 버젼을 3.8로 한다면

 

conda create -n tf27 python=3.8

 

이렇게 하면 된다. 뭔가 주루룩 설치가 될것이다.

만들어진 가상환경을 활성화 해주자.

 

conda activate tf27

 

적당히 필요한 패키지들을 설치해준다.

 

pip install pymysql pandas numpy itertools glob matplotlib PIL scipy

 

텐서플로 버젼은 아래 링크를 참고해서 설치하자. 나는 2.7을 설치했다.

Windows의 소스에서 빌드  |  TensorFlow

 

pip install tensorflow@2.7 jupyter notebook

 

주피터 노트북의 설정은 윈도우나 우분투나 비슷하다.

아래를 입력해서 설정파일을 생성한다. 

 

jupyter notebook --generate-config

 

파일을 열어서 설정을 수정하면 된다.

nano $HOME/.jupyter/jupyter_notebook_config.py

원래는 앞의 #을 없애고 수정해야 하지만 수정하는게 귀찮으면

그냥 맨 밑에 붙여넣고 저장해도 된다.

 

c.NotebookApp.ip = 'xxx.xxx.xxx.xxx'
c.NotebookApp.password = '~~~~~~~~~~~~~~'
c.NotebookApp.password_required = True
c.NotebookApp.port = 원하는포트번호

c.NotebookApp.open_browser = False

 

외부 접속 보안을 위해서 ip설정, 비밀번호 설정, 포트개방, 포트포워딩 등을 해야한다.

 

위의 xxx.xxx.xxx.xxx 부분은 ifconfig를 입력해서 현재 사용중인 내부 ip를 확인해서 넣자.

윈도우에서는 ipconfig 지만 리눅스에서는 ifconfig (interface config) 라는 명령어를 사용한다.

 

해쉬드 비밀번호를 생성해서 위의 ~~~~ 위치에 붙여넣고 저장하면 된다.

이번에는 파이썬을 실행시켜서 해본다. 터미널에서 python을 입력하면 파이썬의 repl 이실행된다.

여기서 파이썬 코드를 실행해서 해쉬드 패스워드를 얻을 수 있다.

아래를 입력하면

 

python

커서 모양이 >>> 으로 바뀌면서 파이썬 코드를 실행할 준비가 된다. 아래를 입력한다.

from notebook.auth import passwd

passwd()

 

그러면 아래가 뜨는데 비밀번호를 입력하고 확인하면 아래 해쉬드 패스워드가 뜬다.

Enter password: 비밀번호 입력

Verify password:  비밀번호 확인

그걸 복사해서 위 설정파일의 비밀번호에 붙여넣고 저장하면 된다. 따옴표만 주의하자.

 

위의 설정파일에 입력한 원하는포트번호 를 개방하자. 

iptable 명령어를 써도 되지만 ufw 를 쓰는게 훨씬 간단하다.

설치가 안되어 있으면 sudo apt-get install ufw 로 설치하고

활성화가 안되어 있으면 sudo ufw enable 로 활성화 하면 된다.

아래를 입력하면 포트가 개방된다.

 

sudo ufw allow 원하는포트번호

 

포트 개방후에는 해당 ip와 포트번호로 라우터에서 포트포워딩도 해주자.

 

이제 서비스를 설정해야 한다.

아래를 입력해서 서비스 파일을 하나 생성한다.

sudo nano /etc/systemd/system/jupyter.service

 

파일 내용은 아래처럼 채우면되는데 빨간색으로 써진 tf27이라는건 사용할 아나콘다의 가상환경 이름이다.

나는 tf27이라는 이름으로 가상환경을 만들었기 때문에 아래처럼 썼다.

계정명에는 os에서 사용하는 계정을 써준다.


[Unit]
Description=Jupyter Notebook Server
After=rc-local.service
[Service]
Type=simple
PIDFile=/run/jupyter.pid

User=계정명
ExecStart=/bin/bash -c ". /home/jplee/anaconda3/bin/activate tf27;jupyter-notebook"
WorkingDirectory=/home/jplee/notebook
Restart=on-failure
RestartSec=1
[Install]
WantedBy=multi-user.target

 

서비스를 활성화 하자.

sudo systemctl enable jupyter

 

서비스를 활성화 하면 부팅시에 자동으로 jupyter notebook이 실행된다.

서비스를 바로 실행하고 싶으면 sudo systemctl start jupyter 해주면 된다.

 

서비스로 jupyter notebook의 커널에서 환경변수를 수정해야 한다.

아래 명령어를 통해서 파이썬 커널의 위치를 확인할 수 있다.

 

jupyter kernelspec list

 

해당 경로에 kernel.json 파일을 열어서 수정한다.

"env": {
        "PATH":"/home/계정명/anaconda3/envs/tf27/bin:/home/계정명/anaconda3/condabin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/local/cuda-11.2/bin",
        "LD_LIBRARY_PATH":"/usr/local/cuda-11.2/lib64:/usr/local/cuda-11.2/extras/CUPTI/lib64:/usr/local/cuda/lib64:/usr/local/cuda/include"

        "CUDADIR":"/usr/local/cuda-11.2"
        }

 

좀 지저분한데 env 라고 되어 있는 부분이 비어있는데 위처럼 환경변수를 추가해 주면된다.

ssl을 적용하고 싶으면 openssl 을 사용해서 키를 생성해서 jupyter_notebook_config.py 에 적용하면된다.

 

sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout $HOME/private.key -out $HOME/private.pem

 

$HOME 위치에 private.key 와 private.pem 가 생성이 된다.

다시 설정파일을 열어서 이 파일들을 등록하자.

 

nano $HOME/.jupyter/jupyter_notebook_config.py

 

c.NotebookApp.certfile = u'/home/계정명/private.pem'

c.NotebookApp.keyfile = u'/home/계정명/private.key'