官方文檔:https://www.tensorflow.org/tfx/serving/docker
亞馬遜的中文文檔:https://docs.aws.amazon.com/zh_cn/dlami/latest/devguide/tutorial-tfserving.html
部署的時(shí)候花了不少的時(shí)間,主要原因是沒有仔細(xì)的看官方的文檔,以及docker命令的不熟悉的原因。
1. 拉取tensor serving的docker 鏡像:
docker pull tensorflow/serving
2.使用docker run啟動(dòng)容器:
docker run -p 8501:8501 --mount type=bind,source=/path/to/my_model,target=/models/my_model -e MODEL_NAME=my_model -t tensorflow/serving
這里需要解釋一下:
-p表示端口映射,將宿主機(jī)和容器的端口映射起來,宿主機(jī):容器。
--mount 表示掛載。
source表示的路徑是已經(jīng)訓(xùn)練好的模型在宿主機(jī)上的絕對路徑,那么具體是哪個(gè)位置呢?
C:\Users\LT\Desktop\emotion-classifier\model

只需要到達(dá)這個(gè)路徑

模型的實(shí)際路徑
因?yàn)閠ensor serving會(huì)自動(dòng)加載source后面的文件,雖然依照官網(wǎng)給的demo可以依葫蘆畫瓢才出來,不過這個(gè)也是沒有講解詳細(xì)的地方了。
target表示的是在創(chuàng)建的tensor serving的容器里面模型(model)的保存位置,也決定著后面訪問的路徑
運(yùn)行完上面代碼會(huì)這樣:

image.png
這時(shí)候,大多數(shù)人會(huì)和我之前一樣,認(rèn)為已經(jīng)跑起來了,因?yàn)榘椿剀嚊]有反應(yīng),就認(rèn)為是在等待接收響應(yīng),即http請求。其實(shí)不是的,我們需要ctrl + c退出去。
3.進(jìn)入tensor serving所生成的容器(稱為A)
sudo docker exec -it CONTAINER_ID /bin/bash
CONTAINER_ID使用sudo docker ps -sa進(jìn)行查看
使用docker attach并不能進(jìn)入。
4.在A中運(yùn)行特定命令
tensorflow_model_server --port=8500 --rest_api_port=8501 --model_name=my_model --model_base_path=/models/my_model
這一步至關(guān)重要,但是由于第二步的結(jié)果顯示會(huì)影響我們到達(dá)這一步。并且如果直接跳過前面的內(nèi)容,看專門的小結(jié),也會(huì)錯(cuò)過。
--port表示gRPC形式的數(shù)據(jù)訪問,--rest_api_port表示以restful形式訪問接口,如果不使用gRPC,可以只寫--rest_api_port.
--model_name是第二步的model name
model_base_path是第二部的target路徑。
運(yùn)行后是這樣的輸出:

終端輸出
5.至于測試
可以直接使用request來給下面的鏈接發(fā)送數(shù)據(jù):
http://localhost:youself-port/v1/models/your-model-name:predict
按照第三步的終端輸出的話,我的連接就是:
http://localhost:60002/v1/models/sentiment:predict
以上,有用的話,記得點(diǎn)一下喜歡。