天天看点

机器学习模型线上部署方法

目前比较流行的4类机器学习模型上线的形式:

1、离线预测 + 不跨语言 

        这种形式最简单,就是用什么语言训练的就用什么语言预测,而且不用考虑高并发和响应时间等问题。

        案例1:python训练 + airflow调度 

        使用python训练好模型,并用joblib.dumps()保存模型文件,然后我们在python文件中使用joblib.load()加载模型文件,最后再使用airflow离线调度(简单的任务使用Linux自带cron即可,复杂的再考虑airflow)。

2、离线预测 + 跨语言 

        用一种语言训练,另一种语言预测,但是不用考虑多高并发和响应时间等问题。

        案例2:R + pmml + spark + airflow调度 

        使用R语言训练模型并转为pmml文件,然后我们使用spark将这个pmml文件封装为jar,使用airflow提交到yarn。 

        val is: InputStream = fs.open(path)

        val pmml: PMML = PMMLUtil.unmarshal(is)

        modelEvaluator = ModelEvaluatorFactory.newInstance.newModelEvaluator(pmml)

3、在线预测 + 不跨语言 

        训练和预测都使用同一种语言,同时要考虑高并发和响应时间等问题。

        案例3:使用分布式spark版的xgboost,训练好的模型直接保存为二进制文件model.booster.saveModel(hdfsOutStream),然后xgboost4j加载该文件XGBoost.loadModel(is)实现线上实时预测。

4、在线预测 + 跨语言 

训练和预测都使用不同的语言,同时要考虑高并发和响应时间等问题。

        案例3:python + pmml + spark版的xgboost

        目前这种场景比较少。就是案例2和3变一下的情景。

总结:

        不跨平台(语言)的时候,就不需要使用PMML ,因为任何中间格式都会牺牲掉独有的优化。 而其他跨平台的模型要转为java能使用的类(因为我们的业务大部分是java实现的),这个工具就是jpmml-evaluator。