系统环境:
centos7.7
两块GeForce RTX 2080 TI
流程来源
1、安装docker(19.03.8)
(1)、Docker 要求 CentOS 系统的内核版本高于 3.10 ,查看本页面的前提条件来验证你的CentOS 版本是否支持 Docker 。
通过 uname -r 命令查看你当前的内核版本
$ uname -r
(2)、使用 root 权限登录 Centos。确保 yum 包更新到最新。
$ sudo yum update
(3)、卸载旧版本(如果安装过旧版本的话)
$ sudo yum remove docker docker-common docker-selinux docker-engine
注意:这里如果无法安装,如果有其他版本docker存在的话,上面的命令无法全部卸载旧版本,需要手动删除
搜索已经安装的docker安装包
yum list installed | grep docker
分别删除安装包即可
yum -y remove docker docker-ce-cli.x86_64
(4)、安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的
$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
(5)、设置yum源
$ sudo yum-config-manager --add-repo
https://download.docker.com/linux/centos/docker-ce.repo
(6)、可以查看所有仓库中所有docker版本,并选择特定版本安装
$ yum list docker-ce --showduplicates | sort -r
(7)、安装docker
$ sudo yum install docker-ce #由于repo中默认只开启stable仓库,故这里安装的是最新稳定版19.03.8
$ sudo yum install # 例如:sudo yum install
docker-ce-18.06.0.ce,可以安装特定版本
(8)、启动并加入开机启动
$ sudo systemctl start docker $ sudo systemctl enable docker
(9)、验证安装是否成功(有client和service两部分表示docker安装启动都成功了)
$ docker version
2、docker安装问题
如果出现问题,上官网进行搜索答案
3、安装nvidia-docker
必须先安装docker-ce才行,这里安装方法参考nvidia-docker GitHub官网(https://github.com/NVIDIA/nvidia-docker#quick-start)
(1)、如果有旧版,先移除旧版
$ docker volume ls -q -f driver=nvidia-docker | xargs -r -I{} -n1
docker ps -q -a -f volume={} | xargs -r docker rm -f sudo yum remove nvidia-docker
(2)、加入repositories
distribution=$(. /etc/os-release;echo I D ID IDVERSION_ID) curl -s -L
https://nvidia.github.io/nvidia-docker/$distribution/nvidia-docker.repo | sudo tee /etc/yum.repos.d/nvidia-docker.repo
(3)、安装nvidia-container-toolkit,不是nvidia-docker2,因为被Deprecated了
sudo yum install -y nvidia-container-toolkit
sudo systemctl restart docker
(4)、测试
docker run --runtime=nvidia --rm nvidia/cuda:9.0-base nvidia-smi
输出以下页面:表明nvidia-docker安装成功
默认的docker需要sudo权限才能运行,为了让当前用户可以运行docker,需要把当前用户加到docker组里:
sudo groupadd docker
确认环境遍历 U S E R 是 否 正 确 , 如 果 不 对 需 要 设 置 正 确 或 者 执 行 下 面 的 命 令 时 把 USER是否正确,如果不对需要设置正确或者执行下面的命令时把 USER是否正确,如果不对需要设置正确或者执行下面的命令时把USER替换成当前的用户名。
echo $USER
sudo usermod -aG docker $USER
然后需要退出再重新登录,对于ssh远程登录来说退出后再次ssh登进去就可以了。但是如果是直接在本机登录,那么需要重启后才能生效,这比较麻烦,如果不想重启,可以这样:
#执行下面的命令确保当前用户在docker组里,如果不在,需要退出重新登录或者使用下面的su命令。
groups
把lili改成你的文件名
sudo su - lili
注意:至此是没有安装完毕的,少了一个模块没有安装和配置,后面会报错,后面看到错误了再安装即可
有任何问题上nvidia-docker官网找答案
4、服务具体安装步骤
tensorflow/serving的镜像有很多种,这里使用GPU版本的即可
注意看tensorflow的官方网站对于镜像的描述
tensorflow/serving具体安装步骤:
1、拉取带Tensorflow Serving的docker镜像,这样我们服务器上就有了一个安装了ModelServer的docker容器,这个容器就可以看做一台虚拟机,这个虚拟机上已经安装好了Tensorflow Serving,环境有了,就可以用它来部署我们的模型了。注意这个拉取下来后不是直接放在当前目录的,而是docker默认存储的路径,这个是docker容器,和第2步clone下来的不是同一个东西
#版本号可以在后面进行修改,这里我们使用GPU版本的
$docker pull tensorflow/serving:latest-gpu
#镜像拉取会慢一点,大概2个多G
拉取完毕后:
2、获取例子模型(当然,也可以直接用上面容器中自带的例子),当然这里是直接拉取了tensorflow serving的源码,源码中有一些训练好的例子模型
$cd /root/software
$git clone https://github.com/tensorflow/serving
3、用第一步拉取的docker容器运行例子模型
第2步中clone下来的serving源码中有这样一个训练好的例子模型,路径为:
/root/software/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu
现在我们就要用第1步拉下来的docker容器来运行部署这个例子模型(CPU版本的)
$docker run -p 8501:8501 \ --mount type=bind,
source=/root/software/serving/tensorflow_serving/serevables/tensorflow/testdata/saved_model_half_plus_two_cpu,
target=/models/half_plus_two \ -e MODEL_NAME=half_plus_two \ -t tensorflow/serving &
参数说明:
–mount:表示要进行挂载 source:指定要运行部署的模型地址,也就是挂载的源,这个是在宿主机上的模型目录 target:这个是要挂载的目标位置,也就是挂载到docker容器中的哪个位置,这是docker容器中的目录 -t:指定的是挂载到哪个容器 -p:指定主机到docker容器中的端口映射 docker run:启动这个容器并启动模型服务(这里是如何同时启动容器中的模型服务的还是不太清楚) 综合解释: 将source目录中的例子模型,挂载到-t指定的docker容器中的target目录,并启动。
这步注意,如果执行报错无法识别type=bind,那应该是source的路径有问题。
注意GPU版本的部署代码为:
docker run --runtime=nvidia -p 8501:8501 \
–mount
type=bind,source=/root/serving_model/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_gpu,\ target=/models/half_plus_two -e MODEL_NAME=half_plus_two -t tensorflow/serving:latest-gpu &
这里要注意:type=bind,source=/root,target=/models中间不能有空格,一定不能有空格!
nvidia-docker中的问题会在这里出现:docker:Error response from daemon: Unknown runtime specified nvidia,github原始问题,解决方法
原因是:nvidia-docker没有注册:
(1)、安装nvidia-container-runtime
yum install nvidia-container-runtime
(2)、注册即可(配置英伟达运行时)
sudo mkdir -p /etc/systemd/system/docker.service.d
sudo tee /etc/systemd/system/docker.service.d/override.conf <<EOF
[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --host=fd:// --add-runtime=nvidia=/usr/bin/nvidia-container-runtime
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
再输入以下配置即可
sudo tee /etc/docker/daemon.json <<EOF
{
"runtimes": {
"nvidia": {
"path": "/usr/bin/nvidia-container-runtime",
"runtimeArgs": []
}
}
}
EOF
sudo pkill -SIGHUP dockerd
至此,再次运行上述启动代码开启镜像,会显示以下页面内容:
这里成功开启8501端口
4、调用这个服务,这里用的是http接口
$curl -d ‘{“instances”:[1.0, 2.0, 5.0]}’ \ -X POST http://localhost:8501/v1/models/half_plus_two:predict
得到的结果如下:
这就表明服务已经部署成功了,并且成功调用nvidia GPU环境了,当然你也可以用requests模块来模拟http请求