개발자로 후회없는 삶 살기

SW bootcamp PART.서버 원격 접속 + 로컬 GPU 연결 본문

[대외활동]/[네트워크형 캠퍼스 아카데미]

SW bootcamp PART.서버 원격 접속 + 로컬 GPU 연결

몽이장쥰 2023. 2. 11. 17:15

서론

한컴에서 제공한 노트북을 서버로 사용하기로 하여 원격으로 접속하고 내장된 GPU를 연결하는 방법을 기록합니다.

 

본론

=> 서버에 원격 연결

1. ssh 키 만들기(참고 1)

개인키는 제 컴퓨터에 있고 공개키를 서버에 등록하여 제가 서버에 접속했을 때 등록된 사용자인지 체크합니다.

 

 

2. 포트 바인딩

서버에서 키를 등록했으면 제 컴퓨터와 서버 컴퓨터의 ssh 포트를 포워딩합니다.

 

3. ssh 원격 접속

접속에 성공하였습니다!

 

=> 추가!(번외) NHN 클라우드 T4 사용기

1. NHN 클라우드 ssh로 접속

NHN 클라우드에 회원가입하고 권한을 받으면 클라우드 인터페이스에서 GPU인스턴스를 만들 수 있고 FIP가 할당됩니다.ssh로 공인 IP로 접속합니다.

 

2. nvidia-smi

접속하면 GPU가 8개 달린 우분투 환경이 있는 겁니다.

 

tf gpu 연결 확인을 해보면 잘 나오고 이제 원래 하던대로 학습을 진행하면 됩니다.

 

-> 느낀점

이번에 클라우드에서 자원을 할당 받아서 처음사용해봤습니다. 사용하는 것을 이해하기론 회원가입을 하고 권한을 허가 받은 후 자원 인스턴스를 만들면 자원이 있는 클라우드의 IP를 받을 수 있습니다. 그 IP로 SSH로 접속하여 자원을 사용할 수 있습니다.

 

 

=> GPU 셋팅

GPU 셋팅은 간단하지만 서버의 리눅스는 gui가 아닌 cli라서 vscode 클라이언트 용이 아닌 서버를 설치해야 합니다. 그 후 tensorflow와 cuda, cudnn을 맞춰줍니다.

 

1. gpu nvidia 드라이버 설치

cuda랑 cudnn이 gpu를 사용하기 위한 드라이버인 줄 알았는데 tensorflow-gpu를 사용하기 위한 것이었고 gpu를 잡기 위해서는 nvidia gpu 드라이버를 gpu 제품에 맞게 깔아줘야 합니다. 서버는 wsl을 사용할 것이라서 wsl 버전을 깔았다고 하십니다.

 

2. vscode로 서버의 vscode 서버 설치

서버가 cli라서 vscode 클라이언트가 아니라 서버를 설치해야 합니다.

 

1) Remote로 config 파일 작성

Remote: config를 검색합니다.

 

Host에는 내 마음대로 적고, HostName은 접근하려는 서버의 ip 주소를 적습니다. 저는 localhost와 서버를 포트포워딩해 두었기 때문에 localhost에 접근합니다. User는 서버의 User 명이고 포트는 localhost에서 지정한 포트로하고 패스워드로 접근 가능하게 하고 저장을 합니다.

 

2) 서버에 접속

Remote: connect를 검색합니다.

이렇게 서버에 접속하면 vscode 서버가 깔립니다. 패스워드는 서버에 접속하는 것과 동일합니다.

 

서버에 원격으로 접속하고 vscode 서버도 설치하여 개발할 수 있는 환경이 완성되었습니다!

 

3. cuda, cudnn 잡기

tensoflow, cuda, cudnn 3개의 버전이 맞아야 파이썬에서 GPU를 잡을 수 있습니다. 근데 파이토치, 텐서플로 여러 개 깔아 두고 쿠다도 여러개 깔아두고 쏙쏙 맞는 버전으로 쓸 수 있다고 합니다. 알아보니 환경 변수를 맞춰줘야 하는 것 같습니다.

검색창에 tensorflow, cuda, cudnn이라고 치면 바로 나옵니다. 

 

 

1) tensorflow 설치

과거에는 tensorflow gpu를 따로 깔아야 했는데 이제는 통합됐다고 합니다.

 

2) cuda 11.2 설치

검색 창에 cuda 11.2라고 치고 nvidia 사이트에 들어가서

 

리눅스 wsl 버전을 찾고 local을 클릭합니다.

 

명령어를 입력해서 깔게 됩니다.(pip install은 cmd 창 여러 개 켜서 동시에 다운로드할 수 있습니다. dpkg는 한 번에 하나만 가능합니다.) 4번째 명령을 보면 cuda를 깔게 해주는 repo를 주는 것이지 설치하는 것이 아니며 마지막에 install cuda로 깔게 됩니다.

 

