用nvidia-docker跑深度学习模型

本文介绍了如何使用nvidia-docker解决深度学习模型在不同系统环境中运行的问题。在遇到CUDA版本导致的训练错误后,作者详细阐述了Docker和nvidia-docker的概念,以及它们在GPU支持方面的区别。随后,详细讲解了安装GPU驱动、CUDA、Docker和nvidia-docker的步骤,并分享了在安装过程中遇到的问题及其解决方法。最后,演示了如何使用nvidia-docker启动容器并挂载本地的深度学习环境进行模型训练。
摘要由CSDN通过智能技术生成

背景


最近实验室要参加一个目标检测的比赛,这段时间一直在跑ssd模型,最开始根据作者给的文档成功编译后,可以在VOC数据集上进行训练。由于要用比赛官方的数据集,因此做了几天的数据集,然后拿自己的数据集训练的时候,出现了以下报错:Check failed: a <= b (0 vs. -1.192093-07)

在这里插入图片描述

去网上搜了相关的解决方法,全都是说把math_functions.cpp第250行注释掉,重新编译,这种方案一看就不靠谱,而且也没人说个所以然,但是还是抱着试一试的心态照做了,果然又出现了新的bug。查了几天的资料也没找到解决方案,一开始我怀疑可能是我的数据集做的有问题,然后我又重新在VOC数据集上训练,结果会出现同样的问题,联想到前两天实验室服务器重装了系统,然后cuda从8.0换到了9.1版本,会不会是这个原因导致了现在的报错呢?但是因为实验室服务器是大家共用的,把cuda改回到8.0版本可能给其他人带来困扰,刚好实验室有其他同学在搞nvidia docker,干脆直接用nvidia docker来跑模型,就不用考虑环境问题了。

什么是nvidia docker


介绍nvidia docker之前,首先要了解什么是docker。

Docker 是一个开源的应用容器引擎,基于 GO语言并遵从Apache2.0协议开源。

Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级、可移植的容器中,然后发布到任何流行的 Linux 机器上,可以实现虚拟化。

Docker所代表的容器虚拟化技术属于操作系统级虚拟化:内核通过创建多个虚拟的操作系统实例(内核和库)来隔离不同的进程。并且传统虚拟化技术是在硬件层面实现虚拟化,增加了系统调用链路的环节,有性能损耗;容器虚拟化技术以共享Kernel的方式实现,几乎没有性能损耗。

这里可以将容器理解为一种沙盒。每个容器内运行一个应用,不同的容器相互隔离,容器之间可以建立通信机制。容器的创建和停止都十分快速(秒级),容器自身对资源的需求十分有限,远比虚拟机本身占用的资源少。

关于Docker更详细的介绍,请参照几张图帮你理解docker基本原理及快速入门,感觉介绍的很不错

docker一般服务于基于cpu 的应用,而我们的深度学习模型是跑在gpu上面的,因此需要用nvidia docker。nvidia docker的运行需要基于一定的硬件环境,需要安装nvidia driver,docker容器本身并不支持nvidia gpu。最开始的解决方法是在容器内部安装nvidia driver,然后通过设置相应的设备参数来启动container,但是这样做带来一个弊端就是可能导致image无法共享,因为宿主机的driver的版本必须完全匹配容器内的driver版本,很可能本地机器的不一致导致每台机器都需要去重复操作,这很大的违背了docker的初衷。nvidia docker实际上是一个docker plugin,它在docker上做了一层封装,对docker进行调用,类似一个守护进程,发现宿主机驱动文件以及gpu 设备,并且将这些挂载到来自docker守护进程的请求中,以此来支持docker gpu的使用。

安装docker


  1. GPU driver安装

nvidia官网下载安装对应型号的显卡驱动:链接
如果安装成功,在终端中输入 lspci | grep

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值