vlambda博客
学习文章列表

spark.mllib中模型的持久化

spark.mllib中模型的持久化
目前spark.mllib中模型的存储,最常用的方式就是使用model.save(),然后将模型保存在本地磁盘或者hdfs上。本文除了介绍这两种方式之外,还增加了一种方式,就是将模型存入redis中。下面将介绍三种存储方式以及在实际应用过程中提供服务需要注意的点。
开始介绍之前先说一个前提。实际应用时,算法会分成两部分:模型和接口。模型部分就是自己定时训练的模型。接口就是根据训练好的模型提供的服务。两部分可以在一台机器上,也可以不在一台机器上。
三种存储方式的介绍:
1. 模型存入本地磁盘
应用时直接调用model.save()方法即可。
实际应用中使用这种方式,需要将模型和接口部署在一台机器上,否则训练好的模型将无法获取到。
(tips:将模型和接口部署在一台机器上时需要考虑,模型训练时所占用的资源情况。如果训练时机器的cpu或者内存资源都被占用,就不适合将模型和接口部署在一台机器上。因为这个时候接口无法提供服务,会导致线上出现问题。)
2. 模型存入hdfs
应用时直接调用model.save()方法即可。
实际应用中使用这种方式,模型和接口部署在一台机器或者不同机器都可以。
(tips:虽然模型保存在hdfs上,但是建议定时将模型拉到接口所在机器的本地磁盘上,来提供服务。因为如果每次请求接口都实时去调用hdfs中的模型,会导致接口的响应速度非常慢。所以需要定时去从hdfs中获取模型,以保证接口的响应速度。)
3. 模型存入redis中
需要自己封装方法。其实也非常简单,只需要看下save方法的源码,看下当前使用模型有哪些变量,再把他们保存即可。下面将以ALS模型为例,来演示如果存储模型。
实际应用中使用这种方式,模型和接口部署在一台机器或者不同机器都可以。
(tips:每次应用模型时,直接从redis中获取模型即可,模型也不需要存在本地磁盘上。)
ALS的基本代码:


模型存储代码:


模型获取代码:


附加:
python中的模型存储可以直接应用pickle即可。存储使用方法:pickle.dumps()。加载使用方法:pickle.loads()。这个时候模型持久化到本地还是redis,或是其他服务都可以。