windows driver npu 진행상황

wangki·2026년 5월 13일

windows_driver_npu

목록 보기
3/11
post-thumbnail

windows driver를 계속해서 개발을 하고 있는데, 유의미한 추론 값이 나오고 나서 블로그를 정리해야지 하고 있었다. 너무나 어렵고 생각보다 프로젝트가 길어지고 있다. 그래서 지금부터는 만나는 문제에 대해서 조금씩 포스팅을 해보려고 한다.


진행 상황

전체적인 플로우는 완성이 된 것 같다. 대략적인 작업 단계는 다음과 같다.

  • contiguous allocate memory
  • input, output 등 필요한 메모리 할당 및 memcpy
  • tflite model bitstream patch
  • coral tpu pte mapping
  • 필요한 csr 초기화 및 세팅
  • param cache descriptor 제출
  • infer bitstream descriptor 제출
  • descriptor 제출에 대한 interrupt 처리, isr, dpc
  • 추론 데이터 확인하기 output buffer

중간중간에 더 많은 로직들이 필요하다. 오픈소스인 libedgetpu와 linux driver인 gasket을 참고를 많이 했다. 그리고 실제 windows driver인 coral.sys를 디컴파일링하여 ai agent에게 분석을 요청해 유의미한 값을 찾아내기도 하였다.

https://github.com/google-coral/libedgetpu
https://github.com/google/gasket-driver

특히 libedgetpu의 소스를 수정하여 필요한 로그를 찍어서 확인해 보고 싶은 상황이 있었다. 그러나 해당 소스는 관리를 하지 않는 상태였다.

따라서 README에 나온 방식으로 빌드가 되지 않았다. 따라서 fork를 떠서 필요한 내용을 수정해서 빌드를 진행했고, 그 과정에서 docker windows container, docker build, bazel 등 여러 도구를 활용하여 빌드에 성공했고 로그를 남길 수 있었다. 해당 내용도 포스팅을 할 예정이다. libedgetpu docker + bazel build


이슈

bitstream align 6bit

가장 크게 막혔던 부분은 bitstream align 문제였다. 이것을 해결하기 위해 일주일은 넘는 시간이 소요되었다. libedgetpu에서 bitstream을 patch한 모습과 개발 중인 npu_driver에서 bitstream을 patch 한 모습을 비교하기 위해 full dump를 로깅하였고 유의미한 차이점을 발견하였다. libedgetpu에서는 6bit를 남겨두고 오프셋 위치에 정확히 patch를 하는데 우리 소스에서는 6bit 부분을 오버라이트하여 패치하는 문제가 있었던 것이다. 이 부분을 해결하니 output va로 값이 쓰여지지 않는 문제만 빼고는 해결이 되었다. bitstream align 문제 해결

Descriptor struct size issue

가속기(하드웨어)에게 일을 시키기 위해서는 descriptor를 제출해야 한다.

typedef struct {
				UINT64 address;
				UINT64 size_in_bytes;
				UINT32 reserved;
			} HOST_QUEUE_DESC;

위처럼 사용하고 있었는데 libedgetpu 소스에는 size_in_bytes의 타입이 UINT64가 아닌 UINT32여서 변경해 주었다.

그 외에도 많은 이슈가 있었다. 관련 내용들은 포스팅을 할 예정이다.


현재 상황

간단하게 로그를 보면 정확한 추론 값을 얻지 못하는 것을 확인할 수 있다.

얼굴 인식 모델이므로 박스 좌표 값을 얻어와야 한다. 위 내용을 해결하기 위해서 디버깅 및 시간을 투자해야 할 것 같다.


결론

완벽하지는 않지만 그래도 많은 진척이 있는 것 같다. 완벽히 이해를 했다기보다는 이제 좀 driver에 친숙해졌다? 라는 느낌이다. 빨리 정확한 추론 값을 얻어서 어플리케이션단에서 실시간으로 얼굴을 추론해 블러 처리하는 기능을 구현하고 싶다.

화이팅!

0개의 댓글