pytorch resnet50_PyTorch終于能用上谷歌云TPU,推理性能提升4倍,我們該如何薅羊毛?...

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

Facebook在PyTorch開發者大會上正式推出了PyTorch 1.3,并宣布了對谷歌云TPU的全面支持,而且還可以在Colab中調用云TPU。

之前機器學習開發者雖然也能在Colab中使用PyTorch,但是支持云TPU還是第一次,這也意味著你不需要購買昂貴的GPU,可以在云端訓練自己的模型。

而且如果你是谷歌云平臺(Google Cloud Platform)的新注冊用戶,還能獲得300美元的免費額度。

c1242243c9ec98059515d92bb6becae5.png

現在PyTorch官方已經在Github上給出示例代碼,教你如何免費使用谷歌云TPU訓練模型,然后在Colab中進行推理。

訓練ResNet-50

PyTorch先介紹了在云TPU設備上訓練ResNet-50模型的案例。如果你要用云TPU訓練其他的圖像分類模型,操作方式也是類似的。

在訓練之前,我們先要轉到控制臺創建一個新的虛擬機實例,指定虛擬機的名稱和區域。

8ad7372137278bf369658a6949cc8ec4.png

如果要對Resnet50在真實數據上進行訓練,需要選擇具有最多CPU數量的機器類型。為了獲得最佳效果,請選擇n1-highmem-96機器類型。

然后選擇Debian GNU/Linux 9 Stretch + PyTorch/XLA啟動盤。如果打算用ImageNet真實數據訓練,需要至少300GB的磁盤大小。如果使用假數據訓練,默認磁盤大小只要20GB。

創建TPU

  1. 轉到控制臺中創建TPU。

  2. 在“Name”中指定TPU Pod的名稱。

  3. 在“Zone”中指定云TPU的區域,確保它與之前創建的虛擬機在同一區域中。

  4. 在“ TPU Type”下,選擇TPU類型,為了獲得最佳效果,請選擇v3-8TPU(8個v3)。

  5. 在“ TPU software version”下,選擇最新的穩定版本。

  6. 使用默認網絡。

  7. 設置IP地址范圍,例如10.240.0.0。

官方建議初次運行時使用假數據進行訓練,因為fake_data會自動安裝在虛擬機中,并且只需更少的時間和資源。你可以使用conda或Docker進行訓練。

在fake_data上測試成功后,可以開始嘗試用在ImageNet的這樣實際數據上進行訓練。

用conda訓練:

#?Fill?in?your?the?name?of?your?VM?and?the?zone.
$?gcloud?beta?compute??ssh?"your-VM-name"?--zone?"your-zone".
(vm)$?export?TPU_IP_ADDRESS=your-ip-address
(vm)$?export?XRT_TPU_CONFIG="tpu_worker;0;$TPU_IP_ADDRESS:8470"
(vm)$?ulimit?-n?10240
(vm)$?conda?activate?torch-xla-0.5
(torch-xla-0.5)$?python?/usr/share/torch-xla-0.5/pytorch/xla/test/test_train_imagenet.py?--datadir=~/imagenet?--model=resnet50?--num_epochs=90?--num_workers=64?--batch_size=128?--log_steps=200

用Docker訓練:

#?Fill?in?your?the?name?of?your?VM?and?the?zone.
$?gcloud?beta?compute?ssh?"your-VM-name"?--zone?"your-zone".
(vm)$?export?TPU_IP_ADDRESS=your-ip-address
(vm)$?docker?run?--shm-size?128G?-v?~/imagenet:/tmp/imagenet?-e?XRT_TPU_CONFIG="tpu_worker;0;$TPU_IP_ADDRESS:8470"?gcr.io/tpu-pytorch/xla:r0.5?python3?pytorch/xla/test/test_train_imagenet.py?--model=resnet50?--num_epochs=90?--num_workers=64?--log_steps=200?--datadir=/tmp/imagenet

