PyTorch Hub:圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)推!一行代碼輕松復(fù)現(xiàn)主流模型

6 月 11 日,F(xiàn)acebook 宣布推出 PyTorch Hub。這是一個(gè)簡單的 API 和工作流程,包含計(jì)算機(jī)視覺、自然語言處理領(lǐng)域的諸多經(jīng)典模型的聚合中心,為機(jī)器學(xué)習(xí)研究的復(fù)現(xiàn)提供了基礎(chǔ)的構(gòu)建模塊。無論是 ResNet、BERT、GPT、VGG、PGAN,還是 MobileNet 等經(jīng)典模型,只需輸入一行代碼,就能實(shí)現(xiàn)一鍵調(diào)用。

PyTorch Hub:圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)推!一行代碼輕松復(fù)現(xiàn)主流模型

圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)烈推薦

關(guān)于 PyTorch Hub

可復(fù)現(xiàn)性是許多研究領(lǐng)域的基本要求,包括基于機(jī)器學(xué)習(xí)技術(shù)的研究領(lǐng)域。然而,許多機(jī)器學(xué)習(xí)出版物要么不可復(fù)現(xiàn),要么難以復(fù)現(xiàn)。隨著研究出版物數(shù)量的持續(xù)增長,包括目前在 arXiv 上的數(shù)萬份論文以及歷史大會(huì)投稿,研究的可復(fù)現(xiàn)性比以往重要得多。雖然其中很多出版物都附上了有用的代碼以及訓(xùn)練有素的模型,但仍為用戶留下了一些需要自行解決的步驟。

所以 PyTorch 團(tuán)隊(duì)推出了 PyTorch Hub:一個(gè)簡單的 API 和工作流程,為機(jī)器學(xué)習(xí)研究的復(fù)現(xiàn)提供了基礎(chǔ)的構(gòu)建模塊。它由一個(gè)經(jīng)過預(yù)先訓(xùn)練的模型存儲(chǔ)庫組成,專門設(shè)計(jì)用于協(xié)助研究的可復(fù)現(xiàn)性并實(shí)現(xiàn)新的研究。它還內(nèi)置了支持 Colab,集成 Papers With Code 網(wǎng)站,目前已有一組預(yù)訓(xùn)練模型,包括 Classification、Segmentation、Generative 和 Transformer 等等。

PyTorch Hub:圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)推!一行代碼輕松復(fù)現(xiàn)主流模型

[所有者] 發(fā)布模型

PyTorch Hub 可通過添加一個(gè)簡單的 hubconf.py 文件,實(shí)現(xiàn)將預(yù)訓(xùn)練模型 (模型定義和預(yù)訓(xùn)練權(quán)重) 發(fā)布到 GitHub 存儲(chǔ)庫。這提供了所支持模型的枚舉以及運(yùn)行模型所需的依賴項(xiàng)列表。用戶可以在 torchvision,huggingface-bert 和 gan-model-zoo 存儲(chǔ)庫中找到示例。

最簡單的案例:torchvision's hubconf.py:

PyTorch Hub:圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)推!一行代碼輕松復(fù)現(xiàn)主流模型

在 torchvision,模型具有以下屬性:

  • 每個(gè)模型文件都可以獨(dú)立正常執(zhí)行
  • 無需要除 PyTorch 以外的任何包(在 hubconf.py 中:dependencies['torch'])
  • 無需單獨(dú)模型入口,因?yàn)槟P鸵坏﹦?chuàng)建,即可無縫提取使用

將包依賴最小化,可減少用戶導(dǎo)入模型后需要立即進(jìn)行實(shí)驗(yàn)時(shí)出現(xiàn)的各類問題。一個(gè)更直觀的案例是 HuggingFace's BERT 模型,其 hubconf.py 文件如下:

PyTorch Hub:圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)推!一行代碼輕松復(fù)現(xiàn)主流模型

每個(gè)模型都需要?jiǎng)?chuàng)建一個(gè)模型入口,下面是一個(gè)代碼段,指定了 bertForMaskedLM 模型入口,并返回預(yù)先訓(xùn)練的模型權(quán)重。

