Vengineerの妄想(準備期間)

人生は短いけど、長いです。人生を楽しみましょう!

Alveo U250で、ResNet50の推論が 2000 FPS

@Vengineerの戯言 : Twitter
SystemVerilogの世界へようこそすべては、SystemC v0.9公開から始まった 

記録のために、

Alveo U250で、ResNet50の推論が

Max FPS : 2000

ImageNet Accuracy : 65% Top-1 / 85% Top-5

Min Latency : 2 ms

Power @ Max FPS : 70W

Power @ Min Latency : 40W
xilinx.github.io

コードは、こんな感じっぽい(引用です)

import pynq

ol=pynq.Overlay("resnet50.xclbin")
accelerator=ol.resnet50_1

ここまででFPGAコンフィギュレーション用データの書き換え

accelerator がモデル

 

fcbuf = pynq.allocate((1000,2048), dtype=np.int8, target=ol.bank0)
fcbuf[:] = fcweights
fcbuf.sync_to_device()

PYNQ内のメモリの割り当て(DDRのBank-0)とFCの重みをPYNQ内のメモリにコピー

 

inbuf = pynq.allocate((224,224,3), dtype=np.int8, target=ol.bank0)
outbuf = pynq.allocate((5,), dtype=np.uint32, target=ol.bank0)

inbuf[:] = img
inbuf.sync_to_device()

(224, 224, 3) の入力データ用に PYNQ内のメモリの割り当て(DDRのBank-0)と入力データ(img)をPYNQ内のメモリにコピー

 

accelerator.call(inbuf, outbuf, fcbuf, 1)

入力データ(inbuf)、FCの重み(fcbuf)、出力データ(outbuf)、バッチ数(1)で、モデル (accelerator) で実行。

 

outbuf.sync_from_device()
results = np.copy(outbuf)

出力データ(DDRのBank-0)を PYNQ内のメモリからコピーして、numpy のデータに変換。