Docker离线安装Nvidia-container-toolkit实现容器内GPU调用
创始人
2025-01-16 18:06:18
0次

目录

  • 背景
  • 预先准备
  • Nvidia-container-toolkit架构
    • 架构
    • 依赖关系
  • 离线安装
    • 安装顺序
    • 软件下载
    • 安装
  • 测试

背景

需求:实验室内通过Docker搭建隔离环境保证各用户数据安全和服务器环境安全,防止软件环境混杂造成莫名其妙的bug,容器内需要能够调用显卡资源。

预先准备

本文的内容基于以下软件版本:
Docker:Docker version 20.10.17, build 100c701
CUDA:NVIDIA-SMI 510.68.02 Driver Version: 510.68.02 CUDA Version: 11.6
系统:Ubuntu 20.04.4 LTS

Nvidia-container-toolkit架构

Nvidia官网架构概述,可以用Chrome自带网页翻译仔细阅读,本文仅简单介绍。

架构

The NVIDIA container stack is architected so that it can be targeted to support any container runtime in the ecosystem. The components of the stack include: 	The nvidia-docker wrapper 	The NVIDIA Container Runtime (nvidia-container-runtime) 	The NVIDIA Container Runtime Hook (nvidia-container-toolkit / nvidia-container-runtime-hook) 	The NVIDIA Container Library and CLI (libnvidia-container1, nvidia-container-cli) ... Note that as of version 3.6.0, the nvidia-container-runtime package is a meta package that  only depends on the nvidia-container-toolkit package and does not provide any functionality of itself. 

NVIDIA container主要组件包括nvidia-container-runtime, nvidia-container-toolkit, libnvidia-container和CUDA驱动;
在3.6.0版本后,runtime包成为一个只依赖于toolkit包(指container-toolkit而不是nvidia CUDA toolkit)的包,在官网中也指出,对于一般的应用而言,nvidia-container-toolkit能够满足绝大多数需求。
NV docker架构
架构结构如图所示。

依赖关系

本文使用的Docker版本较高,已经不需要再独立安装nvidia-docker,只需要配置好上述环境即可。
本文需要配置的软件包为:

nvidia-container-toolkit libnvidia-container-tools libnvidia-container1 

不需要安装nvidia-container-runtime!
依赖如下,摘自官网。

├─ nvidia-container-toolkit (version) │    └─ libnvidia-container-tools (>= version) │ ├─ libnvidia-container-tools (version) │    └─ libnvidia-container1 (>= version) └─ libnvidia-container1 (version) 

离线安装

安装顺序

按照上文依赖关系,安装顺序为

libnvidia-container1 -> libnvidia-container-tools -> nvidia-container-toolkit 

软件下载

本文与网上大部分方法不同,基于离线方式安装。
官网提供GitHub链接:
旧版的nvidia-container-toolkit(不需要,如有需要安装旧版本可以看该链接)
https://github.com/NVIDIA/nvidia-container-runtime/tree/gh-pages/`

libnvidia-container1,本文环境下只安装这个即可
https://github.com/NVIDIA/libnvidia-container/tree/gh-pages/

根据镜像的系统版本查找:
Ubuntu 20.04 点进去是一个符号链接,链接到仓库的stable/ubuntu20.04,再点stable/ubuntu20.04又是一个链接到stable/ubuntu18.04的符号链接,根据架构选择amd64(x86_64同)。

分别下载:

libnvidia-container1_1.9.0-1_amd64.deb						# Add packages for NVIDIA Container Toolkit v1.9.0 release libnvidia-container-tools_1.9.0-1_amd64.deb					# Add packages for NVIDIA Container Toolkit v1.9.0 release nvidia-container-toolkit_1.9.0-1_amd64.deb					# Add packages for NVIDIA Container Toolkit v1.9.0 release 

下载完后上传到服务器。

