Copyright @ Tomioka Jirou

A brief tutorial on setup an AI lab server for a small team

这个是在之前导师的实验室积累的一些东西,使用场景的话,是适用于2-8人左右的小团队吧,当时有两台机器,一台是放在学校机房的服务器,CPU没注意是什么,印象中是64G内存,4块P20,貌似24G显存?;另一台机器则放在办公室,主要配置的话,一颗AMD Ryzen 2700X,64G内存,再附加两块1080ti 11G,经费肯定是还做不到一人分一块GPU,部分模型的大小也不需要完全独占一块GPU。但是构建一个小型团队使用的AI Lab服务器是没问题了。

当时搭建的AI Lab服务器的主要架构如下

AI Lab Platform Architecture
AI Lab Platform Architecture

系统方面选择了Ubuntu 18.04 LTS,简单方便,毕竟是做AI不是做OS,没有任何必要引入其他方面复杂的操作。然后在这之上则是系统层面的GPU驱动,当时对应的版本为396.26,目前已经有400版本号的驱动了。接下来就是与docker对接的nvidia的runc,由这个runc去给docker内的GPU提供支持。随后当时则是使用了支持多用户的JupyterHub,当然也可以通过分配多个账号解决,这一部分和之后的部分解决方案就很多了。

安装系统


说实话这一部分应该是很简单的,从https://www.ubuntu.com/download/desktop下载LTS版的ubuntu,然后在macOS/Linux下直接dd写入到U盘,或者windows上用Rufus写入。

写好系统安装镜像之后,用U启动安装即可,但是偶尔会有UEFI启动的问题,导致grub2安装失败,一般来说检查主板UEFI里的启动设置尽可能都是UEFI或者为UEFI First,然后关闭CSM。其次的话,可以在给硬盘分区的时候可以手动创建一个挂载点是/boot的分区,大小200M左右FAT32格式,设置ESP(EFI system partation) flag即可。

安装GPU驱动


安装GPU驱动的方法也很多,我只说我最常用的方法,直接去NVIDIA官网下载所需版本的CUDAToolkit的runfile(lcoal),那里面是包含了显卡驱动的,使用起来会比较方便。

从runfile安装GPU驱动的时候,会需要编译内核模块,因此需要预先apt安装一些东西。顺便可能需要先去UEFI关闭Secure Boot,因为自己编译的内核模块似乎会导致untrusted,从而无法启动。

# Update system
sudo apt-get update
sudo apt-get upgrade -y

# Compile chains and essential tools
sudo apt-get install -y gcc g++ build-essential \
    openssh-server ssh \
    python3 python3-dev \
    apt-transport-https \
    ca-certificates \
    curl git \
    software-properties-common \
    zlib1g-dev bash-completion vim

由于CUDAToolkit的runfile(lcoal)是在shell脚本里内嵌了一个压缩包,所以执行的时候会先解压(没有提示),等个5-30秒(看硬盘写入速度),然后直接Ctrl+C跳过more的一堆说明,accept条款,然后输入y选择安装驱动、OpenGL库,CUDAToolkit等,第一次可能会要求重启(因为会自动去屏蔽系统原本的驱动),然后重启了再来第二次安装即可。在新版的cuda的runfile里,nvidia貌似忘了一件事

# 下面这句在提示需要重启来继续安装之后执行
sudo update-initramfs -u

成功安装完之后,需要将CUDA的库的地址加入到LD_LIBRARY_PATH里,比如CUDA 10.0的话,默认是在/usr/local/cuda-10.0/lib64,那么就编辑一下/etc/ld.so.conf,在最底下增加一行新的

/usr/local/cuda-10.0/lib64

随后sudo ldconfig一下,让系统更新一下默认搜索动态链接库可能的加载路径。

cuDNN的安装也很简单,下载好cuDNN的包之后,解压了里面会有一个名为cuda的目录,在terminal中进入到这个cuda目录之后,把cuDNN的头文件和动态链接库复制到CUDA的安装路径即可,下面是CUDA 10.0的例子,其他CUDA版本自己确认一下路径。

sudo cp -P include/cudnn.h /usr/local/cuda-10.0/include
sudo cp -P lib64/libcudnn* /usr/local/cuda-10.0/lib64
sudo chmod a+r /usr/local/cuda-10.0/lib64/libcudnn*

安装Docker与nvidia runc


这里就都很简单了,先来说Docker,直接按Docker官方给的安装方法一步到位。

# Docker
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 \
    $(lsb_release -cs) \
    stable"
sudo apt-get update
sudo apt-get install -y docker-ce

然后安装上nvidia runc即可~

# NVIDIA-Docker
curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
curl -s -L https://nvidia.github.io/nvidia-docker/ubuntu16.04/amd64/nvidia-docker.list | \
    sudo tee /etc/apt/sources.list.d/nvidia-docker.list
sudo apt-get update
sudo apt-get install -y nvidia-container-runtime nvidia-docker2
sudo pkill -SIGHUP dockerd

为了方便,可以让docker默认使用nvidia的runc来启动运行container,修改一下/etc/docker/daemon.json即可,大概就会变成下面这样(高亮部分为增加的内容)

{
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "default-runtime": "nvidia"
}

余下的部分


在我当时的配置中,是使用了JupyterHub来做多用户,在jupyterhub/jupyterhub-deploy-docker在上面魔改了一些配置,包括base image也从notebook改成了nvidia的镜像。

git clone https://github.com/jupyterhub/jupyterhub-deploy-docker.git

由于这里的需求各不相同,于是就不细写了,整体思路就是在docker里做出一个多用户环境,然后就正常使用即可。

Leave a Reply

Your email address will not be published. Required fields are marked *

5 × 3 =