Nvidia-docker的基础使用方法

安装:

安装nvidia-docker:

 distribution=$(. /etc/os-release;echo $ID$VERSION_ID)
 curl -s -L https://nvidia.github.io/nvidia-docker/gpgkey | sudo apt-key add -
 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
 sudo apt-get install nvidia-container-toolkit
 sudo apt-get install nvidia-docker2
 service docker restart
 sudo systemctl daemon-reload
 sudo systemctl restart docker

参考链接

配置

1. 配置镜像加速:

修改镜像文件,镜像文件位置/etc/docker/daemon.json

{
    "registry-mirrors": ["https://registry.docker-cn.com"],
    "runtimes": {
        "nvidia": {
            "args": [],
            "path": "nvidia-container-runtime"
        }
    }
}

重启docker:

sudo systemctl daemon-reload
sudo systemctl restart docker

2. 镜像的下载:

①查看cuda和cudnn版本:

 nvcc -V
 nvidia-smi
 cat /usr/local/cuda/include/cudnn.h | grep CUDNN_MAJOR -A 2 

②在dockerhub中选择所需要的镜像版本,尽量保持宿主机的版本和镜像的驱动版本一致:
这里搜索的ubuntu:
搜索ubuntu
有三种类型:

cuda的类型有三种:
1、base:基于CUDA,包含最精简的依赖,用于部署预编译的CUDA应用,需要手工安装所需的其他依赖;
2、runtime:基于base,添加了CUDA toolkit共享的库;
3、devel:基于runtime,添加了编译工具链,调试工具,头文件,静态库。用于从源码编译CUDA应用(推荐)。
参考链接

③比如这里选择:

docker pull nvidia/cuda:11.0.3-devel-ubuntu20.04

选择特定容器
然后复制指令到服务器上运行,等待即可。
下载过程
④最后通过docker images 命令查看本地镜像:

查看已安装镜像

⑤可以通过命令测试是否安装成功:

docker run --runtime=nvidia --rm nvidia/cuda:11.0.3-devel-ubuntu20.04 nvidia-smi

检查是否操作成功

⑥这样手动配置较为麻烦一般会提供dockerfile:
参考链接
sources.list文件:

deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-updates main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-backports main restricted universe multiverse
deb http://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse
# deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ focal-security main restricted universe multiverse

Dockerfile文件:
其中FROM :指定基础镜像;
RUN:执行命令;
COPY:将文件从主机复制到镜像中;
ADD:类似于 COPY,但具有更多功能,例如可以将 URL 资源下载到镜像中;
WORKDIR:设置工作目录,后续的命令将在该目录下执行;
ENV:设置环境变量;
CMD:指定容器启动时执行的默认命令,可以被覆盖;
VOLUME:创建挂载点,用于在容器和主机之间共享数据。
基本上是RUN命令,如果Dockerfile由于网络问题执行不了的话,也可以直接在命令行中执行对应的命令。

#FROM osrf/ros:noetic-desktop-full
#FROM vistart/cuda:10.1-cudnn7-runtime-ubuntu20.04
FROM nvidia/cudagl:11.0-devel-ubuntu20.04

ADD sources.list /etc/apt/
ENV PATH /opt/conda/bin:$PATH

RUN rm /etc/apt/sources.list.d/cuda.list
RUN apt-key del 7fa2af80
RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/cuda/repos/ubuntu1804/x86_64/3bf863cc.pub
RUN apt-key adv --fetch-keys https://developer.download.nvidia.com/compute/machine-learning/repos/ubuntu1804/x86_64/7fa2af80.pub

