阿里云
云栖大会资料下载
发表主题 回复主题
  • 8710阅读
  • 6回复

[其他精彩]如何合理使用odps的资源

发帖
63
云币
112
— 本帖被 凝岚 执行取消置顶操作(2016-03-03) —
      最近的大家比赛的时候,有人吐槽资源不够用。有人说己跑了一次两次的训练资源就没了。虽然看起来这个比例上说还是少数,但是如何让自己不成为这个少数的悲剧

数据预处理
     首先需要对数据做预处理,把一些不要的数据处理掉,除了减少输入的数据量,还能减少噪音。举个例子,天猫大赛中的网络爬虫的访问记录,刷单的访问记录,如果没有识别出来的话,会对结果产生影响。
      其次是对数据做采样,比如有的一些比赛,正负样本比例差很多,如果直接拿全部的数据去做模型,那输出的模型可能会不太准确。可以对较多的部分数据进行采样,保持一个比较合理的正负样本比。

      同样的,调代码的时候先拿采样后的小数据集来试试效果,既快又好。如果直接全量数据跑job,跑了半天看到出来的结果字段名写错了,当时内心一定是崩溃的。
      还有就是从总的来说,可以把训练数据分成两部分,一部分用于训练模型,另外一部分来测试模型的效果。

超时类的报错
     因为超时导致的任务失败从工单上看不在少数,这些都是大任务,每失败一个都会导致资源的极大浪费。
     首先,最简单也最容易的,写sql的时候不要少些关联条件,on/where后面少些了一个条件带来的后果可能是数据量完全不可预见的。
     有一些选手在比赛里想把很多数据放在内存里,然后循环去算。这样就直接把odps单个节点的内存撑爆了,或者循环太久导致任务超时。这个操作我们称为在odps里做笛卡尔积操作。笛卡尔积操作会导致任务的计算量非线性增加,比如一张一千万条数据的表,要算两两之间的相似度,那计算量就是10^14的计算量。这消耗的资源就非常之惊人了。
      还有一种情况,没做笛卡尔积,是在运行中发现有一两个节点一直跑不好在等待的情况。这个我们称为数据长尾。要知道odps是分布式的计算引擎,类似把复杂的工作分给很多人去做。如果某个worker的工作量特别大,会导致任务运行时间边长。如果太大也可能导致超时。选手需要合理调整算法,让每个节点的任务量相对均匀。这里比较常见的就是没有对异常数据做数据,还是如刚提到的爬虫数据,爬虫数据单个用户一天的访问量和一个正常用户的访问量完全不是一个数量级的。如果是还和以前一样按照用户分组又没做特殊处理的话,单个reduce端内算法再稍微复杂一些,就可能出现超时的情况。

跑模型
     如果发现算法平台里跑模型时资源消耗过高,可以检查
          1 数据量(别拿全量数据跑模型) 解决方案:参考数据预处理,主要是采样
          2 特征数(别人几十到几百,你做了两两关联后弄出几万的特征,那资源消耗就...) 解决方案:进行降维,做好特征工程。
          3 参数设置(比如迭代次数,树深度等。另外常见的比如把double类型的设置成离散的)
     预测特别慢还可以参考(这里


     以下是对最常用的gbdt预测任务的一个估计
          100W左右,特征200多维
          Cpu:1核
          Mem:8G
          Instance:20+
     其他算法对资源的消耗可以按数据量正比来估算。


     复杂的算法不一定就是好的算法。建议根据实际情况,选择简单,高效的算法。如最后成绩相当,简单、高效的算法将获得更好的成绩。

[ 此帖被chuanxue在2015-12-01 13:29重新编辑 ]
关键词: 资源 天池
发帖
414
云币
445
只看该作者 沙发  发表于: 2015-12-01
大家速来围观~~
一定要看赛制!
提问前请先搜索。
具体的问题会被更快的回答。
发帖
128
云币
150
只看该作者 板凳  发表于: 2015-12-01
写的真不错,很实用!
发帖
25
云币
46
只看该作者 地板  发表于: 2015-12-04
级别: 新人
发帖
1
云币
1
只看该作者 4楼 发表于: 2016-10-12
Re如何合理使用odps的资源
级别: 新人
发帖
3
云币
3
只看该作者 5楼 发表于: 01-17
Re如何合理使用odps的资源
666
级别: 新人
发帖
1
云币
1
只看该作者 6楼 发表于: 03-20
Re如何合理使用odps的资源
发表主题 回复主题
« 返回列表上一主题下一主题

限100 字节
批量上传需要先选择文件,再选择上传
 
验证问题: 6 - 1 = ?
上一个 下一个