簡體   English   中英

在Tensorflow服務中調試批處理(未觀察到效果)

[英]Debugging batching in Tensorflow Serving (no effect observed)

我有一個小型的Web服務器,可以根據句子獲取輸入,並需要使用Tensorflow服務返回模型預測。 使用我們的單GPU可以很好地工作,但是現在我想啟用批處理,以便Tensorflow服務等待一段時間對傳入的句子進行分組,然后在GPU上一次處理它們。

我正在使用預先設計的服務器框架預先設計的批處理框架,使用Tensorflow服務的初始版本。 我正在使用--batching標志啟用批處理,並設置了batch_timeout_micros = 10000max_batch_size = 1000 日志記錄確認已啟用批處理並且正在使用GPU。

但是,當向服務服務器發送請求時,批處理具有最小的影響。 同時發送50個請求幾乎在時間使用方面與發送5個請求成線性比例。 有趣的是,服務器的predict()函數對每個請求運行一次(參見此處 ),這表明批處理沒有得到正確處理。

我錯過了什么嗎? 如何檢查批處理有什么問題?


請注意,這與如何在Tensorflow服務中進行批處理不同 因為該問題僅檢查如何從單個客戶端發送多個請求,而不是如何啟用Tensorflow服務的多個單獨請求的幕后批處理。

(我不熟悉服務器框架,但我對HPC以及cuBLAS和cuDNN非常熟悉,TF用於在GPU上執行其點積和卷積的庫)

有幾個問題可能導致批量大小令人失望的性能擴展。

I / O開銷 ,我指的是網絡傳輸,磁盤訪問(對於大數據),序列化,反序列化和類似的錯誤。 這些東西往往是數據大小的線性。

為了研究這種開銷,我建議你部署2個模型:一個是你真正需要的,一個是微不足道的,但使用相同的I / O,然后減去彼此所需的時間。

這個時間差應該類似於復雜模型運行的時間,當你直接使用它時,沒有I / O開銷。

如果瓶頸在I / O中,那么加速GPU工作是無關緊要的。

請注意,即使增加批量大小使GPU更快,也可能使整個事情變得更慢,因為GPU現在必須等待整批的I / O完成甚至開始工作。

cuDNN擴展:matmul這樣的matmul需要大批量來實現它們的最佳吞吐量,但使用cuDNN的卷積可能不會(至少它不是我的經驗,但這可能取決於版本和GPU拱門)

RAM,GPU RAM或PCIe帶寬限制型號:如果您的型號存在任何瓶頸,則可能無法從更大的批量大小中受益。

檢查這個的方法是直接運行模型(可能使用模擬輸入),將時間與上述時間差進行比較,並將其繪制為批量大小的函數。


順便說一句,根據性能指南 ,你可以嘗試的一件事是使用NCHW布局,如果你還沒有。 還有其他提示。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM