chanyong's notepad
[Ubuntu(Linux)] 리눅스 서버 구축 2. CUDA 세팅, SSH 및 원격 데스크탑 부팅 설정(+2024/04/27 수정) 본문
[Ubuntu(Linux)] 리눅스 서버 구축 2. CUDA 세팅, SSH 및 원격 데스크탑 부팅 설정(+2024/04/27 수정)
chanyongp 2024. 3. 3. 23:35+2024/04/27
3-1 아래 코드 실행시 에러가 발생하였으며, 이를 해결하지 못했습니다.
기존에 CUDA가 깔려있다면 그걸로 계속 사용해주시길 권장드립니다.
1. TensorFlow 버전 확인 및 필요 CUDA, cuDNN 버전 확인
https://www.tensorflow.org/install/source
먼저 TensorFlow의 버전을 확인하고, 이에 적합한 버전의 CUDA, cuDNN을 설치해야 합니다.
예를 들어서, TensorFlow 버전이 2.13.1이면 CUDA : 11.8, cuDNN : 8.6을 설치해야 합니다.
2. CUDA, cuDNN 다운로드
https://developer.nvidia.com/cuda-toolkit-archive
위 사이트에 들어가서 적합한 버전의 CUDA를 클릭하고, 아래 사진처럼 버튼을 누른 뒤 맨 아래에 나오는 커맨드를 복사합니다.
https://developer.nvidia.com/rdp/cudnn-archive
위 사이트에 들어가서 적합한 버전의 cuDNN을 클릭합니다. 이때 설치한 CUDA의 버전도 고려합니다.
또한, 다운로드를 받으려면 NVIDIA의 계정이 필요하므로 미리 계정을 만들어 로그인한 뒤 진행합니다.
운영체제에 맞는 파일을 다운로드를 받으면 되고, 우분투, 리눅스 민트의 경우 리눅스용을 다운로드받아도 됩니다.
3. CUDA, cuDNN 세팅
아래 커맨드를 터미널에 입력하여 기존에 세팅된 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
설치에 앞서, 디렉터리에 파일들이 존재하는 지 확인하고, cuda에 chmod 777 권한을 부여합니다.
cd
chmod 777 cuda_11.8.0_520.61.05_linux.run
ll
#CUDA 설치(관리자 권한이 아니면 오류 발생)
sudo ./cuda_11.8.0_520.61.05_linux.run
3-1. ERROR : You appear to be running an X server; please exit X before installing.(주의)
sudo service lightdm stop // x server 중지
sudo init 3 // runlevel 3으로 조정
sudo ./cuda_10.2.89_440.33.01_linux.run // 설치 실행
<< 설치 완료 >>
sudo service lightdm start // x server 재시작
이때 재부팅 시 'Failed to start light display manager' 에러가 발생하는데, 아래 글에 나온 방식대로 해결하시면 됩니다.
https://yongchanyong.tistory.com/9
설치 후 CUDA PATH를 설정해줍니다.
cd
sudo vi /etc/bash.bashrc
#bash.bashrc
export PATH=/usr/local/cuda-11.8/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64:$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/extras/CUPTI/lib64:$LD_LIBRARY_PATH
#:wq!
#위 사항 터미널에 적용
source /etc/bash.bashrc
#설치 확인
nvcc -V
cuDNN 설치는 cuda 설치 경로를 확인한 다음 진행합니다.
whereis cuda
#cuda: /usr/local/cuda
cd
ll
tar -xvf cudnn-linux-x86_64-8.6.0.163_cuda11-archive.tar.xz
cd cudnn-linux-x86_64-8.6.0.163_cuda11-archive
sudo cp include/cudnn* /usr/local/cuda/include
sudo cp lib/libcudnn* /usr/local/cuda/lib64
sudo chmod a+r /usr/local/cuda/include/cudnn*.h /usr/local/cuda/lib64/libcudnn*
(base) chanyong@chanyong-B650M-PG-Riptide:~/cudnn-linux-x86_64-8.6.0.163_cuda11-archive$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_adv_train.so.8.6.0 /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_adv_train.so.8
(base) chanyong@chanyong-B650M-PG-Riptide:~/cudnn-linux-x86_64-8.6.0.163_cuda11-archive$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8.6.0 /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_ops_infer.so.8
(base) chanyong@chanyong-B650M-PG-Riptide:~/cudnn-linux-x86_64-8.6.0.163_cuda11-archive$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8.6.0 /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_train.so.8
(base) chanyong@chanyong-B650M-PG-Riptide:~/cudnn-linux-x86_64-8.6.0.163_cuda11-archive$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8.6.0 /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_adv_infer.so.8
(base) chanyong@chanyong-B650M-PG-Riptide:~/cudnn-linux-x86_64-8.6.0.163_cuda11-archive$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_ops_train.so.8.6.0 /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_ops_train.so.8
(base) chanyong@chanyong-B650M-PG-Riptide:~/cudnn-linux-x86_64-8.6.0.163_cuda11-archive$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8.6.0 /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8
(base) chanyong@chanyong-B650M-PG-Riptide:~/cudnn-linux-x86_64-8.6.0.163_cuda11-archive$ sudo ln -sf /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn.so.8.6.0 /usr/local/cuda-11.8/targets/x86_64-linux/lib/libcudnn.so.8
(base) chanyong@chanyong-B650M-PG-Riptide:~/cudnn-linux-x86_64-8.6.0.163_cuda11-archive$ ldconfig -N -v $(sed 's/:/ /' <<< $LD_LIBRARY_PATH) 2>/dev/null | grep libcudnn
libcudnn_ops_train.so.8 -> libcudnn_ops_train.so.8.6.0
libcudnn_cnn_infer.so.8 -> libcudnn_cnn_infer.so.8.6.0
libcudnn_adv_train.so.8 -> libcudnn_adv_train.so.8.6.0
libcudnn_cnn_train.so.8 -> libcudnn_cnn_train.so.8.6.0
libcudnn_adv_infer.so.8 -> libcudnn_adv_infer.so.8.6.0
libcudnn.so.8 -> libcudnn.so.8.6.0
libcudnn_ops_infer.so.8 -> libcudnn_ops_infer.so.8.6.0
4. SSH 및 원격 데스크탑 부팅 세팅
4-1. SSH
아래 커맨드를 입력하여 ssh를 다운로드하고 포트 번호 설정 및 방화벽 실행을 시켜줍니다.
sudo apt-get install openssh-server
sudo vi /etc/ssh/sshd_config
#sshd_config
Port {Port_number}
#원하는 숫자 4~5자리로 설정
#:wq!
# ssh 서비스 시작
sudo service ssh start
# ssh 서비스 종료
sudo service ssh stop
# ssh 서비스 상태
sudo service ssh status
# 방화벽 설정
sudo ufw status
sudo ufw enable
sudo ufw allow {Port_number}
sudo ufw reload
# 내부망에서 할당된 IP
hostname -I
참고로, 원격으로 접속이 안된다면 방화벽에서 해당 포트번호를 allow했는지 확인해보는 것도 좋습니다.
예를 들어, jupyter의 port number가 1111, ssh의 port number가 2222일 경우 아래 코드를 터미널에 입력시켜줘야 합니다!
sudo ufw allow 1111
sudo ufw allow 2222
이는 방화벽이 미리 정의된 보안 규칙에 기반한, 들어오고 나가는 네트워크 트래픽을 모니터링하고 제어하는 네트워크 보안 시스템이기 때문입니다. 방화벽은 일반적으로 신뢰할 수 있는 내부 네트워크, 신뢰할 수 없는 외부 네트워크 간의 장벽을 구성합니다. 따라서, 서로 다른 네트워크를 지나는 데이터를 허용하거나 거부하거나 검열, 수정합니다.
실행이 잘 되었는지는 sudo service ssh status를 통해 확인할 수 있습니다.
리눅스/맥 환경에서 SSH 서버에 접속하려면 다음을 입력하면 됩니다. 이때 username과 password는 서버의 사용자 이름과 비밀번호입니다.
ssh -p {Port_number} {username}@{IP}
4-1-1. 오류, pkgProblemResolver::Resolve가 망가졌습니다. 고정 패키지때문에 발생할 수도 있습니다.
openssh-server를 설치할 때 다음과 같은 에러가 발생할 수 있습니다.
이는 기존에 설치되어 있는 openssh-client와의 의존성과 관련된 문제로, 아래 코드를 입력함으로써 해결할 수 있습니다.
sudo apt purge openssh-client
sudo apt install openssh-server
4-2. WOL
WOL(Wake-on-LAN)은 네트워크 메시지를 보냄으로써 컴퓨터의 전원을 켜거나 절전 모드에서 깨어나게 하는 이더넷 컴퓨터 네트워킹 표준입니다.
이 메시지는 일반적으로 동일 근거리 통신망(LAN)의 다른 컴퓨터에서 실행되는 프로그램이 송신합니다.
이때 주의할 점은, WOL을 시행할 때 외부에서부터 공유기에 접속해야 한다는 점입니다.
기숙사를 예로 들자면, 공유기가 직접 외부LAN에 물려있는 게 아니라 공유기 위 스위치에서부터 포트포워딩이 되어 있습니다. 이런 경우 보안상 기숙사에서 접근을 불허합니다.
4-3. 스마트 플러그
원격 데스크탑 부팅을 위한 다른 방법으로는 스마트 플러그를 이용한 부팅 방법이 있습니다
4-4. 부팅 시 자동실행 서비스 등록
- 주피터 노트북
Jupyter notebook이나 JupyterLab을 사용할 때마다 서버를 열어야하는 번거로움이 있습니다.
원격에서 서버가 재부팅되거나 하는 경우에도 자동으로 실행되도록 서비스를 만드는 방법을 설명하겠습니다.
초기에는 conda 환경 안에 Jupyter를 설치하여 사용했으나 일부 라이브러리와의 충돌이 있어 기본 환경에 Jupyter를 설치하고 커널을 추가하였으며, 환경변수 등의 문제가 있어 다음 명령어로 사용하였습니다.
sudo nano /etc/systemd/system/jupyter.service
이후 nano에서 다음과 같이 입력합니다. 이때 CONFIG_PATH와 DIRECTORY는 /.jupyter로 해주시면 됩니다.
[Unit]
Description=Jupyter Server
[Service]
User=<USERNAME>
ExecStart=/bin/bash -i -c "jupyter-lab --allow-root --config=<CONFIG_PATH>"
WorkingDirectory=<DIRECTORY>
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable jupyter.service
sudo systemctl start jupyter.service
sudo systemctl status jupyter.service
제대로 작동한다면 맨 마지막 명령어를 실행시켰을 때 다음과 같은 화면이 출력됩니다.
- ssh
ssh도 마찬가지로 원격에서 서버가 재부팅되거나 하는 경우에도 자동으로 실행되도록 서비스를 만드는 방법을 설명하겠습니다.
간단하게도, 아래 코드만 작성해주시면 됩니다.
sudo systemctl enable ssh.service
Reference :
https://gooopy.tistory.com/133
https://gooopy.tistory.com/134
https://luckygg.tistory.com/277
https://creative-chan.tistory.com/entry/Jupyter-Notebook-JupyterLab-원격서버-설정하기
https://hoony5.tistory.com/entry/AI-스마트-플러그로-원격으로-전원-켰다-끄기사용법-및-솔직후기
https://rainbound.tistory.com/entry/우분투-부팅시-자동실행-시키기
'개발 일지, etc > Linux' 카테고리의 다른 글
[Ubuntu(Linux)] Emote를 이용한 이모지 사용 방법 (0) | 2024.04.27 |
---|---|
[Ubuntu(Linux)] PrintScreen key가 없는 키보드에서 스크린샷 찍는 법 (0) | 2024.04.27 |
[Ubuntu(Linux)] 리눅스 서버 구축 1. 가상환경 및 주피터 노트북 세팅 (2) | 2024.03.03 |
[Linux Mint, Ubuntu(Linux)] 리눅스 에러(config failed, hub doesn't have any ports) 시행착오(+2024/03/23) (0) | 2024.02.22 |
[Linux Mint] Linux Mint 21.2에 virtualbox 설치 (0) | 2024.02.03 |