劍指TensorFlow,PyTorch Hub官方模型庫一行代碼復現主流模型

2022-01-07 機器之心

經典預訓練模型、新型前沿研究模型是不是比較難調用?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,模型有以下幾部分:

減少包的依賴可以減少用戶導入模型時出現的各種問題,而且這種導入可能只是臨時的調用。一個直觀的例子是 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 兩個例子,我們可以看看這些模型加載後都能怎樣使用。

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/

市北·GMIS 2019全球數據智能峰會於7月19日-20日在上海市靜安區舉行。本次峰會以「數據智能」為主題,聚焦最前沿研究方向,同時更加關注數據智能經濟及其產業生態的發展情況,為技術從研究走向落地提供借鑑。

本次峰會設置主旨演講、主題演講、AI畫展、「AI00」數據智能榜單發布、閉門晚宴等環節,已確認出席嘉賓如下:

大會早鳥票已開售,我們也為廣大學生用戶準備了最高優惠的學生票,點擊閱讀原文即刻報名。

相關焦點

  • 模型秒變API只需一行代碼,支持TensorFlow等框架
    還在為機器學習模型打包成 API 發愁?這個工具能讓你一行代碼直接打包。
  • 如何使用TensorFlow Hub和代碼示例
    使用TensorFlow Hub,可以通過幾行代碼導入大型和流行的模型,自信地執行廣泛使用的傳輸學習活動。TensorFlow Hub非常靈活,可以託管模型以供其他用戶使用。TensorFlow Hub中的這些模型稱為模塊。在本文中看看如何使用TensorFlow Hub模塊的基礎知識,它是各種類型和代碼示例。
  • TensorFlow Hub, 給您帶來全新的 Web 體驗
    Universal Sentence Encoder 模塊就是一個成功的範例,它加快了從基礎機器學習科學到更廣泛的開發者社區應用程式的速度。 該文件引用了模塊的 tfhub.dev URL。 當該 URL 被複製到瀏覽器中時,將出現模塊的詳細信息頁面,發布者共享文檔,以及指向 Colab notebook 的連結,這樣您就可以直接試用該模塊。
  • TensorRT 加速 PyTorch 模型基本方法
    但是TensorRT坑爹的地方在於,有些模型操作是不支持的、又或者就算支持但是支持並不完善,對於這些難題,要麼自己寫插件,要麼就只能等待官方的更新了。現在我們訓練深度學習模型主流的框架有tensorflow,pytorch,mxnet,caffe等。
  • TensorFlow 2.0 模型:模型類的建立
    1class MyModel(tf.keras.Model): 2    def __init__(self): 3        super().設置為 tf.zeros_initializer 表示將兩個變量均初始化為全 0;該層包含權重矩陣kernel = [input_dim, units]和偏置向量bias = [units][2] 兩個可訓練變量,對應於
  • PyTorch模型訓練特徵圖可視化(TensorboardX)
    本文所有代碼解讀均基於PyTorch 1.0,Python3;本文為原創文章,初次完成於2019.03,最後更新於2019.09;最近復現的一篇論文一直都難以work,上了特徵圖可視化後一下子就找到了問題所在,所以今天想梳理一下PyTorch裡面的特徵圖可視化。
  • pytorch中文語言模型bert預訓練代碼
    大部分中文語言模型都是在tensorflow上訓練的,一個常見例子是中文roberta項目。可以參考https://github.com/brightmart/roberta_zh使用pytorch進行中文bert語言模型預訓練的例子比較少。在huggingface的Transformers中,有一部分代碼支持語言模型預訓練(不是很豐富,很多功能都不支持比如wwm)。
  • 對比PyTorch和TensorFlow的自動差異和動態子類化模型
    2.x之間的自動差異和動態模型子類化方法。在下面的代碼片段中,我們將分別使用Tensorflow和PyTorch trainable_variables和parameters方法來訪問模型參數並繪製學習到的線性函數的圖。
  • 學習記 | 復現YOLO-V1作業教程
    本文利用Tensorflow框架對YOLO-V1進行復現測試。
  • TensorRT加速PyTorch模型教程
    但是TensorRT坑爹的地方在於,有些模型操作是不支持的、又或者就算支持但是支持並不完善,對於這些難題,要麼自己寫插件,要麼就只能等待官方的更新了。現在我們訓練深度學習模型主流的框架有tensorflow,pytorch,mxnet,caffe等。
  • OpenCV DNN模塊——從TensorFlow模型導出到OpenCV部署詳解
    據博主所知,目前大部分的相機開發包並不支持Python語言,而主流的深度學習框架都是基於Python語言,訓練好的模型難以部署到自己的軟體中。使用過程1.模型訓練模型訓練這塊博主以自己寫的UNet網絡為例,見下面的代碼。
  • 所有的Tensorflow模型都可以嵌入到行動裝置
    如果移動應用可以在不通過在線請求的情況下訪問模型並進行推理,這將會極大地提高 TensorFlow 的靈活性。TensorFlow Mobile 以及 TensorFlow Lite 的官方文檔給出了一些可以使用圖像模型的示例 App,但是實現起來並不簡單,並且難以將你的模型嵌入到安卓系統。
  • 如何使用TensorRT對訓練好的PyTorch模型進行加速?
    但是TensorRT坑爹的地方在於,有些模型操作是不支持的、又或者就算支持但是支持並不完善,對於這些難題,要麼自己寫插件,要麼就只能等待官方的更新了。現在我們訓練深度學習模型主流的框架有tensorflow,pytorch,mxnet,caffe等。
  • 輕鬆學pytorch之使用onnx runtime實現pytorch模型部署
    ONNX(Open Neural Network Exchange)是一種標準與開放的網絡模型交換格式,直白點說就是tensorflow/pytorch
  • | 比Pytorch Hub更早?三分鐘帶你弄懂Paddle Hub!  
    model表示預訓練好的參數和模型,當需要使用Model進行預測時,需要模型配套的代碼,進行模型的加載,數據的預處理等操作後,才能進行預測。我們在使用PaddleHub來調用模型時,可以使用hub download 命令獲取到最新的model再進行實驗。
  • tensorflow(6)利用tensorflow/serving實現模型部署及預測
    在文章tensorflow(5)將ckpt轉化為pb文件並利用tensorflow/serving實現模型部署及預測中,筆者以一個簡單的例子,來介紹如何在tensorflow中將ckpt轉化為pb文件,並利用tensorflow/serving來實現模型部署及預測。本文將會介紹如何使用tensorflow/serving來實現單模型部署、多模型部署、模型版本控制以及模型預測。
  • tensorflow(7)利用tensorflow/serving實現BERT模型部署
    本文將在此基礎上,將模型訓練後生成的ckpt文件轉化為pb文件(tensorflow/serving支持的部署文件格式),並使用tensorflow/serving來實現BERT模型的部署及預測。如何將ckpt文件轉化為pb文件?   該項目使用BERT+Bi-LSTM+CRF結構實現中文序列標註,對BERT進行微調,因此模型無疑是複雜的。
  • Tensorflow的C語言接口部署DeeplabV3+語義分割模型
    tensorflow框架一般都是基於Python調用,但是有些時候跟應用場景,我們希望調用tensorflow C語言的接口,在C++的應用開發中使用它。要這麼幹,首先需要下載tensorflow源碼,完成編譯,然後調用相關的API函數實現C語言版本的調用,完成模型的加載、前向推理預測與解析。
  • 教程 | 從零開始:TensorFlow機器學習模型快速部署指南
    更典型的 ML 用例通常基於數百個圖像,這種情況我推薦大家對現有模型進行微調。例如,https://www.tensorflow.org/tutorials/image_retraining 頁面上有如何微調 ImageNet 模型對花樣本數據集(3647 張圖像,5 個類別)進行分類的教程。