亚洲精品久久久久久久久久久,亚洲国产精品一区二区制服,亚洲精品午夜精品,国产成人精品综合在线观看,最近2019中文字幕一页二页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內(nèi)不再提示

PyTorch可以和TensorFlow一樣快,有時甚至比TensorFlow更快了?

DPVg_AI_era ? 來源:lq ? 2019-09-07 07:50 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

PyTorch可以和TensorFlow一樣快,有時甚至比TensorFlow更快了?這是怎么回事?最近Reddit的一個帖子引起熱議。

近日,Reddit 上有一個熱帖:為什么 PyTorch 和 TensorFlow 一樣快 (有時甚至比 TensorFlow 更快)?

作者說:

由于這兩個庫都在底層使用 cuDNN,所以我預想各個操作的速度是相似的。然而,TensorFlow (在 graph 模式下) 編譯一個 graph,因此當你運行實際的訓練循環(huán)時,在 session.run 調(diào)用之外沒有任何 Python 開銷。在 PyTorch 中,由于動態(tài)圖的關系,需要經(jīng)常使用 Python,所以我預想這回增加一些開銷。更不用說,擁有靜態(tài)圖意味著可以進行圖優(yōu)化,比如節(jié)點修剪和排序操作。但我在網(wǎng)上看到的許多基準測試中,在 GPU 上,PyTorch 都可以輕松地趕上 TensorFlow。

一個具體的例子是,在 PyTorch 和 TensorFlow 兩個庫中的 Adam 實現(xiàn):

https://github.com/pytorch/pytorch/blob/master/torch/optim/adam.py https://github.com/tensorflow/tensorflow/blob/master/tensorflow/python/training/adam.py

PyTorch 擁有你所期望的所有操作。對于 {_resource} _apply_density 情況下的 TensorFlow (據(jù)我所知這是常見情況), TensorFlow 有一個專用的 C++ 實現(xiàn)。因此,在這里,TensorFlow 不會在 Python 上花費額外的時間,而且它在 C++ 中有一個優(yōu)化的實現(xiàn)。在這種情況下,為什么 TensorFlow 版本沒有更快一些呢?

我聽說 PyTorch 在 cuDNN 級別上進行了更好的優(yōu)化。有人能提供更多細節(jié)嗎?是什么阻止了 TensorFlow 做同樣的事情?我所知道的惟一優(yōu)化是 PyTorch 使用 NCHW 格式 (針對 cuDNN 進行了更好的優(yōu)化),而 TensorFlow 默認使用 NHWC。

更新:看起來新的 Volta GPU 使用 NHWC 格式 (TensorFlow 的默認格式) 的性能更好:https://devblogs.nvidia.com/tensor-core-ai-performance- ones/

這個問題引發(fā)了諸多 Reddit 網(wǎng)友的關注,大家紛紛給出自己的答案。

SR2Z:

這里的關鍵是異步執(zhí)行 —— 除非你不斷地在 GPU 之間復制數(shù)據(jù),否則 PyTorch 操作只會為 GPU 排隊。對 torch 函數(shù)的 Python 調(diào)用將在排隊操作后返回,因此大多數(shù) GPU 工作都不會占用 Python 代碼。這將瓶頸從 Python 轉(zhuǎn)移到了 CUDA,這就是為什么它們執(zhí)行起來如此相似。

huberloss (回復 SR2Z):

TF 構(gòu)建了一個執(zhí)行圖,然后由 C++ 后端處理,這意味著你在 Python 中所做的唯一工作就是設置這個圖 (至少在 TF1.x 中是這樣)。我不認為 TF 會移動移入 / 移出 GPU,除非需要 (例如,op1 運行在 CPU 上,op2 運行在 GPU 上,op3 運行在 CPU 上 -> 這將導致向 GPU 復制或從 GPU 復制)。TF 有執(zhí)行程序,它也將異步運行所有內(nèi)容 (這意味著獨立節(jié)點將以一種你能夠盡快滿足輸出節(jié)點的方式執(zhí)行)。

關于 OP 的觀點,我真的不知道為什么有時候會更快。我可以想到的唯一猜測是數(shù)據(jù)格式,或者某些 ops 調(diào)用 CUDA/cuDNN 的方式。

entarko:

