이전 Windows Driver 시리즈에 이어서 실제 NPU를 컨트롤하는 windows driver를 만들예정이다. mcu와 하드웨어 가속기의 구조적 차이로 인해 실제 가속기 처럼 동작시키지는 못했다. 또한 usb를 활용했기때문에 PCIe 방식으로 구현해볼 예정이다.
[정품] 구글 코랄 Coral 미니 PCIe M.2 가속기 B/M G650-04686-01
위 제품을 구매하였다. USB 모델도 있었지만 PCIe Driver를 만들어보기 위해서 해당 제품을 구매했다.

코랄은 4 TOPS의 연산 능력(Int8 특화)을 가진다. 일반적인 CPU나 GPU가 부동소수점 연산을 주로 하는 것과 달리, Edge TPU는 모델 양자화를 통해 크기를 줄인 모델을 극도로 빠르게 처리한다. MobileNet V2 기준 400FPS로 실시간 영상 분석 시 지연 시간이 거의 느껴지지 않는 수준이다.
이전 사용한 Pico와 달리 Coral은 진짜 딥러닝 모델등을 PC급 환경에서 실시간으로 돌리기 위한 도구이다.
사용 중인 메인보드를 확인하기 위해서 win+r을 누르고 아래와 같이 입력해주면 알 수 있습니다.


사용 중인 메인보드 스펙을 인터넷에서 찾아 몇 개의 M.2 슬롯을 제공해 주는지 확인해 볼 수 있다. 더 자세히 확인해 보고 싶다면 HWiINFO64를 설치하면 된다.

3개의 M.2 슬롯을 사용하고 있고 모두 SSD로 활용중이다. 남은 슬롯은 그래픽카드가 가리고 있어 분리 후 장착해 주었다.

장치 관리자에서 정상적으로 인식된 것을 확인했다.
USB 처럼 당연히 virtual box로 Passthrough가 될줄 알았는데 PCIe의 경우 현재 버전에서 지원을 하지 않는다고 한다. virtual box 6.x.x 버전에서 삭제되었는데 지원하더라도 linux만 지원을 한다고 했다.
vmware도 알아봤는데 역시나 일반적으로는 Passthrough가 어렵다고 하였다. 결국 방법은 메인 PC에 Coral TPU를 장착하여 사용하고 노트북에서 개발하여 원격으로 디버깅하거나 Coral을 장착한 새로운 PC가 필요했다.
다행히 집에 남는 Desktop이 있어서 코랄을 옮겨서 설치해준 뒤, 개발 환경을 구축해주었다.
virtual box가 아닌 실제 pc에 원격으로 접속해야 하므로 원격 데스크톱을 설정해 주었다. tailscale을 설치해 줘서 외부에서 원격으로 접속할 수 있도록 설정해 주었다. 노트북으로 카페나 외부에서 안전하게 접속할 수 있다. virtual box를 사용할 때는 노트북으로 외부에서 접속하기 까다로워서 불편했지만 이제는 손쉽게 이용할 수 있을 것 같다. 집에서는 내부망이므로 더욱 손쉽게 접근할 수 있다.

https://www.coral.ai/docs/m2/get-started/#2-install-the-pcie-driver-and-edge-tpu-runtime
위 문서를 확인하면 ProductID가 089a인 것을 확인할 수 있다. 실제로 확인해 보면 다음과 같다.

역시 초기 세팅 및 환경설정이 개발의 절반이라는 게 맞는 말이다. Virtual Box에서 Passthrough가 되지 않아서 당황했지만 다행히 남는 pc가 있어서 무사히 세팅한 것 같다. Linux Driver는 OpenSource라서 참고하면서 KMDF로 DMA, ISR, DPC 등 여러 커널 드라이버 개발 방식을 배우며 만들어야겠다.