赞
踩
首先说一下最终成绩:武长赛区复赛正式赛第十六名
经过20多天的比赛,或多或少对比赛有些体会,最大的感觉就是其实这比赛也没什么特别难的。第一次参加这种比赛刚看到题目有些摸不着头脑,不过看了个同学开源的baseline后就对题目有了清晰的理解,这里非常感谢开源的同学。
就是一个资源调度的问题,根据用户的需求选择空间的大小,服务器节点的分配。如何购买服务器、如何选择虚拟机部署的服务器、如何选择节点、如何利用迁移重新科学规划服务器的资源分布这些决策都影响最终的成本。
最终的成本包括:购买服务器的耗费,未关机服务器的能耗费用
我们将整个问题分解为:购买服务器、部署虚拟机、迁移虚拟机这三个小问题
经过多次更新,我们复赛训练阶段使用的策略是:
在需要购买服务器的时候,统计当前需求的虚拟机及其后若干的虚拟机的总资源比例(CPU/RAM),找到资源比例在该比例附近的服务器。预估每个服务器产生的耗费,预估费用的公式为:
preCost = reqNum * ( BuyCost + remainDaysNum * dailyCost)
reqNum = max( CPUtotal * n / CPUserver , RAMtotal * n/RAMserver)
其中n是一个比1大的系数,简而言之就是假设之后只买一种服务器,预估每个服务器能够满足之后若干需求所需要的耗费。
和1策略一样,不过是每天选择一种服务器,然后选择预估费用最低的服务器。复赛当天选择的是这种策略,并且直接放弃用资源比例去找服务器,而是直接用预估费用寻找服务器。放弃利用比例这个决定让我的成本直接下降了将近2亿。
购买策略写的很不稳定,也是我觉得做的很不好的地方,在初赛以及复赛训练阶段时候用的很好的策略到了复试当天直接放弃确实挺离谱的。
我们选择去计算虚拟机和每个服务器之间的距离,选择距离最小的服务器节点进行部署,距离公式为:
distance = ((CPUserver - CPUvir)*n)^2+((RAMserver - RAMvir)(1-n))^2
我们调整距离公式里cpu和ram的权重,发现n=0.75时效果最好
我们没有做负载均衡,虽然考虑到这样会导致服务器两个节点不均衡进而放不下双节点的虚拟机,但是尝试了以后效果特别差。可能是因为不做负载均衡时,不均衡的服务器反而更能够满足一些大容量的单节点虚拟机的需求。
此外我还尝试过利用资源利用率进行部署的方法,即尽量使服务器资源利用率达到最高。效果比距离稍微差点,但在复试当天差的比较多,没有采用。
部署策略写的非常简陋,这也是我感觉后期程序优化最无力的地方,在复试训练集上总资源的利用率一直只有70左右,感觉应该算比较低的,说明部署还是不够好的。
这个问题是我觉得我有较大的误解的地方,比赛期间我一直把迁移的目的当作使服务器空出来,节省能耗。但是实际上迁移是在每天决策的开始做的,而服务器空出来后,如果其他服务器放不下来,虚拟机还是得部署在上面,最终就是服务器就空不出来。也就是说迁移真正目的应该不是节省能耗,而是使当天的服务器资源分布更加科学,更能够满足当天的需求。不过当我这么想的时候比赛已经快结束了,没啥时间改了。还是说说比赛时我用的策略:
迁移其实还挺多优化思路,可惜最后没有时间慢慢调,思路比如:
总结一句话:珍惜时间,远离调参
初赛训练阶段第十八,初赛正式赛第二十七;
复赛训练阶段第八,正式赛第十六;
总的来说我的策略受数据集影响特别大,训练阶段花了很多时间去调参,当正式赛换了一个数据集后又要重新花很长时间去调参,而真正的大佬丝毫不受数据集的影响。
所以有时间调参,不如多调整策略,有几个好队友多交流开拓思路的话是最好的,自己一个人很容易钻进牛角尖。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。