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

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.listsudo apt-get updatesudo apt-get install nvidia-container-toolkitsudo apt-get install nvidia-docker2service docker restartsudo systemctl daemon-reloadsudo 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 -Vnvidia-smicat /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.04ADD sources.list /etc/apt/
ENV PATH /opt/conda/bin:$PATHRUN 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/bashusername=$USER
userid=$UIDecho $username
echo $useridecho ""
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 &&
参考网页链接:
解决方案

相关文章:

Nvidia-docker的基础使用方法

安装&#xff1a; 安装nvidia-docker&#xff1a; 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.l…...

uniapp一键换色

需求 : 在我们现有项目基础上, 把原来的颜色替换成另一个颜色, 同时需要为下一个项目预留出来随时更换主题色, 实现一键换色 实现 : 1. 介绍 兼容不同项目对主题色及图标的需求 主要通过以下对css颜色和icon主题色图标两个模块的切换 scss/less的css变量config/index.js中的…...

动态规划思想案例刨析

动态规划的思想 动态规划解决问题的核心思想是“重叠子问题”和“最优子结构”。 重叠子问题&#xff1a;在复杂问题中&#xff0c;往往存在许多重复的子问题。动态规划通过避免重复计算&#xff0c;将子问题的解保存起来&#xff0c;以便在需要时直接引用&#xff0c;从而提…...

vtk9.3 配置 visual studio 2019 运行环境 和运行实例详解

&#xff08;1&#xff09;包含文件配置&#xff1a; 项目--属性--VC目录&#xff0c;在包含目录中把include文件夹的地址加进去&#xff0c;一直要到下一级 vtk-9.3目录下&#xff0c; 小知识&#xff1a; 在Visual Studio 2019中运行项目时&#xff0c;如果项目中使用了第三…...

腾讯云添加SSL证书

一、进入腾讯云SSL证书&#xff1a; ssl证书控制台地址 选择“我的证书”&#xff0c;点击"申请免费证书" 2、填写域名和邮箱&#xff0c;点击“提交申请” 在此页面中会出现主机记录和记录值。 2、进入云解析 DNS&#xff1a;云解析DNS地址 进入我的解析-记录…...

CentOS下用rpm安装软件时报错error: Failed dependencies

在CentOS下用rpm安装软件时会报如下错误&#xff1a; 1、安装时提示&#xff1a; [rootdb software]# rpm -ivh ksh-20120801-254.el8.x86_64.rpm warning: ksh-20120801-254.el8.x86_64.rpm: Header V3 RSA/SHA256 Signature, key ID 8483c65d: NOKEY error: Failed depende…...

Vue3+Vite连接高德地图JS API——地图显示、输入搜索

1 开通高德地图Web端JS API服务 1、进入高德地图API官网&#xff08;https://lbs.amap.com/&#xff09;&#xff1a; 2、注册登录。 3、进入控制台。 4、点击“应用管理”&#xff0c;点击“我的应用”&#xff0c;创建新应用。 5、添加Key&#xff0c;服务平台选择“Web端&…...

一台java服务器可以跑多少个线程?

一台java服务器可以跑多少个线程&#xff1f; 一台java服务器能跑多少个线程&#xff1f;这个问题来自一次线上报警如下图&#xff0c;超过了我们的配置阈值。 打出jstack文件&#xff0c;通过IBM Thread and Monitor Dump Analyzer for Java工具查看如下&#xff1a; 共计166…...

【Python 千题 —— 基础篇】猜数字小游戏

题目描述 题目描述 猜数字。利用 random 函数随机生成一个1~100之间的数并存储在变量中&#xff0c;然后使用条件判断以及循环方式编写一个猜数字的环节&#xff1a; 如果输入的数字大于随机生成的数字&#xff0c;则输出“猜大了”如果输入的数字小于随机生成的数字&#x…...

Android Media3 ExoPlayer 如何正确设置缓存大小

在播放音视频时&#xff0c;如何开启 Android Media3 ExoPlayer 缓存&#xff0c;请参考笔者另外一篇文章&#xff1a; Android Media3 Exoplayer 开启缓存功能 笔者在设置 ExoPlayer 的缓存大小时&#xff0c;遇到一个非常奇怪的问题&#xff0c;例如&#xff0c;设置最大缓存…...

WPF实现右键选定TreeViewItem

在WPF中&#xff0c;TreeView默认情况是不支持右键选定的&#xff0c;也就是说&#xff0c;当右键点击某节点时&#xff0c;是无法选中该节点的。当我们想在TreeViewItem中实现右键菜单时&#xff0c;往往希望在弹出菜单的同时选中该节点&#xff0c;以使得菜单针对选中的节点生…...

蓝桥杯 java 重复字符串

题目描述 * 如果一个字符串S恰好可以由某个字符串重复K次得到&#xff0c;我们就称S是K次重复字符串。 * 例如 abcabcabc 可以看作是 abc重复3次得到&#xff0c;所以 abcabcabc 是3次重复字符串。 * 同理 aaaaaa 既是2次重复字符串、又是3次重复字符串和6次重复字符串。 * 现在…...

Vue实战:两种方式创建Vue项目

文章目录 一、实战概述二、实战步骤&#xff08;一&#xff09;安装Vue CLI脚手架1、从Node.js官网下载LTS版本2、安装Node.js到指定目录3、配置Node.js环境变量4、查看node版本5、查看npm版本6、安装Vue Cli脚手架7、查看Vue Cli版本 &#xff08;二&#xff09;命令行方式构建…...

