天天看點

阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)

Step By Step

1、直接使用鏡像擷取Python環境

2、容器配置

3、鏡像建構與上傳

4、基于建構鏡像建立EAS服務

5、Java SDK調用服務

一、直接使用鏡像擷取Python環境

  • 1.1 如果未安裝Docker,請參考 連結 先安裝Docker環境
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)
  • 1.2 run指令進入容器
sudo docker run -ti registry.cn-shanghai.aliyuncs.com/eas/eas-python-base-image:py3.6-allspark-0.8

二、容器配置

  • 2.1 删除app.py,下載下傳 pmml 檔案
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)
  • 2.2 docker中安裝:sklearn-pmml-model
ENV/bin/pip install sklearn-pmml-model
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)

三、鏡像建構與上傳

  • 3.1 登陸阿裡雲鏡像服務
sudo docker login --username=gts mubu**.cn-shanghai.cr.aliyuncs.com
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)
  • 3.2 擷取容器ID
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)
  • 3.3 基于容器生成鏡像
sudo docker commit d52f5f01607b mubu.cn-shanghai.cr.aliyuncs.com/taro/eas_pmml:v2
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)
  • 3.4 送出鏡像到阿裡雲鏡像倉庫
sudo docker push mubu.cn-shanghai.cr.aliyuncs.com/taro/eas_pmml:v2
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)
  • 3.5 鏡像倉庫檢視
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)
  • 3.6 設定鏡像公開匿名拉取權限
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)

四、基于建構鏡像建立EAS服務

  • 4.1 app.py代碼
# -*- coding: utf-8 -*-
import allspark
import pandas as pd
import numpy as np
from sklearn_pmml_model.ensemble import PMMLForestClassifier

class MyProcessor(allspark.BaseProcessor):
    """ MyProcessor is a example
        you can send mesage like this to predict
        curl -v http://127.0.0.1:8080/api/predict/service_name -d '2.1 105'
    """

    def initialize(self):
        """ load module, executed once at the start of the service
         do service intialization and load models in this function.
        """
        self.model = PMMLForestClassifier(pmml="randomForest.pmml")

    def pre_proccess(self, data):
        """ data format pre process
        """
        x, y, z, w = data.split(b' ')
        return float(x), float(y), float(z), float(w)

    def post_process(self, data):
        """ proccess after process
        """
        return str(data).encode()

    def process(self, data):
        """ process the request data
        """
        x, y, z, w = self.pre_proccess(data)
        df = pd.DataFrame([[x, y, z, w]],columns=['sepal length (cm)','sepal width (cm)','petal length (cm)','petal width (cm)'])
        result  = self.model.predict(df)
        print(result)
        return self.post_process(result), 200

if __name__ == '__main__':
    # paramter worker_threads indicates concurrency of processing
    runner = MyProcessor(worker_threads=10)
    runner.run()
           
  • 4.2 上傳app.py到阿裡雲OSS存儲,并設定權限為公共可讀,擷取下載下傳位址
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)
  • 4.3 app.json部署檔案
{
  "name": "taro_docker_v2",
  "processor_entry": "./app.py",
  "processor_type": "python",
  "processor_path": "https://taro******.oss-cn-shanghai.aliyuncs.com/eas_python_app/app.py",
  "data_image": "mubu******.cn-shanghai.cr.aliyuncs.com/taro/eas_pmml:v1",
  "metadata": {
    "instance": 1,
     "memory": 2000,
     "cpu": 1
    }
}           
  • 4.4 EASCMD部署服務
./eascmd64 create demo2.json
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)

五、Java SDK調用服務

  • 5.1 控制台檢視部署服務
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)
  • 5.2 POSTMAN調用測試
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)
  • 5.3 pom.xml
<dependency>
            <groupId>com.squareup.okhttp</groupId>
            <artifactId>okhttp</artifactId>
            <version>2.7.3</version>
        </dependency>           
  • 5.4 Java Code
import com.squareup.okhttp.*;
import java.io.IOException;

public class EASDEMO {

    public static void main(String[] args) throws IOException {
        OkHttpClient client = new OkHttpClient();

        MediaType mediaType = MediaType.parse("application/octet-stream");
        RequestBody body = RequestBody.create(mediaType, "5.6 3.0 4.1 1.3");
        Request request = new Request.Builder()
                .url("http://172*********.cn-shanghai.pai-eas.aliyuncs.com/api/predict/taro_docker_v2")
                .post(body)
                .addHeader("authorization", "MjE2ZDNkMj*********")
                .build();

        Response response = client.newCall(request).execute();
        System.out.println(response.body().string());

    }
}
           
  • 5.5 測試結果
阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(二)

更多參考

安裝 Docker 阿裡雲機器學習模型線上服務自定義Processor部署PMML模型(一) 使用Python開發自定義Processor eascmd用戶端工具