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 &&
参考网页链接:
解决方案

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

代码随想录 Leetcode344. 反转字符串

题目&#xff1a; 代码(首刷自解 2024年1月16日&#xff09;&#xff1a; class Solution { public:void reverseString(vector<char>& s) {int n s.size();int left 0, right n - 1;while (left < right) {char tep s[left];s[left] s[right];s[right] te…

MetaGPT入门(一)

本文在Win11操作系统下进行&#xff0c;工具pycharm 一、环境准备 1.建议使用conda虚拟环境 安装anaconda参考&#xff1a;Windows10下Anaconda的安装_windows anaconda 路径-CSDN博客 打开Anaconda Powershell Prompt命令窗口&#xff0c;输入下面命令&#xff0c;创建3.1…

HNU-编译原理-实验1-利用FLEX构造C-Minus-f词法分析器

编译原理实验1利用FLEX构造C-Minus-f词法分析器 计科210X 甘晴void 202108010XXX 实验要求 详细的实验项目文档为 https://gitee.com/coderwym/cminus_compiler-2023-fall/tree/master/Documentations/lab1 学习和掌握词法分析程序的逻辑原理与构造方法。通过 FLEX 进行实…

反向代理的本质是什么?

反向代理是一种网络架构模式&#xff0c;通常用于提供静态内容、处理安全、负载均衡和缓存等任务。在这种架构中&#xff0c;客户端发送的请求首先到达反向代理服务器&#xff0c;然后由反向代理服务器将请求转发给后端的实际服务器。反向代理服务器可以处理和修改请求和响应&a…

ThinkPHP5.0.0~5.0.23RCE 漏洞分析及挖掘思路

前言 本节我将分析thinkphp5.0.x 版本的RCE漏洞&#xff0c;根据漏洞的研究模拟挖掘此漏洞的思路 本次分析框架下载&#xff0c;由于官方已经下架了相关的下载接口&#xff0c;这里我们用三方下载 一份v5.0.22版本的升级中...https://www.codejie.net/5828.html 附赠 thinkp…

资源调度-HPA:基于负载指标自动水平扩容缩容Pod

Pod 自动扩容&#xff1a;可以根据 CPU 使用率或自定义指标&#xff08;metrics&#xff09;自动对 Pod 进行扩/缩容。 控制管理器每隔30s&#xff08;可以通过–horizontal-pod-autoscaler-sync-period修改&#xff09;查询metrics的资源使用情况 支持三种metrics类型 预定义…

RabbitMQ交换机(1)

1.交换机Exchange RabbitMQ消息传递模型的核心思想是: 生产者生产的消息从不会直接发送到队列。实际上&#xff0c;通常生产者甚至都不知道这些消息传递传递到了哪些队列中。 相反&#xff0c;生产者只能将消息发送到交换机(exchange)&#xff0c;交换机工作的内容非常简单&am…

MySQL-多表联合查询

&#x1f389;欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦)o *☆哈喽~我是小小恶斯法克&#x1f379; ✨博客主页&#xff1a;小小恶斯法克的博客 &#x1f388;该系列文章专栏&#xff1a;重拾MySQL &#x1f379;文章作者技术和水平很有限&#xff0c;如果文中出现错误&am…

Java面试基础|数据结构 -实时更新

1.HashMap和ConcurrentHashMap介绍 核心是一个Node数组&#xff0c;数据结构与hashMap相似 使用CAS操作来实现无锁的更新&#xff0c;提高了并发性。当更新节点时&#xff0c;它会使用CAS来替换节点的值或链接&#xff0c;如果CAS失败&#xff0c;表明有其他线程也在进行修改&a…

使用 Python 创造你自己的计算机游戏(游戏编程快速上手)第四版:第十九章到第二十一章

十九、碰撞检测 原文&#xff1a;inventwithpython.com/invent4thed/chapter19.html 译者&#xff1a;飞龙 协议&#xff1a;CC BY-NC-SA 4.0 碰撞检测涉及确定屏幕上的两个物体何时相互接触&#xff08;即发生碰撞&#xff09;。碰撞检测对于游戏非常有用。例如&#xff0c;如…

