首页 > 其他分享 >如何在较旧版本的docker中使用gpu

如何在较旧版本的docker中使用gpu

时间:2023-11-26 16:45:08浏览次数:42  
标签:-- dev device nvidia 旧版本 gpu docker local

  参考资料:

  自己摸索

  https://blog.csdn.net/qq_43684922/article/details/127024933

  之前我写过一篇如何在docker中使用gpu的随笔(传送门),当时反响还不错(收获了三个推荐)。但是今天却遇到了坑爹的情况,当时的方法不管用了。

  回顾一下当时的解决方案:只要加上 --gpus all,以及两个环境变量就好了。但是这次我遇到问题的坑爹之处在于,我的docker版本不再是19以上,而是恰恰好好地卡在了18。这就使得它不能够理解--gpus all这个参数项。此时我们就需要一些更加...离谱的操作。

  首先,我的这个宿主机,他有一个docker,版本是18。有一个nvidia-docker,版本没看(这个项目nvidia早已停止维护)。目前的症状是虽然能够用nvidia-docker正常运行NGC中的pytorch容器。但是这个破东西对于其他的镜像都无效。比如,nvidia-docker run一个ubuntu镜像,你会发现没法使用gpu(nvidia-smi命令都没有)。nvidia-docker run一个NGC官方的pytorch镜像,却可以使用gpu(nvidia-smi命令存在)。但是我又确确实实地不想用官方的镜像,此时应该怎么办呢?

  参考资料2中给出的命令已经非常接近标准答案:

1 docker run \
2 --device /dev/nvidia0:/dev/nvidia0 \
3 --device /dev/nvidiactl:/dev/nvidiactl \
4 --device /dev/nvidia-uvm:/dev/nvidia-uvm \
5 -v /usr/local/nvidia:/usr/local/nvidia \
6 -it --privileged nvidia/cuda

  简单分析一下它为什么能work,因为这个其实就是nvidia-docker(相较于旧版本docker)多做的事情:1)挂载一些奇怪的device(nvidiactl, nvidia-uvm)2)挂载实实在在的gpu device(nvidia0, nvidia1...)3)对nvidia文件夹做一个路径映射

  为什么说这个命令已经非常接近但不是标准答案呢?就在于第三步,这里实际上没有点清楚。这个nvidia文件夹从哪里来呢?

  理论上来讲,这个nvidia文件夹应该是在安装nvidia驱动的时候伴生的。但是我却没有在宿主机中发现这个文件夹(懒得找了浪费时间,根本不再/usr/local下面),于是乎我找到了一个可以正常使用gpu的容器(也就是nvidia的官方容器),把它的nvidia文件夹打包copy了过来。这样一来,就拿这个文件夹来映射容器中的/usr/local/nvidia就好了。显然这种做法解决不了问题,所以读者如果没有一个容器的gpu能用的话,就老实在宿主机中把nvidia文件夹找到吧。

          里面实际上是一些库,和一些可执行文件。我们惊喜地发现nvidia-smi就在这里面。为了让GPU彻底能work,我们还需要做两件事。

export PATH=$PATH:/usr/local/nvidia/bin
export LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64

  即在docker容器中把这俩环境变量给配置好。这样就大功告成了。最终的命令如下:

docker run -it --name XX \
    --device /dev/nvidia0:/dev/nvidia0 \
    --device /dev/nvidia1:/dev/nvidia1 \
    --device /dev/nvidia2:/dev/nvidia2 \
    --device /dev/nvidia3:/dev/nvidia3 \
    --device /dev/nvidiactl:/dev/nvidiactl \
    --device /dev/nvidia-uvm:/dev/nvidia-uvm \
    -v /pathto/nvidia:/usr/local/nvidia \
    -e LD_LIBRARY_PATH=/usr/local/nvidia/lib:/usr/local/nvidia/lib64 \
    image_id /bin/bash

  为了一个老版本的问题,掰扯了得有四五个小时... 毕竟更新docker很有可能就把正在运行的容器弄得打不开。所以:真的坑啊!

标签:--,dev,device,nvidia,旧版本,gpu,docker,local
From: https://www.cnblogs.com/chester-cs/p/17857447.html

