文档首页 > > AI工程师用户指南> 模型包规范> 模型配置文件编写说明

模型配置文件编写说明

分享
更新时间: 2020/01/20 GMT+08:00

模型开发者发布模型时需要编写配置文件。模型配置文件描述模型用途、模型计算框架、模型精度、推理代码依赖包以及模型对外API接口。

配置文件格式说明

配置文件为JSON格式,参数说明如表1所示。

表1 参数说明

参数

是否必选

参数类型

描述

model_algorithm

String

模型算法,表明该模型的用途,由模型开发者填写,以便使用者理解该模型的用途,可选image_classification(图像分类)、object_detection(物体检测)、predict_analysis(预测分析)以及开发者自定义的算法。

model_type

String

模型AI引擎,表明模型使用的计算框架,可选的框架有TensorFlow、MXNet、Spark_MLlib、Caffe、Scikit_Learn、XGBoost、Image、PyTorch。

Image镜像制作规范可参见自定义镜像制作规范

runtime

String

模型运行时环境,runtime可选值与model_type相关,请选择您使用的引擎及其对应开发环境。目前支持的运行环境列表请参见表1

swr_location

String

SWR镜像模板地址。当使用“从OBS中选择”的导入方式导入自定义镜像模型(Image类型)时,“swr_location”必填,“swr_location”为docker镜像在SWR上的模板地址,表示直接使用SWR的docker镜像发布模型。对于Image类型的模型建议您使用“从容器镜像中选择”的导入方式导入。

metrics

object数据结构

模型的精度信息,包括平均数、召回率、精确率、准确率,metrics object数据结构说明如表2所示。

apis

api数据结构数组

表示模型可对外提供的restful api数组,api数据结构如表3所示。

  • “model_type”“Image”时,即自定义镜像的模型场景,“apis”可根据镜像实际对外暴露的请求路径在“apis”中声明不同路径的API。
  • “model_type”不为“Image”时,“apis”只能声明一个请求路径为“/”的API,因为系统预置的AI引擎仅暴露一个请求路径为“/”的推理接口。

dependencies

dependency结构数组

推理代码及模型依赖的包,模型开发者需要提供包名、安装方式、版本约束,dependency结构数组说明如表6所示。自定义镜像模型不支持安装依赖包。

health

health数据结构

镜像健康接口配置信息,仅自定义镜像支持。health数据结构如表8所示。

表2 metrics object数据结构说明

参数

是否必选

参数类型

描述

f1

Number

平均数。精确到小数点后17位,超过17位时,取前17位数值。

recall

Number

召回率。精确到小数点后17位,超过17位时,取前17位数值。

precision

Number

精确率。精确到小数点后17位,超过17位时,取前17位数值。

accuracy

Number

准确率。精确到小数点后17位,超过17位时,取前17位数值。

表3 api数据结构说明

参数

是否必选

参数类型

描述

protocol

String

请求协议。

url

String

请求路径。自定义镜像的模型(即model_type为Image时)需要根据镜像内实际暴露的请求路径填写“url”。非自定义镜像模型(即model_type不为Image时)时,“url”只能为“/”

method

String

请求方法。

request

Object

请求体,request结构说明如表4所示。

response

Object

响应体,response结构说明如表5所示。

表4 request结构说明

参数

是否必选

参数类型

描述

Content-type

String

data以指定内容类型发送。

data

String

请求体以json schema描述。

表5 response结构说明

参数

是否必选

参数类型

描述

Content-type

String

data以指定内容类型发送。

data

String

响应体以json schema描述。

表6 dependency结构数组说明

参数

是否必选

参数类型

描述

installer

String

安装方式,当前只支持“pip”

packages

package结构数组

依赖包集合,package结构数组说明如表7所示。

表7 package结构数组说明

参数

是否必选

参数类型

描述

package_name

String

依赖包名称。不能含有中文及特殊字符&!'"<>=。

package_version

String

依赖包版本,如果不强依赖于版本号,则该项不填。不能含有中文及特殊字符&!'"<>=。

restraint

String