在n1-highmem-96的虛擬機上選用完整v3-8 TPU進行訓練,第一個epoch通常需要約20分鐘,而隨后的epoch通常需要約11分鐘。該模型在90個epoch后達到約76%的top-1準確率。

為了避免谷歌云后續進行計費,在訓練完成后請記得刪除虛擬機和TPU。

性能比GPU提升4倍

訓練完成后,我們就可以在Colab中導入自己的模型了。

打開notebook文件,在菜單欄的Runtime中選擇Change runtime type,將硬件加速器的類型改成TPU。

2359fe1fec9dc15c8d1c35d2778f1e03.png

先運行下面的代碼單元格,確保可以訪問Colab上的TPU:

import?os
assert?os.environ[‘COLAB_TPU_ADDR’],?‘Make?sure?to?select?TPU?from?Edit?>?Notebook?settings?>?Hardware?accelerator’

然后在Colab中安裝兼容PyTorch/TPU組件:

DIST_BUCKET="gs://tpu-pytorch/wheels"
TORCH_WHEEL="torch-1.15-cp36-cp36m-linux_x86_64.whl"
TORCH_XLA_WHEEL="torch_xla-1.15-cp36-cp36m-linux_x86_64.whl"
TORCHVISION_WHEEL="torchvision-0.3.0-cp36-cp36m-linux_x86_64.whl"

#?Install?Colab?TPU?compat?PyTorch/TPU?wheels?and?dependencies
!pip?uninstall?-y?torch?torchvision
!gsutil?cp?"$DIST_BUCKET/$TORCH_WHEEL"?.
!gsutil?cp?"$DIST_BUCKET/$TORCH_XLA_WHEEL"?.
!gsutil?cp?"$DIST_BUCKET/$TORCHVISION_WHEEL"?.
!pip?install?"$TORCH_WHEEL"
!pip?install?"$TORCH_XLA_WHEEL"
!pip?install?"$TORCHVISION_WHEEL"
!sudo?apt-get?install?libomp5

接下來就可以導入你要訓練好的模型和需要進行推理的圖片了。

在PyTorch上使用TPU對性能的提升到底有多明顯呢?官方選用了v2-8的一個核心,即1/8 TPU的情形,與使用英偉達Tesla K80 GPU進行對比,實測顯示推理時間大大縮短,性能約有4倍左右的提升。

1f6a6c16d5fd8f72f6eb6fbf343bd823.png

GitHub地址:
https://github.com/pytorch/xla/tree/master/contrib/colab

作者系網易新聞·網易號“各有態度”簽約作者

大會啟幕!預見智能科技新未來

量子位MEET 2020智能未來大會啟幕,將攜手優秀AI企業、杰出科研人員呈現一場高質量行業盛會!詳情可點擊圖片:

d5b5de3ec67071747bf368de9be673db.png

榜單征集!三大獎項,鎖定AI Top玩家

2019中國人工智能年度評選啟幕,將評選領航企業、商業突破人物、最具創新力產品3大獎項,并于MEET 2020大會揭榜,歡迎優秀的AI公司掃碼報名!

4fa41794687f0c53f0c9a408eef94be6.png01a0a8eae01261532e4b5a127d87adf5.png

量子位?QbitAI · 頭條號簽約作者

?'?' ? 追蹤AI技術和產品新動態

喜歡就點「好看」吧 !?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/455710.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/455710.shtml
英文地址,請注明出處:http://en.pswp.cn/news/455710.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

x264里的2pass指的是什么意思? x264源代碼分析2.encode()

A:x264里的2pass指的是什么意思?另外stat是什么意思, 比如有個參數--stats <string> Filename for 2 pass stats [/"%s/"]/n", defaults->rc.psz_stat_out );stats在這是什么意思? 2pass是2次編碼的意思&#xff0c;stats是統計文檔的名稱&a…

項目啟動居然如此重要!

項目的啟動階段比較短&#xff0c;項目經理往往容易忽視這個階段&#xff0c;但是&#xff0c;項目的啟動卻具有著重要的意義。 定基調&#xff1a; 基調包括工作的節奏、團隊氛圍和溝通風格等。 一首歌的第一句決定了這首歌的基調&#xff0c;如何唱好這第一句就是項目啟動所要…

mysql數據庫導入導出文件sql文件

window下 1.導出整個數據庫 mysqldump -u 用戶名 -p 數據庫名 > 導出的文件名 mysqldump -u dbuser -p dbname > dbname.sql 2.導出一個表 mysqldump -u 用戶名 -p 數據庫名 表名> 導出的文件名 mysqldump -u dbuser -p dbname users> dbname_users.sql 3.導出…

Android Studio主題設置、顏色背景配置

2019獨角獸企業重金招聘Python工程師標準>>> color-themes 效果展示 打開http://color-themes.com/有很多樣式可供選擇 1. Monokai Sublime Text 3(color theme) 2. Solarized Light (color theme) 3. Visual Studio 2015 Dark(color theme) 導入方式 下載主…

JavaScript中的函數

js函數 *第一種是使用function語句定義函數 function abc(){alert(abc); }*第二種是在表達式中定義函數 var 函數名 function\(參數1&#xff0c;參數2&#xff0c;…\){函數體};//例如&#xff1a;//定義var add function\(a,b\){return ab;}//調用函數document.write\(a…

x264源代碼分析1。fread()

相關說明:1. 使用版本: x264-cvs-2004-05-11 2. 這次的分析基本上已經將代碼中最難理解的部分做了闡釋,對代碼的主線也做了剖析,如果這個主線理解了,就容易設置幾個區間,進行分工閱讀,將各個區間擊破了. 3. 需要學習的知識:a) 編碼器的工作流程.b) H.264的碼流結構,像x264_sp…

在centos下安裝pycrypto報錯 RuntimeError: autoconf error

解決&#xff1a;yum -y install gcc File "/usr/lib64/python3.6/distutils/dist.py", line 974, in run_command cmd_obj.run() File "/usr/lib64/python3.6/distutils/command/build.py", line 135, in run self.run_command(cm…

Java多線程實現異步調用

在Java平臺,實現異步調用的角色有如下三個角色&#xff1a;調用者、 提貨單 、真實數據&#xff0c;一個調用者在調用耗時操作,不能立即返回數據時,先返回一個提貨單 .然后在過一斷時間后憑提貨單來獲取真正的數據.去蛋糕店買蛋糕&#xff0c;不需要等蛋糕做出來(假設現做要很長…

sql server 2008 r2卸載重裝_免費下載:Intouch軟件、Windows操作系統、SQL數據庫,VB6.0、C#...

為大家整理了常用的Windows操作系統和安裝軟件&#xff0c;基本上都是經過我們項目測試OK的版本&#xff0c;以后項目調試就齊全了&#xff0c;不用再“東奔西走”&#xff0c;“小鹿亂撞”了。整理不易&#xff0c;若對您有幫助請關注并轉發&#xff0c;以便幫助到更多的人。I…

Android ToolBar 使用完全解析

ToolBar簡介 ToolBar是Android 5.0推出的一個新的導航控件用于取代之前的ActionBar&#xff0c;由于其高度的可定制性、靈活性、具有Material Design風格等優點&#xff0c;越來越多的應用也用上了ToolBar&#xff0c;比如常用的知乎軟件其頂部導航欄正是使用ToolBar。官方考慮…

【零散積累】傳輸文件(sz/rz/scp命令)

來自wiki遷移頁面路徑&#xff1a;劉旺的主頁 / 個人零散積累 / 01> 傳輸文件&#xff08;sz/rz/scp命令&#xff09; 工作中的傳輸文件會出現在linux之間&#xff0c;或者linux與windows之間。 一、怎么實現linux與windows之間的文件傳輸&#xff1f; 1.sz和rz是什么 s…

