一行代碼安裝,TPU也能運行PyTorch,修改少量代碼即可快速移植

2021-01-16 量子位

曉查 發自 凹非寺量子位 報導 | 公眾號 QbitAI

對於PyTorch開發者來說,Google Colab上的TPU資源不能用,恐怕是最遺憾的事情了。Google的雲計算資源眼看著不能用,轉TensorFlow又是不可能的。

過去一直有PyTorch用戶試圖在Colab上薅羊毛,但是都沒有太成功的。

現在福利來了,一個叫做Pytorch Lightning的項目,可以讓你幾乎修改代碼的情況下用上TPU。

Pytorch Lightning已經上傳到PyPI,因此只需一行代碼就能安裝這個軟體。

pip install pytorch-lightning

該項目的開發者William Falcon說,PyTorch Lightning是他在紐約大學和FAIR做博士生時研發,專門為從事AI研究的專業研究人員和博士生創建的。

幾乎無需修改代碼

首先讓我們來看一個MNIST圖像分類網絡的搭建,PyTorch的原始代碼和修改後的PyTorch Lightning代碼幾乎無異。

我們只需將nn.Module替換為pl.LightningModule即可。

作者表示,相比切換框架,用這種方法重構原來的代碼只需數小時的時間。

PyTorch Lightning所做的是將科學代碼與工程代碼分離,只需將研究代碼重構為LightningModule格式(科學),Lightning將自動完成其餘部分(工程)。

使用方法

PyTorch Lightning具體該如何使用,作者Falcon還是以MNIST圖像分類網絡為例,介紹從收集數據到訓練再到驗證、測試的全過程。

準備數據集階段分為下載圖片、轉換、分割數據集、打包四個步驟。二者代碼大致相同,只是將PyTorch代碼組織為4個函數:

prepare_data:此函數負責處理下載數據,確保使用多個GPU時,不會下載多個數據集或對數據進行雙重操作。

train_dataloader,val_dataloader,test_dataloader:每一個都負責返回相應數據集的數據拆分。以這種方式進行構造訓練、驗證、測試集,可以讓你非常清楚如何操作數據。

接下來是優化器的選擇,比如選擇Adam。兩者的代碼還是幾乎完全相同,不過後者把pytorch_model改成了self。

至於損失函數,對於n向分類,要使用交叉熵損失。二者代碼又幾乎一致相同,後者多出一個self。

在訓練上,PyTorch Lightning的代碼更簡潔一點。在PyTorch中,你需要自己編寫for循環,這意味著你必須記住要以正確的順序調用正確的東西,可能會導致錯誤。

而PyTorch Lightning將樣板格式抽象化,但方框中的內容保持不變,增加了代碼的可讀性和可重複性。

後面驗證推理的部分不再贅述。

總之,PyTorch Lightning有這些優點:

代碼結構化;與PyTorch原始碼幾乎完全相同;隨著項目複雜性的提升,代碼的大部分內容無需修改;保留了PyTorch的靈活性。

新增高級功能,連Pytorch本尊都沒有

除了以上的一些特性外,PyTorch Lightning還加入了許多高級功能,讓你體驗到PyTorch本身不具備的一些優點。

比如更清晰直觀的訓練進度條:

用TensorBoard日誌記錄代碼運行全過程:

PyTorch Lightning還支持TensorBoard之外的其它5種工具記錄日誌:

與TensorBoard,MLFlow完全集成,並支持任何日誌記錄模塊。

甚至還有一個內置的分析工具,告訴你訓練過程中的瓶頸:

trainer = Trainer(…, profiler=True)

PyTorch Lightning還有更多的可擴展性,在這裡無法一一介紹,如果你正想要在TPU上運行自己的PyTorch代碼,可以前去學習更詳細的用法。

傳送門

項目地址:

https://github.com/PyTorchLightning/pytorch-lightning

Colab演示:

https://colab.research.google.com/drive/1-_LKx4HwAxl5M6xPJmqAAu444LTDQoa3#scrollTo=dEeUzX_5aLrX

