亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么帶有 Ryzen Threadripper 的 Numpy 比 Xeon 慢得多?

為什么帶有 Ryzen Threadripper 的 Numpy 比 Xeon 慢得多?

慕尼黑8549860 2023-02-22 15:12:15
我知道 Numpy 可以使用不同的后端,如 OpenBLAS 或 MKL。我還讀到 MKL 針對 Intel 進行了大量優化,所以通常人們建議在 AMD 上使用 OpenBLAS,對嗎?我使用以下測試代碼:import numpy as npdef testfunc(x):     np.random.seed(x)     X = np.random.randn(2000, 4000)     np.linalg.eigh(X @ X.T) %timeit testfunc(0)我已經使用不同的 CPU 測試了這段代碼:在Intel Xeon E5-1650 v3上,此代碼使用12 個內核中的 6 個在0.7 秒內執行。在AMD Ryzen 5 2600上,此代碼使用所有 12 個內核在1.45 秒內執行。在AMD Ryzen Threadripper 3970X上,此代碼使用所有 64 個內核在1.55 秒內執行。我在所有三個系統上使用相同的 Conda 環境。根據np.show_config(),Intel 系統使用 Numpy ( libraries = ['mkl_rt', 'pthread']) 的 MKL 后端,而 AMD 系統使用 OpenBLAS ( libraries = ['openblas', 'openblas'])。CPU 內核使用情況是通過top在 Linux shell 中觀察來確定的:對于Intel Xeon E5-1650 v3 CPU(6 個物理內核),它顯示 12 個內核(6 個空閑)。對于AMD Ryzen 5 2600 CPU(6 個物理內核),它顯示 12 個內核(無空閑)。對于AMD Ryzen Threadripper 3970X CPU(32 個物理內核),它顯示 64 個內核(無空閑)。上述觀察結果引發了以下問題:這是否正常,使用 OpenBLAS 的最新 AMD CPU 上的線性代數比六年前的英特爾至強處理器慢得多?(也在更新 3 中解決)從對 CPU 負載的觀察來看,Numpy 似乎在所有三種情況下都利用了多核環境。Threadripper 怎么可能比 Ryzen 5 還要慢,盡管它的物理內核數量幾乎是 Ryzen 5 的六倍?(另見更新 3)有什么辦法可以加快 Threadripper 的計算速度嗎?(在更新 2 中部分回答)更新 1: OpenBLAS 版本為 0.3.6。testfunc我在某處讀到,升級到更新版本可能會有所幫助,但是,隨著 OpenBLAS 更新到 0.3.10,在 AMD Ryzen Threadripper 3970X 上的性能仍然是 1.55s。更新 2:將 Numpy 的 MKL 后端與環境變量結合使用MKL_DEBUG_CPU_TYPE=5(如此處所述)將 AMD Ryzen Threadripper 3970X 上的運行時間減少testfunc到僅 0.52 秒,這實際上或多或少令人滿意。FTR,通過在 Ubuntu 20.04 上設置此變量~/.profile對我不起作用。此外,從 Jupyter 中設置變量也不起作用。所以我~/.bashrc現在把它放到 which works 中。無論如何,比舊的 Intel Xeon 快 35%,這是我們所能得到的,還是我們能從中得到更多?更新 3:我研究 MKL/OpenBLAS 使用的線程數:運行時間以秒為單位報告。每列的最佳結果都帶有下劃線。我使用 OpenBLAS 0.3.6 進行此測試。本次測試得出的結論:使用 OpenBLAS 的 Threadripper 的單核性能比 Xeon 的單核性能好一點(快 11%),但是使用 MKL 時其單核性能甚至更好(快 34%)。使用 OpenBLAS 的 Threadripper 的多核性能比 Xeon 的多核性能差得離譜。這里發生了什么?當使用 MKL 時,Threadripper 的整體性能優于 Xeon (比 Xeon 快 26% 到 38%)。Threadripper 使用 16 個線程和 MKL(比 Xeon 快 36%)實現了整體最佳性能。
查看完整描述

3 回答

?
慕慕森

TA貢獻1856條經驗 獲得超17個贊

截至 2021 年,英特爾不幸刪除了MKL_DEBUG_CPU_TYPE防止 AMD 用戶使用已接受答案中提供的解決方法。這意味著解決方法不再有效,AMD 用戶必須切換到 OpenBLAS 或繼續使用 MKL。

要使用解決方法,請遵循以下方法

  1. 使用 和 NumPy 的 MKL=2019創建conda環境。conda

  2. 激活環境

  3. 設置MKL_DEBUG_CPU_TYPE= 5

上述步驟的命令:

  1. conda create -n my_env -c anaconda python numpy mkl=2019.* blas=*=*mkl

  2. conda activate my_env

  3. conda env config vars set MKL_DEBUG_CPU_TYPE=5

就是這樣!


查看完整回答
反對 回復 2023-02-22
?
藍山帝景

TA貢獻1843條經驗 獲得超7個贊

嘗試使用 AMD 優化的 BLIS 庫是否有意義?

也許我遺漏(誤解)了某些東西,但我認為您可以使用 BLIS 而不是 OpenBLAS。唯一的潛在問題可能是 AMD BLIS 針對 AMD EPYC 進行了優化(但您使用的是 Ryzen)。我對結果非常好奇,因為我正在為工作購買服務器,并且正在考慮 AMD EPYC 和 Intel Xeon。

以下是各自的 AMD BLIS 庫: https ://developer.amd.com/amd-aocl/


查看完整回答
反對 回復 2023-02-22
?
慕勒3428872

TA貢獻1848條經驗 獲得超6個贊

我認為這應該有所幫助:

“圖表中最好的結果是 TR 3960x 使用 MKL 和環境 var MKL_DEBUG_CPU_TYPE=5。它比單獨使用 MKL 的低優化代碼路徑要好得多。而且,OpenBLAS 幾乎和 MKL 一樣好 MKL_DEBUG_CPU_TYPE=5放?!?nbsp;https://www.pugetsystems.com/labs/hpc/How-To-Use-MKL-with-AMD-Ryzen-and-Threadripper-CPU-s-Effectively-for-Python-Numpy-And-Other-Applications- 1637/

如何設置: '通過在系統環境變量中輸入 MKL_DEBUG_CPU_TYPE=5 使設置永久化。這有幾個優點,其中之一是它適用于 Matlab 的所有實例,而不僅僅是使用 .bat 文件打開的實例' https://www.reddit.com/r/matlab/comments/dxn38s/howto_force_matlab_to_use_a_fast_codepath_on_amd/?排序=新


查看完整回答
反對 回復 2023-02-22
  • 3 回答
  • 0 關注
  • 462 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號