当前位置:网站首页 > 智能化工程 正文 智能化工程

AI算法模型线上部署方法总结

frank 2025-08-27 23:05:26 智能化工程 1 ℃ 0 评论

AI算法模型线上部署方法总结

  • (推荐)PMML介绍及使用
  • 一、机器学习算法线上部署方法
    • 1.1 三种场景
    • 1.2 如何转换PMML,并封装PMML
    • 1.3 接下来说一下各个算法工具的工程实践
      • 1.3.1 python模型上线:我们目前使用了模型转换成PMML上线方法。
      • 1.3.2 R模型上线-这块我们用的多,可以用R model转换PMML的方式来实现。
      • 1.3.3 Spark模型上线-好处是脱离了环境,速度快。
    • 1.4 只用Linux的Shell来调度模型的实现方法—简单粗暴
    • 1.5 说完了部署上线,说一下模型数据流转的注意事项
  • 二、机器学习算法的部署
    • 实时小规模
    • 实时大规模
    • 离线计算
  • 三、谈一谈AI算法部署的一些经验
  • 四、老潘的AI部署以及工业落地学习之路(深度学习)
    • 4.1 AI部署
    • 4.2 聊聊AI部署
    • 4.3 需要什么技术呢?
    • 4.4 需要的深度学习基础知识
    • 4.5 常用的框架
    • Caffe
    • Libtorch (torchscript)
    • TensorRT
    • OpenVINO
    • NCNN/MNN/TNN/TVM
    • PaddlePaddle
    • 还有很多框架
    • 4.6 AI部署中的提速方法
      • 4.6.1 模型结构
      • 4.6.2 剪枝
      • 4.6.3 蒸馏
      • 4.6.4 稀疏化
      • 4.6.4 量化训练
    • 4.7 常见部署流程
    • 4.8 后记
  • 五、算法模型在服务端的部署
    • 谈谈算法模型在服务端的部署
    • 5.1 关于模型部署框架的两大类型
    • 5.2 关于两种类型的成因思考
    • 5.3 那么请问……
    • 5.4 关于我们目前的解决方案
    • 5.5 为啥不上Kubeflow

AI算法模型线上部署方法总结
flask
https://dormousehole.readthedocs.io/en/latest/
fastApi
https://fastapi.tiangolo.com/zh/
django
https://docs.djangoproject.com/zh-hans/2.0/
pmml
https://zhuanlan.zhihu.com/p/73245462
https://www.freesion.com/article/10901383197/

(推荐)PMML介绍及使用

PMML 介绍:
https://zhuanlan.zhihu.com/p/73245462
xgboost为例导出模型到本地:

from sklearn2pmml import PMMLPipeline
from sklearn_pandas import DataFrameMapper
from sklearn2pmml import sklearn2pmml
import pickle

clf = xgb.XGBRegressor()

clf.fit(df_train[column_list], df_train[[y_name]])

# method1:存储为PMML形式
pipeline = PMMLPipeline([("regression", clf)])
pipeline.fit(df_train[column_list], df_train[[y_name]])
sklearn2pmml(pipeline, "models/%s.pmml" % clf_str, with_repr=True)

# method2:pickle保存模型 .dat
# save model to file
pickle.dump(clf, open("models/%s.pickle.dat" % clf_str, "wb"))

xgb_model = pickle.load(open("models/XGBRegressor().pickle.dat", "rb"))
column_list = ['c1', 'c2', 'c3']
result = xgb_model.predict(df[column_list])

xgboost-pmml,java调用pmml参考资料:
https://www.cnblogs.com/pinard/p/9220199.html
https://www.freesion.com/article/10901383197/
https://blog.csdn.net/Katherine_hsr/article/details/84951324

一、机器学习算法线上部署方法

来自:机器学习算法线上部署方法

我们经常会碰到一个问题:用了复杂的GBDT或者xgboost大大提升了模型效果,可是在上线的时候又犯难了,工程师说这个模型太复杂了,我没法上线,满足不了工程的要求,你帮我转换成LR吧,直接套用一个公式就好了,速度飞速,肯定满足工程要求。这个时候你又屁颠屁颠用回了LR,重新训练了一下模型,心里默骂千百遍:工程能力真弱。
这些疑问,我们以前碰到过,通过不断的摸索,试验出了不同的复杂机器学习的上线方法,来满足不同场景的需求。在这里把实践经验整理分享,希望对大家有所帮助。(我们的实践经验更多是倾向于业务模型的上线流程,广告和推荐级别的部署请自行绕道)。
首先在训练模型的工具上,一般三个模型训练工具,Spark、R、Python。这三种工具各有千秋,以后有时间,我写一下三种工具的使用心得。针对不同的模型使用场景,为了满足不同的线上应用的要求,会用不同的上线方法。

