簡體   English   中英

使用 Docker 和 Flask 進行機器學習的性能問題

[英]Performance issues with machine learning using Docker and Flask

我有一些應用於 json 文件的 python3 代碼,代碼中有一些神經網絡和隨機森林。 我將我的代碼放入 Docker 容器中,但注意到這些 ML 任務在沒有 Docker 的情況下運行得比有 Docker 快。 在 Docker 中,我使用 Flask 加載 json 文件並運行代碼。 當然,我在本地和 Docker 內部使用了相同版本的 python 模塊,這些是:

  • 西諾 0.8.2
  • keras 2.0.5
  • scikit-learn 0.19.0

此外,燒瓶是

  • 0.12

起初,我認為 theano 可能會使用與不使用 Docker 不同的資源,但它同時運行單 CPU 和單線程。 它也沒有使用我的 GPU。 當我意識到我的隨機森林在 Docker 中運行速度也變慢時,我意識到這可能不是 theano。 這是我執行的一系列測試(我為每個測試做了幾個測試,我報告的是平均時間,因為它們是穩定的)

沒有 Docker,沒有 Flask:

  • 任務 1(theano + keras 代碼):1.0s
  • 任務 2(theano + keras 代碼):0.7s
  • 任務 3(scikit-learn 代碼):0.25s

Docker (cpus=1) + Flask(調試模式 = True):

  • T1:6.5s
  • T2:2.2s
  • T3:0.58s

Docker (cpus=2) + Flask(調試模式 = True):

  • T1:5.5s
  • T2:1.4s
  • T3:0.55s

Docker (cpus=2) + Flask(調試模式 = False):

  • T1:4.5s
  • T2:1.2s
  • T3:0.5s

Docker (cpus=2)(沒有 Flask,只是在本地調用 json 文件):

  • T1:2.8s
  • T2:1.1s
  • T3:0.5s

Flask(調試模式 = True)(無 Docker 容器):

  • T1:2.8s
  • T2:1.5s
  • T3:0.2s

我猜 cpu=1 與 cpu=2 只是為代碼分配了更多的 cpu,而第二個 cpu 只是接管了一些其他工作。 顯然,當不使用 Flask 或 Docker 時,時間會有所減少,但是,我仍然無法達到沒有 Docker 和沒有 Flask 的速度。 有沒有人知道為什么會這樣?

這是我們如何使用 Flask 運行應用程序的最小代碼塊

api = Flask(__name__)
pipeline = Pipeline()  # private class calling multiple tasks

@api.route("/", methods=['POST'])
def entry():
    data = request.get_json(force=True)
    data = pipeline.process(data)
    # This calls the different tasks which are timed

if __name__ == "__main__":
    api.run(debug=True, host='0.0.0.0', threaded=False)

附注。 如果問題缺少任何內容,請原諒我,這是我的第一個 StackOverflow 問題

在 CPU 上進行推理時,我遇到了一個非常相似的問題

  • 獨角獸
  • 燒瓶
  • 火炬

即使艱難,我的設置也略有不同,我認為這會對您有所幫助。

我在gunicorn-settings中設置了workers=1threads=1 當向 Flask 端點發送並發請求時,推理時間變得非常糟糕。

事實證明, pytorch啟動了盡可能多的線程,它們可以從 Docker 獲得,並且它們彼此嚴重阻塞。 另見: https : //opendatascience.com/model-performance-optimization-with-torchserve/

我的解決方案是設置torch.set_num_threads(1)

請檢查您是否也有這個問題。

暫無
暫無

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

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