10.22 PyTorch VS TensorFlow誰最強?這是標星15000+ Transformers庫的運行結果

PyTorch VS TensorFlow誰最強?這是標星15000+ Transformers庫的運行結果

作者 | Lysandre Debut

譯者 | 陸離

出品 | AI科技大本營(ID: rgznai100)

【導語】自然語言處理預訓練模型庫 Transformers 實現了幾種用於 NLP 任務的最先進的 Transformer 架構,如文本分類、信息提取、問題解答和文本生成等,它經常被研究人員和公司所使用,提供 PyTorch 和 TensorFlow 的前端實現。

究竟是 PyTorch 還是 TensorFlow 更有效率地訓練和運行 Transformers 模型?作者對不同環境下所展現的性能進行了對比,最終的結果是,無論在 CPU 還是 GPU 上,最終兩大框架的表現都差不多。

Transformers庫:

https://github.com/huggingface/transformers

自 TensorFlow 發佈以來,我們一直在致力於模型產品化的工作,並使其可以用在 TPU 上,逐步適應它的性能。

本文對比了我們的模型在幾種環境中所展現出來的性能。在 CPU 和 GPU 上比較了 PyTorch(1.3.0)和 TensorFlow(2.0)的推斷結果。出於對一些原因的考慮,本文只是關於基準測試和後續性能優化系列文章中的第一篇。此外,我們還在文檔中創建了基準測試部分,隨著進一步的模型研究,並在不同環境中對它們進行基準測試,該部分還將不斷完善。

結果

測試的平均結果顯示在下表中,在接下來的討論部分裡將對這些結果進行詳細介紹。

PyTorch VS TensorFlow谁最强?这是标星15000+ Transformers库的运行结果

平均推斷時間

Benchmarking Transformers測試結果:https://url.cn/5hZHCll

電子表格中的 N/A 記錄表示內存不足或是數列長度不合適。Transformer-XL(Transformer extra-long,Transformer 在模型設計上做了長度方面的延申)沒有 TorchScript 結果,因為它當前不能由 TorchScript(TorchScript 是一種從 PyTorch 代碼創建可序列化和可優化模型的方法)進行序列化。

大多數情況下,TensorFlow 和 PyTorch 的模型在 GPU 和 CPU 上都得到了非常相似的結果。下面是對結果相關的闡述,不僅是 PyTorch 和 TensorFlow 之間的比較,也是模型之間的比較。

測量推理

推理時間是模型投入生產時的一個重要指標。為了評估模型的推理時間,我們對不同批量和不同序列長度的模型進行了對比。我們比較了適當的批量大小[1,2,4,8]和序列長度[8,64,128,256,512,1024]。批量大小仍然很小,因為我們僅僅關注推斷設置。BERT和其它類似模型的最大序列長度為 512 或 256(用於 CTRL),因此不能在最後一個序列長度上進行測量。

以下是我們在兩種不同環境中的測試結果:

  • 在 CPU 上,使用 GCP n1-standard-32,它有 32 個 vCPU 和 120GB 的內存。CPU 的型號是 Intel [email protected]

  • 在 GPU 上,使用了帶有 12 個 vCPU、40GB 內存和一個 V100 的 GPU(16GB 的 VRAM)的定製 GCP 機器;

實驗細節和最佳實踐

為了最大化性能,我們進行了更進一步的優化:

  • 上述測量使用的 Intel Xeon CPU 帶有 AVX 和 AVX2 的擴展,而 TensorFlow 需要從源代碼編譯之後才能夠利用這些擴展,所以只能這麼做;

  • 我們通過使用 tf.function 和預先跟蹤模型來確保我們沒有使用 TensorFlow 的 eager 模式;

  • 我們比較了依賴於庫和不依賴於庫的工具:PyTorch的 TorchScript 和帶有 GPU 的TensorFlow 的 XLA(自動聚類),後面會詳細介紹這兩個工具;

  • 我們使用了原生的 Python 模塊 timeit 來測量推斷時間。另外,用repeat=30 和 number=3 來進行每個實驗。然後求出30 個值的平均數,就會得到所期望的平均推理時間。通常超過30 個值就會獲得非常穩定的結果了;

  • 我們不會使用如 TFX 這樣的生產環境,並且我們使用的測量模型的可調用方法是:PyTorch 的nn.module.forward 和 TensorFlow 的 tf.keras.layers.layer.call

  • 對於 TensorFlow 和 PyTorch,我們會很謹慎地使用適當的 CUDA 版本;

討論

PyTorch 和 TensorFlow