安装

  1. cd到目录下,使用dpkg安装:
    $ sudo dpkg -i ./libnvidia-container1_1.9.0-1_amd64.deb
    $ sudo dpkg -i ./libnvidia-container-tools_1.9.0-1_amd64.deb
    $ sudo dpkg -i ./nvidia-container-toolkit_1.9.0-1_amd64.deb

  2. 可能存在报错:
    /sbin/ldconfig.real: /usr/local/cuda-11.6/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8 is not a symbolic link等几条信息。
    解决方式:
    创建符号链接使xxx.so.8指向xxx.so,注意需要写绝对路径
    $ ln -sf /usr/local/cuda-11.6/targets/x86_64-linux/lib/libcudnn_cnn_infer.so /usr/local/cuda-11.6/targets/x86_64-linux/lib/libcudnn_cnn_infer.so.8,前一个参数指实际存储的目标文件,后一个参数是so.8文件。

测试

  1. 运行容器:
    $ docker run -it -v /home/your_user_name/docker_workdir/:/home/in_docker_user/ --gpus all -p 21203:22 docker_repo/ubuntu:lab_base_env
    其中-p 21203:22指定了宿主机21203端口映射到容器的22端口,可以通过ssh in_docker_user@xxx.xxx.xxx.xxx -p 21203实现外部远程访问容器。

  2. 运行nvidia-smi,正常显示显卡信息

Tue Oct 25 11:34:21 2022 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 510.68.02    Driver Version: 510.68.02    CUDA Version: 11.6     | |-------------------------------+----------------------+----------------------+ | 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  NVIDIA GeForce ...  Off  | 00000000:73:00.0 Off |                  N/A | | 32%   42C    P0   104W / 350W |      0MiB / 24576MiB |      0%      Default | |                               |                      |                  N/A | +-------------------------------+----------------------+----------------------+ |   1  NVIDIA GeForce ...  Off  | 00000000:D5:00.0 Off |                  N/A | | 34%   60C    P0   120W / 350W |      0MiB / 24576MiB |      3%      Default | |                               |                      |                  N/A | +-------------------------------+----------------------+----------------------+  +-----------------------------------------------------------------------------+ | Processes:                                                                  | |  GPU   GI   CI        PID   Type   Process name                  GPU Memory | |        ID   ID                                                   Usage      | |=============================================================================| |  No running processes found                                                 | +-----------------------------------------------------------------------------+ 

相关内容

热门资讯

玩家爆料开挂app!丹东约战麻... 玩家爆料开挂app!丹东约战麻将多功能开挂app,丹东约战麻将果然真的有开挂app1、下载好丹东约战...
终于清楚辅助软件!丰城棋牌多功... 终于清楚辅助软件!丰城棋牌多功能辅助软件,丰城棋牌本来是真的有辅助软件1、起透看视 丰城棋牌辅助软件...
重大消息透视器方法!科尔沁麻将... 重大消息透视器方法!科尔沁麻将多功能透视器方法,科尔沁麻将本来是有透视器方法科尔沁麻将脚本下载中分为...
分享个大家辅助方法!天津麻将多... 分享个大家辅助方法!天津麻将多功能辅助方法,天津麻将竟然是真的有辅助方法1、很好的工具软件,可以解锁...
带你了解外挂攻略!逍遥皖北棋牌... 带你了解外挂攻略!逍遥皖北棋牌多功能外挂攻略,逍遥皖北棋牌总是是有外挂攻略1、在逍遥皖北棋牌插件功能...
热门推荐透视挂攻略!悠乐汇多功... 热门推荐透视挂攻略!悠乐汇多功能透视挂攻略,悠乐汇切实真的有透视挂攻略;1、全新机制【悠乐汇ai辅助...
推荐一款辅助方法!科尔沁麻将多... 推荐一款辅助方法!科尔沁麻将多功能辅助方法,科尔沁麻将其实真的有辅助方法1、不需要AI权限,帮助你快...
重大来袭开挂攻略!一乐浙江多功... 重大来袭开挂攻略!一乐浙江多功能开挂攻略,一乐浙江一贯是真的有开挂攻略1、让任何用户在无需一乐浙江安...
详细说明作弊器技巧!启东麻将多... 详细说明作弊器技巧!启东麻将多功能作弊器技巧,启东麻将一贯存在有作弊器技巧1、下载好启东麻将透视辅助...
玩家必看科普辅助插件!闲来互娱... 玩家必看科普辅助插件!闲来互娱多功能辅助插件,闲来互娱一贯有辅助插件1、很好的工具软件,可以解锁游戏...