缘由
很多时候我们会使用docker作为环境的控管,确保服务执行时环境是一致的。
但某些时候我们可能服务需要执行同时需要资源以及环境的东西
例如:tensorflow inference
有两种做法可以从container创建一个container
方法1
连结 Linux docker 至 container内部
概念:
将Linux docker服务直接送入至container内,使其可以直接呼叫。
docker run hello-world -v /var/run/docker.sock:/var/run/docker.sock
简单暴力解决方法后续若要改为云端k8s部属服务,会遇到问题方法2 在 docker container 安装docker
*此安装在nvcr.io/nvidia/tensorflow:20.10-tf2-py3做为基底的container进行
安装Docker
apt update
apt install docker.io
安装nvidia runtime
curl -s -L https://nvidia.github.io/nvidia-container-runtime/gpgkey | \ apt-key add -distribution=$(. /etc/os-release;echo $ID$VERSION_ID)curl -s -L https://nvidia.github.io/nvidia-container-runtime/$distribution/nvidia-container-runtime.list | \ tee /etc/apt/sources.list.d/nvidia-container-runtime.list apt updateapt install nvidia-container-runtime
&
是背景执行的意思,透过fg
即可叫回前景。
调整相关设定
由于container并没有systemctl,必须手动调整一些参数。
于/etc/docker/daemon.json 修改:
{ "storage-driver":"vfs","runtimes":{ "nvidia":{ "path":"nvidia-container-runtime", "runtimeArgs":[] } }}
vfs
由于在container内所使用的硬碟格式与linux环境不同,故作调整runtimes
安装完nvidia runtime无法自动完成安装,必须手动调整
手动启动docker daemon
dockerd &
测试环境是否可行
测试内container是否会顺利运行docker run hello-world
测试内container是否能access gpu resourcedocker run --runtime=nvidia nvcr.io/nvidia/tensorflow:20.10-tf2-py3 nvidia-smi