本来以为这周关于gpu的运行又要搞不定了,结果昨天,也就是周五下午,终于搞定了,内心很开森有木有,一周了,终于over了,下来我来说下我的做法。还有我要说下,没事要多去github上灌灌水,收获还是颇多的,说不定就能解决困扰好久的问题。再次感谢各位大神的分享。
首先介绍下nvidia-docker,这是一个可以使用gpu的docker,我的理解是nvidia-docker是在docker上做了一层封装,具体还是要看源码的。通过nvidia-docker-plugin,最终还是转回调用到docker上,只不过为docker的启动带了一些必要的参数。这个是同事看nvidia-docker底层源码告诉我的。
docker一般都是使用基于cpu的应用,而如果是gpu的话,就需要安装特有的硬件环境,比如需要安装nvidia driver。所以docker容器并不直接支持nvidia gpu。为了解决这个问题,最早的处理办法是在容器内部,全部重新安装nvidia driver,然后通过设置相应的设备参数来启动container,然而这种办法是很脆弱的。因为宿主机的driver的版本必须完全匹配容器内的driver版本,这样导致docker image无法共享,很可能本地机器的不一致导致每台机器都需要去重复操作,这很大的违背了docker的设计之初。
为了使docker image能很便利的使用nvidia gpu,从而产生了nvidia-docker,由它来制作nvidia driver的image,这就要求在目标机器上启动container时,确保字符设备以及驱动文件已经被挂载。