tensorflow serving部署鏡像中的模型多版本控制/指定版本預測
當模型存在多個版本時,可同時加載,並根據需要選擇合適模型預測,此時需要配置models.config文件,並指定–model_config_file參數。模型名model和model1下都有4個版本模型,如下圖所示。
配置models.config文件,json格式寫法:
- config字段,指定具體模型
- base_path表示容器內的模型文件路徑,不是本地路徑
- specific指定具體要加載的版本號
# 具體的models.config文件
model_config_list: {
config: {
name: "model",
base_path: "/models/model",
model_platform: "tensorflow",
model_version_policy: {
specific: {
versions:1,
versions:2,
versions:3,
versions:4
}
}
},
config: {
name: "model1",
base_path: "/models/model1",
model_platform: "tensorflow",
model_version_policy: {
specific: {
versions:3,
versions:4
}
},
}
}
models.config文件準備好後,使用tensorflow servomg docker進行掛載
# 兩類模型model和model1都需要掛載,models.config也需要掛載
# 同時指定tensorflow/serving內部的tensorflow_model_server參數model_config_file
docker run --rm -p 8501:8501 \
--mount type=bind,source=$(pwd)/model/,target=/models/model \
--mount type=bind,source=$(pwd)/model1/,target=/models/model1 \
--mount type=bind,source=$(pwd)/models.config,target=/models/models.config \
-t tensorflow/serving --model_config_file=/models/models.config
根據models.config的配置,加載model/1、2、3、4,共4個模型;加載model1/3、4,共2個模型,驗證如下:
# 返回models.config中model1的所有指定的模型版本
curl http://localhost:8501/v1/models/model1
# 返回model1/3版本模型
curl http://localhost:8501/v1/models/model1/versions/3
使用models.config會使得docker run指令特別長,也可以仿照內容3.使用最簡鏡像製作本地已訓練模型的鏡像製作models.config配置的鏡像。具體如下:
# 以後臺運行方式開啓一個tensorflow/serving的守護進程
docker run -d --name serving_base tensorflow/serving
# 複製本地SavedModel到容器存放models的文件夾下
docker cp ./model serving_base:/models/model
docker cp ./model1 serving_base:/models/model1
docker cp ./models.config serving_base:/models/models.config
# docker commit提交修改製作新鏡像my_model_3,不需要設置環境變量
docker commit serving_base my_model_3
# 啓用my_model_0鏡像,此時不需要指定-v/--mount,-e等參數,需要指定model_config_file參數
docker run -it -p 8501:8501 my_model_3 --model_config_file=/models/models.config
docker cp命令注意事項(與linux cp相似):
docker cp src_path dest_path
- dest_path不存在時,會創建dest_path目錄,並將src_path目錄下的內容拷貝進去
- dest_path存在時
若src_path以"/.“結尾,將src_path目錄下的內容拷貝進去
若src_path不以”/."結尾,將src_path整個目錄拷貝進去