Ubuntu20.04利用docker搭建GPU共享服务器

1 Ubuntu20.04-live-server利用docker搭建GPU共享服务器

服务器基本配置:

  1. Ubuntu18.04
  2. 显卡4张 A100
  3. 硬盘大小4T

2 安装ubuntu20.04

一路安装即可

  • 其中ubuntu20.04的服务器版本的安装界面,网络设置时subnet是指网络掩码,它的格式是: 192.168.10.0/24,并不是我们在通常设置的网络掩码格式。
  • name Server是指DNS服务器
  • 分区问题:发现几张硬盘不能挂载同时挂载到/home
    • 解决:需要用到ubuntu的LVM机制,先把几张硬盘给物理分区,再对这几个物理分区组成VG,再把这个VG挂载到/home
  • 同时跟着安装流程,安装上ssh服务。

3 ubuntu20.04的显卡驱动和cuda安装

3.1 通过ssh进入ubuntu服务器

主要是测试ubuntu服务器的ssh是否正常
在这里插入图片描述

此时用xshell工具进行ssh连接。

3.2 安装显卡驱动和cuda

因为安装cuda会自动安装驱动程序,所以直接安装cuda

  • cuda各版本版本网址:cuda
  • 此处因为用的都是服务器版本的ubuntu,所以不用卸载原有驱动和禁用nouveau
  • 下载cuda
root@gpu-server:/home/gpu-server# wget https://developer.download.nvidia.com/compute/cuda/11.7.0/local_installers/cuda_11.7.0_515.43.04_linux.run
  • 安装cuda
root@gpu-server:/home/gpu-server# sudo sh cuda_11.7.0_515.43.04_linux.run
 Failed to verify gcc version. See log at /var/log/cuda-installer.log for details.

出现错误,查看下方日志文件

  • 查看日志
root@gpu-server:/home/gpu-server# cat /var/log/cuda-installer.log 
[INFO]: Driver not installed.
[INFO]: Checking compiler version...
[INFO]: gcc location: 
[ERROR]: Missing gcc. gcc is required to continue.

发现是没有gcc

  • 安装gcc等
root@gpu-server:/home/gpu-server# sudo apt-get install gcc
root@gpu-server:/home/gpu-server# sudo apt-get install ubuntu-make
root@gpu-server:/home/gpu-server# sudo apt-get install make

之后重写安装cuda即可,需要把安装界面的所有选择都勾选上!!!

3.3 安装docker

此处可以不用安装docker以及nvidia-docker来调用gpu,直接安装最新的docker19以上,已经封装好了,可以直接调用gpu。(其实还是要下一个工具包 nvidia-container-toolkit

最后这台服务器还是用的docker+nvidia-docker2的方式。所以本文还是讲解nvidia-docker2的方式。

curl -fsSL https://get.docker.com | bash -s docker --mirror Aliyun

cocker安装成功

  • 配置docker加速源(此步骤稍后操作,完成下一步后再进行此步骤!!!)

因为后面配置了nvidia-container-runtime之后,会覆盖掉此步骤的daemon.json.
源要去阿里镜像申请,下面贴上笔者之前在另外已经申请了的源

sudo vim /etc/docker/daemon.json
{
    "default-runtime": "nvidia",
    "runtimes": {
        "nvidia": {
            "path": "nvidia-container-runtime",
            "runtimeArgs": []
        }
    },
    "registry-mirrors":[
        "https://mwm1snjq.mirror.aliyuncs.com",
        "https://registry.docker-cn.com",
        "http://hub-mirror.c.163.com"
    ],
    "data-root": "/home/docker",
    "log-opts": { "max-size": "50m", "max-file": "1"}
}

1.先添加下载库
英伟达官方对于添加nvidia-docker库的指导

curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | \
  sudo apt-key add -
distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
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

将nvidia-docker的官方库下载库添加到下载源中,其中每个系统版本有不同的下载源,所以需要设置一个关于系统版本号的环境变量distribution

2.安装nvidia-container-runtime:

sudo apt-get install -y nvidia-docker2
systemctl restart docker

安装上后,会重新写入daemon.json,写入的内容如下:
{ "default-runtime": "nvidia", "runtimes": { "nvidia": { "path": "nvidia-container-runtime", "runtimeArgs": [] } } }
所以上一步的操作,需要在这一步结束后就再操作。

3.将当前用户加入到用户组,免sudo方式执行docker命令

sudo gpasswd -a 用户名 docker

3.5 验证docker

通过以下命令来验证docker是否可以成功调用gpu

docker run --rm --gpus all nvidia/cuda:11.0.3-base-ubuntu20.04 nvidia-smi
  • docker19 以上的版本都已经继承了–gpus参数,可以使用此参数表明可调用gpu,不用以nvidia-docker run xxxxxxxxxx的方式
  • 若是指定卡就可以 --gpu = 1,2 表示指定两张卡。注:官方文档说的是索引号从0开始,但我经过我的尝试,我是从1开始
  • 当我尝试调用gpu时,遇到的问题如下
    docker: Error response from daemon: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error running hook #0: error running hook: exit status 1, stdout: , stderr: Auto-detected mode as 'legacy' nvidia-container-cli: initialization error: driver rpc error: timed out: unknown.

我尝试了各种方案,都无解。最后求助于nvidia-docker官方,在其github官方库上提交我的问题报告。提交问题的地址
最后指出,我的显卡资源没有打开Persistence Mode,所以在调用gpu资源的时候,一直出现超时问题。

Persistence Mode没有打开的情况下,我在本机上运行nvidia-smi,也会等待一会才有结果。

解决方案
开启Persistence Mode
nvidia-smi -pm ENABLED(需要root权限)

gpu-server@gpu-server:~$ sudo su
[sudo] password for gpu-server: 
root@gpu-server:/home/gpu-server# nvidia-smi -pm ENABLED
Enabled persistence mode for GPU 00000000:01:00.0.
Enabled persistence mode for GPU 00000000:41:00.0.
Enabled persistence mode for GPU 00000000:81:00.0.
Enabled persistence mode for GPU 00000000:C1:00.0.
  • 最后我的验证结果
    在这里插入图片描述

3.6 配置docker容器,以便ssh访问docker容器

  • 进入docker容器
    docker exec -it 容器id /bin/bash
  • 安装ssh
    apt-get install openssh-server
  • 允许root远程连接
    vim /etc/ssh/sshd_config
    设置PermitRootLogin yes
  • 为root用户设置登录密码
    passwd root
  • 重启ssh服务
    systemctl restart ssh

4 参考

使用docker搭建共享GPU
nvidia-container-runtime官方库
nvidia-docker2官方库
调用GPU创建容器超时问题报告
nvidia持久模式的中文翻译介绍
配置GPU运行环境(主要有如何开启GPU持久模式)

  • 2
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值