构建自定义方式开发的模型
构建: 可将您已打包的模型进行容器化处理,方便您的模型资产迁移和部署。
根据您使用的框架,AILines将针对不同的框架进行构建。
如果您开发的模型比较特殊,不能使用平台支持的框架,平台为您提供了对自定义方式开发的模型进行打包构建的支持。
准备模型、服务代码以及Dockerfile
在工作空间中保存打包服务的代码和训练好的模型,并创建Dockerfile,结构如下:
提示
这里为您提供了一个Python + Flask的示例,供您参考,您可以下载后在此基础上修改。
Python+Flask打包示例下载
创建构建
其中:
- 工作空间: 模型、模型服务代码以及Dockerfile所在的工作空间。
- Framework: 模型所使用的框架,这里选择自定义。
- 模型存储路径: 模型打包文件存储路径, 上例模型存储路径为 ./customize/package_demo/。
- 服务名和版本: 将模型打包为服务,该模型的服务名称与版本号,服务名及版本号在租户内唯一。
- 服务启动命令: 模型镜像容器的默认启动命令,部署时可以重写覆盖。
- 服务端口号: 模型服务的默认端口号,一定要与服务开发过程中指定的端口一致。
- 服务上下文路径: 如果您发布的服务不是单一的API,可能需要上下文路径,可以在这里配置。上下文路径会做为环境变量设置到服务运行环境中,环境变量名为:CONTEXT_PATH。 详细使用方式可以参考 如何发布一个网站?
部署
自定义方式开发的模型部署时,可以重写启动命令和服务端口号。
通过这样的方式,如果您在一个构建中打包了多个服务,您可以在部署时选择启动哪一个服务。
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())