跳到主要内容

构建自定义方式开发的模型

构建: 可将您已打包的模型进行容器化处理,方便您的模型资产迁移和部署。

根据您使用的框架,AILines将针对不同的框架进行构建。
如果您开发的模型比较特殊,不能使用平台支持的框架,平台为您提供了对自定义方式开发的模型进行打包构建的支持。

准备模型、服务代码以及Dockerfile

在工作空间中保存打包服务的代码和训练好的模型,并创建Dockerfile,结构如下:

自定模型打包结构

提示

这里为您提供了一个Python + Flask的示例,供您参考,您可以下载后在此基础上修改。
Python+Flask打包示例下载

创建构建

创建构建 其中:

  • 工作空间: 模型、模型服务代码以及Dockerfile所在的工作空间。
  • Framework: 模型所使用的框架,这里选择自定义
  • 模型存储路径: 模型打包文件存储路径, 上例模型存储路径为 ./customize/package_demo/
  • 服务名版本: 将模型打包为服务,该模型的服务名称与版本号,服务名及版本号在租户内唯一。
  • 服务启动命令: 模型镜像容器的默认启动命令,部署时可以重写覆盖。
  • 服务端口号: 模型服务的默认端口号,一定要与服务开发过程中指定的端口一致。
  • 服务上下文路径: 如果您发布的服务不是单一的API,可能需要上下文路径,可以在这里配置。上下文路径会做为环境变量设置到服务运行环境中,环境变量名为:CONTEXT_PATH。 详细使用方式可以参考 如何发布一个网站?

部署

自定义方式开发的模型部署时,可以重写启动命令和服务端口号。
通过这样的方式,如果您在一个构建中打包了多个服务,您可以在部署时选择启动哪一个服务。

部署

API发布

自定义方式开发的模型发布的API,访问方式有所不同,因为您可以自定义API的访问路径。

API发布

这里的URL仅是一个访问的前缀,例如:您定义了一个API的访问路径为/iris/classify,方法为POST,那么这个API的实际访问方式为:

curl -X POST 'https://api-core.ailines.cn/public/1-31/v1/iris/classify' \
-H 'Content-Type: application/json' \
--data '[[4.9,3.0,1.4,0.2],[7.7,3.0,6.1,2.3]]'

参考代码

Dockerfile
FROM python:3.8-slim

WORKDIR /workspace

COPY . .

RUN pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt

RUN chmod +x entrypoint.sh
main.py
import controller
from flask import Flask
from controller import *


def create_app():
_app = Flask(__name__)
_app.config['JSONIFY_PRETTYPRINT_REGULAR'] = False
_app.register_blueprint(controller.api)
return _app


app = create_app()

if __name__ == "__main__":
app.run("0.0.0.0", 3000, debug=True)


controller/iris.py
from . import api
from flask import request, jsonify
import pickle


@api.route("/iris/classify", methods=['POST'])
def iris_classify():
data = request.get_json()
print(data)
loaded_model = pickle.load(open("./model/iris_clf.pkl", 'rb'))
result = loaded_model.predict(data)
return jsonify(result.tolist())