正如你所說,這兩個庫都使用 cuDNN,所以在較低級別上使用的大多數(shù)算法是相似的。我的理解是,在默認情況下,PyTorch 中的執(zhí)行是異步的。這意味著 Python 命令在 GPU 上執(zhí)行某項調(diào)用,但不等待該調(diào)用的結(jié)果,除非下一個操作需要該結(jié)果。因此,GPU 操作速度的唯一不同之處在于 python 調(diào)用所需的時間,這與 GPU 上的實際計算相比總體上較小。這并不能解釋為什么有時候 PyTorch 更快,這在一定程度上來自 NCHW (盡管并不總是這樣),而且還來自算法為不同的操作進行的選擇 (cuDNN 的 benchmark flag)。

patrickkidger:

這與 PyTorch 和 TensorFlow 沒有直接關系,但是既然 NCHW 和 NHWC 被提了出來,我希望這里有人能知道答案……

為什么 batch size N 是第一個而不是最后一個?在我看來,由于緩存的局部性,最后使用它通常會加快速度。

大多數(shù)數(shù)據(jù)集格式不統(tǒng)一應該不是大問題:相比于在整個計算的其余部分中具有 N-last 格式的好處而言,單個副本轉(zhuǎn)到 N-last 格式(即在將其送入神經(jīng)網(wǎng)絡之前)的開銷應該是微不足道的。

programmerChilli (回復 patrickkidger):

我認為你是正確的,將批處理維度放在最后可以實現(xiàn)一些非常有趣的優(yōu)化 (想想所有的向量化)。

但是,如果你的 batch size 很小,會發(fā)生什么呢?比如 batch size 為 2 (可能 3 會更糟)。突然之間,你可以在批處理維度上進行向量化的數(shù)量變得非常少了,并且你已經(jīng)傳播了其余的數(shù)據(jù),但沒有獲得多少收益。

實際上,以前有幾個框架使用這種格式,比如來自 Nervana 的 Neon。

我想主要的答案是人們嘗試了,但是由于各種原因,一些政治上 / 技術(shù)上的原因,我們目前已經(jīng)把 batch size 作為第一個維度確定下來。

un_om_de_cal:

根據(jù)我將項目從 PyTorch 轉(zhuǎn)移到 TF 的經(jīng)驗,雖然 PyTorch 的基本訓練操作 (前向傳播、反向傳播、更新參數(shù)) 更快,但是一些不尋常的操作 (包括 argmax 和 slicing),PyTorch 比 TF 要慢得多。因此,也許 PyTorch 更適合通常基準測試的更常見的操作,而 TF 針對更廣泛的操作進行了優(yōu)化?

我想到的另一點是,PyTorch 教程在 CPU 上做數(shù)據(jù)增強,而 TF 教程在 GPU 上做數(shù)據(jù)增強 (至少 1-2 年前我看到的教程是這樣)。如果你像這樣做項目,那么你將在 CPU 上執(zhí)行一些計算,只要你沒有耗盡 CPU, 就可以提高效率。

各位 PyTorcher 和 TF boy,你們怎么看?

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學習之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 數(shù)據(jù)集

    關注

    4

    文章

    1229

    瀏覽量

    26001
  • tensorflow
    +關注

    關注

    13

    文章

    330

    瀏覽量

    61773
  • pytorch
    +關注

    關注

    2

    文章

    812

    瀏覽量

    14589

原文標題:Reddit熱議:為什么PyTorch比TensorFlow更快?

