본문 바로가기
Backend MLOps/개인 환경 구축 기록

[ 자취방 워크스테이션 ] #15 우분투 서버에 NVIDA 드라이버 설치하기

by SteadyForDeep 2021. 3. 13.
반응형

//1

 

딥러닝을 위해서는 엔비디아 그래픽카드가 필수다.

왜냐하면 병렬연산을 위해서 대부분의 프레임워크들이

CUDA를 선택했기 때문이다.

 

원래는 #15를 엔비디아 도커 설치까지로 생각하고 글을 적었으나

여러가지 난관에 봉착하여

이 챕터를 NVIDIA드라이버 설치하기로 따로 떼어냈다.

 

 

 

 

 

//2 주의!!

이 챕터를 읽을때는 주의할 점이 하나 있다.

 

! 원격으로 작업을 하는 경우에는 이 방식을 따라하지 말기를 바란다. !

 

이유는 후설하겠지만

드라이버를 설치하는 동안 GUI가 활성화되거나

MOK를 설정해야하는 등등

보안 설정을 건드리게 되는 부분에서

원격으로 설정하는 작업에 한계가 있었다.

아무튼 이 작업은 반드시 우분투 서버가 설치되어있는

그 컴퓨터에서 직접 진행되어야 한다.

 

//3

본론으로 들어가서

내가 설명하는 우분투 서버의 동작은

거의 모든 작업이 CLI를 기준으로 진행된다.

CLI는 Command Line Interface 의 약자로

까만 화면에 하얀 글자만 띡띡 나오는 것을 말한다.

이와는 반대로 여러가지 아이콘이나 위젯이 보이고

터치스크린이나 마우스를 이용할 수 있는 환경을

GUI라고 하는데 Graphic User Interface의 약자이다.

 

개발을 위한 컴퓨팅에서

GUI는 사실 필요없고 거추장스러운 부분이다.

그런데 이유는 잘 모르겠지만

18버전에서는 안그러던 현상이

20버전에서 생겨서 골치가 좀 아팠다.

바로 그래픽카드 드라이버를 설치하면

자동으로 GUI가 활성화 되는 부분인데

GUI 없이 그래픽카드 설치가 가능한 방법을 찾지 못하여

그냥 깔고난 후 GUI를 끄는 방식으로 진행했다.

 

 

 

 

//4

GUI가 활성화되면 무엇에 문제가 생기는고 하니

일단 컴퓨터의 자원을 생각보다 많이 잡아먹는다.

유닛 한톨이라도 소중하게 계산에 사용해야하는 입장에서는

정말이지 필요가 없는 기능일 수 밖에 없다.

GUI가 없는 OS버전을 흔히 Lite 혹은 minimal 이라고 말하기도 한다.

감이 딱 잡히는 워딩이다.

 

그리고 CLI에서 실컷 설정해둔 보안을

GUI가 켜지면서 뜬금없이 새로 설정해야하는 일이 발생한다.

특히 CLI에서 자동 로그인을 설정해두었지만

GUI가 켜지면서 로그인을 하라고 하는 바람에

외부에서 작업하던 작업자가 컴퓨터실로 들어와서

키보드와 모니터를 꽂아서 비밀번호를 입력해야하는

얼탱이 없는 일이 발생한다.

정말이지 개 빡치는 사건이 아닐 수 없다. 정말이다.

 

아무튼 각설하고 설치로 들어가 보자.

 

//5

 

우선은 apt로 받는 방식을 추천한다.

안정적이고 쉽기 때문이다.

$ ubuntu-drivers devices

이 명령어를 사용하면

내 컴퓨터에 맞게 우분투에서 추천해주는 드라이버들을 볼 수 있다.

 

설치가 안되어 있다면

$ sudo apt install ubuntu-drivers-common

으로 설치가 가능하다.

 

나도 설치가 안되어있다고 나오면서 설치하는 명령어를 안내받았다.

 

이렇게 설치가 진행된다.

y를 누르고 엔터치면 계속 진행할 수 있다.

내 경우는 RTX3070이 설치되어 있는데

