본문 바로가기

개발 일지, etc/Linux

[Ubuntu(Linux)] 리눅스 서버 구축 2. CUDA 세팅, SSH 및 원격 데스크탑 부팅 설정(+2024/04/27 수정)

+2024/04/27

3-1 아래 코드 실행시 에러가 발생하였으며, 이를 해결하지 못했습니다.

기존에 CUDA가 깔려있다면 그걸로 계속 사용해주시길 권장드립니다.

1.  TensorFlow 버전 확인 및 필요 CUDA, cuDNN 버전 확인

https://www.tensorflow.org/install/source

 

소스에서 빌드  |  TensorFlow

이 페이지는 Cloud Translation API를 통해 번역되었습니다. 소스에서 빌드 컬렉션을 사용해 정리하기 내 환경설정을 기준으로 콘텐츠를 저장하고 분류하세요. 소스에서 TensorFlow pip 패키지를 빌드하

www.tensorflow.org

 

먼저 TensorFlow의 버전을 확인하고, 이에 적합한 버전의 CUDA, cuDNN을 설치해야 합니다.

예를 들어서, TensorFlow 버전이 2.13.1이면 CUDA : 11.8, cuDNN : 8.6을 설치해야 합니다.

2. CUDA, cuDNN 다운로드

https://developer.nvidia.com/cuda-toolkit-archive

 

CUDA Toolkit Archive

Previous releases of the CUDA Toolkit, GPU Computing SDK, documentation and developer drivers can be found using the links below. Please select the release you want from the list below, and be sure to check www.nvidia.com/drivers for more recent production

developer.nvidia.com

위 사이트에 들어가서 적합한 버전의 CUDA를 클릭하고, 아래 사진처럼 버튼을 누른 뒤 맨 아래에 나오는 커맨드를 복사합니다.

https://developer.nvidia.com/rdp/cudnn-archive

 

cuDNN Archive

Download releases from the GPU-accelerated primitive library for deep neural networks.

developer.nvidia.com

위 사이트에 들어가서 적합한 버전의 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

 

[리눅스 민트, 우분투] 리눅스 에러(config failed, hub doesn't have any ports) 시행착오(+2024/03/10 해결)

인공지능 모델을 돌리고, 거주지를 옮긴 이후 리눅스를 켰을 때 검은 화면이 뜨는 에러가 발생했습니다. 해결해보려고 시도했으나, 결국에는 다시 리눅스 민트로 부팅함으로써 해결했습니다.

yongchanyong.tistory.com

 

설치 후 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

 

Python 리눅스 서버에 분석 환경 구축4 - CUDA 세팅(1)

리눅스 서버에 CUDA 세팅하기 이전 포스팅에서 우분투 서버에 주피터 노트북을 세팅하는 방법에 대해 알아보았다. 이번 포스트에서는 우분투 서버에 CUDA를 세팅하고, Tensorflow를 이용해 CUDA 세팅

gooopy.tistory.com

https://gooopy.tistory.com/134

 

Python 리눅스 서버에 분석 환경 구축5 - CUDA 세팅(2)

리눅스 서버에 CUDA 세팅하기 이전 포스트에서 CUDA 세팅에 필요한 CUDA와 cuDNN을 다운로드하였다. 이번 포스트에서는 CUDA를 설치해보도록 하겠다. 0. 다른 버전의 CUDA가 설치되어 있는지 확인하기

gooopy.tistory.com

https://luckygg.tistory.com/277

 

[ipTIME] WOL 어플로 어디서든 내 컴퓨터 전원 켜기

WOL이란? WOL은 Wake On Lan의 약자로, 특정 네트워크에 연결되어 있는 컴퓨터의 전원을 LAN을 통해 원격으로 켜는 기능입니다. WOL 설정만 되어 있다면 스마트폰으로 언제 어디서든 쉽게 집 또는 회사

luckygg.tistory.com

https://ca.ramel.be/117

 

[UBUNTU] 우분투 서버 WOL (Wake On Lan) 설정하기

WOL (Wake On Lan) 이란 Lan을 통해서 (인터넷을 통해서) 들어온 신호를 통해 PC 등 장치를 켜주는 기능을 말한다. 지난 글에서 iptime 공유기를 통하여 DDNS를 설정하였고, iptime 공유기를 비롯한 공유기들

ca.ramel.be

https://ca.ramel.be/74

 

[UBUNTU] 우분투 서버 SSH로 접속 세팅하기

우분투 서버 설치에 성공했다면 이제 서버에 원격으로 접속하기 위한 세팅을 시작해볼 수 있다. 아직까지는 원격 접속 세팅이 안되어있기 때문에 서버에 모니터와 키보드 등 입력 출력 장치를

ca.ramel.be

https://6iiiiii.net/73-2/

 

제조사별 공유기 설정사이트 접속방법(iptime,sk,b,kt,lg등) - 식스아이

공유기를 처음 설치해보거나 익숙하지 않은 경우 와이파이의 비밀번호를 바꾸거나 포트포워딩 설정을 하기 위해서 공유기의 환경설정 사이트에 접속하려고 할 때 방법을 몰라서 어려움을 겪으

6iiiiii.net

https://creative-chan.tistory.com/entry/Jupyter-Notebook-JupyterLab-원격서버-설정하기

 

Jupyter Notebook (JupyterLab) 원격서버 설정하기

목차 💡 Anaconda 환경에서 Jupyter Lab 설치 및 Ubuntu 18.04 원격 서버 구성 1. Jupyter란? “Project Jupyter”는 IPython (Interactive Python) 프로젝트에서 탄생한 비영리 오픈소스 프로젝트입니다. Data Science, Machine

creative-chan.tistory.com

https://hoony5.tistory.com/entry/AI-스마트-플러그로-원격으로-전원-켰다-끄기사용법-및-솔직후기

 

AI 스마트 플러그로 원격으로 전원 켰다 끄기(사용법 및 솔직후기)

개인적으로 핸드폰을 가지고 집 컴퓨터를 원격 조작하는 경우가 많은데 컴퓨터가 멈춘다든가, 전원이 잠깐 나가서 컴퓨터가 꺼졌을 때 근무 중이라면 전혀 대처할 수가 없습니다. 어쩔 수 없다

hoony5.tistory.com

https://rainbound.tistory.com/entry/우분투-부팅시-자동실행-시키기

 

우분투 부팅시 자동실행 시키기

목차 vm에 elasticsearch를 설치하여 운영해보는데 종료할때마다 ssh와 ES를 다시 실행시켜줘야해서 귀찮았다. 그래서 자동실행을 한번 해보자 1. 자동실행할 sh 파일 만들기 먼저 /etc/init.d 에 들어가

rainbound.tistory.com

https://it-serial.tistory.com/entry/ssh%EA%B8%B0%EB%B3%B8-%EC%84%A4%EB%AA%85-%EC%84%9C%EB%B2%84-%EC%84%A4%EC%B9%98-%EC%84%A4%EC%A0%95-%EC%A0%91%EC%86%8D

 

[Linux] SSH 기본 설명 & 서버 설치, 설정 ①

● 목 차 ● ssh 기본 개념 & 서버 설치, 설정 ① ssh client 접속(리눅스 터미널 & 윈도우 Putty) ② 1. ssh란? *ssh는 Secure shell의 약자. *원격 머신에 로그인하여 그 안에 있는 명령들을 실행하는 프로그램

it-serial.tistory.com