Centos7上使用docker nvidia-docker部署tensorflow/serving项目流程

系统环境:
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是否正确,如果不对需要设置正确或者执行下面的命令时把 USERUSER替换成当前的用户名。

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 nvidiagithub原始问题解决方法
原因是: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请求

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值