nvidia-docker踩坑记录

2023-11-13

docker, nvidia-docker配置镜像创建容器

众所周知,想要在容器中使用nvidia的显卡,需要使用nvidia-docker命令创建容器
环境说明: 服务器端为Ubuntu18.04离线,nvidia-smi正常使用,CUDA版本11.4

Step1:按需下载基础docker镜像(建议按需制作自己的ubuntu18.04的镜像tar包)

参考信息:

尽管Pytorch官方和Nvidia-NCG提供了很多版本的Pytorch镜像,但是我们平时的科研和工作中经常需要在特定系统版本、特定CUDA版本、特定Python版本下使用特定版本的Pytorch,官方的镜像很难满足自定义的需求,因此需要自己构建Pytorch镜像
# 建议使用dockerfile

如有现成匹配CUDA的tar包(如:10.2-cudnn7-devel-ubuntu18.04-v2.tar)可直接下一步

Step2:服务器断网情况下,安装nvidia-docker

下载参考:

https://blog.csdn.net/WenZhaoYang123/article/details/128371533
https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/
http://mirror.cs.uchicago.edu/nvidia-docker/libnvidia-container/stable/ubuntu16.04/amd64/

建议安装docker20.10.7,18版本装完nvidia-docker2后无法使用

安装参考:

sudo dpkg -i containerd.io_1.4.6-1_amd64.deb
sudo dpkg -i docker-ce-cli_20.10.7~3-0~ubuntu-xenial_amd64.deb
sudo dpkg -i docker-ce_20.10.7~3-0~ubuntu-xenial_amd64.deb

#装完以上3个文件,可以查看docker -v

sudo dpkg -i nvidia-container-toolkit-base_1.11.0-1_amd64.deb
sudo dpkg -i libnvidia-container1_1.11.0-1_amd64.deb
sudo dpkg -i libnvidia-container-tools_1.11.0-1_amd64.deb
sudo dpkg -i nvidia-container-toolkit_1.11.0-1_amd64.deb

sudo dpkg -i nvidia-docker2_2.8.0-1_all.deb
# 重启docker服务
sudo systemctl daemon-reload 
sudo systemctl restart docker

# 装完以上所有文件,使用nvidia-docker命名不报错即可
Step3: nvidia-docker加载镜像及创建容器

举例:

# 载入镜像:
# 方式1:从镜像归档文件ubuntu_v2.tar创建镜像,命名为nvidia/cuda:10.2-cudnn7-ubuntu18.04-v3
docker import 10.2-cudnn7-devel-ubuntu18.04-v2.tar nvidia/cuda:10.2-cudnn7-ubuntu18.04-v3

# 方式2:直接载入,不可修改
sudo docker load < 10.2-cudnn7-devel-ubuntu18.04-v2.tar.tar

# 查看
docker images -a
# 基于镜像,创建容器(可以指定共享内存大小,指定使用GPU数量)
sudo nvidia-docker run -itd --name new_1 --gpus all \
							--privileged=true \ 
							-v /home:/root/new_1 \		# 挂载不要直接挂在/root下,会覆盖容器内的root目录
                           	-p 9001:80 -p 9002:22 -p 9003:5900 \
                            nvidia/cuda:10.2-cudnn7-ubuntu18.04-v3
# 注意:-p指定的前2个分别是网页端和终端进入的端口号
网页:172.16.0.123:9001
终端:ssh -p 9002  root@172.16.0.123
Step*:踩坑记录 及 建议

(1)nvidia-docker创建镜像后,看到docker ps -a 的容器STATUS栏显示(healthy:starting),表示启动中,

过一会看,显示(unhealthy),说明创建容器遇到问题,可以查看docker log 容器id, 看能否找出问题;

Solution:
直接docker stop 该容器,再docker restart 容器id,重复2,3次大概可以显示(healthy),此时可以使用ssh连接进入;(unhealthy状态仅能通过docker exec -it 进入)

(2)创建容器时,-p建议创建2个端口号,若仅用1个-p,可能只能从网页端进入;

(3)创建容器的共享内存配置项 如 --shm-size 16G, 建议根据宿主机实际情况配置,创建容器多次失败建议去除该项试试;

(4)linux进入容器中,可能出现安装了conda命令但无法使用的情况,建议直接进入如/root/minconda/bin/conda --version
Solution:linux系统进入该容器可能需要将该路径加入环境变量,目前win系统进入容器直接是base环境

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

nvidia-docker踩坑记录 的相关文章

