Docker下的Tensorflow

tensorflow

下载并运行

  • 阿里镜像 docker run -it registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow bash

  • 较原生方式 (直接docker pull tensorflow/tensorflow 被墙,借用) docker pull registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow docker tag registry.cn-hangzhou.aliyuncs.com/denverdino/tensorflow tensorflow/tensorflow docker run -it -p 8888:8888 tensorflow/tensorflow

使用

照提示

1Copy/paste this URL into your browser when you connect for the first time, 2 to login with a token: 3 http://localhost:8888/?token=8cf1adc4f51f524440a264d0314f18e618cad6ddf6ae4ed6

tensorflow-serving

简介

TensorFlow Serving是GOOGLE开源的一个服务系统,适用于部署机器学习模型,灵活、性能高、可用于生产环境。 TensorFlow Serving可以轻松部署新算法和实验,同时保持相同的服务器架构和API,它具有以下特性:

  • 支持模型版本控制和回滚
  • 支持并发,实现高吞吐量
  • 开箱即用,并且可定制化
  • 支持多模型服务
  • 支持批处理
  • 支持热更新
  • 支持分布式模型
  • 易于使用的inference api
  • gRPC和HTTP请求。gRPC默认端口是8500,HTTP请求的默认端口是8501
  • 镜像中的程序会自动加载镜像内/models下的模型,通过MODEL_NAME指定/models下的哪个模型

安装和使用演示

使用一个名为的玩具模型Half Plus Two,它0.5 * x + 2为x我们提供的预测值生成。 (这里使用的是CPU版本。如果使用 tensorflow/serving:latest-gpu,此模型将操作绑定到GPU设备,并且不会在CPU上运行)

1//下载安装 2cd /data/ 3git clone https://github.com/tensorflow/serving 4docker pull tensorflow/serving:latest 5 6//运行 7docker run -p 8501:8501 --mount type=bind,source=/data/serving/tensorflow_serving/servables/tensorflow/testdata/saved_model_half_plus_two_cpu,target=/models/half_plus_two -e MODEL_NAME=half_plus_two -t tensorflow/serving:latest & 8 9//使用 10curl -d '{"instances": [1.0, 2.0, 5.0]}' -X POST http://localhost:8501/v1/models/half_plus_two:predict

运行参数说明

1--mount: 表示要进行挂载 2source: 指定要运行部署的模型地址, 也就是挂载的源,这个是在宿主机上的servable模型目录(pb格式模型而不是checkpoint模型) 3target: 这个是要挂载的目标位置,也就是挂载到docker容器中的哪个位置,这是docker容器中的目录,模型默认挂在/models/目录下,如果改变路径会出现找不到model的错误 4-t: 指定的是挂载到哪个容器 5-d: 后台运行 6-p: 指定主机到docker容器的端口映射 7-e: 环境变量 8-v: docker数据卷 9--name: 指定容器name,后续使用比用container_id更方便 10docker run: 启动这个容器并启动模型服务(这里是如何同时启动容器中的模型服务的还不太清楚)

模型转化

平时使用tf.Saver()保存的模型是checkpoint格式的,但是在TensorFlow Serving中一个servable的模型目录中是一个pb格式文件和一个名为variables的目录,因此需要在模型保存时就保存好可部署的模型格式,或者将已经训练好的checkpoint转换为servable format

但这个转化目前还是比较定制化的,需要不少工作

多模型部署

一个任务可能需要用到多个模型,例如命名实体识别我训练了多个模型,对每个句子都需要汇总所有模型的结果,这时就需要用到多模型部署。 多模型部署时,无法在命令行中指定MODEL_NAME了,需要编写一个如下的json配置文件,这里取名为model.config

1model_config_list: { 2 config: { 3 name: "model1", 4 base_path: "/models/model1", 5 model_platform: "tensorflow", 6 model_version_policy: { 7 all: {} 8 }, 9 config: { 10 name: "model2", 11 base_path: "/models/model2", 12 model_platform: "tensorflow", 13 model_version_policy: { 14 latest: { 15 num_versions: 1 16 } 17 } 18 }, 19 config: { 20 name: "model3", 21 base_path: "/models/model3", 22 model_platform: "tensorflow", 23 model_version_policy: { 24 specific: { 25 versions: 1 26 } 27 } 28 } 29}
  • model_version_policy指定模型版本
    • 可以删除,默认是部署最新版本的模型
    • 如果想要部署指定版本或者全部版本,需要单独设定

启动多模型服务命令时,需要将所有模型和配置文件逐个绑定,然后指定配置文件路径

docker run -d -p 8500:8500 --mounttype=bind,source=/path/to/source_models/model1/,target=/models/model1 --mounttype=bind,source=/path/to/source_models/model2/,target=/models/model2 --mounttype=bind,source=/path/to/source_models/model3/,target=/models/model3 --mounttype=bind,source=/path/to/source_models/model.config,target=/models/model.config -t --name ner tensorflow/serving --model_config_file=/models/model.config

热更新

如果想上线新模型,只需要修改模型配置文件,然后同时把新模型的模型文件放到对应路径下就可以

参考

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

2020年前端实用代码段,为你的工作保驾护航

有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )