簡體   English   中英

如何加快在 Python 中的並行程序中運行的優化 CPU 綁定進程?

[英]How do I speed up an optimized CPU-bound process that runs within a parallelized program in Python?

我的一個 Python 程序使用multiprocessing模塊來並行化搜索問題的迭代。 除了做其他事情外,每次迭代都會循環一個已經在 Cython 中優化的 CPU 昂貴的進程。 因為這個過程在循環時被多次調用,這會顯着減慢總運行時間。

在這種情況下,實現加速的推薦方法是什么? 由於無法對昂貴的進程進行進一步的 CPU 優化,我考慮過並行化循環。 但是,由於循環存在於已經並行化(通過multiprocessing )的程序中,我認為這在同一台機器上是不可能的。

我對此的研究未能找到任何最佳實踐或任何方向。

作為查看是否可以優化現有代碼的快速方法,您可以在代碼運行時檢查計算機 CPU 使用率。

如果你所有的核心都是~100%,那么添加更多的進程等不太可能改善事情。

在那種情況下,你可以

1 - 嘗試進一步的算法優化(盡管最好的方法是先分析你的代碼,看看它在哪里慢)。 盡管如果您已經在使用 Cython,那么這可能會帶來有限的回報

2 - 嘗試更快的機器和/或更多的內核

然而,另一種方法(我使用過的方法)是開發無服務器設計,並使用任何雲供應商無服務器模型運行 CPU 密集型、並行算法部分。

我個人使用過 AWS lamda,我們在其中並行化了我們的代碼以同時運行 200 多個 lambda 進程,這大致相當於一台 200 多個內核的單機。

對我們而言,與在 8 核服務器上運行相比,這實質上導致性能提高了 50-100 倍(以總處理時間的減少來衡量)。

您必須做更多的工作來實現無服務器部署 model,然后使用包裝器代碼來管理所有內容,這並非易事。 但是,基本上無限水平擴展的能力可能對您有意義。

暫無
暫無

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

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