在大型比赛的场地为获奖者提供免费的GPU服务器,以供他们在进一步的比赛,训练或与数据科学相关的个人项目中使用。作为交换,参与者应在社交媒体上分享他们的使用心得。起初,我有一台4x1080ti的服务器。环境设置没有问题,很快我就开始训练模型。模型在单个GPU上的运行效果很好,我就开始逐渐增加所用显卡的数量, 2个,3个GPU都运作良好,但是同时使用4个GPU的实验失败了,没有任何反应。技术支持迅速做出反应,并在几天之内调查清楚了该问题。事实证明,服务器本身存在一些问题-处理器无法跟上4x1080ti的全部利用率。于是,我切换到另一台服务器:2x2080ti。起初有一个小问题,因为动力不足,但是当工程师又添加了另一个电源,问题就解决了。从那时起,我在这个服务器上运行了许多模型,并且一直运行良好。它的用户体验很合我的胃口,因此我决定将来继续使用Hostkey的服务器。拥有一个有效的工作流水线 图来自qiita拥有一个有效率的工作流水线非常重要。这里的流水线是指用于准备训练数据,训练本身和推理的整体指令流程。使用一些搭建好的高级框架固然值得,但是从头开始编写自己的代码更好。主要好处是可以快速更改参数,并确保所有基本代码都能正常工作,就可以专注于更多思考。在这次比赛开始,我在Catalyst中使用Jupyter API,但由于它存在一些问题而很快停止了。一段时间后,经我的队友推荐,我开始自己配置在Catalyst上的API。它虽然更适合我,但是的确花了很多时间来适应它。 而我的一个队友使用fast ai,可惜由于fast ai的风格独特,我很难理解它。因此,我认为最好选择专注一种方法(某种框架或您自己的计算流水线)并坚持下去。代码优化图来自 page有人评论,kaggle竞赛的代码不太好。实际上,大家疯狂迭代,人们通常会花时间尝试一些新想法,而不是编写更好的代码。但这样做也不是好选择。有时,小的代码优化会产生巨大的影响。如您在屏幕截图中所见,优化后处理速度可能提高30倍。训练模型速度将更快,因此做事使用正确的方法也很重要。 另一方面……
不要盲目相信论坛的其它代码和想法 Kaggle很棒,也有很多很棒的notebook可供参考,还有一些论坛可以找到很棒的思路,对吗? 不一定。尽管论坛上有很多高质量的(代码)notebook和思路,但也会存在一些问题:有些notebook里的代码语法有错误,会导致代码跑的时候报错,某些思路复现会报错以及其它的问题;最令人忧桑的是,论坛中的某些思路可能会误导人。 这一切并不是因为人们故意干坏事,而是很多思路无法独立发挥作用,有些思路必须搭配特定的模型才能成功(坑爹),有些需要高评分的模型,等等;因此,如果您想使用一些代码或想法,请首先检查并验证它们。作为这一点的延续:持续寻找并尝试新的想法
参加kaggle比赛的最好最酷的事情之一就是它会促使人们得到新的SOTA结果(SOTA全称「state-of-the-art」,用于描述机器学习中取得某个任务上当前最优效果的模型)。为了获得最佳成绩,必须尝试新事物,比如在arxiv查阅论文,寻找好的博客文章等等。 但是,仅仅了解新方法还不够,需要尝试一下。为某个新想法编写代码可能很困难,但这是学习新事物的一种极其有效的方法。即使有些想法行不通,您也会获得有益的经验。不要沉迷调参
图来自xkcd这是一个常见的陷阱(我遇到好多次),有人认为调参可以帮他们获得优异的结果。这个想法是对的,但也不完全正确。在竞赛中,有必要对参数进行两次调整:在开始时和结束时。开始的调整很重要,因为必须针对不同的问题来调整梯度增强和其他模型。不同的目标,不同的深度,叶子的数量和其他因素可能会导致模型在不同问题的分析的得分截然不同。但是,找到一些好的参数后,请固定参数设置,直到比赛快要结束时再更改。当您添加新功能或尝试新想法时,请保持参数相同,比较方便进行调参前后结果对比。当尝试完所有想法时,就可以再次进行调整会使得分略有增加。对于深度学习而言,情况则有所不同。参数的可调节范围很大:可以调整架构、损失函数、扩展、预处理和后处理等。因此,不可避免的是,需要花费更多的时间进行优化。但是仍然值得记住的是,一个好的思路比调参数更容易获得好的结果。总的来说,只有不断的吸取教训以及学习,才能改变陪跑的命运,拿到第一名。
相关报道https://towardsdatascience.com/what-to-do-when-you-dont-get-any-medal-in-a-kaggle-competition-b54cc433da3
- DataCastle -