模型配置文件编写说明
模型开发者发布模型时需要编写配置文件config.json。模型配置文件描述模型用途、模型计算框架、模型精度、推理代码依赖包以及模型对外API接口。
配置文件格式说明
配置文件为JSON格式,参数说明如表1所示。
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        model_algorithm  | 
      
        是  | 
      
        String  | 
      
        模型算法,表示该模型的用途,由模型开发者填写,以便使用者理解该模型的用途。只能以英文字母开头,不能包含中文以及&!'\"<>=,不超过36个字符。常见的模型算法有image_classification(图像分类)、object_detection(物体检测)、predict_analysis(预测分析)等。  | 
     
| 
        model_type  | 
      
        是  | 
      
        String  | 
      
        模型AI引擎,表明模型使用的计算框架,支持常用AI框架和“Image”。 
  | 
     
| 
        runtime  | 
      
        否  | 
      
        String  | 
      
        模型运行时环境,系统默认使用python2.7。runtime可选值与model_type相关,当model_type设置为Image时,不需要设置runtime,当model_type设置为其他常用框架时,请选择您使用的引擎所对应的运行时环境。目前支持的运行时环境列表请参见推理支持的AI引擎。 需要注意的是,如果您的模型需指定CPU或GPU上运行时,请根据runtime的后缀信息选择,当runtime中未包含cpu或GPU信息时,请仔细阅读“推理支持的AI引擎”中每个runtime的说明信息。  | 
     
| 
        metrics  | 
      
        否  | 
      
        object数据结构  | 
      
        模型的精度信息,包括平均数、召回率、精确率、准确率,metrics object数据结构说明如表2所示。 结果会显示在模型详情页面的“模型精度”模块。  | 
     
| 
        apis  | 
      
        否  | 
      
        api数据结构数组  | 
      
        表示模型接收和返回的请求样式,为结构体数据。 即模型可对外提供的Restful API数组,API数据结构如表3所示。示例代码请参见apis参数代码示例。 
  | 
     
| 
        dependencies  | 
      
        否  | 
      
        dependency结构数组  | 
      
        表示模型推理代码需要依赖的包,为结构体数据。 模型开发者需要提供包名、安装方式、版本约束。目前只支持pip安装方式。dependency结构数组说明如表6所示。 如果模型包内没有推理代码customize_service.py文件,则该字段可不填。自定义镜像模型不支持安装依赖包。 
         说明: 
         “dependencies”参数支持多个“dependency”结构数组,以list格式填入,默认安装包存在先后依赖关系(即写在前面的先安装,写在后面的后安装),且支持线下wheel包安装(wheel包必须与模型文件放在同一目录),当前不支持用户指定pip源。示例请参考导入模型时安装包依赖配置文件如何书写?  | 
     
| 
        health  | 
      
        否  | 
      
        health数据结构  | 
      
        镜像健康接口配置信息,只有“model_type”为“Image”时才需填写。 如果在滚动升级时要求不中断业务,那么必须提供健康检查的接口供ModelArts调用。health数据结构如表8所示。  | 
     
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        f1  | 
      
        否  | 
      
        Number  | 
      
        平均数。精确到小数点后17位,超过17位时,取前17位数值。  | 
     
| 
        recall  | 
      
        否  | 
      
        Number  | 
      
        召回率。精确到小数点后17位,超过17位时,取前17位数值。  | 
     
| 
        precision  | 
      
        否  | 
      
        Number  | 
      
        精确率。精确到小数点后17位,超过17位时,取前17位数值。  | 
     
| 
        accuracy  | 
      
        否  | 
      
        Number  | 
      
        准确率。精确到小数点后17位,超过17位时,取前17位数值。  | 
     
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        url  | 
      
        否  | 
      
        String  | 
      
        请求路径。默认值为“/”。自定义镜像的模型(即model_type为Image时)需要根据镜像内实际暴露的请求路径填写“url”。非自定义镜像模型(即model_type不为Image时)时,“url”只能为“/”。  | 
     
| 
        method  | 
      
        否  | 
      
        String  | 
      
        请求方法。默认值为“POST”。  | 
     
| 
        request  | 
      
        否  | 
      
        Object  | 
      
        请求体,request结构说明如表4所示。  | 
     
