由于目前正在给师兄作一个设备异常检测的项目,开始有机会接触到TF。这篇教程既能够说是这段时间以来的笔记,同时也但愿给项目组的其余小伙伴或后来者提供一个快速上手的索引。java
所谓“端到端(End-to-End)”,指的是从环境搭建、模型开发、部署上线,一直到客户端使用这整个过程。就目前而言,我尚未看到一个完整的文章贯穿始终。本文的目的就是要将整个链路打通,帮助TF初学者可以迅速了解全貌,而非限于具体模型的实现细节之中。git
OK,Let's go!github
就此步而言,其实没有什么太多可说的,按照TF官网的安装指南便可。惟一须要注意的就是,在安装开始以前,请先配好你的pypi镜像。不然,速度可想而知。算法
TF的开发分为两步:算法开发和模型导出。docker
对于开发部分,网上的文章几乎清一色以MNIST数据集为例子来说解。但做为过来人,我我的并不推荐小白一上来就整这么复杂的例子。将精力先花在理解TF的基本概念之上便可,而后迅速切换到后续步骤,创建起ML开发和应用的总体印象和概念。api
故,我推荐你们先看看O'Reilly的Hello, TensorFlow!。此文不只讲解了TF的基本概念,同时还对TensorBoard有简单的介绍。惟一不足之处在于,由于TF API先后变化较大,示例代码须要调整一下。jvm
TF模型开发完毕以后须要导出才能用到生产环境之中,遗憾的是,上文中并未提到。这里可参考我在github上的例子,它不只调整了上文的例子代码,并且还有模型导出的代码示例。这又是通常文章中少有说起的。命令行
这里指的运行环境是本机运行环境,毕竟这样对于开发工做来说更方便嘛。code
在此步,用docker固然是最简单的作法啦。并且Tensor Serving也有现成的image能够用,文档在这里。orm
这里有一些快速命令能够参考:
docker run -d -v 模型目录:/bitnami/model-data -P --expose 9000 --name tensorflow-serving bitnami/tensorflow-serving
/bitnami/model-data是这个image的模型基本目录,进入contianer以后能够看到这一点(从container中的TF Serving启动的命令行参数能够找到其所用的配置文件:/opt/bitnami/tensorflow-serving/conf/tensorflow-serving.conf,其中包含了base_path。并且,你还能够发现,缺省包含的模型名字为“inception”)。
同时,不要忘了将端口暴露出来。
其实上面已经提到了模型启动的问题,但我以为还得单独强调一下。
有心的读者从上面的命令中应该能够猜出,所谓启动模型,无非就是将包含导出模型的目录让TF Serving知道而已。如:
tensorflow_model_server --model_name=mnist --port=9000 --model_base_path= /home/ml/modules/export/
若启动多个模型,则须要编写模型配置文件,例子以下:
model_config_list: { config: { name: "mnist", base_path: "/tmp/mnist_model", model_platform: "tensorflow" }, config: { name: "inception", base_path: "/tmp/inception_model", model_platform: "tensorflow" } }
启动时,命令就变成:
tensorflow_model_server --port=9000 --model_config_file=配置文件
可是很遗憾,在多模型时,TF Serving目前没法动态刷新配置文件。这无疑给部署新模型和更新模型形成了麻烦。
若使用上面的Docker Image,直接使用上面的docker run就实现了模型启动。小伙伴能够自行去container内部了解相关的命令细节(进入以后,ps -ef)。
终于到了最后检验我们成果的时候了!
遗憾的是,tensorflow-serving-api目前并不支持Python 3。而我又懒得维护两个环境,故剑走偏锋:尝试用Java来调用模型,毕竟都是走gRPC嘛。
在这篇文件文章(此文一样是一篇很好的入门文章)的启发下终于得以完成:
列为看官能够参考个人例子。至于本文完整的例子,能够参考个人例子工程(它一样也是一个vertx gRPC的例子)。
至此,TensorFlow的开发全线贯通,剩下的就是专心去开发模型啦!