@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 のデータに変換。