随机推荐

  • python安装

    Python 环境搭建 本章节我们将向大家介绍如何在本地搭建Python开发环境 Python可应用于多平台包括 Linux 和 Mac OS X 你可以通过终端窗口输入 python 命令来查看本地是否已经安装Python以及Python
  • ORA-32021: parameter value longer than 255 characters 解决方法

    在增加节点完后 用dbca 添加数据库实例时 报ORA 32021 parameter value longer than 255 characters 错误 oraagent log 2011 10 24 09 18 32 724 USR
  • 框架学习笔记——Spring

    Spring 文章目录 Spring 1 Spring简介 1 1 框架的主要特征 1 2 Spring的主要特点 1 3 组成 2 Spring之控制反转 IOC 2 1 百科 2 2 两种方式 2 3 依赖注入 推导 2 3 1 新建一
  • Centos7.5安装应用服务教程 ---- jdk1.8安装教程

    1 下载jdk1 8压缩包 建议装在 usr local目录下 2 解压 tar zxvf jdk 8u301 linux x64 tar gz 3 配置环境变量 修改文件配置 vi vim etc profile 在文件底部加入以下配置
  • C++中queue使用详细说明

    一 queue 的介绍 queue 翻译为队列 在 STL 中主要则是实现了一个先进先出的容器 二 queue 的定义 单独定义一个 queue queue
  • linux开放tomcat8080端口,防火墙开启/关闭/状态查询

    linux开放tomcat8080端口 防火墙开启 关闭 状态查询 最终效果 开放8080端口成功访问tomcat页面 要实现开放端口8080有两种方式 仅限于我所知道的 条条大路通罗马 能实现功能就行 废话不多说上干货 一是单独开放808
  • github 如何删除不需要的项目(两种方法)

    在Github上删除项目是一项非常基本的操作 但是对于很多使用者来说 却可能会因为缺乏经验而无从下手 如果你也处于这个情况 那么这篇文章就为你提供了一些详细的指导 删除Github上的项目可以采用两种方式 通过网站进行删除 或者通过Git客
  • JavaScript中的promise

    概述 promise 承诺 是异步编程的一种解决方案 可以替代传统的解决方案 回调函数和事件 ES6统一了用法 并原生提供了Promise对象 promise是异步编程的一种解决方案 什么时候我们会来处理异步事件呢 一种很常见的场景就应该是
  • [1228]Python prometheus-client使用方式

    文章目录 安装 prometheus client 基本使用介绍 应用实例 收集 CPU 使用率指标 收集自定义指标 Python封装 调用 github https github com prometheus client python
  • MkDocs全文搜索中的中文支持

    在前一篇MkDocs全文搜索中使用模糊匹配中已经实现了模糊匹配 这次通过lunr languages来实现lunr对中文搜索的支持 MkDocs版本 v0 16 3 lunr js版本2 0 3 lunr languages版本1 0 0
  • Linux配置tomcat

    Linux配置tomcat 1 下载tomcat tomcat官网 https tomcat apache org 2 上传tomcat到Linux 将下载的tomcat上传到linux的并解压 3 运行tomcat 启动tomcat之前要
  • C#中的拆装箱,与object类型紧密相关

    class Program static void Main string args Console WriteLine Hello World int a 1 装箱操作 比较消耗性能 最 box 值类型隐式转换为object类型或由此值类
  • Oracle字符串拆分

    文章目录 Oracle字符串拆分 1 使用regexp substr 函数 1 1 拆分aaa bbb ccc 1 2 拆分aaa bbb ccc 1 3 level作用 2 在oracle中实现MySQL的find in set 函数 2
  • shell脚本循环插入参数到另外一个shell脚本

    bin bash cd var lib hadoop hdfs reflush array 0 1 2 for i 0 i lt array i do startKey array i let n i 1 let m array 如果当前值
  • 【SSA-LSTM】基于麻雀算法优化LSTM 模型预测研究(Matlab代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 1 1 麻雀搜索算法 1 2 长短期记忆神经网络 2 运行结果 3 参考文献 4 Matlab代码实现 1
  • CryptoPP的 Timer算法的使用

    密码学库Cryptopp不仅给提供了丰富的密码学算法 而且还包含了一些有用的工具类算法 比如本次要讲到的Timer 使用该类定义的对象 可以在程序中统计某一段代码的运行时间 前面我们在讲解随机数发生器的使用的时候 在程序中用到统计产生1G
  • 分布式日志系统的设计和实践

    什么是日志 日志是一种按照时间顺序存储记录的数据 它记录了什么时间发生了什么事情 提供精确的系统记录 根据日志信息可以定位到错误详情和根源 按照APM概念的定义 日志的特点是描述一些离散的 不连续的 事件 日志是按照错误级别分级的 常见的错
  • matlab 逆否,逆否命题与反证法

    在原命题 逆命题 否命题与逆否命题中 原命题与逆否命题等价 同真同假 所以证明一个命题成立可以去证明它的逆否命题成立 即先否定结论 在这个否定的结论下 去推出原来的条件的否定成立 例题一 1 判断命题 如果 x y neq 3 那么 x n
  • Python使用xlwt和xlrd读写excel文件

    Python使用xlwt和xlrd读写excel文件 xlwt和xlrd是两个相互配套的模块 在Python中 用于将数据写入Excel文件和读取Excel文件的数据 从字面即可看出xlwt是对xls格式的文件进行write xlrd是对x
  • nvidia-docker踩坑记录

    docker nvidia docker配置镜像创建容器 众所周知 想要在容器中使用nvidia的显卡 需要使用nvidia docker命令创建容器 环境说明 服务器端为Ubuntu18 04离线 nvidia smi正常使用 CUDA版