【机器学习-无监督模型部署】pyspark部署无监督模型

背景:
    1、自己开发完高斯混合聚类模型,需要发布上线部署,进行线上应用。由于公司每天日活数据有1.8亿,使用单机版的模型预测不现实,一天根本跑不完;于是使用分布式计算框架spark来解决大数据量情况下模型线上预测的问题,使用pyspark来应用。为什么使用pyspark呐,不使用原生的spark(scala编写的应用程序)呐,由于开发模型时的特征工程阶段,有一些特征处理,另外需要高斯混合聚类模型转化为scala代码逻辑实现一遍,工程量有些大,无监督模型目前我司使用的并不多,没有花时间精力在如何将开发好的无监督模型转为scala代码逻辑,顾直接使用pyspark来部署。后续会分享下自己写的一个工具,将开发好的xgboost模型通过该工具自动转化为scala代码逻辑,然后部署上线,开发此工具是由于公司基本都是开发的xgboost模型,模型开发好或迭代后,能快速使用原生spark上线部署应用,目前已应用大半年,从6月加入公司后写的,6月应用到线上的。将开发好的xgboost模型转化为scala代码逻辑,1.8亿日活数据跑下来在10分钟内。
    2、确定使用pyspark来进行模型部署,不类似scala提交spark任务,直接将逻辑代码中使用到的依赖包都打包成一个jar包,需要解决下python在spark中依赖包的问题
          a)集群中每台机器上不确定python环境是否一致
          b)自己开发模型时使用的python环境不确定与集群的环境是否一致
 
 
 
解决方案:
介于a、b两个问题,需要单独创建一个虚拟环境,该虚拟环境同逻辑代码一同分发到各个work节点,让再运行逻辑代码时,使用该虚拟环境,这样就不会存在a、b两个问题导致python逻辑代码执行过程中遇到依赖包版本或环境不一致的问题
 
解决步骤分为四大步:
 
一、创建python虚拟环境
1、在自己开发模型的机器上(此处我使用的conda创建的虚拟环境)
conda create -n gmm_onpyspark_py37 --copy -y -q python=3.7.6

 

上述命令创建了一个名为gmm_onpyspark_py37的虚拟环境,--copy选项将对应的软件包都安装到该环境中,包括一些C的动态链接库文件;python=3.7.6表示python环境是python=3.7.6,我开发模型的时候使用的是3.7.6,根据实际情况动态变化。
 
二、在虚拟环境下安装开发模型时使用到的第三方库
 
1、激活虚拟环境,注意你创建虚拟环境的时候会有一个路径,我路径如下
conda activate /home/marketingscore/anaconda3/envs/gmm_onpyspark_py37

 

 
2、安装特定版本的三方库,注意此处我未安装pyspark
conda install pandas==1.0.1
conda install numpy==1.18.3
conda install scikit-learn==0.22.1

 

 
3、检验你虚拟环境是否符合你开发模型时的环境
python —version    #检查python版本

>>> import pandas as pd
>>> pd.__version__
‘1.0.1'

 

 
或者:conda list命令查看依赖包的版本
 
三、打包python的虚拟环境
 
 1、退出虚拟环境
conda activate

 

 
2、去到gmm_onpyspark_py37文件夹的上一层目录,使用zip将gmm_onpyspark_py37打包
cd /home/marketingscore/anaconda3/envs/
zip -r gmm_onpyspark_py37.zip gmm_onpyspark_py37

 

 
3、将虚拟环境gmm_onpyspark_py37.zip上传到hdfs上(为了避免每次提交spark任务都从提交任务机upload到集群上)
hadoop fs -put gmm_onpyspark_py37.zip /user/marketingscore/ryanzheng/model/model_env/

 

 
四、提交spark任务
 
spark-submit --master yarn \
--deploy-mode cluster \
--name gmm_on_pyspark_pred \
--queue root.marketingscore \
--driver-memory 4g \
--executor-memory 12g \
--num-executors 80 \
--executor-cores 4 \
--conf spark.sql.broadcastTimeout=36000 \
--conf spark.yarn.maxAppAttempts=1 \
--archives hdfs:///user/marketingscore/ryanzheng/model/model_env/gmm_onpyspark_py37.zip#gmm_pyspark_env_py37 \
--conf spark.pyspark.driver.python=./gmm_pyspark_env_py37/gmm_onpyspark_py37/bin/python3.7 \
--conf spark.pyspark.python=./gmm_pyspark_env_py37/gmm_onpyspark_py37/bin/python3.7 \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./gmm_pyspark_env_py37/gmm_onpyspark_py37/bin/python3.7 \
--conf spark.executorEnv.PYSPARK_PYTHON=./gmm_pyspark_env_py37/gmm_onpyspark_py37/bin/python3.7 \
--conf spark.executorEnv.PYTHON_EGG_CACHE=/tmp/python_egg_cache \
--files /home/marketingscore/ryanzheng/online_to_pred_model/xjfq_xiaoe_yixiang_unsupervised_to_pred/gmm.pickle,/home/marketingscore/ryanzheng/online_to_pred_model/xjfq_xiaoe_yixiang_unsupervised_to_pred/scaler.pickle \
/home/marketingscore/ryanzheng/online_to_pred_model/xjfq_xiaoe_yixiang_unsupervised_to_pred/gmm_on_pyspark_pred.py ${input_data_path} ${output_result_path} ${data_time}

 

前面那些参数我就不说了,大家应该都清楚。重点讲下如下几个参数
--archives hdfs:///user/marketingscore/ryanzheng/model/model_env/gmm_onpyspark_py37.zip#gmm_pyspark_env_py37    #解释说明:被每个executor提取到工作目录的文件列表,多个用逗号隔开;#gmm_pyspark_env_py37是必须要的,它是将gmm_onpyspark_py37.zip虚拟环境解压后的文件夹名


--conf spark.pyspark.driver.python=./gmm_pyspark_env_py37/gmm_onpyspark_py37/bin/python3.7 \
--conf spark.pyspark.python=./gmm_pyspark_env_py37/gmm_onpyspark_py37/bin/python3.7 \
--conf spark.yarn.appMasterEnv.PYSPARK_PYTHON=./gmm_pyspark_env_py37/gmm_onpyspark_py37/bin/python3.7 \
--conf spark.executorEnv.PYSPARK_PYTHON=./gmm_pyspark_env_py37/gmm_onpyspark_py37/bin/python3.7 \
--conf spark.executorEnv.PYTHON_EGG_CACHE=/tmp/python_egg_cache \

如上5个都是指定虚拟环境命令


--files /home/marketingscore/ryanzheng/online_to_pred_model/xjfq_xiaoe_yixiang_unsupervised_to_pred/gmm.pickle,/home/marketingscore/ryanzheng/online_to_pred_model/xjfq_xiaoe_yixiang_unsupervised_to_pred/scaler.pickle    #这个是模型文件和特征工程文件


/home/marketingscore/ryanzheng/online_to_pred_model/xjfq_xiaoe_yixiang_unsupervised_to_pred/gmm_on_pyspark_pred.py    #这个是你的预测逻辑代码

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值