版本限制条件,当且仅当“package_version”存在时必填,可选“EXACT/ATLEAST/ATMOST”

  • “EXACT”表示安装给定版本。
  • “ATLEAST”表示安装版本不小于给定版本。
  • “ATMOST”表示安装包版本不大于给定版本。
表8 health数据结构说明

参数

是否必选

参数类型

描述

url

String

健康检查接口请求路径。

protocol

String

健康检查接口请求协议,当前仅支持http。

initial_delay_seconds

String

实例启动后,延迟initial_delay_seconds秒再执行健康检查。

timeout_seconds

String

健康检查超时时间

目标检测模型配置文件示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
{
    "model_type": "TensorFlow",
    "model_algorithm": "object_detection",
    "metrics": {
        "f1": 0.345294,
        "accuracy": 0.462963,
        "precision": 0.338977,
        "recall": 0.351852
    },
    "apis": [{
        "protocol": "https",
        "url": "/",
        "method": "post",
        "request": {
            "Content-type": "multipart/form-data",
            "data": {
                "type": "object",
                "properties": {
                    "images": {
                        "type": "file"
                    }
                }
            }
        },
        "response": {
            "Content-type": "multipart/form-data",
            "data": {
                "type": "object",
                "properties": {
                    "detection_classes": {
                        "type": "array",
                        "items": [{
                            "type": "string"
                        }]
                    },
                    "detection_boxes": {
                        "type": "array",
                        "items": [{
                            "type": "array",
                            "minItems": 4,
                            "maxItems": 4,
                            "items": [{
                                "type": "number"
                            }]
                        }]
                    },
                    "detection_scores": {
                        "type": "number"
                    }
                }
            }
        }
    }],
    "dependencies": [{
        "installer": "pip",
        "packages": [{
                "restraint": "ATLEAST",
                "package_version": "1.15.0",
                "package_name": "numpy"
            },
            {
                "restraint": "",
                "package_version": "",
                "package_name": "h5py"
            },
            {
                "restraint": "ATLEAST",
                "package_version": "1.8.0",
                "package_name": "tensorflow"
            },
            {
                "restraint": "ATLEAST",
                "package_version": "5.2.0",
                "package_name": "Pillow"
            }
        ]
    }]
}
图1 推理示例

图像分类模型配置文件示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
{
    "model_type": "TensorFlow",
    "model_algorithm": "image_classification",
    "metrics": {
        "f1": 0.345294,
        "accuracy": 0.462963,
        "precision": 0.338977,
        "recall": 0.351852
    },
    "apis": [{
        "protocol": "https",
        "url": "/",
        "method": "post",
        "request": {
            "Content-type": "multipart/form-data",
            "data": {
                "type": "object",
                "properties": {
                    "images": {
                        "type": "file"
                    }
                }
            }
        },
        "response": {
            "Content-type": "multipart/form-data",
            "data": {
                "type": "object",
                "properties": {
                    "predicted_label": {
                        "type": "string"
                    },
                    "scores": {
                        "type": "array",
                        "items": [{
                            "type": "array",
                            "minItems": 2,
                            "maxItems": 2,
                            "items": [{
                                    "type": "string"
                                },
                                {
                                    "type": "number"
                                }
                            ]
                        }]
                    }
                }
            }
        }
    }],
    "dependencies": [{
        "installer": "pip",
        "packages": [{
                "restraint": "ATLEAST",
                "package_version": "1.15.0",
                "package_name": "numpy"
            },
            {
                "restraint": "",
                "package_version": "",
                "package_name": "h5py"
            },
            {
                "restraint": "ATLEAST",
                "package_version": "1.8.0",
                "package_name": "tensorflow"
            },
            {
                "restraint": "ATLEAST",
                "package_version": "5.2.0",
                "package_name": "Pillow"
            }
        ]
    }]
}
图2 推理结果示例

