kondounagi / ai-edge-contest-4th

0 stars 0 forks source link

DPU timeoutエラー #9

Open Kotaro7750 opened 3 years ago

Kotaro7750 commented 3 years ago

Qiitaに書いてあるようにやって実機で動作させたところ,

Load image : ILSVRC2012_val_00000001.JPEG

Run DPU Task for ResNet50 ...
[DPU mode]
normal

[DPU timeout limitation (in seconds)]
20

[DPU Debug Info]
Core 0 schedule : 3
Core 0 interrupt: 3

[DPU Resource]
DPU Core    : 0
State       : Idle
PID         : 2861
TaskID      : 2861
Start       : 548890522784
End         : 548155570688

[DPU Core 0 Register]
CTL       : 0x00000001
GIE       : 0x00000001
IRQ       : 0x00000000
HP        : 0x07070f0f
CODE      : 0x0000000000060100
BASE0     : 0x0000000060300000
BASE1     : 0x0000000061c00000
BASE2     : 0x0000000000000000
BASE3     : 0x0000000000000000
BASE4     : 0x0000000000000000
BASE5     : 0x0000000000000000
BASE6     : 0x0000000000000000
BASE7     : 0x0000000000000000
CYCLE_H   : 0x00000000
CYCLE_L   : 0x00000000
REGVER    : 0x31016b02
TIMESTAMP : 0x13b12123
GITID     : 0x06aec4c8
GITTIME   : 0x71ea5221
VERSION   : 0x00000140
TIMER     : 0x00000000
ARCH      : 0x31240c0c
RAM       : 0x00001333
LOAD      : 0x00000102
CONV      : 0x00000111
SAVE      : 0x00000002
POOL      : 0x00000001
ELEW      : 0x00000001
DWCV      : 0x00000012
MISC      : 0x00000001
DPU STATUS: 0x00000000
AXI STATUS: 0x00455656
LOAD START: 1412
LOAD END  : 1410
SAVE START: 174
SAVE END  : 174
CONV START: 1217
CONV END  : 1217
MISC START: 89
MISC END  : 89

[DNNDK] DPU timeout while execute DPU Task:resnet50-0
kondounagi commented 3 years ago

C++ API Document

kondounagi commented 3 years ago

まず, dpuRunTask() の返り値を確認して,これが成功しているかを確認する.

kondounagi commented 3 years ago

runResnet50() の先頭で,

    assert(taskResnet50);

をしている.

int main(void) {
    /* DPU Kernel/Task for running ResNet50 */
    DPUKernel *kernelResnet50;
    DPUTask *taskResnet50;

    /* Attach to DPU driver and prepare for running */
    dpuOpen();

    /* Load DPU Kernel for ResNet50 */
    kernelResnet50 = dpuLoadKernel(KRENEL_RESNET50);

    /* Create DPU Task for ResNet50 */
    taskResnet50 = dpuCreateTask(kernelResnet50, 0);

    /* Run ResNet50 Task */
    runResnet50(taskResnet50);

    /* Destroy DPU Task & free resources */
    dpuDestroyTask(taskResnet50);

    /* Destroy DPU Kernel & free resources */
    dpuDestroyKernel(kernelResnet50);

    /* Dettach from DPU driver & free resources */
    dpuClose();

    return 0;
}
kondounagi commented 3 years ago
dpuCreateTask()
例
int dpuCreateTask
(
DPUKernel *kernel,
int mode
    );
引数
kernel
無効にする DPU カーネルへのポインター。
mode
DPU タスクの動作モードで、3 つのモードがある。
T_MODE_NORMAL
デフォルト モードで、モード値「0」と同じ。
T_MODE_PROF
DPU タスクの実行中にレイヤーごとにプロファイリング情報を生成する。これは性能分析に有効。
T_MODE_DEBUG
デバッグとして、DPU タスクの CODE/BIAS/WEIGHT/INPUT/OUTPUT の生データをレイヤーごとにダンプする。
説明
DPU カーネルから DPU タスクをインスタンシエートし、対応する DPU メモリ バッファーを割り当てる。

戻り値
成功した場合は 0、失敗した場合はエラーを報告する。

インクルード ファイル
n2cube.h

入力可能なインターフェイス
Vitis AI v1.0
kondounagi commented 3 years ago

おかしいな,dpuCreateTask()の借り値は成功したら0のはず,これはポインタじゃないね

Kotaro7750 commented 3 years ago
taskResnet50 is 0x55a270ff00

公式ドキュメントが間違っている.返り値はポインタ.

kondounagi commented 3 years ago

n2cube.py

def dpuRunTask(task):
    """
    Launch the running of DPU Task
    task:    DPU Task. This parameter should be gotten from the result of  dpuCreatTask()
    Returns: 0 on success, or negative value in case of any failure
    """
    return pyc_libn2cube.pyc_dpuRunTask(task)