이에 맞는 드라이버로 nvidia-driver-460을 추천해주는 것을 알 수 있다.

nvidia-driver-460 과 nvidia-driver-460-server를 추천해주었는데

나는 server버전을 받도록 하겠다.

 

//6

apt를 통해서 nvidia 드라이버를 받기 위해서는

다운받고자 하는 드라이버가 존재하고 우리들에게 제공되는 저장소를 추가해서

apt명령어가 그곳에 접근할 수 있도록 해주어야 한다.

 

sudo add-apt-repository ppa:graphics-drivers/ppa

위의 명령어로 apt가 접근하는 리포지토리 리스트에

그래픽카드 드라이버 리포지토리를 추가할 수 있다.

생각보다 경고문이 많이 뜬다.

엔터를 눌러서 진행해준다.

sudo apt update

apt의 변경사항이 있으므로 업데이트한다.

나는 습관적으로 apt update와 upgrade를 같이 하는데

이번에도 그렇게 해주었다.

우분투를 처음 깔았거나 업그래이드를 한지 오래 되었다면

한 번 정도 업그래이드 해주자.

 

이제 이 리포지토리에 내가 추천받은 460-server가 있는지 확인할 차례다.

apt-cache search nvidia | grep nvidia-driver-460

이 코드를 통해서 apt가 설치할 수 있는 것들 중에

엔비디아 드라이버가 있는지 확인할 수 있다.

| 는 "SHIFT + \" 으로 타이핑 할 수 있고 바(bar)라고 읽는다.

영어 'l'과 구분하기 위해서 콜론처럼 2개로 갈라진 것도 있다.

| 이전의 명령어 출력을 파일화 해서

이후의 명령어에게 건네주는 역할을 한다.

apt-cache search nvidia 만 하면

nvidia에서 제공하는 모든 파일이 전부 다 출력이 되겠지만

이를 한번 파일화 해서 grep에게 넘겨주면

grep은 이 리스트중에서 nvidia-driver-460이 포함된

결과만을 우리에게 보여줄 것이다.

캡쳐보드의 단점인데 색깔이 있는 글씨가 잘 안보인다.

아무튼 결과를 보니 서버 버전이 있으므로 다운로드가 가능하다.

 

sudo apt-get install nvidia-driver-460-server

자신에게 맞는 드라이버 버전을 입력하면 인스톨이 진행된다.

조금은 많다 싶은 양의 내용이 설치되므로 잠시 기다려주자.

 

 

 

 

//7

문제는 여기서 부터 발생한다.

내가 글의 서두에 원격으로 접속하는 사람들은

이 작업을 하지 말라고 한 결정적인 이유다.

 

설치가 끝나면 이런 창이 뜨게 된다.

내용은 부팅 로그인을 해야하는데 이게 서드파티 드라이버에도 해당이 되니까

서드파티 드라이버들도 부팅에서 같은 수준에 보안을 유지하려면 로그인 비밀번호를 대라

뭐 이런 내용이다. 

 

엔터를 쳐 주면 비밀번호를 입력할 수 있는데

비밀번호가 그대로 노출되므로 공개된 장소에서는 주의하자.

설치가 진행중인 계정의 비밀번호를 입력하면 된다.

 

그런데 잘 보면 MOK라는 것을 만들어서

그걸로 서드파티 드라이버를 관리하겠다고 한다.

Machine Owner Key 의 약자인데 조사를 해도 많은 정보가 나오지 않는다.

대략적으로 이해한 바에 따르면 이러하다.

메인보드에 연결된 하드웨어들은 UEFI라는 펌웨어를 통해서 제어된다.

당연히 부팅이 시작되면 이 UEFI가 어떤 하드웨어들이 연결되어 있는지 서치하고

그 정보를 OS로 넘겨주면서

OS는 이들의 설정된 권한대로 동작하게 만든다.

이때 사용자가 허가한 장치 이외의

식별되지 않은 장치가 연결되어 있을 가능성이 있으므로

기계의 주인이 관리하는