相关文章

  • GPU部署llama-cpp-python(llama.cpp通用)
    title:GPU部署llama-cpp-python(llama.cpp通用)banner_img:https://cdn.studyinglover.com/pic/2023/08/a5e39db5abf0853e6c456728df8bd971.jpgdate:2023-8-623:01:00tags:-踩坑GPU部署llama-cpp-python(llama.cpp通用)通用流程我们的安装平台是Ubuntu20.04,Python3.......
  • 在终端绘制GPU显存使用曲线
    title:在终端绘制GPU显存使用曲线banner_img:https://cdn.studyinglover.com/pic/2023/08/588d9420c9302f5e0d6c2e89fbddf200.pngdate:2023-8-1311:44:00在终端绘制GPU显存使用曲线这个东西的灵感来自于写torch的时候想实时看到loss和gpu使用情况,突然想到可以在终端实时......
  • mysql+php+apache的docker坏境搭建
    1:安装dockersudoaptinstalldocker.io2:安装mysqlsudodockerrun--privileged=true-di--restart=always--nameMySqlForPhp01-p55506:3306-eMYSQL_ROOT_PASSWORD=1234qwer-e--character-set-server=utf8mb4-e--collation-server=utf8mb4_unicode_cimysql:8.0......
  • Docker部署思源笔记
    一、简介思源笔记是一款隐私优先的个人知识管理系统,支持细粒度块级引用和Markdown所见即所得。二、安装思源笔记绿联DX4600为例。首先我们打开Docker管理器,进入镜像管理。然后在镜像仓库中搜索b3log/siyuan​​,选择latest​​版本并下载。​​下载完成后,我们在本地镜......
  • docker部署phpIPAM
    0说明IPAM:IP地址管理系统IP地址管理(IPAM)是指的一种方法IP扫描,IP地址跟踪和管理与网络相关的信息的互联网协议地址空间和IPAM系统。IPAM软件和IP的工具,管理员可以确保分配IP地址仍然是当前和足够的库存先进的IP工具和IPAM服务。IPAM简化并自动化管理的许多任务参与IP空间管......
  • docker导出、导入
    先来看看我们在运行的容器:#dockerps导出容器:#dockerexporte96a98d5902c>ubuntu14_ruby2.tar.gz导入到本地镜像:#dockerimportubuntu14_ruby2.tar.gz查看本地镜像:#dockerimages这个没有tag的就是我们刚刚导入的,现在我们给他打一个tag:#dockertagfd2e33845352ubuntu14_ruby2:......
  • 云原生-docker逃逸
    docker安装我使用的kali安装安装docker步骤sudoapt-getupdatesudoapt-getinstallapt-transport-httpsca-certificatescurlgnupg-agentsoftware-properties-commoncurl-fsSLhttps://download.docker.com/linux/debian/gpg|sudoapt-keyadd-sudoadd-apt-repo......
  • Docker启动失败,提示"iptables: No chain/target/match by that name"
    一、问题现象docker容器报错:docker:Errorresponsefromdaemon:driverfailedprogrammingexternalconnectivityonendpointetlmysql(12ccdbcef942bef6f32dbfc157dd1b49319ee2df4d68bf7b9a9b9ea88b5bd4fa):(iptablesfailed:iptables--wait-tnat-ADOCKER-ptc......
  • 迁移Docker镜像与数据保存位置
    需求使用Arm开发板跑Docker系统自代的/目录只有8G空间无法满足拉取大镜像的需求,需要将Dokcer镜像与数据单独保存再外部磁盘。实现可以通过手动修改配置文件实现。停止Docker服务sudoservicedockerstop编辑/etc/docker/daemon.json添加如下字段{"data-root":"/path......
  • 已经存在的Docker容器指定静态IP地址
    为已经存在的Docker容器指定静态IP地址,可以按照以下步骤进行操作:1.进入容器的命令行终端。dockerexec-it容器/bin/bash2.编辑容器的配置文件,通常位于/etc/docker/daemon.json。如果该文件不存在,则需要创建一个。(docker容器内可能没有编辑的命令,建议使用dockercp命令)3.在配置......