由於目前正在給師兄作一個設備異常檢測的項目,開始有機會接觸到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的開發全線貫通,剩下的就是專心去開發模型啦!