| 
        response  | 
      
        否  | 
      
        Object  | 
      
        响应体,response结构说明如表5所示。  | 
     
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        Content-type  | 
      
        在线服务-非必选 批量服务-必选  | 
      
        String  | 
      
        data以指定内容类型发送。默认值为“application/json”。 一般情况包括如下两种内容类型: 
 
         说明: 
         针对机器学习类模型,仅支持“application/json”  | 
     
| 
        data  | 
      
        在线服务-非必选 批量服务-必选  | 
      
        String  | 
      
        请求体以json schema描述。参数说明请参考官方指导。  | 
     
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        Content-type  | 
      
        在线服务-非必选 批量服务-必选  | 
      
        String  | 
      
        data以指定内容类型发送。默认值为“application/json”。 
         说明: 
         针对机器学习类模型,仅支持“application/json”  | 
     
| 
        data  | 
      
        在线服务-非必选 批量服务-必选  | 
      
        String  | 
      
        响应体以json schema描述。参数说明请参考官方指导。  | 
     
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        installer  | 
      
        是  | 
      
        String  | 
      
        安装方式,当前只支持“pip”。  | 
     
| 
        packages  | 
      
        是  | 
      
        package结构数组  | 
      
        依赖包集合,package结构数组说明如表7所示。  | 
     
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        package_name  | 
      
        是  | 
      
        String  | 
      
        依赖包名称。不能含有中文及特殊字符&!'"<>=。  | 
     
| 
        package_version  | 
      
        否  | 
      
        String  | 
      
        依赖包版本,如果不强依赖于版本号,则该项不填。不能含有中文及特殊字符&!'"<>=。  | 
     
| 
        restraint  | 
      
        否  | 
      
        String  | 
      
        版本限制条件,当且仅当“package_version”存在时必填,可选“EXACT/ATLEAST/ATMOST”。 
  | 
     
| 
        参数  | 
      
        是否必选  | 
      
        参数类型  | 
      
        描述  | 
     
|---|---|---|---|
| 
        check_method  | 
      
        是  | 
      
        String  | 
      
        健康检查方式。可选“HTTP/EXEC”。 
  | 
     
| 
        command  | 
      
        否  | 
      
        String  | 
      
        健康检查命令。健康检查方式为EXEC时必选。  | 
     
| 
        url  | 
      
        否  | 
      
        String  | 
      
        健康检查接口请求路径。健康检查方式为HTTP时必选。  | 
     
| 
        protocol  | 
      
        否  | 
      
        String  | 
      
        健康检查接口请求协议,默认为http。健康检查方式为HTTP时必选。  | 
     
| 
        initial_delay_seconds  | 
      
        否  | 
      
        String  | 
      
        健康检查初始化延迟时间。  | 
     
| 
        timeout_seconds  | 
      
        否  | 
      
        String  | 
      
        健康检查超时时间。  | 
     
| 
        period_seconds  | 
      
        是  | 
      
        String  | 
      
        健康检查周期。填写大于0且小于等于2147483647的整数,单位为秒。  | 
     
| 
        failure_threshold  | 
      
        是  | 
      
        String  | 
      
        健康检查最大失败次数。填写大于0且小于等于2147483647的整数。  | 
     
apis参数代码示例
[{
    "url": "/",
    "method": "post",
    "request": {
        "Content-type": "multipart/form-data",
        "data": {
            "type": "object",
            "properties": {
                "images": {
                    "type": "file"
                }
            }
        }
    },
    "response": {
        "Content-type": "application/json",
        "data": {
            "type": "object",
            "properties": {
                "mnist_result": {
                    "type": "array",
                    "item": [
                        {
                            "type": "string"
                        }
                    ]
                }
            }
        }
    }
}]
 目标检测模型配置文件示例
