接触PAI平台也快1年了,感觉PAI平台应用起来很强大,很方便。而且2017 年 3 月 29 日,阿里云重磅推出升级版的机器学习平台 PAI 2.0,可以大幅度降低人工智能门槛以及开发成本。PAI 2.0 提供 100 余种算法组件,涵盖了分类、回归、聚类等常用场景,还针对主流的算法应用场景,提供了偏向业务的算法,包含文本分析、关系分析、推荐三种类别。
PAI 2.0 新增了参数服务器(Parameter Server)架构的算法。不仅能进行数据并行,同时还可将模型分片,把大的模型分为多个子集,每个参数服务器只存一个子集,全部的参数服务器聚合在一起拼凑成一个完整的模型。其创新点还在于失败重试的功能。在分布式系统上,成百上千个节点协同工作时,经常会出现一个或几个节点挂掉的情况,如果没有失败重试机制,任务就会有一定的几率失败,需要重新提交任务到集群调度。PS 算法支持千亿特征、万亿模型和万亿样本直至 PB 级的数据训练,适合于电商、广告等数据规模巨大的推荐场景。
从操作界面来看,PAI 没有繁琐的公式和复杂的代码逻辑,用户看到的是各种分门别类被封装好的算法组件。每一个实验步骤都提供可视化的监控页面,在深度学习黑箱透明化方面,PAI 也同时集成了各种可视化工具。
PAI平台现在用起来已经很方便了,不过我希望最好还能增加以下一些优化的小功能。
1,图形界面的算法导出代码,或者查看界面的代码的功能。图形界面虽然操作起来很方便,可是如果是需要经常变换特征,调整参数等工作,用图形界面要挨个点每个控件,操作起来比较繁琐。而如果直接写代码的话,则需要查找每个空间的名称,参数等等,也比较繁琐。所以如果能先用图形界面建立算法,然后导出成代码,在IDE里面慢慢调整特征、参数,应该是比较理想的一种做法。
2,希望能支持简单的变量。一个简单的例子,对于如下代码:
--模型训练
drop offlinemodel if exists GBDT_test_model_v1;
drop table if exists GBDT_test_model_Importance;
PAI -name gbdt_lr -project algo_public -DfeatureSplitValueMaxSize="500" -DrandSeed="0" -Dshrinkage="0.05" -DmaxLeafCount="32" -DlabelColName="lable"
-DinputTableName="portscan_train"
-DoutputImportanceTableName="GBDT_test_model_Importance"
-DminLeafSampleCount="500" -DsampleRatio="0.6" -DmaxDepth="6" -DmetricType="0"
-DmodelName="GBDT_test_model_v1"
-DfeatureRatio="0.6" -DtestRatio="0"
-DfeatureColNames="sip_client_ip_n,sip_client_ip_dn_cnt,sip_connect_n,sip_connect_n_max,sip_hashuserid_dn,sip_connect_n_avg,port"
-DtreeCount="250";
--模型预测
drop table if exists portscan_pre_result;
PAI -name prediction -project algo_public -DdetailColName="prediction_detail" -DappendColNames="client_port,source_ip,ds"
-DmodelName="GBDT_test_model_v1"
-DitemDelimiter="," -DresultColName="prediction_result" -Dlifecycle="28"
-DoutputTableName="portscan_pre_result"
-DscoreColName="prediction_score" -DkvDelimiter=":"
-DfeatureColNames="port,sip_client_ip_n,sip_client_ip_dn_cnt,sip_connect_n,sip_connect_n_max,sip_hashuserid_dn,sip_connect_n_avg"
-DinputTableName="portscan_test"
-DenableSparse="false";
模型和预测都要用到特征列名称,如果能定义变量,比如:
DEF FeatureCols="port,sip_client_ip_n,sip_client_ip_dn_cnt,sip_connect_n,sip_connect_n_max,sip_hashuserid_dn,sip_connect_n_avg"
那么这个算法后面每个需要特征列的地方都可以直接用:
-DfeatureColNames=FeatureCols
修改起来会更方便,也不容易出错。