预测分析模型配置文件示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
{
	"model_type": "TensorFlow",
	"model_algorithm": "predict_analysis",
	"metrics": {
		"f1": 0.345294,
		"accuracy": 0.462963,
		"precision": 0.338977,
		"recall": 0.351852
	},
	"apis": [{
		"protocol": "https",
		"url": "/",
		"method": "post",
		"request": {
			"Content-type": "application/json",
			"data": {
				"type": "object",
				"properties": {
					"data": {
						"type": "object",
						"properties": {
							"req_data": {
								"items": [{
									"type": "object",
									"properties": {}
								}],
								"type": "array"
							}
						}
					}
				}
			}
		},
		"response": {
			"Content-type": "multipart/form-data",
			"data": {
				"type": "object",
				"properties": {
					"data": {
						"type": "object",
						"properties": {
							"resp_data": {
								"type": "array",
								"items": [{
									"type": "object",
									"properties": {}
								}]
							}
						}
					}
				}
			}
		}
	}],
	"dependencies": [{
		"installer": "pip",
		"packages": [{
			"restraint": "ATLEAST",
			"package_version": "1.15.0",
			"package_name": "numpy"
		}, {
			"restraint": "",
			"package_version": "",
			"package_name": "h5py"
		}, {
			"restraint": "ATLEAST",
			"package_version": "1.8.0",
			"package_name": "tensorflow"
		}, {
			"restraint": "ATLEAST",
			"package_version": "5.2.0",
			"package_name": "Pillow"
		}]
	}]
}

推理结果示例

自定义镜像类型的模型配置文件示例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
{
    "model_algorithm": "image_classification",
    "model_type": "Image",

    "metrics": {
        "f1": 0.345294,
        "accuracy": 0.462963,
        "precision": 0.338977,
        "recall": 0.351852
    },
    "apis": [{
        "protocol": "https",
        "url": "/",
        "method": "post",
        "request": {
            "Content-type": "multipart/form-data",
            "data": {
                "type": "object",
                "properties": {
                    "images": {
                        "type": "file"
                    }
                }
            }
        },
        "response": {
            "Content-type": "multipart/form-data",
            "data": {
                "type": "object",
                "required": [
                    "predicted_label",
                    "scores"
                ],
                "properties": {
                    "predicted_label": {
                        "type": "string"
                    },
                    "scores": {
                        "type": "array",
                        "items": [{
                            "type": "array",
                            "minItems": 2,
                            "maxItems": 2,
                            "items": [{
                                    "type": "string"
                                },
                                {
                                    "type": "number"
                                }
                            ]
                        }]
                    }
                }
            }
        }
    }]
}

使用自定义依赖包的模型配置文件示例

如下示例中,定义了TensorFlow-1.14的依赖环境。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
{
     // 模型算法为图片分类
     "model_algorithm": "image_classification",
     // 模型类型为TensorFlow
     // 由于自定义推理,模型类型可以不用准确定义,环境由依赖包决定
     "model_type": "TensorFlow",
     // 模型自定义脚本的运行时环境为python3.6, 同时支持python2.7
     "runtime": "python3.6",
     // 模型服务提供一个表单请求的API,请求类型为文件,请求key值为’images’
     "apis": [{
             "procotol": "https",
             "url": "/",
             "method": "post",
             "request": {
                 "Content-type": "multipart/form-data",
                 "data": {
                     "type": "object",
                     "properties": {
                         "images": {
                             "type": "file"
                         }
                     }
                 }
             },
             "response": {
                 "Content-type": "applicaton/json",
                 "data": {
                     "type": "object",
                     "properties": {
                         "mnist_result": {
                             "type": "array",
             "item": [{
                "type": "string"
                         }]
                         }
                     }
                 }
             }
         }
     ],
     // 模型的精度信息(仅作为模型展示用途)
     "metrics": {
         "f1": 0.124555,
         "recall": 0.171875,
         "precision": 0.0023493892851938493,
         "accuracy": 0.00746268656716417
     },
    "dependencies": [{
        "installer": "pip",
        "packages": [{
                "restraint": "ATLEAST",
                "package_version": "1.14.0",
                "package_name": "tensorflow"
            }
        ]
    }]
 }
分享:

    相关文档

    相关产品

文档是否有解决您的问题?

提交成功!

非常感谢您的反馈,我们会继续努力做到更好!

反馈提交失败,请稍后再试!

*必选

请至少选择或填写一项反馈信息

字符长度不能超过200

提交反馈 取消

如您有其它疑问,您也可以通过华为云社区问答频道来与我们联系探讨

跳转到云社区