K8S之configMapsecret

job 第一个是初始化尝试&#xff0c;初始化尝试失败之后&#xff0c;会再重试两次。 配置资源管理: Secret Configmap*:1.2加入的新特征 1.18 Secret: 保存密码&#xff0c;token,敏感的k8s资源 这类数据可以存放在镜像当中&#xff0c;但是防止secret当中可以更方便的控…

QT第五天

使用QT绘图和绘图事件&#xff0c;完成仪表盘绘图&#xff0c;如下图&#xff1a; 程序运行结果&#xff1a; 代码&#xff1a; widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QPainter> #include <QPen> #include <QBrush&…

PromptCast-时间序列预测的好文推荐

前言 这是关于大语言模型和时间序列预测结合的好文推荐&#xff0c;发现这篇文章&#xff0c;不仅idea不错和代码开源维护的不错&#xff0c;论文也比较详细&#xff08;可能是顶刊而不是顶会&#xff0c;篇幅大&#xff0c;容易写清楚&#xff09;&#xff0c;并且关于它的Br…

2023 IoTDB Summit:天谋科技高级开发工程师谭新宇《优其效:如何用 IoTDB 监控工具进行深度系统调优》...

12 月 3 日&#xff0c;2023 IoTDB 用户大会在北京成功举行&#xff0c;收获强烈反响。本次峰会汇集了超 20 位大咖嘉宾带来工业互联网行业、技术、应用方向的精彩议题&#xff0c;多位学术泰斗、企业代表、开发者&#xff0c;深度分享了工业物联网时序数据库 IoTDB 的技术创新…

Kafka-生产者

Kafka在实际应用中&#xff0c;经常被用作高性能、可扩展的消息中间件。 Kafka自定义了一套网络协议&#xff0c;只要遵守这套协议的格式&#xff0c;就可以向Kafka发送消息&#xff0c;也可以从Kafka中拉取消息。 在实践生产过程中&#xff0c;一套API封装良好、灵活易用的客…

跟着cherno手搓游戏引擎【8】按键和鼠标的KeyCode

自定义KeyCode 先把glfw3.h里的KeyCode的定义抄到咱这里来。 在YOTO下创建KeyCode.h: #pragma once#ifdef YT_PLATFORM_WINDOWS///从glfw3中拿的 #define YT_KEY_SPACE 32 #define YT_KEY_APOSTROPHE 39 /* */ #define YT_KEY_COMMA 44…

迈向2024:医疗机器人的市场前景与技术革新

原创 | 文 BFT机器人 医疗机器人技术正以前所未有的速度在主流医学领域取得卓越进展&#xff0c;新应用、新技术不断涌现&#xff0c;使得该领域在过去一年中取得了令人惊叹的增长。然而&#xff0c;这仅仅是冰山一角&#xff0c;未来的发展空间仍然广阔无垠。 展望2024年&…

海外云手机:跨境养号的新趋势

近年来&#xff0c;市场综合数据显示&#xff0c;利用海外云手机进行跨境养号已经成为跨境电商发展的新潮流。特别是在社交电商营销和短视频引流领域&#xff0c;海外云手机不仅能够提高流量的质量&#xff0c;还能让商家实现业务翻倍增长。接下来&#xff0c;本文将简要阐述海…

软件测试|使用Python生成PDF文件

简介 PDF&#xff08;Portable Document Format&#xff09;是一种常用的文档格式&#xff0c;具有跨平台兼容性、保真性、安全性和交互性等特点。我们日常生活工作中的合同、报告、论文等通常都采用PDF格式&#xff0c;以确保文档在不同的操作系统&#xff08;例如 Windows、…

Leetcode刷题【每日n题】(2)

&#x1f95a;今日鸡汤&#x1f95a; 修仙之道&#xff0c;需有勇气和决心&#xff0c;方能战胜一切困难。 ——《斗破苍穹》 目录 1.题目一 2.思路分析 3.代码实现 4.题目二 5.思路分析 6.代码实现 1.题目一 16. 最接近的三数之和 给你一个长度为 n 的整数数组 nums 和 …