【CSDN 編者按】在 AI 技術(shù)快速發(fā)展的今天,計算硬件的進步正成為推動 AI 應(yīng)用落地的關(guān)鍵力量之一。英特爾最新芯片搭載的神經(jīng)處理單元(NPU),以其高效的 AI 任務(wù)處理能力,為開發(fā)者帶來了全新的性能體驗。相較于傳統(tǒng)CPU,NPU 可以顯著提升AI 模型的運行速度,但具體能提升到什么程度呢?為了解答這個問題,本文作者通過實際測試和深入解析,最終確認:NPU 大概能帶來 15 倍的性能提升。
作者 | Sebastian Montabone 翻譯| 鄭麗媛出品 | CSDN(ID:CSDNnews)目前,英特爾最新的芯片配備了一個神經(jīng)處理單元(NPU),其設(shè)計目標是比普通 CPU 更高效地處理 AI 和機器學(xué)習(xí)任務(wù)。理論上來說,NPU 可以更快地運行 AI 工作負載,并且功耗更低這非常好,因為你可以將 CPU 釋放出來執(zhí)行其他通用任務(wù)。
但我想知道,與 CPU 相比,NPU 在運行模型時到底能快多少。根據(jù)我的測試結(jié)果:NPU 大概能帶來 15 倍的性能提升,這實在是令人驚訝。
如果你正在考慮購買一款帶有 NPU 的邊緣設(shè)備,我可以推薦 Khadas Mind 2 迷你 PC。它非常小巧,但性能強大,還配備了一個小型電池作為 UPS(不間斷電源),你可以隨意更換 USB 電源而不會斷電。好的,現(xiàn)在讓我們看看我是如何得出標題中提到的那個數(shù)字的。
在實時計算機視覺中,吞吐量和延遲是影響系統(tǒng)效率和響應(yīng)速度的兩個基本性能指標。吞吐量指的是每秒處理的幀數(shù)(FPS),決定了系統(tǒng)在一段時間內(nèi)能處理多少數(shù)據(jù),這基本上就是你問“處理這段視頻需要多長時間”時所指的內(nèi)容。另一方面,延遲是指從輸入到輸出處理單幀所需的時間,它會影響系統(tǒng)對新數(shù)據(jù)的響應(yīng)速度。在增強現(xiàn)實和自動駕駛等實時應(yīng)用中,低延遲至關(guān)重要。當(dāng)你操作一個系統(tǒng)時,如果感覺它“卡頓”,那就是因為它的延遲很高。通常來說,一般人都希望保持低延遲和高吞吐量。
接下來,假設(shè)你已經(jīng)在系統(tǒng)上安裝了 OpenVINO,且設(shè)備中有一個帶有 NPU 的英特爾芯片。如果你自己也不太確定,可以通過運行以下命令快速檢查這兩點是否屬實:
import openvino as ovcore = ov.Core()core.available_devices你應(yīng)該會看到類似 ['CPU', 'GPU', 'NPU'] 的回復(fù),這些是 OpenVINO 中可用的設(shè)備。如果你沒有看到你的設(shè)備,請確保你正確安裝了驅(qū)動程序,并在繼續(xù)之前進行故障排除。
接下來,我們需要一個模型。我將使用 ResNet-50,這是最著名的卷積神經(jīng)網(wǎng)絡(luò)架構(gòu)之一,由微軟在 2015 年的論文《Deep Residual Learning for Image Recognition》中首次被提出。該模型在 ImageNet-1K 數(shù)據(jù)集上以 224×224 的分辨率進行了訓(xùn)練,這意味著你可以輸入一張該尺寸的圖像,模型將預(yù)測 1000 個不同物體類別的概率。
經(jīng)過 OpenVINO 優(yōu)化的 ResNet-50,可以前往這個地址下載:https://huggingface.co/katuni4ka/resnet50_fp16/tree/main。只需下載這兩個文件:resnet50_fp16.xml 和 resnet50_fp16.bin,并將它們放在你的工作文件夾中。如果你想嘗試其他模型,也可以這樣做。請確保對你的模型運行 OpenVINO 優(yōu)化器以獲得最佳性能。我還將用 OpenCV 來加載和調(diào)整圖像大小,因此我們先安裝它,并確保 numpy 也已安裝:
pip install opencv-python numpy現(xiàn)在,讓我們用這個模型對圖像進行分類。將以下代碼寫入一個文件并保存為 classify.py:
import openvino as ovimport numpy as npimport cv2def classify_image(): # Step 1: Load OpenVINO model core = ov.Core() model = core.read_model("resnet50_fp16.xml") compiled_model = core.compile_model(model, "CPU") # Use "NPU" if available # Step 2: Get input tensor details input_layer = compiled_model.input(0) input_shape = input_layer.shape # Should be (1, 3, 224, 224) # Step 3: Load and preprocess image image = cv2.imread("input.jpg") image = cv2.resize(image, (224, 224)) # Resize to match model input image = image[:, :, ::-1] # Convert BGR to RGB (OpenCV loads as BGR) image = image.astype(np.float32) / 255.0 # Normalise to [0,1] image = np.transpose(image, (2, 0, 1)) # HWC to CHW image = np.expand_dims(image, axis=0) # Add batch dimension # Step 4: Run the inference output = compiled_model(image)[compiled_model.output(0)] # Step 5: Process the results top_class = np.argmax(output) # Get class index # Load ImageNet labels (remember to download the file) imagenet_labels = np.array([line.strip() for line in open("imagenet_classes.txt").readlines()]) # Display result print(f"Predicted Class: {imagenet_labels[top_class]}")if __name__ == "__main__": classify_image()確保在同一文件夾中有以下文件:classify.py、imagenet_classes.txt、resnet50_fp16.xml 和 resnet50_fp16.bin。然后添加任何圖像并將其重命名為 input.jpg,之后只需調(diào)用腳本:
python classify.py你應(yīng)該能得到正確的預(yù)測類別,就像這樣:
現(xiàn)在我們已經(jīng)確認模型在 OpenVINO 上可以正常工作,接下來我們可以使用一個方便的工具benchmark_app,來對不同設(shè)備上的模型性能進行基準測試。這個工具可以幫助你快速檢查不同設(shè)備在運行不同模型時的性能表現(xiàn)。你可以通過以下命令調(diào)用它:
benchmark_app -m MODEL -d DEVICE -hint HINT為了進行全面的性能對比,我運行了以下四條命令:
benchmark_app -m "resnet50_fp16.xml" -d CPU -hint latencybenchmark_app -m "resnet50_fp16.xml" -d CPU -hint throughputbenchmark_app -m "resnet50_fp16.xml" -d NPU -hint latencybenchmark_app -m "resnet50_fp16.xml" -d NPU -hint throughput以下是測試結(jié)果:
關(guān)鍵結(jié)論:
(1)在延遲模式下,NPU 的平均延遲為 1.70ms,相比 CPU 的 24.73ms,性能提升了約 15 倍。
(2)在吞吐量模式下,NPU達到了 936.05 FPS,相比 CPU 的 62.69 FPS,性能提升了約 15 倍。
這些結(jié)果清楚地表明,在延遲和吞吐量方面,英特爾的 NPU 相比 CPU 都有顯著的性能提升,特別是在這個特定的 ResNet-50 模型中,性能提升了大約 15 倍。