어떤 비밀번호를 지정받은 장치들만 사용이 가능하도록 해야한다.

이것을 가능하게 해주는 것이 UEFI Secure Boot와 MOK 라는 것이다.

 

아무튼 이 녀석이 뜬금포로 활성화되면서

기존에 설정해두었던 모든 로그인 체계가 다 꼬이는 수가 생길 수도 있다.

나도 우분투를 새로 깔았다 ㅅㅂ..

 

아무튼 비밀번호를 두번 입력하면

원래 까만 화면이 뜨면서 설치가 끝나는데

이때 리부트를 해주면 된다.

$ sudo reboot

이제 골때리는 녀석이 나왔는데

MOK 관리자를 시작하고 키를 생성하는 부분이다.

 

당연히 ssh접속자 입장에서는 리부트가 되었는데도 접속이 안되고

뭐가 문제인지 알 방법이 없다.

그래서 기계 주인이 직접 이 작업을 해 줘야한다.

이름부터 기계 주인 비밀번호니까..

 

이 작업을 무시하고 넘어가버리면

OS에서 Key가 없는 장치들을 차단하기 때문에

그래픽카드를 사용할 수 없게 된다.

두번째 Enroll MOK를 선택해주자.

솔직하게 View key 0는 봐도 뭔소린지 잘 모르겠다.

그냥 초기 키값들을 알려주는 것 같은데

뭘 바꿀 수 있는것도 아니고

그 키값을 참고해서 다른 곳에 대입할 일도 없다.

Continue를 눌러주자.

MOK 기능 켤래? 예스.

비밀번호를 입력해 주라고 나오는데

이때 드라이버를 설치한 계정의 비밀번호를 입력해 주면 된다.

입력해도 표시가 안되지만 입력은 되고 있는 것이니

입력후 엔터를 누른다.

 

리부트 해주자.

나머지는 이미 저장되어있는 것을 불러오는 기능같다.

 

 

 

 

//8

자. 여기서 개똥같은 일이 한번 더 벌어진다.

진짜 개빡치는 상황이 발생해버리는 것이다!

 

개 뜬금없이 GUI가 활성화되어 버린다.

정말이지 영문을 알 수 없는 일이다.

심지어 로그인을 하면 까만 화면에서 멈추거나

터미널조차 찾아볼 수 없는 우분투 GUI가 열린다.

 

desktop 버전을 받았다면

GUI로 열리는 터미널이나 다른 기능들을 기대할 수 있겠지만

이건 minimum 버전이므로 그런건 애당초 없는 것이다.

 

존나 깔끔해서 약이 조금 오른다.

진짜 마우스 하나만 덜렁 있는게 분노를 감출 수 없는 포인트다.

이 텅 빈 화면을 보고 있자니 내 머릿속도 텅 비어 버리는 것 같다.

컨-알-티? 그런건 먹히지도 않는다.

 

이럴때 어떡해야 할까

 

우분투 GUI를 강제로 꺼버리는 방법이 있는데

 

Ctrl + Alt + F1 (혹은 F2,3,4,5,6)을 눌러서 로그아웃을 하는 방법이다.

내 경우는 F3이 동작했다.

 

그러면 모든 세션이 종료되고 너무나도 반가운 까만 CLI 화면이 등장한다.

로그인 후

$ nvidia-smi

를 통해서 그래픽카드의 상태를 알 수 있는데 이게 동작하면 드라이버가 정상적으로 설치된 경우라고 할 수 있다.

 

여기서 리부트를 해버리면 또 똑같은 일이 반복되므로

GUI를 완전히 꺼버리고 CLI로 부팅이 되도록 해주는 것이 좋다.

 

sudo systemctl set-default multi-user

GUI는 보통 개인컴퓨터에서 1명의 유저만을 위해서 제공되는 시스템으로

위의 커멘드를 입력하면 GUI를 끄고 CLI를 활성화할 수 있다.

 

리부트 해보자.

위의 작업들이 정상적으로 동작했다면 CLI로 로그인하는 창이 떠야한다.

 

성공했다.

 

 

 

반응형

댓글