Qualcomm의 ML쪽 SDK가 몇 있는데...
SNPE (Snapdragon Neural Processing Engine)와 OpenCL ML SDK가 있습니다.
전자는 GPU + DSP조합으로 Inference(흔히 AI모델을 돌린다고 하는 것)에 특화된 라이브러리 입니다. TensorFlow등의 DNN프레임워크로 모델을 만들어서 SNPE추론 엔진에 입력하면, 알아서 CPU, GPU, DSP(NPU)에서 동작가능한 연산을 분리하여 inference를 진행하고 최종 결과값만 받습니다.
GEMM등에 ASIC과 같은 DSP(NPU)를 사용하기에 (지원하는 연산에 한하여) 높은 성능과 전성비를 갖지만, 서드파티 개발자가 수정할 수 있는 요소가 적고, 지원하는 DNN Layer의 수가 적습니다.
Nvidia의 TensorRT에 대응됩니다.
후자는 OpenCL ML SDK인데... GPGPU프레임워크인 OpenCL의 extension으로 구현하여 GPU만 사용하는 라이브러리 입니다. Nvidia의 cudnn의 위치인데 2.0버전 까지는 Inference만 지원했습니다.
그런데 뜬금없이 이번에 2.1버전으로 올라오면서 Inference뿐만 아니라 Training도 지원합니다 !!?!?
일반적으로 DNN의 Training은 Forward (Inference와 동일연산) -> Backward (Gradient계산) -> Update (Optimizer적용) 의 3단계로 이루어지며, Inference대비 연산량은 최소 2배 이상, 메모리는 4~5배 많이 사용합니다.
그래서 대부분의 앱들은 모델 자체는 워크스테이션이나 서버에서 Training을 진행하고 결과인 가중치만 모바일로 옮겨서 서비스(Inference) 하는게 일반적인데 뜬근없이 Training을 지원하는군요.
어디 I 뭐시기 회사처럼.... 외장 GPU시장에 진출하는것도 아니고, 서버 사업부는 첫 제품 수주까지 받고 토사구팽 당했는데...
1. (대부분의 앱 개발자는) Android에서 비슷한 기능을 제공하는 wrapper인 NNAPI를 사용.
2. 그나마 성능이 더 필요하면 서비스 타겟을 스냅드래곤 AP탑재기로 한정하여 SNPE까지는 어플리케이션에 고려할 만함.
3. 애초에 OpenCL로 바닥부터 모델을 짜서 DNN응용프로그램을 만들 수 있는곳은 매우 소수, AI 산업+학계 전체로 봐도 "연구"에 해당하는 작업. (이전 KT Nvidia잡는다고 웃음주던 기사에 언급된 모레 라는 업체가 원래 이거를 전문으로 합니다.)
4. 모바일 수준의 컴퓨팅 리소스로는 Training을 한다는 것이 시기상조인 규모...
어디를 봐도 대체 왜??? 라는 생각이 들더군요. 그리고 결정적으로....
5. 현재 OpenCL ML SDK가 대부분의 스냅드래곤 AP를 탑재한 상용/개발보드 에서 사용이 불가. (퀄컴측 담당자가 고치겠다고만 해서 대여섯번은 메일로 쪼은 것 같습니다. )
결국.... "F1 레이싱 카 차체에 경운기 엔진을 달았는데.... 키가 없어서 시동도 한 번 못 거는 상황..." 입니다.
하....퀄컴이 팹리스 반도체회사 매출 순위 1위 이면 뭐하나요.... 제대로 돌아가는게 없는데(...)
절대 이 글은 뭣좀 해보겠다고 삽질하다 빡친 대학원생이 쓴 글이 아닙니다.