一个简单的更改就可以让PyTorch读取表格数据的速度提高20倍( 二 )
本文插图
不同类型的监督学习研究的比较
pytorch和Dataloader
如我们所见 , 加载表格数据非常容易 , 快捷!因此 , 默认情况下 , PyTorch当然可以很好地处理表格数据…对吗?
事实证明并非如此!
就在上周 , 我正在训练一些表格数据上的PyTorch模型 , 并想知道它为什么花了这么长时间来训练 。 我看不到任何明显的瓶颈 , 但是由于某些原因 , GPU使用率比预期的要低得多 。 当我进行一些分析时 , 我发现了罪魁祸首……DataLoader 。
什么是DataLoader?DataLoader完全按照您的想象做:将数据从任何位置(在磁盘 , 云 , 内存中)加载到模型使用它所需的任何位置(RAM或GPU内存)中 。 除此之外 , 他们还负责将您的数据分为几批 , 重新整理 , 并在必要时对单个样本进行预处理 。 将此代码包装在DataLoader中比散布在整个代码中更好 , 因为它可以使您的主要训练代码保持整洁 。 官方的PyTorch教程还建议使用DataLoader 。
您如何使用它们?这取决于您拥有的数据类型 。 对于表格数据 , PyTorch的默认DataLoader可以使用TensorDataset 。 这是围绕训练所需的张量的轻量级包装 , 通常是X(或特征)和Y(或标签)张量 。
data_set = TensorDataset(train_x, train_y) train_batches = DataLoader(data_set, batch_size=1024, shuffle=False)然后 , 您可以在训练循环中使用它:
for x_batch, y_batch in train_batches:optimizer.zero_grad()loss = loss_fn(model(x_batch), y_batch)loss.backward()optimizer.step()...为什么这样不好?这看起来不错 , 当然也很干净!问题在于 , 每次加载批处理时 , PyTorch的DataLoader会在每个示例中调用一次DataSet上的__getitem __()函数并将其连接起来 , 而不是一次大批量地读取批处理!因此 , 我们最终不会利用表格数据集的优势 。 当我们使用大批量时 , 这尤其糟糕 。
我们该如何解决?用下面的两行替换上面的前两行 , 然后从该文件复制FastTensorDataLoader的定义(有关此项 , 请在PyTorch论坛上获得Jesse Mu的支持):
train_batches = FastTensorDataLoader(train_x, train_y, batch_size=1024,shuffle=False)FastTensorDataLoader只是一个小的自定义类 , 除了PyTorch之外没有任何依赖关系-使用它不需要对您的训练代码进行任何更改!它也支持改组 , 尽管下面的基准测试适用于未改组的数据 。
这有什么区别?在我使用的基准测试集上 , 自定义表格格式DataLoader的运行速度快了20倍以上 。 在这种情况下 , 这意味着用40秒钟的时间运行之前超过15分钟的程序-迭代速度上的巨大差异!
本文插图
两次接近相同的运行-除了一次需要15分钟以上 , 而另一次不到一分钟!
该基准是在本《自然》论文中使用的希格斯数据集上运行的 。 与11m个示例相比 , 它为大多数公共表格建立ML数据集(可能很小!)提供了更现实的深度学习基准 。 这是一个二进制分类问题 , 具有21个实值特征 。 很高兴看到 , 在进行任何超参数优化之前 , 我们只需训练40秒钟就能在测试装置上获得超过0.77的ROC AUC!尽管我们离本文所达到的0.88尚有一段距离 。
希望对您有所帮助 , 并且您可以在自己的训练代码中看到类似的速度提升!实施此方法后 , 我发现了一些进一步的优化措施 , 从而使总加速接近100倍!如果您想了解更多信息 , 请发表评论 , 我们可以在后续文章中介绍这些内容 。
有关如何自己运行基准代码的信息 , 请参见附录 。 该示例包括用于运行默认PyTorch DataLoader , 更快的自定义代码以及计时结果并记录到TensorBoard的代码 。
这篇帖子的实现源于Genesis Cloud的计算功劳:以令人难以置信的成本效率实现云GPU , 并在冰岛的数据中心中使用100%可再生能源 。 注册时可获得$ 50的免费赠送金额 , 使用GTX 1080Ti可获得160多个小时!
推荐阅读
- 金融墙|两首富为何都重回中国?一个在英国亏了千亿,一个在美国亏了百亿
- RedmiRedmi 10X Pro 体验:性能、低价和 5G 一个都不漏
- 大肥皂|一个让我们连喊「YES」的手机,iQOO Z1体验评测
- 搜狐新闻|又一个中国企业“打破”技术垄断,跃居世界第一,年收入达1160亿
- 微信号|微信终于有这个功能了!网友:一个重新做人的机会
- 无敌马克兔|使用3个看似简单的挑战,提高摄影技巧,拍摄出不俗的作品
- 韩博士装机大师|玩游戏卡顿?只要简单2步,开启电脑最大性能,速度提升10倍!
- 马路边老张|给大家说一个比华为更厉害的公司,专利全球第三,强大到令人发指
- 找靓机|还在说小米是屌丝机?小米的实力,可不是你想的那么简单
- 生活小蒙娜|小伙花5000块买了部手机为啥用一个月就后悔了?来听听小伙咋说