如下代码以TensorFlow引擎为例,您可以根据实际使用的引擎类型修改model_type参数后使用。
- 模型输入
    
    
value:图片文件
 - 模型输出
    
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
{ "detection_classes": [ "face", "arm" ], "detection_boxes": [ [ 33.6, 42.6, 104.5, 203.4 ], [ 103.1, 92.8, 765.6, 945.7 ] ], "detection_scores": [0.99, 0.73] }
 - 配置文件
    
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
{ "model_type": "TensorFlow", "model_algorithm": "object_detection", "metrics": { "f1": 0.345294, "accuracy": 0.462963, "precision": 0.338977, "recall": 0.351852 }, "apis": [{ "url": "/", "method": "post", "request": { "Content-type": "multipart/form-data", "data": { "type": "object", "properties": { "images": { "type": "file" } } } }, "response": { "Content-type": "application/json", "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": "array", "items": [{ "type": "number" }] } } } } }], "dependencies": [{ "installer": "pip", "packages": [{ "restraint": "EXACT", "package_version": "1.15.0", "package_name": "numpy" }, { "restraint": "EXACT", "package_version": "5.2.0", "package_name": "Pillow" } ] }] } 
图像分类模型配置文件示例
如下代码以TensorFlow引擎为例,您可以根据实际使用的引擎类型修改model_type参数后使用。
- 模型输入
    
    
value:图片文件
 - 模型输出
    
1 2 3 4 5 6 7
{ "predicted_label": "flower", "scores": [ ["rose", 0.99], ["begonia", 0.01] ] }
 - 配置文件
    
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
{ "model_type": "TensorFlow", "model_algorithm": "image_classification", "metrics": { "f1": 0.345294, "accuracy": 0.462963, "precision": 0.338977, "recall": 0.351852 }, "apis": [{ "url": "/", "method": "post", "request": { "Content-type": "multipart/form-data", "data": { "type": "object", "properties": { "images": { "type": "file" } } } }, "response": { "Content-type": "application/json", "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": "Pillow" } ] }] } 
如下代码以MindSpore引擎为例,您可以根据实际使用的引擎类型修改model_type参数后使用。
- 模型输入
    
    
value:图片文件
 - 模型输出
    
1"[[-2.404526 -3.0476532 -1.9888215 0.45013925 -1.7018927 0.40332815\n -7.1861157 11.290332 -1.5861531 5.7887416 ]]"
 - 配置文件
    
{ "model_algorithm": "image_classification", "model_type": "MindSpore", "metrics": { "f1": 0.124555, "recall": 0.171875, "precision": 0.0023493892851938493, "accuracy": 0.00746268656716417 }, "apis": [{ "url": "/", "method": "post", "request": { "Content-type": "multipart/form-data", "data": { "type": "object", "properties": { "images": { "type": "file" } } } }, "response": { "Content-type": "application/json", "data": { "type": "object", "properties": { "mnist_result": { "type": "array", "item": [{ "type": "string" }] } } } } } ], "dependencies": [] } 
预测分析模型配置文件示例
如下代码以TensorFlow引擎为例,您可以根据实际使用的引擎类型修改model_type参数后使用。
- 模型输入
    
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
{ "data": { "req_data": [ { "buying_price": "high", "maint_price": "high", "doors": "2", "persons": "2", "lug_boot": "small", "safety": "low", "acceptability": "acc" }, { "buying_price": "high", "maint_price": "high", "doors": "2", "persons": "2", "lug_boot": "small", "safety": "low", "acceptability": "acc" } ] } }
 - 模型输出
    
1 2 3 4 5 6 7 8 9 10 11 12
{ "data": { "resp_data": [ { "predict_result": "unacc" }, { "predict_result": "unacc" } ] } }
 - 配置文件
    
 
     代码中request结构和response结构中的data参数是json schema数据结构。data/properties里面的内容对应“模型输入”和“模型输出”。
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
{ "model_type": "TensorFlow", "model_algorithm": "predict_analysis", "metrics": { "f1": 0.345294, "accuracy": 0.462963, "precision": 0.338977, "recall": 0.351852 }, "apis": [ { "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": "application/json", "data": { "type": "object", "properties": { "data": { "type": "object", "properties": { "resp_data": { "type": "array", "items": [ { "type": "object", "properties": {} } ] } } } } } } } ], "dependencies": [ { "installer": "pip", "packages": [ { "restraint": "EXACT", "package_version": "1.15.0", "package_name": "numpy" }, { "restraint": "EXACT", "package_version": "5.2.0", "package_name": "Pillow" } ] } ] } 
自定义镜像类型的模型配置文件示例
模型输入和输出与目标检测模型配置文件示例类似。
- 模型预测输入为图片类型时,request请求示例如下:
    
