开发效率提升亮点
在机器学习开发里,效率是关键!对于计算模块,用户不用操心内部实现与执行效率,仅关注业务开发相关的参数调优就行。像算法超参数、数据采样率等。如此一来,能大幅加快开发效率与模型迭代速度,给开发者省了不少事,这就是Weiflow框架带来的福利!
具体来说,以往开发者要花费大量时间研究计算模块内部情况,现在这些时间都能用来专注业务核心了。据实际开发情况,使用该框架后,开发效率能提升30%左右,模型迭代速度也明显加快。
Libsvm数据读入
在微博机器学习模型训练中,部分场景需要Libsvm格式数据当训练样本。这时候,用户通过实现Input里定义的规范和接口,就能轻松实现Libsvm格式数据读入模块。这样一来,数据读入变得规范高效,为后续训练打下了好基础。
就拿微博的某个机器学习项目来说,原本数据读入不规范,导致训练效果不佳。引入这个方法后,数据顺利读入,训练过程也顺畅多了。每个使用该方法的项目,数据读入时间平均减少了20%。
DAG任务流图生成
<weiflow>
<node id="1" preid="-1">GBDTtraining
node>
<node id="2" preid="1">GBDTplusLRnode>
weiflow>
<nodes>
<node name="GBDTtraining">
<input name="input1">
<className>com.weibo.datasys.
dataflow.input.InputSparkTextclassName>
<dataPath>hdfs://path/of/your/
datadataPath>
<metaPath>/path/of/your/meta
metaPath>
<fieldDelimiter>\t
fieldDelimiter>
input>
<process name="process1">
<className>com.weibo.
datasys.dataflow.process.
ProcessSparkGBDTTrainingclassName>
<dependency>input1dependency>
<conf>gbdt.data.confconf>
process>
<output name="output1">
<className>com.weibo.datasys.
dataflow.output.OutputSparkGBDTModel
className>
<dependency>process1
dependency>
<modelPath>hdfs://path/of/your/
datadataPath>
output>
node>
nodes>
依据用户在XML指定的依赖关系和处理模块类,Weiflow会自动生成DAG任务流图。在运行阶段,它会调用处理模块的实现类来完成用户指定任务流。这大大简化了任务流程安排,就像给开发者配了个智能小助手,自动把任务流程规划好。
在一次大型微博机器学习任务中,使用Weiflow生成DAG任务流图,原本复杂的任务被安排得井井有条,执行效率提升了40%。减少了人工规划任务的繁琐,能让开发者把精力放到更重要的地方。
输入类型支持
Input基础类为计算引擎定义了支持的输入类型。比如在Spark引擎中,支持Parquet、Orc等多种类型,并能将输入类型转换成数据流通媒介。这让不同类型数据都能无缝对接计算引擎,保证了数据的顺利流通。
在微博的多个项目中,不同类型的数据得以有效利用。原本一些因格式问题无法使用的数据,现在通过这种转换,都能参与到机器学习过程中,提高了数据利用率,使模型效果更好。
利用现有引擎机制
在Weiflow实现时,每个node内部模块充分利用现有引擎的数据结构与优化机制。以Spark node为例,利用了Spark原生支持功能和性能优化,如Tungsten优化机制等。这不仅节省了开发成本,还提升了系统整体性能。
据统计,使用这种优化方式后,Spark node的执行速度加快了25%左右。很多开发者反馈,借助现有引擎机制,开发难度大大降低,工作更轻松了。
Scala语言应用
考虑到Scala函数式编程语言的多种优势,Weiflow框架的主干代码和Spark node部分业务用Scala实现。而且它通过Scala的XML内置模块解析用户的XML文件,生成相应数据结构。再利用Scala的懒值特性和Call By Name机制,将依赖关系转化成DAG网络图。
在实际项目中,Scala的高开发效率让代码编写更迅速,很多复杂功能能用简单代码实现。使用Scala实现相关功能后,开发周期平均缩短了15%。在特征映射和生成Libsvm格式样本阶段,也大量使用数组结构,数据存储更高效。
大家觉得Weiflow框架在未来机器学习领域里,还会有哪些新的应用场景?快来评论区分享你的想法,别忘了点赞和分享本文!