windows driver npu infer garbage output

wangki·2026년 5월 14일

windows_driver_npu

목록 보기
4/11

개발을 진행하며 문제가 발생했다. param cache와 infer descriptor를 정상적으로 submit 한다고 생각했는데 기존 libedgetpu처럼 정상적으로 추론이 되지 않고 garbage 값이 나오는 현상이 있다.


추론 값

위 사진은 추론 값이다. 이전에 발생했던 infeed fault 나 outfeed fault같은 에러가 발생하지 않았고 정상적으로 chip이 dma 방식으로 output buffer에 값을 적어준 것 을 확인할 수 있다.

일단 Squeeze1convert_scoresSSD(SingleShot Multibox Dector계열의 객체 인식 모델에서 포스트 프로세싱 단계 직전의 raw data 상태일 때의 이름이다.

  1. Sqeeuze1 (Bounding Box Locations)
    모델이 예측한 각 Anchor Box들이 실제 객체의 위치에 맞게 수정된 좌표값이다.
  2. convert_scores (Classification Scores)
    이 텐서는 각 후보 박스가 특정 클래스(사물 종류)일 확률을 담고 있다.

가설 검증

param data를 chip이 읽지 않는지 검증하기 위해서 pte에 mapping된 param buffer를 0으로 채운 뒤, 추론을 돌려보았다.

memset(pParamData, 0x00, model.parameters.size());          // weight 를 전부 0 으로
memset(pExe0ParamData, 0x00, model.exe0_parameters.size()); // exe0 보조도 0

output buffer의 값이 변경된 것을 확인할 수 있다. 결론적으로 chip이 cache된 parameters 값을 참조하고 있다고 생각할 수 있다.


Sqeeuze1 정상인지 검사

python으로 해당 raw 데이터를 box 좌표로 변환해서 실제로 동일한 이미지 사진에 정상적으로 그려지는지 검증을 해보려고 한다. 하나씩 변수를 제거해나가는 부분이 이 작업의 매력인 것 같다. claude code를 적극적으로 사용하고 있다.

테스트 결과 아래와 같이 나왔다.

현재 Squeeze1값도 비정상이라는 것을 확인할 수 있다.


결론

chip이 비정상적인 추론 결과를 output buffer에 넣어준 거라고 봐야한다. 무엇이 잘못되었는지 좀 더 확인해 봐야겠다...

0개의 댓글