[英]Performance issues with machine learning using Docker and Flask
我有一些應用於 json 文件的 python3 代碼,代碼中有一些神經網絡和隨機森林。 我將我的代碼放入 Docker 容器中,但注意到這些 ML 任務在沒有 Docker 的情況下運行得比有 Docker 快。 在 Docker 中,我使用 Flask 加載 json 文件並運行代碼。 當然,我在本地和 Docker 內部使用了相同版本的 python 模塊,這些是:
此外,燒瓶是
起初,我認為 theano 可能會使用與不使用 Docker 不同的資源,但它同時運行單 CPU 和單線程。 它也沒有使用我的 GPU。 當我意識到我的隨機森林在 Docker 中運行速度也變慢時,我意識到這可能不是 theano。 這是我執行的一系列測試(我為每個測試做了幾個測試,我報告的是平均時間,因為它們是穩定的)
沒有 Docker,沒有 Flask:
Docker (cpus=1) + Flask(調試模式 = True):
Docker (cpus=2) + Flask(調試模式 = True):
Docker (cpus=2) + Flask(調試模式 = False):
Docker (cpus=2)(沒有 Flask,只是在本地調用 json 文件):
Flask(調試模式 = True)(無 Docker 容器):
我猜 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=1
和threads=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.