相關焦點

  • 一行代碼即可調用18款主流模型!PyTorch Hub輕鬆解決論文可復現性
    圖靈獎得主Yann LeCun發推表示,只需要一行代碼就可以調用所有倉庫裡的模型,通過一個pull請求來發布你自己的模型。同時,PyTorch Hub整合了Google Colab,併集成了論文代碼結合網站Papers With Code,可以直接找到論文的代碼。PyTorch Hub怎麼用?
  • 華為雲應用編排,手把手教您完成pytorch代碼部署
    PyTorch作為Torch框架的繼任者,並不僅僅只是移植代碼並提供接口,而是深入支持了Python,對大量模塊進行了重構,並新增了最先進的變量自動求導系統,成為時下最流行的動態圖框架。在入門時,PyTorch提供了完整的文檔,並有著活躍的社區論壇,對於新手而言上手遇到的難關容易解決。
  • 華為雲pytorch代碼怎麼部署?
    PyTorch作為Torch框架的繼任者,並不僅僅只是移植代碼並提供接口,而是深入支持了Python,對大量模塊進行了重構,並新增了最先進的變量自動求導系統,成為時下最流行的動態圖框架。 在入門時,PyTorch提供了完整的文檔,並有著活躍的社區論壇,對於新手而言上手遇到的難關容易解決。
  • PyTorch終於能用上谷歌雲TPU,推理性能提升4倍,該如何薅羊毛?
    之前機器學習開發者雖然也能在Colab中使用PyTorch,但是支持雲TPU還是第一次,這也意味著你不需要購買昂貴的GPU,可以在雲端訓練自己的模型。而且如果你是谷歌雲平臺(Google Cloud Platform)的新註冊用戶,還能獲得300美元的免費額度。
  • PyTorch代碼調試利器:自動print每行代碼的Tensor信息
    TorchSnooper 的安裝非常簡單,只需要執行標準的 Python 包安裝指令就好:pip install torchsnooper安裝完了以後,只需要用 @torchsnooper.snoop() 裝飾一下要調試的函數,這個函數在執行的時候,就會自動 print 出來每一行的執行結果的 tensor 的形狀、數據類型、設備、是否需要梯度的信息。
  • PyTorch框架歷史和特性更迭與安裝過程
    在保持快速更新的同時,PyTorch保持了API的穩定性,而且作為一個飛速迭代的深度學習框架,PyTorch在構建和運行深度學習模型方面也非常穩定,並沒有因為迭代速度太快而導致代碼運行不穩定。得益於迭代速度,PyTorch現階段支持非常多的神經網絡類型和張量的運算類型。可以預見,PyTorch在未來能夠兼顧更新速度和代碼質量,支持更多的神經網絡類型,並擁有更高的計算效率。
  • 保護隱私快速訓練,Facebook開源Opacus,用差分隱私訓練PyTorch
    Opacus 庫開源地址:https://github.com/pytorch/opacusOpacus 庫的目標受眾主要為以下兩類人群:機器學習從業者:可以使用該庫輕鬆了解如何利用差分隱私訓練模型,該庫支持以最少代碼更改來訓練模型;差分隱私科學家:Opacus 庫易於實驗和修復,這允許他們專注於更重要的事。
  • PyTorch最佳實踐,教你寫出一手風格優美的代碼
    這是一個開發的項目,歡迎其它讀者改進該文檔:https://github.com/IgorSusmelj/pytorch-styleguide 本文檔主要由三個部分構成:首先,本文會簡要清點 Python 中的最好裝備。接著,本文會介紹一些使用 PyTorch 的技巧和建議。
  • Pytorch框架安裝方法(基於Anaconda環境和Pycharm IDE)
    2.安裝PyTorch2.1 激活pytorch房間conda activate pytorch當前面從(base)變為(pytorch)時表示此時已經切換到pytorch房間,隨後正式進入安裝pytorch環節。
  • 去除PC快捷方式小箭頭,一行小代碼,即可輕鬆實現,不必下載軟體
    去除電腦桌面快捷方式小箭頭,一行小代碼,即可輕鬆實現,不必下載軟體。實測有效第一種方式:右鍵新建TXT文件,位置不限打開文件,將以下代碼輸入。"%userprofile%\AppData\Local\iconcache.db"del "%userprofile%\AppData\Local\iconcache.db" /f /qstart explorerpause點擊保存(將代碼直接複製粘貼
  • 使用一行Python代碼從圖像讀取文本
    雖然圖像分類和涉及到一定程度計算機視覺的任務可能需要大量的代碼和紮實的理解,但是從格式良好的圖像中讀取文本在Python中卻是簡單的,並且可以應用於許多現實生活中的問題。在今天的帖子中,我想證明這一點。雖然會安裝一些庫,但不會花很多時間。
  • Pandas on Ray:僅需改動一行代碼,即可讓Pandas加速四倍
    本文中,來自 UC Berkeley 的 Devin Petersohn 發布文章介紹了其參與的項目 Pandas on Ray,使用這款工具,無需對代碼進行太多改動即可加速 Pandas,遇到大型數據集也不怕。作者還對 Pandas on Ray、Pandas 進行了對比評估。機器之心對此文進行了編譯介紹。
  • 專屬於極客的代碼符號
    為了量化你在計算機方面的極客程度,請參考下列代碼符號。注意,Computer這一欄只表示你在計算機方面的「一般性」資質。後面我們會列出更具體的類別。ComputerC++++我會是第一個把新的控制界面安裝到我的頭骨中的人。
  • 重磅| Torch7團隊開源PyTorch:Python優先的深度學習框架
    PyTorch 介紹在粒度層面(granular level)上,PyTorch 庫包含了以下組件:使用 PyTorch 的原因通常有二:作為 numpy 的替代,以便使用強大的 GPU;將其作為一個能提供最大的靈活性和速度的深度學習研究平臺。
  • PyTorch實現TPU版本CNN模型
    為了克服訓練時間的問題,我們使用TPU運行時環境來加速訓練。為此,PyTorch一直在通過提供最先進的硬體加速器來支持機器學習的實現。PyTorch對雲TPU的支持是通過與XLA(加速線性代數)的集成實現的,XLA是一種用於線性代數的編譯器,可以針對多種類型的硬體,包括CPU、GPU和TPU。
  • 10行Python代碼也能實現,親測好用!
    ImageAI可以讓程式設計師和軟體開發者只用幾行代碼,就能輕易地把最先進的計算機視覺技術整合到他們現有的以及新的應用程式裡面。用ImageAI實現目標檢測,你只需要以下步驟:1. 安裝Python2. 安裝ImageAI和相關函數庫3. 下載目標檢測模型文件4.
  • 分離硬體和代碼、穩定 API,PyTorch Lightning 1.0.0 版本正式發布
    Lightning 能確保自動完成部分的正確性,對於核心訓練邏輯的提煉非常有優勢。今日,PyTorch Lightning 在推特宣布,1.0.0 版本現在可用了,並發布新的博客文章詳細描述了 PyTorch Lightning 的運行原理和新的 API。William Falcon 表示自己非常期待有一天,當用戶查看 GitHub 上的複雜項目時,深度學習代碼不再那麼令人望而生畏。
  • TPU加AutoML:50美元快速訓練高效的ImageNet圖像分類網絡
    但新型的 AmoebaNet-D 大大減少了計算時間,這種網絡基於進化策略能高效搜索神經網絡架構並實現快速的訓練。谷歌上個月其實已經介紹了這種網絡,詳細內容前查看:進化算法 + AutoML,谷歌提出新型神經網絡架構搜索方法。
  • 代碼詳解:用Pytorch訓練快速神經網絡的9個技巧
    (圖片來源:Monsters U)這份指南的介紹從簡單到複雜,一直介紹到你可以完成的大多數PITA修改,以充分利用你的網絡。例子中會包括一些Pytorch代碼和相關標記,可以在 Pytorch-Lightning訓練器中用,以防大家不想自己敲碼!這份指南針對的是誰?
  • TensorFlow與PyTorch之爭,哪個框架最適合深度學習
    當你在 TensorFlow 中運行代碼時,計算圖是以靜態方式定義的。與外部世界的所有通信都是通過 tf.Sessionobject 和 tf.Placeholder 執行,它們是在運行時會被外部數據替換的張量。例如,看看以下代碼段:下圖是 TensorFlow 中運行代碼之前以靜態方式生成計算圖的方式。