PyTorch Hub:圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)推!一行代碼輕松復(fù)現(xiàn)主流模型

這些模型入口可以作為復(fù)雜模型的包裝器,它們可以提供注釋文檔或其他幫助函數(shù),具有支持下載預(yù)訓(xùn)練權(quán)重的功能 (例如通過 pretrained=True),或者具有其他特定功能,如可視化。

有了 hubconf.py,研究者就可以去 PyTorch Hub 的 GitHub 頁發(fā)送拉取請(qǐng)求。若該模型符合高質(zhì)量、易復(fù)現(xiàn)、最有益的要求,F(xiàn)acebook 官方將會(huì)與你合作;若模型質(zhì)量較低,也有被拒絕發(fā)布的可能。但拉取請(qǐng)求一旦被接受,該模型將很快出現(xiàn)在 PyTorch Hub 官方網(wǎng)頁上,供所有用戶瀏覽。

[用戶] 流程

PyTorch Hub 允許用戶對(duì)已發(fā)布的模型執(zhí)行以下操作:

1、查看可用的模型

用戶可以使用 torch.hub.list() API 查看存儲(chǔ)庫內(nèi)所有可用的模型入口。

PyTorch Hub:圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)推!一行代碼輕松復(fù)現(xiàn)主流模型

PyTorch Hub 還允許使用除預(yù)訓(xùn)練模型的其它輔助模型,例如在 BERT 模型中進(jìn)行預(yù)處理時(shí)加入 bertTokenizer,這會(huì)使工作流更順暢。

2、加載模型

已知了其中提供的模型,用戶可以使用 torch.hub.load()API 加載模型入口。這只需要一個(gè)命令,而不需要安裝其它的 wheel。此外,torch.hub.help()API 可以提供有關(guān)如何使用預(yù)訓(xùn)練模型演示的有用信息。

PyTorch Hub:圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)推!一行代碼輕松復(fù)現(xiàn)主流模型

模型發(fā)布者通常后續(xù)也會(huì)不斷添加錯(cuò)誤修復(fù)和性能改進(jìn),用戶通過調(diào)用也可以非常簡單地獲取更新,確保自己用到的是最新版本:

PyTorch Hub:圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)推!一行代碼輕松復(fù)現(xiàn)主流模型

這將有助于減輕模型發(fā)布者重復(fù)發(fā)布包的負(fù)擔(dān),從而使他們更加專注于研究。同時(shí)它還可確保,作為用戶獲得的是最新的可用模型。

而另一方面如果用戶更在意穩(wěn)定性,模型發(fā)布者則會(huì)提供一些特定的分支或標(biāo)記 (而不是主分支),以確保代碼的穩(wěn)定性。例如 pytorch_GAN_zoo 的 hub 分支:

PyTorch Hub:圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)推!一行代碼輕松復(fù)現(xiàn)主流模型

3、了解模型可用方法

加載了模型后,可以使用 dir(model) 找出該模型所支持的可用方法,以 bertForMaskedLM 模型為例:

PyTorch Hub:圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)推!一行代碼輕松復(fù)現(xiàn)主流模型

help(model.forward) 則可提供運(yùn)行該方法所需的參數(shù),幫助用戶進(jìn)行更深入的了解。

PyTorch Hub:圖靈獎(jiǎng)得主 Yann LeCun 強(qiáng)推!一行代碼輕松復(fù)現(xiàn)主流模型

其他

PyTorch Hub 中提供的模型也支持 Colab,并直接鏈接在 Papers With Code 中,用戶可以一鍵進(jìn)入 Colab 運(yùn)行模型 Demo。
 
原文鏈接:
https://pytorch.org/blog/towards-reproducible-research-with-pytorch-hub/

來源 | 雷鋒網(wǎng)
作者 | 楊鯉萍

 

Share this article:

Facebook
Twitter
LinkedIn
WhatsApp

More articles