1.1 三种场景

  • 如果是实时的、小数据量的预测应用,则采用的SOA调用Rserve或者python-httpserve来进行应用;这种应用方式有个缺点是需要启用服务来进行预测,也就是需要跨环境,从Java跨到R或者Python环境。对于性能,基本上我们用Rserver方式,针对一次1000条或者更少请求的预测,可以控制95%的结果在100ms内返回结果,100ms可以满足工程上的实践要求。更大的数据量,比如10000/次,100000/次的预测,我们目前评估下来满足不了100ms的要求,建议分批进行调用或者采用多线程请求的方式来实现。
  • 如果是实时、大数据量的预测应用,则会采用SOA,训练好的模型转换成PMML(关于如何转换,我在下面会详细描述),然后把模型封装成一个类,用Java调用这个类来预测。用这种方式的好处是SOA不依赖于任何环境,任何计算和开销都是在Java内部里面消耗掉了,所以这种工程级别应用速度很快、很稳定。用此种方法也是要提供两个东西,模型文件和预测主类;
  • 如果是Offline(离线)预测的,D+1天的预测,则可以不用考虑第1、2种方式,可以简单的使用Rscript x.R或者python x.py的方式来进行预测。使用这种方式需要一个调度工具,如果公司没有统一的调度工具,你用shell的crontab做定时调用就可以了。

以上三种做法,都会用SOA里面进行数据处理和变换,只有部分变换会在提供的Function或者类进行处理,一般性都建议在SOA里面处理好,否则性能会变慢。
大概场景罗列完毕,简要介绍一下各不同工具的线上应用的实现方式。

1.2 如何转换PMML,并封装PMML

大部分模型都可以用PMML的方式实现,PMML的使用方法调用范例见:

  • jpmml的说明文档:GitHub - jpmml/jpmml-evaluator: Java Evaluator API for PMML;
  • Java调用PMML的范例(PPJUtils/java/pmml at master · pjpan/PPJUtils · GitHub),此案例是我们的工程师写的范例,大家可以根据此案例进行修改即可;
  • Jpmml支持的转换语言,主流的机器学习语言都支持了,深度学习类除外;
  • 从下图可以看到,它支持R、python和spark、xgboost等模型的转换,用起来非常方便。

AI算法模型线上部署方法总结

1.3 接下来说一下各个算法工具的工程实践

1.3.1 python模型上线:我们目前使用了模型转换成PMML上线方法。

  • python-sklearn里面的模型都支持,也支持xgboost,并且PCA,归一化可以封装成preprocess转换成PMML,所以调用起来很方便;
  • 特别需要注意的是:缺失值的处理会影响到预测结果,大家可以可以看一下;
  • 用PMML方式预测,模型预测一条记录速度是1ms,可以用这个预测来预估一下根据你的数据量,整体的速度有多少。

1.3.2 R模型上线-这块我们用的多,可以用R model转换PMML的方式来实现。

这里我介绍另一种的上线方式:Rserve。具体实现方式是:用SOA调用Rserve的方式去实现,我们会在服务器上部署好R环境和安装好Rserve,然后用JAVA写好SOA接口,调用Rserve来进行预测;

  • Java调用Rserve方式见网页链接:Rserve - Binary R server;
  • centos的Rserve搭建方法见:centos -Rserve的搭建,这里详细描述了Rserve的搭建方式。

Rserve方式可以批量预测,跟PMML的单个预测方式相比,在少数据量的时候,PMML速度更快,但是如果是1000一次一批的效率上看,Rserve的方式会更快;用Rserve上线的文件只需要提供两个:

  • 模型结果文件(XX.Rdata);
  • 预测函数(Pred.R)。

Rserve_1启动把模型结果(XX.Rdata)常驻内存。预测需要的输入Feature都在Java里定义好不同的变量,然后你用Java访问Rserve_1,调用Pred.R进行预测,获取返回的List应用在线上。最后把相关的输入输出存成log进行数据核对。

Pred.R <- function(x1,x2,x3){
   
   data <

版权说明:如非注明,本站文章均为 扬州驻场服务-网络设备调试-监控维修-南京泽同信息科技有限公司 原创,转载请注明出处和附带本文链接

请在这里放置你的在线分享代码
«    2025年8月    »
123
45678910
11121314151617
18192021222324
25262728293031
搜索
最新留言
    文章归档
    网站收藏
    友情链接