该示例表示模型预测接收一个参数名为images、参数类型为file的预测请求,在推理界面会显示文件上传按钮,以文件形式进行预测。
1 2 3 4 5 6 7 8 9 10 11
{ "Content-type": "multipart/form-data", "data": { "type": "object", "properties": { "images": { "type": "file" } } } } - 模型预测输入为json数据类型时,request请求示例如下:
    
该示例表示模型预测接收json请求体,只有一个参数名为input、参数类型为string的预测请求,在推理界面会显示文本输入框,用于填写预测请求。
1 2 3 4 5 6 7 8 9 10 11
{ "Content-type": "application/json", "data": { "type": "object", "properties": { "input": { "type": "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  | 
       
        {
    "model_algorithm": "image_classification",
    "model_type": "Image",
    "metrics": {
        "f1": 0.345294,
        "accuracy": 0.462963,
        "precision": 0.338977,
        "recall": 0.351852
    },
    "apis": [{
        "url": "/",
        "method": "post",
        "request": {
            "Content-type": "multipart/form-data",
            "data": {
                "type": "object",
                "properties": {
                    "images": {
                        "type": "file"
                    }
                }
            }
        },
        "response": {
            "Content-type": "application/json",
            "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"
                                }
                            ]
                        }]
                    }
                }
            }
        }
    }]
}
         | 
      
机器学习类型的模型配置文件示例
以下代码以XGBoost为例。
- 模型输入:
 
{
    "req_data": [
        {
            "sepal_length": 5,
            "sepal_width": 3.3,
            "petal_length": 1.4,
            "petal_width": 0.2
        },
        {
            "sepal_length": 5,
            "sepal_width": 2,
            "petal_length": 3.5,
            "petal_width": 1
        },
        {
            "sepal_length": 6,
            "sepal_width": 2.2,
            "petal_length": 5,
            "petal_width": 1.5
        }
    ]
}
  - 模型输出:
 
{
    "resp_data": [
        {
            "predict_result": "Iris-setosa"
        },
        {
            "predict_result": "Iris-versicolor"
        }
    ]
}
  - 配置文件:
 
{
    "model_type": "XGBoost",
    "model_algorithm": "xgboost_iris_test",
    "runtime": "python2.7",
    "metrics": {
        "f1": 0.345294,
        "accuracy": 0.462963,
        "precision": 0.338977,
        "recall": 0.351852
    },
    "apis": [
        {
            "url": "/",
            "method": "post",
            "request": {
                "Content-type": "application/json",
                "data": {
                    "type": "object",
                    "properties": {
                        "req_data": {
                            "items": [
                                {
                                    "type": "object",
                                    "properties": {}
                                }
                            ],
                            "type": "array"
                        }
                    }
                }
            },
            "response": {
                "Content-type": "application/json",
                "data": {
                    "type": "object",
                    "properties": {
                        "resp_data": {
                            "type": "array",
                            "items": [
                                {
                                    "type": "object",
                                    "properties": {
                                        "predict_result": {}
                                    }
                                }
                            ]
                        }
                    }
                }
            }
        }
    ]
}
  
 使用自定义依赖包的模型配置文件示例
如下示例中,定义了1.16.4版本的numpy的依赖环境。
        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  | 
       
        {
    "model_algorithm": "image_classification",
    "model_type": "TensorFlow",
    "runtime": "python3.6",
    "apis": [
        {
            "url": "/",
            "method": "post",
            "request": {
                "Content-type": "multipart/form-data",
                "data": {
                    "type": "object",
                    "properties": {
                        "images": {
                            "type": "file"
                        }
                    }
                }
            },
            "response": {
                "Content-type": "application/json",
                "data": {
                    "type": "object",
                    "properties": {
                        "mnist_result": {
                            "type": "array",
                            "item": [
                                {
                                    "type": "string"
                                }
                            ]
                        }
                    }
                }
            }
        }
    ],
    "metrics": {
        "f1": 0.124555,
        "recall": 0.171875,
        "precision": 0.00234938928519385,
        "accuracy": 0.00746268656716417
    },
    "dependencies": [
        {
            "installer": "pip",
            "packages": [
                {
                    "restraint": "EXACT",
                    "package_version": "1.16.4",
                    "package_name": "numpy"
                }
            ]
        }
    ]
}
         |