x264_macroblock_cache_load()

功能:完成將已編碼數據參數和待編碼數據裝入到h->mb.cache中,下圖是BUF中存儲的數據在以MB為單位的時候的存儲順序 x264_macroblock_cache_load( h, i_mb_x, i_mb_y );//是把當前宏塊的up宏塊和left宏塊的intra4x4_pred_mode&#xff0c;non_zero_count加載進來&#xff0c…

U(優)盤安裝FreeBSD-9.0+GNOME_lite桌面

貼圖在我的主頁&#xff1a;http://hi.baidu.com/daodej/item/26313f4fc3db51ef1f19bcc6 修訂于&#xff1a;2012/07/04 標題&#xff1a;U(優)盤安裝FreeBSD-9.0GNOME_lite桌面&#xff0c;boot0啟動XP(Windows)、FreeBSD、Ubuntu(Linux)三系統 【黑括號表示說明&#xff0c;中…

【零散積累】 vim常用操作

類型 操作 含義 刪除 dd 刪除游標所在的一整行(常用) ndd n為數字。刪除光標所在的向下n行&#xff0c;例如20dd則是刪除光標所在的向下20行 d1G 刪除光標所在到第一行的所有數據 dG 刪除光標所在到最后一行的所有數據 d$ 刪除光標所在處&#xff0c;到該…

生活中常見物聯網實例_物聯網網關常見問題解答(一)

1.為什么物聯網解決方案需要網關&#xff1f;物聯網網關彌合了設備&#xff0c;傳感器&#xff0c;設備&#xff0c;系統和云之間的通信鴻溝。通過系統地連接云&#xff0c;物聯網網關提供了本地處理和存儲&#xff0c;并具有基于傳感器輸入的數據自主控制現場設備的功能。物聯…

predict_16x16[i_mode]( p_dst, i_stride )lowres

h->predict_16x16[i_mode]( p_dst, i_stride ); 計算對應預測模式時的預測采樣值。輸出放到dst指向的數組中。Pred0ct_16x16是7個元素指向的數組&#xff0c;數組的每個元素是一個指向函數的指針變量&#xff0c;在x264_predict_16x16_init函數初始這個指針數組。7個元素分…

【零散積累】shell腳本學習

來自wiki遷移頁面路徑&#xff1a;劉旺的主頁 / 個人零散積累 / 03> shell腳本學習 case Shell case語句&#xff08;多分支條件判斷&#xff09; $( ) Linux—shell中$(( ))、$( )、與${ }的區別 - chengd - 博客園 在bash中&#xff0c;$( )與 &#xff08;反引號&…

mysql 表鎖-解鎖

遇到問題“”用工具navicat打開一張表的時候&#xff0c;有的時候會發現這張表怎么打不開&#xff0c;關了navicat工具&#xff0c;再打開&#xff0c;也是同樣的狀態。查看表鎖&#xff1a;show OPEN TABLES where In_use > 0;查看是否是表鎖住了。-- 查看進程號 show proc…

alsa 測試 linux_Electron 構建步驟 (Linux)

遵循下面的引導&#xff0c;在 Linux 上構建 Electron .PrerequisitesPython 2.7.x. 一些發行版如 CentOS 仍然使用 Python 2.6.x &#xff0c;所以或許需要 check 你的 Python 版本&#xff0c;使用 python -V.Node.js v0.12.x. 有很多方法來安裝 Node. 可以從 Node.js下載原文…

JavaScript中的數學對象Math

js數學對象Math //四舍五入 var res Math.round(5.921);//獲取最大值 var res Math.max(10,23,523,43,65,46,32,32);//獲取最小值 var res Math.min(12312,324,32,42,3,23,412,4332,21,3,-1);//獲取絕對值 var res Math.abs(-100);//退一取整 var res Math.floor(1.9);//…