#install basic dependencies
RUN apt-get update &&  DEBIAN_FRONTEND=noninteractive apt install -y tzdata
# to solove the nvidia 443 issue
# RUN rm /etc/apt/sources.list.d/cuda.list
RUN apt-get install -y --no-install-recommends \
bzip2 \
g++ \
git \
graphviz \
libgl1-mesa-glx \
zlib1g \
zlib1g-dev \
libhdf5-dev \
openmpi-bin \
vim \
libsnappy-dev \
python3-dev \
python3-pip \
build-essential \
wget && \
rm -rf /var/lib/apt/lists/*

# Setup timezone
# RUN echo 'Etc/UTC' > /etc/timezone && \
#     ln -s /usr/share/zoneinfo/Etc/UTC /etc/localtime && \
#     apt-get update && \
#     apt-get install -q -y --no-install-recommends tzdata && \
#     rm -rf /var/lib/apt/lists/*

# Setup environment
RUN apt-get update
RUN apt-get upgrade -y --no-install-recommends
RUN DEBIAN_FRONTEND=noninteractive

创建bash命令文件docker_build.sh:

#!/bin/bash

username=$USER
userid=$UID

echo $username
echo $userid

echo ""
echo "Building image noetic_pytorch"
echo ""

docker image build --build-arg username0=$username \
--build-arg userid0=$userid \
--shm-size=64g -t \
noetic_pytorch_$username .

以上三个文件在同一文件夹下,直接在命令行中:

sudo sh docker_build.sh

文件夹

实例和镜像的关系:

在Docker中,存在实例(容器)和镜像两个核心概念。

镜像:

  • 镜像是一个静态的、不可变的文件,包含了应用程序运行所需的所有代码、运行时、库、环境变量和配置文件。
  • 镜像是一个只读文件,一旦创建就不会被更改。任何对镜像的修改都会生成一个新的镜像。
  • 镜像是容器的基础,容器实际上是从镜像创建而来的运行实例。

容器:

  • 容器是运行中的镜像的实例。可以将容器看作是一个轻量级、可执行的软件包,包含了运行应用程序所需的所有内容。
  • 容器可以被启动、停止、删除和暂停。当容器启动时,它会在内存中创建一个可写的文件系统层,使得镜像变得可写,并在其中运行应用程序。
  • 每个容器都是基于一个特定的镜像创建的,容器的状态可以随时保存,但不会影响原始镜像。

总结来说,镜像是一个静态的、不可变的文件,用于打包应用程序和其依赖关系,而容器是一个运行中的镜像实例,可以被启动、停止和删除。容器是镜像的可运行表现形式,允许在其中执行应用程序。

使用

1.查看本地已经安装的镜像:

docker images

可以看到

  • REPOSITORY: 镜像的仓库或来源;
  • TAG: 镜像的标签,标明版本或其他信息;
  • IMAGE ID: 镜像的唯一标识符;
  • CREATED: 镜像创建的时间;
  • SIZE: 镜像的大小。
    镜像

2.从命令行进入docker:

需要设置–runtime=nvidia连接nvidia驱动。
命令格式:
docker run --runtime=nvidia -it --privileged=true --name 实例名 <REPOSITORY:IMAGE ID> /bin/bash
或docker run --runtime=nvidia -it --privileged=true --name 实例名 /bin/bash
其中–runtime=nvidia用于指定容器运行时为 NVIDIA Container Runtime。NVIDIA Container Runtime 是 NVIDIA 提供的一个容器运行时,用于加速 GPU 加速的工作负载,提供对 NVIDIA GPU 的支持;
-it 运行一个交互式容器(交互式终端);
–name指定容器名称;
–privileged=true用于赋予容器一些特殊权限,使其能够访问主机上的一些特权功能。

sudo docker run --runtime=nvidia -it --privileged=true --name test4 nvidia/cuda:11.0.3-devel-ubuntu20.04 /bin/bash
sudo docker run --runtime=nvidia -it --privileged=true --name test4 66deaf56c203 /bin/bash

这里需要注意的是每次run其实都从镜像中产生了一个新的实例,所以命名的实例名–name不能相同。
命令行进入docker

3.删除镜像:

docker rmi -f 镜像ID号

4.退出

exit

实例操作:

1、查看当前运行的所有实例:

(base) lu@lu:~$ docker ps -a
CONTAINER ID   IMAGE                                  COMMAND       CREATED       STATUS                   PORTS     NAMES
581cfc468efe   rearrangement_submission:latest        "/bin/bash"   6 hours ago   Exited (0) 6 hours ago             hab-challenge
4d750a3333c6   nvidia/cuda:11.0.3-devel-ubuntu20.04   "/bin/bash"   6 hours ago   Exited (0) 6 hours ago             test

2、启动实例:

(base) lu@lu:~$ docker start 581cfc468efe -i
root@581cfc468efe:/workspace# 

3、关闭实例:

docker stop 容器ID或容器名

或直接关闭实例:

docker kill 容器ID或容器名

4、进入实例:必须是已经启动的容器。

docker exec -it 容器ID或容器名 bash

5、删除实例:

docker remove 容器ID或容器名

6、如何将实例保存为镜像:
因为实例默认而言是不会默认保存的,每次生成实例都是从镜像而来,这样保护了环境不会被破坏。如果实例被破坏了,可以直接删除。而如果实例配置好了,可以通过commi命令转为镜像。下次可以直接从对应的镜像中得到新的实例。
写法如下:docker commit my_container my_image:my_tag

(base) lu@lu:~$ sudo docker ps -a
CONTAINER ID   IMAGE                      COMMAND   CREATED         STATUS                     PORTS     NAMES
c7ccb865ee4d   noetic_pytorch_lu:latest   "bash"    9 minutes ago   Exited (1) 5 seconds ago             gallant_gagarin
(base) lu@lu:~$ sudo docker commit c7ccb865ee4d lu:v1.0

文件共享及传输

共享文件

docker run -it -v 主机文件夹路径:容器内文件夹路径 --name 希望创建的容器名字 镜像名:版本名 bash
如:

docker run -it -v ~/sharedspace:/sharedspace nvidia/cuda:11.0.3-devel-ubuntu20.04 bash

共享文件夹
命令过长为了方便可以写在bashrc中在命令行中输入docker_command即可。

alias docker_command='docker run -it -v ~/sharedspace:/sharedspace nvidia/cuda:11.0.3-devel-ubuntu20.04 bash'

传输文件:

(base) lu@lu:~$ sudo docker cp java_error_in_pycharm_.hprof a99ab5ed5e36:/workspace
Successfully copied 2.04GB to a99ab5ed5e36:/workspace

启动图形化界面:

在本机上配置:
首先在本机里安装相关依赖:

$ sudo apt-get install x11-xserver-utils

开放权限,允许所有用户,当然包括docker,访问X11的显示接口:

$ xhost +

启动docker时命令:

sudo docker run -it \
-v ~/sharedspace:/sharedspace \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-e NVIDIA_VISIBLE_DEVICES=all \
-e NVIDIA_DRIVER_CAPABILITIES=all \
--gpus all \
-e DISPLAY nvidia/cuda:11.0.3-devel-ubuntu20.04 \
/bin/bash

对于某些应用可能还要额外输入:

xhost +

参考链接1
参考链接2
参考链接3

可能出现的问题:

一、报错

Cannot connect to the Docker daemon at unix:///var/run/docker.sock. Is the docker daemon running?

解决:
启动docker并查看运行状态是否成功,

systemctl start docker

发现提示报错:

Failed to start Docker Application Container Engine

检查修改sudo gedit /etc/docker/daemon.json文件是否有问题。
二、错误:ERROR [ 2/100] RUN echo ‘Etc/UTC’ > /etc/timezone &&
参考网页链接:
解决方案

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/328064.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

如何手写一个RPC?

在学习 RPC 框架之前&#xff0c;我们先来手写一个RPC。 我们在学习的过程中&#xff0c;一定要做到知其然&#xff0c;还要知其所以然。 架构演进 单体架构 要知道&#xff0c;在以前单体架构的时候&#xff0c;会将所有的应用功能都集中在一个服务当中。 单体架构初始开发…

LeetCode、2336. 无限集中的最小数字(中等,小顶堆)

文章目录 前言LeetCode、2336. 无限集中的最小数字题目链接及类型思路代码题解 前言 博主所有博客文件目录索引&#xff1a;博客目录索引(持续更新) LeetCode、2336. 无限集中的最小数字 题目链接及类型 题目链接&#xff1a;2336. 无限集中的最小数字 类型&#xff1a;数据…

推挽输出、开漏输出、上拉输入、下拉输入、浮空输入。

一、推挽输出 推挽输出的内部电路大概如上图中黄色部分&#xff0c;输出控制内有反相器&#xff0c;由一个P-MOS和一个N-MOS组合而成&#xff0c;同一时间只有一个管子能够进行导通。 当写入1时&#xff0c;经过反向器后为0&#xff0c;P-MOS导通&#xff0c;N-MOS截至&#xf…

软件需求规格说明书

软件需求规格说明书编写规范编写规范 1.项目背景 2.项目目标 3.系统架构 4.总体流程 5.名称解释 6.功能模块

如何编译openssl的早期版本的共享库,如openssl 1.0

背景介绍 最近在为客户排查问题的时候&#xff0c;发现客户提供的日志是加密的&#xff0c;解密工具依赖到了openssl 1.0的共享库。可是手头没有这么老版本的openssl共享库。因此只好手动编译一个出来。 编译步骤 因为openssl 1.0是比较老的版本&#xff0c;很多系统上的库已…

android 反编译工具使用

记录一下dex2jar和ByteCode viewer的使用。 下载dex2jar 官方地址是https://github.com/pxb1988/dex2jar&#xff0c;下载完成后解压到特定的目录中&#xff0c;然后将其配置到环境变量中。 export PATH"$PATH:/Users/dong/Documents/tool/dex2jar/dex2jar/dex-tools-v2…

解决SVN文件不显示绿色小钩图标问题

解决SVN文件不显示绿色小钩图标问题 1 相关知识1.1 SVN基础1.2 SVN有哪些优点和缺点 2 解决办法2.1 方法一&#xff1a;修改状态缓存设置2.2 方法二&#xff1a;修改注册表&#xff08;好用&#xff09; 1 相关知识 1.1 SVN基础 SVN是Subversion的缩写&#xff0c;是一个开放…

UVa1453/LA4728 Squares

题目链接 本题是2009年ICPC亚洲区域赛首尔赛区的F题 题意 给定平面上n个边平行于坐标轴的矩形&#xff0c;在它们的顶点中找出两个欧几里得距离最大的点。如下图所示&#xff0c;距离最大的是S1的左下角和S4的右上角。正方形可以重合或者交叉。 你的任务是输出这个最大…

P9852 [ICPC2021 Nanjing R] Windblume Festival 题解(SPJ)

[ICPC2021 Nanjing R] Windblume Festival 单击此处下载原神 题面翻译 给一个长度为 n n n 环形整数序列 a a a, 每次操作可以任意选择一个下标 x x x&#xff0c;令 $ a_x a_x - a_{(x\bmod n)1}$&#xff0c;之后移除 a ( x m o d n ) 1 a_{(x\bmod n)1} a(xmodn)1​…

【Linux】Linux 系统编程——which 命令

文章目录 1.命令概述2.命令格式3.常用选项4.相关描述5.参考示例 1.命令概述 which 命令用于定位执行文件的路径。当输入一个命令时&#xff0c;which 会在环境变量 PATH 所指定的路径中搜索每个目录&#xff0c;以查找指定的可执行文件。 2.命令格式 which [选项] 命令名3.常…

华为数通HCIA题库(750题)

完整题库在这里&#xff1a;华为数通HCIA-RS题库注释版-加水印.pdf资源-CSDN文库 此处只节选几题。 1.网络管理员在网络中捕获到了一个数据帧&#xff0c;其目的MAC地址是01-00-5E-AO-B1-C3。关于该MAC地址的说法正确的是&#xff08; )。 A.它是一个单播MAC地址 B.它是一个广播…

【Shell编程练习】编写 shell 脚本,打印 9*9 乘法表

系列文章目录 输出Hello World 通过位置变量创建 Linux 系统账户及密码 监控内存和磁盘容量&#xff0c;小于给定值时报警 猜大小 输入三个数并进行升序排序 编写脚本测试 192.168.4.0/24 整个网段中哪些主机处于开机状态,哪些主机处于关机状态 系列文章目录编写 shell 脚本,打…

【OJ】链表刷题

个人主页 &#xff1a; zxctsclrjjjcph 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 题目 1. 相交链表&#xff08;160&#xff09;1.1 暴力求解1.1.1 分析1.1.2 代码实现 1.2 优化后求解1.2.1 分析1.2.2 代码实现 2. 随机链表的复制&#xff08;138&#xff09;…

个人网站制作 Part 7 添加用户认证和数据库集成 | Web开发项目

文章目录 &#x1f469;‍&#x1f4bb; 基础Web开发练手项目系列&#xff1a;个人网站制作&#x1f680; 用户认证与数据库集成&#x1f528;添加用户认证&#x1f527;步骤 1: 使用Passport.js &#x1f528;集成数据库&#x1f527;步骤 2: 使用MongoDB和Mongoose &#x1f…

48 分布式id的生成策略

1.UUID 1.UUID (Universally Unique Identifier)&#xff0c;通用唯一识别码。UUID是基于当前时间、计数器&#xff08;counter&#xff09;和硬件标识&#xff08;通常为无线网卡的MAC地址&#xff09;等数据计算生成的。UUID由以下几部分的组合&#xff1a; 1.当前日期和时…

Apache Solr <= 8.8.1任意文件读取漏洞复现CVE-2019-17558

一、环境准备 搭建环境vulhub&#xff0c;需要提前安装docker环境 docker安装&#xff1a;docker--安装docker-ce-CSDN博客 vulhub地址&#xff1a;https://github.com/vulhub/vulhub #创建靶场环境 mkdir /opt/vulhub cd /opt/vulhub git https://github.com/vulhub/vulhu…

<软考高项备考>《论文专题 - 71 风险管理(3)》

3 过程2-识别风险 3.1 问题 4W1H过程做什么是识别单个项目风险以及整体项目风险的来源&#xff0c;并记录风险特征的过程。作用:1、记录现有的单个项目风险&#xff0c;以及整体项目风险的来源:2、汇总相关信息&#xff0c;以便项目团队能够恰当地应对已识别的风险。为什么做…

编译原理1.3习题 程序设计语言的发展历程

图源&#xff1a;文心一言 编译原理习题整理~&#x1f95d;&#x1f95d; 作为初学者的我&#xff0c;这些习题主要用于自我巩固。由于是自学&#xff0c;答案难免有误&#xff0c;非常欢迎各位小伙伴指正与讨论&#xff01;&#x1f44f;&#x1f4a1; 第1版&#xff1a;自…

【Java SE语法篇】11.异常

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ 文章目录 1. 异常的概念和体系结构1.1 异常的概念1.2 异常体系…

企业微信开发:自建应用:access_token

access_token 过期后接口响应 access_token 已经过期&#xff08;2小时&#xff09;后&#xff0c;调用接口的响应&#xff1b;本文中以发送消息接口为例&#xff0c;说明接口响应的情况。 官方开发文档链接&#xff1a;获取access_token access_token 过期后调用接口 响应体 …