2026年04月28日 研究日志¶
今日主题:研究学校发给我用的这台研究生电脑的NPU如何运行。
早就听说过神经网络计算单元NPU了,听说优势在于长时间的小模型推理,但手头的机器没这个东西(我个人笔记本Surface Notebook2已经是7年前买的了),今天发现学校配给我的笔记本有这玩意,赶紧试一试。
In [1]:
import onnxruntime as ort
print(ort.get_available_providers())
['DmlExecutionProvider', 'CPUExecutionProvider']
能用欸,这个DmlExecutionProvider就是NPU处理器了
In [2]:
import numpy as np
from PIL import Image
In [3]:
session = ort.InferenceSession(
"mobilenetv2-10.onnx",
providers = ["DmlExecutionProvider"]
)
搞个移动端版本的超轻量YOLO试试水。
In [12]:
img = Image.open("cat.jpg").resize((224, 224))
img = np.array(img).astype(np.float32) / 255.0
img = np.transpose(img, (2, 0, 1))
img = np.expand_dims(img, axis = 0)
In [13]:
inputs = {session.get_inputs()[0].name: img}
outputs = session.run(None, inputs)
In [14]:
print("output shape:", outputs[0].shape)
output shape: (1, 1000)
能行欸,至少能跑。
试试速度好了
In [7]:
import time
x = np.random.randn(1, 3, 224, 224).astype(np.float32)
def benchmark(provider):
session = ort.InferenceSession(
"mobilenetv2-10.onnx",
providers = [provider]
)
inputs = {session.get_inputs()[0].name: x}
session.run(None, inputs)
t0 = time.time()
for _ in range(100):
session.run(None, inputs)
t1 = time.time()
print(provider, "time: ", t1 - t0, "s")
benchmark("CPUExecutionProvider")
benchmark("DmlExecutionProvider")
CPUExecutionProvider time: 0.5689356327056885 s DmlExecutionProvider time: 0.961871862411499 s
哇……CPU(AMD Ryzen 5 PRO 230 w/ Radeon 760M Graphics)速度更快……这玩意的优势就是能耗更低吗?说真的,我对硬件也不了解。就先这样吧,我还有科研工作要做呢,以后在琢磨吧,今天就到此为止了,以后有时间zai