我從事物理學作業,作為作業的一部分,我必須進行大量數值計算(“數值”),其中 90% 以上涉及大型矩陣的對角化。目前,我在 Python 中使用 NumPy/SciPy;特別是 numpy.linalg.eigh 或 scipy.sparse.linalg.eigsh 如果矩陣稀疏并且我不需要所有特征值/特征向量。我使用 PyCharm 和 Anaconda,從未想過這些例程是如何實作的,以及它們是否有效。
但是,我剛買了一臺帶有 M1 Pro 芯片的新 MacBook,我認為這是確保我所做的事情實際上得到優化的好時機!不幸的是,我對這些計算的“幕后”發生的事情知之甚少。
因此,我的問題是:如何安裝 Python 和 NumPy/SciPy,確保優化我需要的矩陣例程以充分利用我的計算機?具體來說,它們是在 Apple 芯片上本地運行并盡可能并行嗎?
對角化矩陣效率的小幅提升將對我的作業產生巨大的累積影響!
uj5u.com熱心網友回復:
M1 處理器是一個小型處理器,大多數 BLAS 實作對此類架構的支持都非常差。對于 LAPACK 實作來說更是如此。事實上,很難有效地支持大小處理器(這使得 BLAS/LAPACK 代碼更加復雜,而它們已經太復雜了),并且沒有主流 HPC 處理器使用這種架構。因此,使用某些方法可能會導致執行時間不穩定,有時執行時間會非常糟糕。話雖如此,M1 記憶體具有相當高的吞吐量,可以使某些 LAPACK 方法更快。
至于性能,你可以通過在 1024x1024 的矩陣上計算一個 BLAS gemm 來檢查 FLOP 效率,得到執行時間 T 和你的處理器 K 可以歸檔的 FLOPS,最后檢查效率E = ((2*1024**3)/T)/K。如果 E > 0.75。那么你的 BLAS 實作就很好了。對于 0.5-0.75 范圍內的 E,它不是很好。對于 E < 0.25 存在問題,您應該嘗試另一個 BLAS 實作
請注意,目前領先的 BLAS/LAPACK 實作是由 Intel 實作的 MKL,而 M1/ARM 處理器不支持 AFAIK(AFAIK 沒有計劃支持它)。Numpy 的默認 BLAS 后端通常是 OpenBLAS,它沒有針對 M1 的特定實作,并且導致執行非常糟糕。Accelerate/vecLib(Apple 制造/支持的 AFAIK)在 M1 處理器上的性能明顯優于 OpenBLAS,因此使用它當然是一個不錯的選擇(AFAIK 僅適用于 M1)。
OpenBLAS有一個相關的未解決問題,因此可以檢查實際使用的 BLAS 實作的性能。
簡而言之,測驗 Accelerate/vecLib 并檢查結果是否類似于 OpenBLAS 問題中提供的基準。您還可以測驗其他 BLAS 實作,例如已知可在各種架構上提供良好性能的 BLIS。對于 LAPACK,它有點復雜,因為只有少數實作可以在 M1 上實際運行(效率低下的 NetLib 實作通常是大多數系統默認使用的一種)。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/487629.html
