开源改变世界 | DLFlow深度学习方案的成长之路
1.
DLFlow是什么?
DLFlow是一套深度学习pipeline,它结合了Spark的大规模特征处理能力和Tensorflow模型构建能力。利用DLFlow可以快速处理原始特征、训练模型并进行大规模分布式预测,十分适合离线环境下的生产任务。
2.
DLFlow的背景
3.
DLFlow的特性
DLFlow框架主要面向深度学习大规模离线任务,其能够有效的结合单机GPU高性能计算和Spark大数据分布式处理能力,框架提供了较为灵活的使用方式,具体特性可以概括为如下几点:
配置驱动:
配置驱动框架运行,通过修改配置可以快速更换特征、模型超参数、任务流程等等。流程抽象:
任务和模型以插件形式存在,便于使用和开发,用户可以轻易地将自定义任务和模型注册到框架内使用。简单高效:
提供端到端的方案,框架通过Tag管理模型和特征版本,降低了模型和特征的复用难度。特征自动化:
特征自解析,支持多种数据类型转换、自动编码和归一化处理。Pipeline自动化:
通过内置的工作流引擎,自动解决任务之间的依赖关系,轻松构建深度学习pipeline。最佳实践:
针对离线生产中可能遇到的部分问题提供了解决方案,如数据降级、压缩存储等等。
DLFlow可以承担起大部分模型开发之外的工作,利用DLFlow可以快速训练模型并验证结果,极大提高工作效率。
4.
DLFlow的架构
DLFlow基于Tensorflow和Spark构建,Tensorflow提供了模型能力,Spark提供了大规模分布式处理能力。DLFlow框架主要分为三个层级:
任务调度层:
负责组织和构建运行pipeline,解决各步骤之间的依赖关系。核心模块层:
DLFlow的核心模块,处理框架运行中各种具体的事务。模型任务层:
定义具体的任务项和模型实体,支持用户自定义,构建方式较为灵活。
DLFlow框架通过配置驱动,使用时只需定义好配置参数即可。 特征处理包含了从SQL中融合原始特征、特征逻辑组划分、原始特征编码和自动归一化几个主要步骤,处理后的特征直接落盘HDFS; 模型构建主要由用户完成,利用Tensorflow提供的各种功能可以快速定义模型; 模型训练时直接通过HDFS读取数据,从而可以利用更大规模的数据集进行训练; 模型预测利用了Spark分布式大规模数据处理能力,通过并行计算以快速处理大规模预测任务。
此外,我们针对框架进行了一些优化,以提高整体的执行效率。
项目地址:
安装
pip install dlflow
02
构建模型
导入DLFlow模型框架开发属于自己的模型
from dlflow.mgr import model
from dlflow.models import ModelBase
@model.reg("my_model")
class MyModel(ModelBase):
...
配置
DLFlow配置使用hocon文件格式,如下是一个典型的配置,其中可选配置可以根据不同需求进行设置。
// Pipeline中需要运行的子任务,支持用户自定义任务
STEPS : "merge, encode, predict, evaluate, train, UDTs",
MODEL_TAG : "model tag", // 模型版本标识
MODEL_DATE : "20200101", // 模型训练日期
FEATURE_TAG : "feature tag", // 特征版本标识
FEATURE_DATE : "20200101", // 特征日期
PRIMARY_KEYS : "id_1, id_2", // 数据的主键,可多个
LABELED_KEYS : "label_1, label_2", // 训练数据标签,可多个
MODELS_DIR : "<path>/static_models", // 用户自定义模型目录
TASKS_DIR : "<path>/static_tasks", // 用户自定义任务目录
LOCAL_WORKSPACE : "<path>/local_workspace", // 本地工作目录
HDFS_WORKSPACE : "<hdfs_path>/hdfs_workspace", // HDFS工作目录
// Spark运行时参数配置
SPARK : { include file("<conf_path>/spark_conf/spark.conf") },
// 可选,模型相关的配置参数配置
MODEL : { include file("<conf_path>/model_conf/model.conf") },
// 可选,特征预处理相关的参数配置
BUCKET : { include file("<conf_path>/bucket_conf/bucket.conf") },
// 可选,SQL原始特征融合配置
MERGE : {
config_file : "<conf_path>/merge_conf/merge.conf",
seed_sql : "
<conf_path>/merge_conf/seed.sql",
fit : true,
}
运行
在完成配置后只需要用命令启动任务就可以运行pipeline了
dlflow --config <my_config_file>.conf
更多有关使用的信息请参考DLFlow使用说明
6.
关于开源
DLFlow起初是为了解决深度学习应用在离线生产任务中部署问题,随着我们探索的深入,我们发现在离线生产环境下部署深度学习这一应用场景确实是一个较为普遍的需求,由此,我们心中萌生了开源的想法,一方面,我们希望通过开源将自身在深度学习大规模离线计算上的实战经验分享出去,另一方面,我们也希望能够吸收一些外部的灵感和建议,能够让框架变得更加完备,更好的服务于我们自身。
7.
后续
DLFlow目前仍处于较为初级的阶段,其中有很多东西可以进一步优化改进,后续我们的精力将主要集中在如下几个部分:
单机本地化支持; 任务扩展与并行,分布式训练; 更多的预定义算法模型; 修复已知问题提升稳定性。
来自滴滴用户画像团队,还在成长中的算法一枚,热爱生活,热爱工作,也希望自己能为画像团队贡献一份力量。
-
-
编辑 | 周景怡
-
推荐阅读