在大多數情況下,這兩個框架都會得到類似的結果,與 PyTorch 相比,TensorFlow 在CPU 上的速度通常會稍慢一些,而在 GPU 上的速度則稍快一點:

  • 所有的模型中,在 CPU 上,PyTorch 的平均推斷時間為 0.748s,而 TensorFlow 的平均推斷時間為 0.823s;

  • 所有模型中,在 GPU 上,PyTorch 的平均推斷時間為 0.046s,而 TensorFlow 的平均推斷時間為 0.043s;

這些結果通過計算平均值來比較所有模型的推斷時間。因此,輸入值越大,對最終結果的影響就越大。當輸入值過大時,PyTorch 就會耗盡內存;當計算平均值時,這些結果會從所有度量中刪除,因為這樣會使結果向 PyTorch傾斜。

運行過程中,PyTorch 模型往往比 TensorFlow 模型更早地耗盡內存:除了Distilled 模型之外,PyTorch 在輸入批量大小達到 8 以及序列長度達到 1024 時會耗盡內存。

TorchScript

TorchScript 是PyTorch 用來創建可序列化模型的一種方法,可以在不同的運行時間上運行,而不需要 Python 的依賴包,如 C++ 環境。我們的測試是通過在Python中跟蹤模型並在相同的環境中重用這個跟蹤模型來完成的。我們通過預先執行前向傳遞以確保在測量其推斷之前來跟蹤模型。

免責聲明:雖然 TorchScript 並不是為了在 Python 環境中提高運行速度而創建的,但是我們的結果表明,使用 TorchScript 的跟蹤模型可以提高性能。

TorchScript 似乎非常依賴於模型以及輸入的大小(批量大小*序列長度)。例如,在XLNet 上使用 TorchScript 可以獲得永久性的性能提升,而在 XLM 上使用 TorchScript 則可能會出現問題,因為它在較小輸入下才會提高性能,但在較大輸入下反而會降低性能。

平均來說,使用 TorchScript 跟蹤模型的推斷速度比使用相同 PyTorch 非跟蹤模型的推斷速度快 20%。

XLA

XLA 是一個線性代數編譯器,它可以提高 TensorFlow 模型的速度,但我們只能在 GPU上使用。它基於TensorFlow 的自動聚類,編譯了模型的一些子圖。

這些結果在速度和內存的使用效率方面得到了提高:大多數內部基準在啟用了XLA 後運行速度提高了 1.15 倍。

在啟用 XLA 後,我們所有模型性能都得到了提高。在某些極端情況下,特別是在較小輸入的情況下,推斷時間可以減少 70%。

模型及其精煉版本

精煉模型版本在這個測試中表現出色,因為它可以很快就進行基準測試。這兩個 Hugging Face-engineered 模型——DistilBERT 和 DistilGPT-2 的推斷時間比它們的老師模型減少了一半。

貢獻

由於不同的基準測試有不同的設置和相應的工具,這些都不是靠一個組織所能實現的,因此我們也歡迎來自廣大社區的基準。Github用戶 @tlkh 已經通過在 TensorFlow 的模型上使用 AMP、XLA 和分佈式策略實現的基準測試性能做出了重大的貢獻,目前也被添加到文檔的基準測試部分。

如何做貢獻

如果你願意參與,我們已經在 Github 上設置了主題模板,這樣操作起來就會更簡單一些。你可以隨意打開已有結果的主題,或者打開一個請求併到文檔的基準測試部分進行添加。

基準測試腳本

和本文的發佈和文檔中的基準測試頁一起,我們在示例部分添加了一個新腳本:benchmarks.py,它是用於獲取下面詳細結果的腳本。它可以使用XLA 或 TorchScript 在 TensorFlow 或 PyTorch 上運行基準測試,並將結果保存到 CSV 文件當中。

接下來的計劃

對模型進行基準測試只是提高性能的第一步。我們相信這篇介紹性的文章可能有助於比較模型的當前狀態,特別是在研究 PyTorch 和 TensorFlow 之間的差異時。當我們深入研究 Transformers 生產方面時,一定會致力於性能改進。

對於 Pythorch 和 TensorFlow 的自動化腳本、新架構和定製 TPU 培訓,請密切關注後續文章。

原文鏈接:

https://medium.com/huggingface/benchmarking-transformers-pytorch-and-tensorflow-e2917fb891c2

(*本文為 AI科技大本營編譯文章,請微

信聯繫 1092722531

精彩推薦

2019 中國大數據技術大會(BDTC)再度來襲!豪華主席陣容及百位技術專家齊聚,15 場精選專題技術和行業論壇,超強幹貨+技術剖析+行業實踐立體解讀,深入解析熱門技術在行業中的實踐落地。

即日起,限量 5 折票開售,數量有限,掃碼購買,先到先得!

PyTorch VS TensorFlow谁最强?这是标星15000+ Transformers库的运行结果


分享到:


相關文章: