我想知道如何加速運行涉及大量數據集上大量計算的程序。所以,我有5個python程序,每個程序都對大數據集執行一些複雜的計算。例如,在該程序中的一個的部分如下:如何加快計算繁重的python程序的運行時間
df = get_data_from_redshift()
cols = [{'Col': 'Col1', 'func': pd.Series.nunique},
{'col': 'Col2', 'func': pd.Series.nunique},
{'col': 'Col3', 'func': lambda x: x.value_counts().to_dict()},
{'col': 'Col4', 'func': pd.Series.nunique},
{'col': 'Col5', 'func': pd.Series.nunique}]
d = df.groupby('Column_Name').apply(lambda x: tuple(c['func'](x[c['col']]) for c in cols)).to_dict()
get_data_from_redshift()
其中連接到紅移簇,從數據庫中獲取數據,將其寫入到一個數據幀(在dataframe
爲約600,000 rows x 6 columns
)。
其他程序也使用此數據框df
並執行大量計算,每個程序將其結果寫入pickle
文件中。
最終程序加載由5個程序創建的pickle
文件,進行一些計算以獲得約300,000個值,然後針對羣集中的另一個數據庫檢查它們以得到final file output
。
單獨運行每個程序需要花費數小時(有時一夜之間)。但是,我需要整個事情在一個小時內運行,並給我final output file
。
我試着把一個EC2實例上的程序看看性能是否提高,但它已經超過了3個小時,它仍在運行。我試過m4.xlarge
,c4.xlarge
,r4.xlarge
實例,但沒有一個是有用的。
有沒有辦法加快總運行時間?
也許我可以在單獨的EC2實例上運行5個程序的每一個,但是然後每個程序給出一個輸出文件,最終程序必須使用該文件。所以,如果我運行多個實例,每個程序的輸出文件將保存在不同的服務器上,對吧?那麼最終的程序如何使用它們呢?我們可以將每個文件的輸出文件保存到最終程序可以訪問的公共位置嗎?
我聽說GPU比CPU快14倍,但是我從來沒有用過它們。在這種情況下,使用GPU實例會有幫助嗎?
對不起,我是新來的,但不知道如何去做。
休斯頓,我們有一個問題。 「*我聽說GPU比CPU快14倍......在這種情況下使用GPU實例會有什麼幫助嗎?*」**我聽說過,吹入水中的煙霧會產生黃金。這會有幫助嗎?**儘可能尊重,這是嚴肅的。在大型遠程託管的數據集上進行嚴重卷積的進程將永遠無法在SIMD/SMX GPU硬件上獲得合理的加速,以便將~12小時[SEQ]處理切換爲「*我需要整個事情在一個小時內運行** *」。是現實的,可以得到數量上的支持......連續複雜的加工存在問題(參考Amdahl法則) – user3666197
如果您的主體工藝沒有顯示工藝過程的99%以上[PAR]部分,對[SEQ]部分留下少於1%儘可能避免分佈式處理設置/拆卸開銷,即使使用無限數量的並行處理器,也無法獲得您所要求的約12倍的加速比。簡單的**收益遞減規律**解釋了爲什麼這永遠不會發生,甚至從來沒有**。 May **使用交互式可視化建模工具進行原型設計/驗證這些洞察,可用於縮放[SEQ] + [PAR]時間表:https://stackoverflow.com/a/46124635 – user3666197