Ubuntu GPU Server Setup

2020/06/20

A GPU server is notoriously difficult to set up mainly due to two things: installing the OS itself, and the Nvidia driver installation.

However, there's actually a very easy way to do it - that is to use a Ubuntu Server as opposed to Ubuntu Desktop. This forgoes the GUI, which is unnecessary for a server anyway, and in doing so simplifies the Nvidia driver installation.

In fact, this can all be done quickly and easily and I've set up GPU servers numerous times, so here's the guide:

Estimated time: < 1 hour

  1. Download the “alternative” Ubuntu Server image from Ubuntu: Alternative downloads | Ubuntu.

  2. Go to BIOS, disable secure boot. Then boot UEFI. Install Ubuntu, overwrite full partition, add SSH Server and docker. Finish installation and reboot.

  3. You can now ssh in with password auth (default port is 22). For GPU, login and install nvidia driver with docker toolkit. Since secure boot is disable, nvidia installation should go smoothly.

# if you install ubuntu server no GUI, ok
sudo add-apt-repository ppa:graphics-drivers
sudo apt-get update
sudo apt install ubuntu-drivers-common
ubuntu-drivers devices
# this will show a list of drivers
sudo apt-get install nvidia-driver-440
# reboot required later

# install Docker
sudo apt install apt-transport-https ca-certificates curl software-properties-common
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu focal stable"
sudo apt update
apt-cache policy docker-ce
sudo apt install docker-ce
sudo usermod -aG docker ${USER}

# install nvidia-container-toolkit to run Docker with GPU
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list

sudo apt-get update && sudo apt-get install -y nvidia-container-toolkit
sudo systemctl restart docker

5. Configure WiFi Connections | NetworkManager documentation (optional).

# if you have wifi
sudo apt-get install network-manager
sudo /etc/init.d/network-manager restart
nmcli d
nmcli r wifi on
nmcli d wifi list
nmcli d wifi connect my_wifi password <password>

6. Enable passwordless sudo (optional):

sudo nano /etc/sudoers
# add below the line includedir /etc/sudoers.d (replace <username>)
<username> ALL=(ALL) NOPASSWD: ALL

7. setup ssh keys, authorized keys, sshd_config:

ssh-keygen
nano ~/.ssh/authorized_keys
chmod 400 ~/.ssh/authorized_keys
sudo nano /etc/ssh/sshd_config
# set: PasswordAuthentication no
sudo systemctl restart sshd

8. install zsh and change shell (optional):

sudo apt install zsh
chsh -s $(which zsh)
# then restore your dotfiles from git

9. Install libraries (optional):

# xvfb, roboschool, orca dependencies
sudo apt-get install xvfb libpcre16-3 libgtk2.0-0 libxss1 libgconf2-4 libnss3
# install glances
curl -L https://bit.ly/glances | /bin/bash

10. Reboot:

sudo reboot now

Last updated