不同打包工具下的环境变量配置方式对比

本文作者为 360 奇舞团前端开发工程师 天明 前言 在现代的JavaScript应用程序开发中&#xff0c;环境变量的配置是至关重要的。不同的应用场景和部署环境可能需要不同的配置&#xff0c;例如开发、测试和生产环境。最常见的需求是根据不同的环境&#xff0c;配置如是否开启sour…...

5个99%的人可能不知道的实用程序库!

前言 作为一名前端开发者,这些 JavaScript 库极大地提高了我的工作效率,如格式化日期、处理 URL 参数和调试移动网页。朋友们,我想和你们分享这些库。 1. 使用 “Day.js” 来格式化日期和时间 链接 作为开发者,我已经厌倦了在 JavaScript 中操作日期和时间,因为它太麻烦了。…...

shell脚本,ADB

Linux命令行命令是系统内置的命令或用户自定义的脚本&#xff08;shell 脚本&#xff0c;.sh扩展名结尾&#xff09;&#xff0c;可以通过终端输入命令来执行。这些命令通常存储在Linux系统的/bin、/usr/bin、/sbin、/usr/sbin等目录下&#xff0c;也可以在$PATH环境变量中指定…...

微服务治理:微服务安全详解

微服务安全旨在保护微服务架构中每一个独立的服务。与传统单体应用程序不同&#xff0c;它们在单点应用安全措施&#xff0c;微服务由于其独立性&#xff0c;需要分布式安全方法。 为何关注微服务安全&#xff1f; 攻击面扩大: 更多服务暴露在外&#xff0c;意味着攻击者拥有…...

迅为RK3588开发板编译 Buildroot单独编译图形化界面三

第三步&#xff1a;编译 Recovery 首先在 linux 源码目录下输入以下命令进入编译的 UI 界面&#xff0c;进入之后如下所示&#xff1a; ./build.sh 然后将光标移动到第四个 recovery&#xff0c;点击回车即可开始 recovery 的编译&#xff0c;编译过程如下所示&#xff1a; 编…...

yum仓库及NFS共享

目录 一.yum仓库的基本原理 1.Yum概述&#xff1a; 2.Yum实现过程&#xff1a; 二. yum配置文件及命令&#xff1a; 1. 主配置文件&#xff1a; 2. 仓库设置文件&#xff1a; 3 .日志文件&#xff1a; ​编辑4.yum命令详解&#xff1a; 三. 搭建仓库的方式&#xff1a; …...

【Web】CTFSHOW PHP特性刷题记录(全)

知其然知其所以然&#xff0c;尽量把每种特性都详细讲明白。 目录 web89 web90 web91 web92 web93 web94 web95 web96 web97 web98 web99 web100 web101 web102 web103 web104 web105 web106 web107 web108 web109 web110 web111 web112 web113 web…...

《通信之道——从微积分到 5G》读书总结

第1章 绪 论 1.1 这是一本什么样的书 通信技术&#xff0c;说到底就是数学。 那些最基础、最本质的部分。 1.2 什么是通信 通信 发送方 接收方 承载信息的信号 解调出其中承载的信息 信息在发送方那里被加工成信号&#xff08;调制&#xff09; 把信息从信号中抽取出来&am…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

CMake控制VS2022项目文件分组

我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件&#xff0c;用于在原生应用中加载 HTML 页面&#xff1a; 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

Hive 存储格式深度解析:从 TextFile 到 ORC,如何选对数据存储方案?

在大数据处理领域&#xff0c;Hive 作为 Hadoop 生态中重要的数据仓库工具&#xff0c;其存储格式的选择直接影响数据存储成本、查询效率和计算资源消耗。面对 TextFile、SequenceFile、Parquet、RCFile、ORC 等多种存储格式&#xff0c;很多开发者常常陷入选择困境。本文将从底…...

Redis的发布订阅模式与专业的 MQ(如 Kafka, RabbitMQ)相比,优缺点是什么?适用于哪些场景?

Redis 的发布订阅&#xff08;Pub/Sub&#xff09;模式与专业的 MQ&#xff08;Message Queue&#xff09;如 Kafka、RabbitMQ 进行比较&#xff0c;核心的权衡点在于&#xff1a;简单与速度 vs. 可靠与功能。 下面我们详细展开对比。 Redis Pub/Sub 的核心特点 它是一个发后…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...

comfyui 工作流中 图生视频 如何增加视频的长度到5秒

comfyUI 工作流怎么可以生成更长的视频。除了硬件显存要求之外还有别的方法吗&#xff1f; 在ComfyUI中实现图生视频并延长到5秒&#xff0c;需要结合多个扩展和技巧。以下是完整解决方案&#xff1a; 核心工作流配置&#xff08;24fps下5秒120帧&#xff09; #mermaid-svg-yP…...

前端开发者常用网站

Can I use网站&#xff1a;一个查询网页技术兼容性的网站 一个查询网页技术兼容性的网站Can I use&#xff1a;Can I use... Support tables for HTML5, CSS3, etc (查询浏览器对HTML5的支持情况) 权威网站&#xff1a;MDN JavaScript权威网站&#xff1a;JavaScript | MDN...

游戏开发中常见的战斗数值英文缩写对照表

游戏开发中常见的战斗数值英文缩写对照表 基础属性&#xff08;Basic Attributes&#xff09; 缩写英文全称中文释义常见使用场景HPHit Points / Health Points生命值角色生存状态MPMana Points / Magic Points魔法值技能释放资源SPStamina Points体力值动作消耗资源APAction…...