文章出處:【微信號:AI_era,微信公眾號:新智元】歡迎添加關注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評論

    相關推薦
    熱點推薦

    【上海晶珩睿莓1開發(fā)板試用體驗】TensorFlow-Lite物體歸類(classify)

    用。 OpenCV庫編譯成功之后,就可以新建個線程進行TensorFlow-Lite物體歸類了,這里我直接使用現(xiàn)成的pb和pbtxt文件,具體內(nèi)容不贅述,來看看識別效果:
    發(fā)表于 09-12 22:43

    Nordic收購 Neuton.AI 關于產(chǎn)品技術(shù)的分析

    生成傳統(tǒng)框架(如 TensorFlow、PyTorch 等)小 10 倍的模型,模型體積可低至個位數(shù) KB,并且推理速度更快、功耗更低。此次收購將 Neuton 的自動化 TinyM
    發(fā)表于 06-28 14:18

    無法將Tensorflow Lite模型轉(zhuǎn)換為OpenVINO?格式怎么處理?

    Tensorflow Lite 模型轉(zhuǎn)換為 OpenVINO? 格式。 遇到的錯誤: FrontEnd API failed with OpConversionFailure:No translator found for TFLite_Detection_PostProcess node.
    發(fā)表于 06-25 08:27

    用樹莓派搞深度學習?TensorFlow啟動!

    介紹本頁面將指導您在搭載64位Bullseye操作系統(tǒng)的RaspberryPi4上安裝TensorFlow。TensorFlow個專為深度學習開發(fā)的大型軟件庫,它消耗大量資源。您可以
    的頭像 發(fā)表于 03-25 09:33 ?868次閱讀
    用樹莓派搞深度學習?<b class='flag-5'>TensorFlow</b>啟動!

    TensorFlow模型轉(zhuǎn)換為中間表示 (IR) 時遇到不致的形狀錯誤怎么解決?

    使用命令轉(zhuǎn)換為 Tensorflow* 模型: mo --input_model ../models/middlebury_d400.pb --input_shape [1,352,704,6
    發(fā)表于 03-07 08:20

    使用OpenVINO? 2020.4.582將自定義TensorFlow 2模型轉(zhuǎn)換為中間表示 (IR)收到錯誤怎么解決?

    轉(zhuǎn)換自定義 TensorFlow 2 模型 mask_rcnn_inception_resnet_v2_1024x1024_coco17 要 IR 使用模型優(yōu)化器命令: 注意上面的鏈接可能無法
    發(fā)表于 03-07 07:28

    將YOLOv4模型轉(zhuǎn)換為IR的說明,無法將模型轉(zhuǎn)換為TensorFlow2格式怎么解決?

    遵照 將 YOLOv4 模型轉(zhuǎn)換為 IR 的 說明,但無法將模型轉(zhuǎn)換為 TensorFlow2* 格式。 將 YOLOv4 darknet 轉(zhuǎn)換為 Keras 模型時,收到 TypeError: buffer is too small for requested array 錯誤。
    發(fā)表于 03-07 07:14

    Tensorflow Efficientdet-d0模型轉(zhuǎn)換為OpenVINO? IR失敗了,怎么解決?

    使用轉(zhuǎn)換命令 mo --saved_model_dir /home/obs-56/effi/saved_model 將 TensorFlow* efficientdet-d0 模型轉(zhuǎn)換為 IR
    發(fā)表于 03-06 08:18

    可以使用OpenVINO?工具包將中間表示 (IR) 模型轉(zhuǎn)換為TensorFlow格式嗎?

    無法將中間表示 (IR) 模型轉(zhuǎn)換為 TensorFlow* 格式
    發(fā)表于 03-06 06:51

    使用各種TensorFlow模型運行模型優(yōu)化器時遇到錯誤非法指令怎么解決?

    使用各種 TensorFlow 模型運行模型優(yōu)化器時遇到 [i]錯誤非法指令
    發(fā)表于 03-05 09:56

    TensorFlow saved_model格式轉(zhuǎn)換為IR遇到錯誤怎么解決?

    TensorFlow saved_model格式轉(zhuǎn)換為 IR。 遇到錯誤: FrontEnd API failed with OpConversionFailure: : No translator found for TensorListFromTensor node.
    發(fā)表于 03-05 09:12

    為什么無法使用OpenVINO?模型優(yōu)化器轉(zhuǎn)換TensorFlow 2.4模型?

    --tensorflow_object_detection_api_pipeline_config /ssd_mobilenet_v2_fpnlite_640x640_coco17_tpu-8/pipeline.config
    發(fā)表于 03-05 09:07

    OpenVINO?是否與TensorFlow集成支持Raspberry Pi?

    無法確定OpenVINO?是否與 TensorFlow* 集成支持 Raspberry Pi。
    發(fā)表于 03-05 08:26

    為什么無法將TensorFlow自定義模型轉(zhuǎn)換為IR格式?

    TensorFlow* 自定義模型轉(zhuǎn)換為 IR 格式: mo --data_type FP16 --saved_model_dir--input_shape (1,150,150,3
    發(fā)表于 03-05 07:26

    為什么無法將自定義EfficientDet模型從TensorFlow 2轉(zhuǎn)換為中間表示(IR)?

    將自定義 EfficientDet 模型從 TensorFlow* 2 轉(zhuǎn)換 為 IR 時遇到錯誤: [ ERROR ] Exception occurred during running replacer \"REPLACEMENT_ID\" ()
    發(fā)表于 03-05 06:29