专栏首页机器之心剑指TensorFlow,PyTorch Hub官方模型库一行代码复现主流模型

剑指TensorFlow,PyTorch Hub官方模型库一行代码复现主流模型

选自PyTorch

机器之心编译

参与:思源、一鸣

经典预训练模型、新型前沿研究模型是不是比较难调用?PyTorch 团队今天发布了模型调用神器 PyTorch Hub,只需一行代码,BERT、GPT、PGAN 等最新模型都能玩起来。

项目地址:https://pytorch.org/hub

机器学习领域,可复现性是一项重要的需求。但是,许多机器学习出版成果难以复现,甚至无法复现。随着数量上逐年增长的出版成果,包括数以万计的 arXiv 文章和大会投稿,对于研究的可复现性比以往更加重要了。虽然许多研究都附带了代码和训练模型,尽管他们对使用者有所帮助,但仍然需要使用者自己去研究如何使用。

今天,PyTorch 团队发布了 PyTorch Hub,一个简单的 API 和工作流代码库,它为机器学习研究的复现提供了基础构建单元。PyTorch Hub 包括预训练模型库,专门用来帮助研究的复现、协助新研究的开展。它同时内置支持 Colab,集成 Papers With Code 网站,并已经有广泛的一套预训练模型,包括分类器、分割器、生成器和 Transformer 等等。

研究者发布模型

PyTorch Hub 支持在 GitHub 上发布预训练模型(定义模型结构和预训练权重),这只需要增加一个简单的 hubconf.py 文件。该文件会列举所支持的模型,以及模型需要的依赖项。

用户可以从以下代码仓库找到使用案例:

  • https://github.com/pytorch/vision/blob/master/hubconf.py
  • https://github.com/huggingface/pytorch-pretrained-BERT/blob/master/hubconf.py
  • https://github.com/facebookresearch/pytorch_GAN_zoo

现在,我们可以看看最简单的案例,torchvision 的 hubconf.py:

在 torchvision,模型有以下几部分:

  • 每个模型文件都可以独立的执行
  • 这些模型不依赖 PyTorch 以外的包(在 hubconf.py 中以及集成了相关依赖:dependencies['torch'])
  • 这些模型不需要单独的模型入口(entry-point),因为这些模型一经创建,就可以无缝地提取使用

减少包的依赖可以减少用户导入模型时出现的各种问题,而且这种导入可能只是临时的调用。一个直观的例子是 HuggingFace's BERT 模型。其 hubconf.py 文件如下:

每个模型都需要创建一个模型入口,以下指定了 bertForMaskedLM 模型入口,并希望获得预训练模型权重:

这些入口可以作为复杂模型的包装器,我们能提供注释文档或额外的帮助函数。最后,有了 hubconf.py,研究者就能发送 pull 请求。当 PyTorch 接受了该请求后,研究者的模型就会出现在 PyTorch Hub 页面上。

用户工作流

PyTorch Hub 允许用户只用简单的几步就完成很多任务,例如 1)探索可用模型;2)加载预训练模型;3)理解加载模型的方法与运行参数。下面让我们通过一些案例体会体会 PyTorch Hub 的便捷吧。

探索可用模型

我们可以使用 torch.hub.list() API 查看仓库内所有可用的模型。

注意,PyTorch 还允许使用预训练模型之外的辅助模块,例如使用 bertTokenizer 来完成 BERT 模型的预处理过程,它们都会使工作流更加顺畅。

加载模型

现在我们已经知道有哪些预训练模型,下面就可以使用 torch.hub.load() API 加载这些模型了。使用 API 加载模型时,它只需要一行命令,而不需要额外安装 wheel。另外,torch.hub.help() API 也能提供一些有用的信息来帮助演示如何使用预训练模型。

其实这些预训练模型会经常更新,不论是修复 Bug 还是提升性能。而 PyTorch Hub 令用户可以极其简单地获取最后的更新版:

PyTorch 团队相信这个特性能帮助预训练模型的拥有者减轻负担,即重复发布包的成本会降低,他们也能更加专注于研究(预训练模型)本身。此外,该特性对用户也有很大优势,我们可以快速获得最新的预训练模型。

另一方面,稳定性对于用户而言非常重要。因此,模型提供者能以特定的分支或 Tag 为用户提供支持,而不直接在 master 分支上提供。这种方式能确保代码的稳定性,例如 pytorch_GAN_zoo 可以用 hub 分支来支持对其模型的使用。

注意传递到 hub.load() 中的 args 和 kwargs,它们都用于实例化模型。在上面的例子中,pretrained=True 和 useGPU=False 都被赋予不同的预训练模型。

探索已加载模型

当我们从 PyTorch Hub 中加载了模型时,我们能从以下工作流探索可用的方法,并更好地理解运行它们需要什么样的参数。

dir(model) 方法可以查看模型的所有方法,下面我们可以看看 bertForMaskedLM 模型的可用方法。

help(model.forward) 方法将提供要令模型能正常跑,其所需要的参数。

下面提供了 BERT 和 DeepLabV3 两个例子,我们可以看看这些模型加载后都能怎样使用。

  • BERT:https://pytorch.org/hub/huggingface_pytorch-pretrained-bert_bert/
  • DeepLabV3:https://pytorch.org/hub/pytorch_vision_deeplabv3_resnet101/

PyTorch Hub 中的可用模型同样支持 Colab,它们都会连接到 Papers With Code 网站。

TensorFlow 和 PyTorch 你选谁?

此前 TensorFlow 也发布了 TensorFlow Hub,它同样用于发布、探索和使用机器学习模型中可复用的部分。最近关注便捷性的 TensorFlow 2.0 Beta 也已经发布,但很多读者还是倾向于使用 PyTorch。既然这两大框架越来越「相似」,那么我们到底该使用哪个?下面机器之心简要总结了这两个深度学习框架的发展历程,我们也相信,用哪个都能开发出想要的炫酷应用。

TensorFlow:

PyTorch:

TensorFlow 和 PyTorch 都是经典的机器学习代码库。随着学界和工业界对机器学习的需求的增长,两者的社区也在不断发展壮大。虽然 TensorFlow 是老牌的机器学习代码库,但由于 1.x 及之前版本存在的诸多问题,许多用户逐渐转向对用户友好、学习门槛低、使用方便的 PyTorch。在 2018 年,TensorFlow 逐渐意识到这一问题,并在 2.x 版本逐渐提升了用户体验。

与此同时,基于两个经典机器学习代码库的进一步工具开发也是近年来的趋势。过去有部分基于 TensorFlow 的 Keras 和基于 PyTorch 的 fast.ai,最近一两年则有大量的模型库和方便用户快速训练和部署模型的代码库,如 Tensor2Tensor,以及针对特定领域的代码库,如基于 PyTorch 的 NLP 代码库 PyText 和图神经网络库 PyG。

目前来看,TensorFlow 的生态系统更为多样和完善,且具有多语言的支持,其广受诟病的难以使用的缺点也在逐渐改善。另一方面,由于 PyTorch 本身用户友好的特性,基于这一代码库的应用开发进度似乎也赶上了 TensorFlow,尽管在多语言支持等方面 PyTorch 依然有较大差距。这一机器学习生态之战究竟会走向何方,目前尚不明朗。未来的机器学习代码框架的发展趋势是,模型的训练、部署工作量将会越来越低,类似「搭积木」方式的应用部署方式将会越来越流行。研究者和开发者的精力将会完全转向模型结构的设计、部署和完善,而非纠结于框架的选择和其他底层工程问题上。

参考链接:https://pytorch.org/blog/towards-reproducible-research-with-pytorch-hub/

本文分享自微信公众号 - 机器之心(almosthuman2014)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-06-11

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • PyTorch一周年战绩总结:是否比TensorFlow来势凶猛?

    机器之心
  • PyTorch 1.7发布,支持CUDA 11、Windows分布式训练

    PyTorch 1.7 版本包含很多新的 API,如支持 NumPy 兼容的 FFT 操作、性能分析工具,以及对基于分布式数据并行(DDP)和基于远程过程调用(...

    机器之心
  • 福利,PyTorch中文版官方教程来了

    PyTorch 是近年来较为火爆的深度学习框架,然而其中文版官方教程久久不来。近日,一款完整的 PyTorch 中文版官方教程出炉,读者朋友可以更好的学习了解 ...

    机器之心
  • PyTorch 重大更新,0.4.0 版本支持 Windows 系统

    AI 研习社最新消息,PyTorch 官方发布 0.4.0 版本,该版本的 PyTorch 有多项重大更新,其中最重要的改进是支持 Window 系统。

    AI研习社
  • Github项目推荐 | 深度学习资源,包括一系列架构、模型与建议

    项目地址:https://github.com/rasbt/deeplearning-models

    AI研习社
  • PyTorch专栏(一)

    【磐创AI导读】:本篇文章讲解了PyTorch专栏的第一章,简单介绍了PyTorch及其环境搭建,希望对大家有所帮助。查看上篇关于本专栏的介绍:PyTorch专...

    磐创AI
  • PyTorch 团队发表周年感言:感谢日益壮大的社群,这一年迎来六大核心突破

    2017 年 1 月,Facebook 开源 PyTorch,短短一年时间,PyTorch 便发展成一线开发者争相使用的工具。这一年间,有哪些研究人员对 PyT...

    AI研习社
  • PyTorch vs. TensorFlow月度使用体验总结

    日前,英伟达深度学习项目实习生Dominic Monn在medium上发文总结了他使用PyTorch和TensorFlow的一些体会,在文章中,他从安装、使用、...

    AI研习社
  • 终于!大家心心念念的PyTorch Windows官方支持来了

    机器之心整理 参与:机器之心编辑部 五个小时前,PyTorch 官方 GitHub 发布 0.4.0 版本,大家心心念念的 Windows 支持终于来了。 Gi...

    机器之心
  • 势头强劲: PyTorch周年大事记盘点

    【导读】 1月19日,PyTorch团队对PyTorch发布一年来的成长轨迹做了总结。在过去一年里,PyTorch资源包的下载量超50万次、PyTorch频频出...

    WZEARW

扫码关注云+社区

领取腾讯云代金券