当前位置: 首页 > news >正文

配置 Docker 使用 GPU

准备工作

首先你需要准备一台拥有GPU的实例,在这里我将使用阿里云的竞价实例来做演示,因为它对于短期使用GPU更加划算。

注意,本篇文章将教你手动进行GPU驱动的配置,所以在购买时选择系统的时候不要选择自动安装GPU驱动。

具体关于竞价实例如何购买和配置,请参考各个云平台的介绍,本文不再赘述。

主机配置

在这里我买了一台配有Ubuntu 22.04和一块T4显卡的实例作为演示。

显卡驱动安装

  1. 现在我们需要安装 NVIDIA 的驱动,在这里下载驱动。
  2. 选择你的显卡和CUDA Toolkit版本,以及你的系统版本,就能得到相应的驱动下载。
  3. 在这个案例中我的显卡选择的是 Tesla T4 ,系统选择 Linux64-bit,CUDA Toolkit 选择 12.0。
  4. 点击搜索后就能得到对应的驱动,点击下载后就得到了对应的驱动。
  5. 把驱动文件上传到你的实例上,并用以下命令进行安装:
$chmod 755 NVIDIA-Linux-x86_64-525.85.12.run
$sudo ./NVIDIA-Linux-x86_64-525.85.12.run --no-cc-version-check

脚本中的版本号可能会随有所变化,请以你下载的驱动为准。

安装完后执行 nvidia-smi 命令显示如下就是安装完成了:

Fri Mar  3 15:17:34 2023
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12    Driver Version: 525.85.12    CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            Off  | 00000000:00:07.0 Off |                    0 |
| N/A   57C    P0    30W /  70W |      2MiB / 15360MiB |      7%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+

Docker 安装

可以使用 Docker 的官方脚本在 Ubuntu 上设置 Docker-CE:

curl https://get.docker.com | sh \&& sudo systemctl --now enable docker

请按照官方说明了解更多详细信息和安装后操作。

安装 NVIDIA Container Toolkit

在线安装

设置软件包仓库和GPG密钥

$ distribution=$(. /etc/os-release;echo $ID$VERSION_ID) \&& curl -fsSL https://nvidia.github.io/libnvidia-container/gpgkey | sudo gpg --dearmor -o /usr/share/keyrings/nvidia-container-toolkit-keyring.gpg \&& curl -s -L https://nvidia.github.io/libnvidia-container/$distribution/libnvidia-container.list | \sed 's#deb https://#deb [signed-by=/usr/share/keyrings/nvidia-container-toolkit-keyring.gpg] https://#g' | \sudo tee /etc/apt/sources.list.d/nvidia-container-toolkit.list

在更新软件包列表之后,安装 nvidia-container-toolkit 包(以及依赖项)。

$ sudo apt-get update
$ sudo apt-get install -y nvidia-container-toolkit

离线安装

离线安装包都在以下仓库和分支下:
https://github.com/NVIDIA/libnvidia-container/tree/gh-pages

以 ubuntu22.04为例,点开对应的目录,如果显示的是 Symbolic Link,则表示是个软链,例如我这点开后是 stable/ubuntu22.04,则代表软链到这个目录,进行跳转后发现还是一个 Symbolic Link ,里面是 ubuntu18.04,继续跳转,现在出现了系统的选择,这里我选择 amd64,进去后的目录里就是对应的安装包了。

在这里我们需要选择如下的安装包:

nvidia-container-toolkit-base_xxxx-1_amd64
nvidia-container-toolkit_1.xxxx-1_amd64
libnvidia-container1_1.xxxx-1_amd64
libnvidia-container-tools_1.xxxx-1_amd64

xxxx代表对应的 CUDA 版本,在我的这个实例中 xxxx,就是12.0,按以下顺序安装:

 dpkg -i libnvidia-container1_1.12.0-1_amd64.deb dpkg -i libnvidia-container-tools_1.12.0-1_amd64.debdpkg -i nvidia-container-toolkit-base_1.12.0-1_amd64.debdpkg -i nvidia-container-toolkit_1.12.0-1_amd64.deb

配置Docker守护程序,使其能够识别NVIDIA Container Runtime:

$ sudo nvidia-ctk runtime configure --runtime=docker

在设置默认 runtime 后,重新启动Docker守护程序以完成安装。

$ sudo systemctl restart docker

测试

最后,通过运行一个基本的CUDA容器来测试是否配置完成:

$ sudo docker run --rm --runtime=nvidia --gpus all  nvidia/cuda:12.0.1-runtime-ubuntu22.04 nvidia-smi

输出如下所示就代表你的容器以及支持GPU:

Fri Mar  3 07:47:04 2023       
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 525.85.12    Driver Version: 525.85.12    CUDA Version: 12.0     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  Tesla T4            Off  | 00000000:00:07.0 Off |                    0 |
| N/A   37C    P0    27W /  70W |      2MiB / 15360MiB |      7%      Default |
|                               |                      |                  N/A |
+-------------------------------+----------------------+----------------------++-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
|  No running processes found                                                 |
+-----------------------------------------------------------------------------+
http://www.lryc.cn/news/27379.html

相关文章:

  • 「并发编程实战」常见的限流方案
  • IO 复习
  • 什么是项目管理
  • 什么是入站营销?如何向合适的受众推销
  • Qt 崩溃 corrupted double-linked list Aborted
  • 牛逼了!这是什么神仙面试宝典?半月看完25大专题,居然斩获阿里P7offer
  • 单链表详解
  • 【AUTOSAR-CanNM】-3.1-如何让ECU发出的首帧是NM帧(Tx Nm报文先于Tx App应用报文发出)
  • html常用标签2和语法练习
  • 【go语言之thrift协议三之client端分析】
  • Codeforces Round #855 (Div. 3) A-E
  • 3/3操作系统作业
  • 「C/C++」 标准文件操作大全
  • 一款SAST工具需要支持多少种编译器呢?
  • jvm mat分析dump文件
  • python16行代码获取原神全角色+全语音
  • 链接投票二维码制作制作投票链接视频选举投票制作
  • HTTP 协议
  • 公司新招了个人,一副毛头小子的样儿,哪想到是新一代卷王····
  • TSDF学习记录
  • 【Linux】孤儿进程
  • ChatGPT解答:python大批量读写ini文件时,性能很低,有什么解决方法吗,给出具体的思路和实例
  • MySql主键id不推荐使用UUID
  • 密码算法(SM1、SM2、SM3、SM4、同态加密、密态计算、隐私计算和安全多方计算)
  • 保险行业中【内容行政系统】模块功能的实现
  • C语言入门知识——(7)VS2022的C语言基础调试
  • 数据库可视化开发工具内容介绍
  • 坚如磐石:TiDB 基于时间点的恢复(PiTR)特性优化之路丨6.5 新特性解析
  • 【云原生】K8S中PV和PVC
  • 24小时稳定性爆肝测试!国内外5款远程控制软件大盘点