Product & Environment
| 항목 | 값 |
|---|---|
| Product | MLA100 MXM (Aries chip), PCIe Gen4 x8, 단일 디바이스 |
| Runtime Version | qbruntime aries2-v4 v1.3.2 |
| Compiler Version | qbcompiler v1.2.0 |
| Driver Version | Aries 1.13.0 |
| OS | Ubuntu, kernel 5.15.0-139-generic |
Description
-
1920x1080x3 입출력 모델에 레퍼런스 성능이나 런타임 최적화 가이드가 있는지, 그 밖에 고해상도 입력 모델에 권장하는 컴파일 옵션이나 설계 가이드가 있습니까?
→ 하드웨어 친화적인 채널 수 / 커널 크기, downsampling 시점, skip connection 처리 방식 등의 방법이 있다면 확인하고자 합니다.
→ 테스트 중인 모델(int8)을 아래 조건으로 돌려 FHD 입력 기준 6.31 fps 수준입니다.항목 값 core_mode global8 pipeline async threads 4개 (워커 2 + 입력/출력 호스트 각 1) 처리량 6.31 fps -
인코더가 3가지 스케일(1080x1920 / 540x960 / 270x480)에 대해
base_channel × 1 / × 2 / × 4채널을 가지는 구조인데,base_channel을 줄여가며 측정한 결과입니다.base_channel 단계별 채널 (×1 / ×2 / ×4) NPU latency 변화 32 (기준) 32 / 64 / 128 — 24 24 / 48 / 96 거의 없음 16 16 / 32 / 64 약 -8% 채널을 절반(32→16)으로 줄였는데도 감소폭이 -8% 정도로 거의 차이가 없는 것을 확인했습니다.
-
컴파일된 모델 구조를
mblt-mxqtool show로 확인해 본 결과구분 Original Shape Reshaped Shape Shape 입력 [1080, 1920, 3][1080, 1920, 3][1080, 1920, 64]출력 [1080, 1920, 3][1080, 92, 63][1080, 92, 64]입력은 채널을 64로 올림하는 방식이고, 출력은 값을 63개씩 묶어(92묶음) 64로 패딩? 변환?하는 것으로 보입니다. 하드웨어 내 데이터를 정렬하는 규칙이 텐서의 역할(입력/hidden/출력)이나 shape 에 따라 달라지는지 궁금합니다. 고정된 크기로 설정되는 거라면, 단위를 32 등으로 줄이는 컴파일 옵션이나 조건이 있습니까?
-
mblt-mxqtool은 입출력 경계만 보여주는데, MBLT Netron에서 보이는 입출력 쉐입과 어떤 차이가 있는지도 궁금합니다. -
Aries 칩의 실제 대역폭을 어느 정도로 생각하면 될지도 궁금합니다.
Logs & Attachments
# 테스트 모델 확인
$ mblt-mxqtool show deblur_xl.mxq
MXQ Version: 0x70000
Compiler Version: 1.2.0.0
Target Hardware: Aries2
Metadata #0:
Filepath: /tmp/mxq_rv9f78ty/model_meta0.bin
Size: 12126
BUNDLE #0:
Inference Scenario: Normal
Cores:
Single: 0x10001
Multi: 0x1fffe, 0x10001, 0x10002, 0x10003, 0x10004
Global4: 0x10001, 0x10002, 0x10003, 0x10004, 0x1fffe
Global8: 0x10001, 0x10002, 0x10003, 0x10004, 0x1fffe
0x20001, 0x20002, 0x20003, 0x20004, 0x2fffe
Input Section #0: (uniform scale, symmetric)
Name: x_0
IO Type: Normal
User DataType: Float32, Float16, Int8
NPU DataType: Int8
Original Shape: [1080, 1920, 3]
Reshaped Shape: [1080, 1920, 3]
Shape: [1080, 1920, 64]
Index (SeqLen): [-1, -1, -1]
Max Batch Data Size: 0
Output Section #0: (ch-wise scale, symmetric)
Name: add_52
IO Type: Normal
User DataType: Float32, Float16, Int8
NPU DataType: Int8
Original Shape: [1080, 1920, 3]
Reshaped Shape: [1080, 92, 63]
Shape: [1080, 92, 64]
Index (SeqLen): [-1, -1, -1]
Max Batch Data Size: 0
RMEM IDs:
RMEM ID #0:
Rmem Type: InputActivationOffset
ID: 0
Multiplier (SeqLen): 1.000000
Bias (SeqLen): 0.000000
RMEM ID #1:
Rmem Type: OutputActivationOffset
ID: 1
Multiplier (SeqLen): 1.000000
Bias (SeqLen): 0.000000
Cache Designations: (size = 0)
Section Binaries: (size = 102)
# FHD 입력에 대한 테스트 결과 trace.json, 앞 3프레임은 warmup, 통계는 뒤 32개 기준, warmup이후 초반 2프레임 발췌
[
{"name":"reposition input","cat":"","ph":"B","pid":52595,"tid":52651,"ts":5543532197},
{"name":"scale input","cat":"","ph":"B","pid":52595,"tid":52651,"ts":5543532199},
{"name":"scale input","cat":"","ph":"E","pid":52595,"tid":52651,"ts":5543534675},
{"name":"reposition input","cat":"","ph":"E","pid":52595,"tid":52651,"ts":5543534688},
{"name":"copy to npu","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543535843},
{"name":"write device","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543535845},
{"name":"write device","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543538402},
{"name":"copy to npu","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543538403},
{"name":"lock core","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543538404},
{"name":"lock core","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543538410},
{"name":"init rmem","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543538412},
{"name":"update initstart rmem","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543538414},
{"name":"update initstart rmem","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543538420},
{"name":"init rmem","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543538420},
{"name":"copy npu binary","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543538421},
{"name":"write device","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543538422},
{"name":"write device","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543538424},
{"name":"write device","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543538426},
{"name":"write device","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543538428},
{"name":"copy npu binary","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543538429},
{"name":"run npu","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543538429},
{"name":"wait core","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543538433},
{"name":"reposition input","cat":"","ph":"B","pid":52595,"tid":52651,"ts":5543572413},
{"name":"scale input","cat":"","ph":"B","pid":52595,"tid":52651,"ts":5543572415},
{"name":"scale input","cat":"","ph":"E","pid":52595,"tid":52651,"ts":5543573549},
{"name":"reposition input","cat":"","ph":"E","pid":52595,"tid":52651,"ts":5543573550},
{"name":"copy to npu","cat":"","ph":"B","pid":52595,"tid":52648,"ts":5543574375},
{"name":"write device","cat":"","ph":"B","pid":52595,"tid":52648,"ts":5543574377},
{"name":"write device","cat":"","ph":"E","pid":52595,"tid":52648,"ts":5543579352},
{"name":"copy to npu","cat":"","ph":"E","pid":52595,"tid":52648,"ts":5543579352},
{"name":"lock core","cat":"","ph":"B","pid":52595,"tid":52648,"ts":5543579353},
{"name":"wait core","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543696454},
{"name":"run npu","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543696459},
{"name":"unlock core","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543696487},
{"name":"unlock core","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543696496},
{"name":"copy from npu","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543696502},
{"name":"read device","cat":"","ph":"B","pid":52595,"tid":52647,"ts":5543696507},
{"name":"lock core","cat":"","ph":"E","pid":52595,"tid":52648,"ts":5543696517},
{"name":"init rmem","cat":"","ph":"B","pid":52595,"tid":52648,"ts":5543696526},
{"name":"write device","cat":"","ph":"B","pid":52595,"tid":52648,"ts":5543696540},
{"name":"write device","cat":"","ph":"E","pid":52595,"tid":52648,"ts":5543696563},
{"name":"write device","cat":"","ph":"B","pid":52595,"tid":52648,"ts":5543696566},
{"name":"write device","cat":"","ph":"E","pid":52595,"tid":52648,"ts":5543696570},
{"name":"init rmem","cat":"","ph":"E","pid":52595,"tid":52648,"ts":5543696571},
{"name":"run npu","cat":"","ph":"B","pid":52595,"tid":52648,"ts":5543696574},
{"name":"wait core","cat":"","ph":"B","pid":52595,"tid":52648,"ts":5543696590},
{"name":"read device","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543697760},
{"name":"copy from npu","cat":"","ph":"E","pid":52595,"tid":52647,"ts":5543697765},
{"name":"reposition output","cat":"","ph":"B","pid":52595,"tid":52652,"ts":5543697873},
{"name":"reposition acc output","cat":"","ph":"B","pid":52595,"tid":52652,"ts":5543697894},
{"name":"reposition acc output","cat":"","ph":"E","pid":52595,"tid":52652,"ts":5543705262},
{"name":"scale output","cat":"","ph":"B","pid":52595,"tid":52652,"ts":5543705268},
{"name":"scale output","cat":"","ph":"E","pid":52595,"tid":52652,"ts":5543711957},
{"name":"reposition output","cat":"","ph":"E","pid":52595,"tid":52652,"ts":5543711959}
]