-> 에러 발생

설치를 하던 도중 마지막 명령어에서 에러가 발생했습니다. 

 

fix broken이라는 에러가 뜬 것인데 강사님께서 이런 에러가 날 때는 이 명령어를 난 어떻게든 이 파일을 설치하겠다고 overwrite force 해주면 된다고 말씀해 주셨습니다. 

 

그리고 다시 install 명령을 해줍니다.

 

 

 

 

3) cudnn 8.1 설치

검색 창에 cudnn 8.1이라고 치고 nvidia cudnn archive에 들어가서

8.1 중에 가장 최신 것 중에서 cuda와 맞는 것으로 설치합니다. 이 중에서도 우분투 Runtime을 설치합니다.

 

설치를 하면 서버의 윈도우에 c 드라이브에 깔리게 되는 건데 저는 wsl을 사용할 것이기 때문에 윈도우의 c에 접근하여 다운 받은 파일을 wsl의 dir로 가져옵니다. 이렇게 wsl의 사용자 dir(~)에 cuda, cudnn 설치 파일이 보여야 합니다.

 

cudnn도 dpkg로 설치해 줍니다.

 

 

 

4) 설치 테스트

 

+ facial expression using cnn 학습으로 테스트

서버에 있는 내장 gpu인 Quadro RTX 4000이 잘 잡히는 것을 볼 수 있습니다.

 

-> 이렇게 원격 접속과 gpu 잡기 모두 끝이 났습니다. gpu는 nvidia 드라이버가 알아서 잡아주고 tensorflow는 cuda와 cudnn을 깔기만 하면 알아서 잡아주니 깔기만 하면 아무것도 하지 않아도 import tensorflow로 사용할 수 있는 개념이었습니다!

 

 

- docker에서 gpu 쓰기

=> docker 명령어로 nvidia-docker 쓴 경우(참고 6)

1. docker 설치 

오픈소스 소프트웨어 수업을 참고(참고 4)

 

2. docker 셋팅 및 nvidia container toolkit 설치

 

wsl2에 도커 설치 후 nvidia docker를 사용하기 위한 toolkit을 설치합니다.

 

3. nvidia-docker2설치

처음에 wsl을 제대로 설치하지 않으면 systemctl이 지원되지 않는 문제가 발생합니다. 재설치 후 성공하였습니다.

 

4. nvidia-docker pull

docker run --rm --gpus all ubuntu:20.04 nvidia-smi

ubuntu 20.4 lts를 사용하기에 그에 맞는 이미지를 다운받고 nvidia-smi를 실행한 결과

 

 

nvidia-docker가 gpu를 잘 잡는 것을 확인하였습니다. 로컬에서 확인했을 때와 같은 결과를 보이는 것을 보니 도커가 gpu 드라이버를 잘 잡은 것으로 보입니다.

 

5. tensorflow와 연동(참고 5)

docker pull tensorflow/tensorflow                     
docker pull tensorflow/tensorflow:devel-gpu           
docker pull tensorflow/tensorflow:latest-gpu-jupyter

tensorflow 공식 홈페이지에 가보면 도커에서 tensorflow gpu를 쓰기 위한 방법이 나와있습니다. GPU지원 컨테이너를 다운받고 

 

docker run --gpus all -it tensorflow/tensorflow:latest-gpu bash

실행한 후 nvcc를 해보면

 

cuda 11.2가 설치가 되어있습니다. 로컬과 wsl에 한 번도 cuda를 설치한 적이 없는데 자동으로 잡혀있는 것을 보면 tensorflow에서 버전에 맞는 cuda와 cudnn을 미리 다 맞춰놓은 것 같습니다.

 

print(device_lib.list_local_devices())

가용 가능한 gpu를 출력해보면 

 

GeForce RTX 3070 Ti가 잡힙니다. 이제 컨테이너 안에 들어가면 그냥 리눅스에 tf, gpu 드라이버, cuda, cudnn을 맞춘 환경이 생긴 겁니다. run하여 그 안에서 프로그래밍 하면 됩니다.

 

 

 

 

결론

정말 배우고 싶던 부분인데 배워서 너무 좋습니다. 아주아주 가성비 좋은 부캠입니다!

 

참고

ssh

윈도우에서 GPU 잡기

윈도우에서 GPU 잡기2

오픈소스 수업

도커 gpu tf 연동

docker에서 gpu 돌리기 참고 유튜브

docker에서 gpu 돌리기 블로그

심볼릭 링크 에러 1

심볼링 링크 에러 2

 

 

 

 

Comments