巧用Docker快速部署GPU环境

系统 Linux
本质上就是我们要在容器里能看到并且使用宿主机上的显卡。在这篇文章里我们就介绍一下 Docker 使用 GPU 的环境搭建。

 

在 Linux 服务器上使用 GPU 跑深度学习的模型很正常不过。如果我们想用 Docker 实现同样的需求,就需要做些额外的工作。本质上就是我们要在容器里能看到并且使用宿主机上的显卡。在这篇文章里我们就介绍一下 Docker 使用 GPU 的环境搭建。

Nvidia 驱动

某些命令以 Ubuntu 作为示例。首先宿主机上必现安装 Nvidia 驱动。

这里推荐从 Nvidia 官网下载脚本安装,安装和卸载都比较方便并且适用于任何 Linux 发行版,包括 CentOS,Ubuntu 等。NVIDIA Telsa GPU 的 Linux 驱动在安装过程中需要编译 kernel module,系统需提前安装 gcc 和编译 Linux Kernel Module 所依赖的包,例如 kernel-devel-$(uname -r) 等。

安装 gcc 和 kernel-dev 

  1. $ sudo apt install gcc kernel-dev -y 

安装 Nvidia 驱动

  1.  访问 https://www.nvidia.com/Download/Find.aspx
  2.  选择对应操作系统和安装包,并单击 [SEARCH] 搜寻驱动,选择要下载的驱动版本

    3.  在宿主机上下载并执行对应版本安装脚本 

  1. $ wget https://www.nvidia.com/content/DriverDownload-March2009/confirmation.php?url=/tesla/450.80.02/NVIDIA-Linux-x86_64-450.80.02.run&lang=us&type=Tesla  
  2. $ chmod +x NVIDIA-Linux-x86_64-450.80.02.run && ./NVIDIA-Linux-x86_64-450.80.02.run 

    4.  验证

使用 nvidia-smi 命令验证是否安装成功,如果输出类似下图则驱动安装成功。

CUDA 驱动

CUDA(Compute Unified Device Architecture)是显卡厂商 NVIDIA 推出的运算平台。CUDA™是一种由 NVIDIA 推出的通用并行计算架构,该架构使 GPU 能够解决复杂的计算问题。它包含了 CUDA 指令集架构(ISA)以及 GPU 内部的并行计算引擎。这里安装的方式和显卡驱动安装类似。

    1.  访问官网下载对应版本安装包,https://developer.nvidia.com/cuda-toolkit-archive

    2.  配置环境变量 

  1. $ echo 'export PATH=/usr/local/cuda/bin:$PATH' | sudo tee /etc/profile.d/cuda.sh   
  2. $ source /etc/profile 

nvidia-docker2

Docker 的安装这里就不展开了,具体查看官方文档非常详细。

这里我们就直接介绍安装 nvidia-docker2.

既然叫 nvidia-docker2 就有 nvidia-docker1 就是它的 1.0 版本目前已经废弃了,所以注意不要装错。

这里先简单说一下 nvidia-docker2 的原理,nvidia-docker2 的依赖由下几部分组成.

  •  libnvidia-container
  •  nvidia-container-toolkit
  •  nvidia-container-runtime

nvidia-container-runtime 是在 runc 基础上多实现了 nvidia-container-runime-hook (现在叫 nvidia-container-toolkit),该 hook 是在容器启动后(Namespace已创建完成),容器自定义命令(Entrypoint)启动前执行。当检测到 NVIDIA_VISIBLE_DEVICES 环境变量时,会调用 libnvidia-container 挂载 GPU Device 和 CUDA Driver。如果没有检测到 NVIDIA_VISIBLE_DEVICES 就会执行默认的 runc。

下面分两步安装

    1.  设置 repository 和 GPG key 

  1. distribution=$(. /etc/os-release;echo $ID$VERSION_ID)  
  2. $ curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -  
  3. $ curl -s -L https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.list | sudo tee /etc/apt/sources.list.d/nvidia-docker.list 

    2.  安装 

  1. $ sudo apt-get update  
  2. $ sudo apt-get install -y nvidia-docker2  
  3. $ sudo systemctl restart docker 

    3.  验证

执行以下命令: 

  1. $ docker run --rm --gpus all nvidia/cuda:10.2-base nvidia-smi  

如果输出跟直接在宿主机上执行 nvidia-smi 一致则说明安装成功。如果跑的深度学习模型使用的是 tensorflow 可以在容器里执行: 

  1. import tensorflow as tf  
  2. tf.contrib.eager.num_gpus() 

如果输出了宿主机上的 Nvidia 显卡数量,则模型能使用到显卡加速。如果使用的是 pytorch 可以在容器里执行: 

  1. import torch  
  2. torch.cuda.is_available() 

如果输出 True 证明环境也成功了,可以使用显卡。

    4.  使用示例

  • 使用所有显卡 
  1. $ docker run --rm --gpus all nvidia/cuda nvidia-smi   
  2. $ docker run --rm --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=all nvidia/cuda nvidia-smi  
  •  指明使用哪几张卡 
  1. $ docker run --gpus '"device=1,2"' nvidia/cuda nvidia-smi   
  2. $ docker run --rm --runtime=nvidia -e NVIDIA_VISIBLE_DEVICES=1,2 nvidia/cuda nvidia-smi 

到这里在 Docker 下使用 Nvidia 显卡加速计算的基础环境搭建就介绍完了。后续我们可以继续研究一下 K8S 下调度 GPU 的实现。 

 

责任编辑:庞桂玉 来源: 奇妙的Linux世界
相关推荐

2014-12-26 10:06:48

Docker容器代码部署

2024-10-28 15:40:26

2024-01-04 07:39:53

LinuxCentOS 8Docker

2024-03-26 00:00:01

2021-07-16 05:00:13

Environment开发生产

2014-12-08 11:17:51

SDNDocker部署Docker

2013-08-30 15:56:57

MySQLMariaDB

2014-09-12 14:50:07

运维Docker

2011-05-03 09:55:27

扫描仪

2015-01-05 14:16:16

DockerFig自动化容器编排

2023-09-26 07:34:24

Docker部署依赖包

2023-04-06 07:18:14

2024-01-10 14:24:32

Docker容器Kafka

2023-05-14 23:30:38

PrestoHadoop函数

2023-11-27 00:18:38

2023-05-29 07:39:49

2023-06-26 00:07:14

2022-06-06 09:02:47

Overlay2BindISO

2009-08-04 09:32:27

部署Silverlig

2024-10-31 15:16:35

点赞
收藏

51CTO技术栈公众号