Among-Device AI를 위한 NNStreamer Pipeline 프레임워크의 확장

October 30, 2023 정재윤 외 4명 조회수 1,748

이 글은 ICSE 2022에 출간된 “Toward Among-Device AI from On-Device AI with Stream Pipelines”[1] 논문에서 소개한 Device 간의 연결을 통한 AI Service 기능*에 대해 설명합니다.

들어가며

최근 심층 신경망(Deep Neural Network)을 포함한 인공지능 서비스(Intelligence Service)를 탑재한 전자 제품을 쉽게 볼 수 있습니다. 클라우드 서버 기반의 전통적인 인공지능 서비스가 아닌 개별 사용자 기기 기반의 인공지능 서비스(On-Device AI)가 점차 늘어나고 있습니다.


On-Device AI 시스템은 사용자 개인정보를 보존하기 쉽고, 통신에 의한 지연 시간을 제거하며, 다수의 이용자에 의한 과도한 클라우드 비용을 줄이는 장점이 있고, 또 더 높은 전력 효율을 통한 탄소 배출량 저감에도 도움이 됩니다.


하지만 On-Device AI는 특정 장치의 제한된 컴퓨팅 리소스로 인해 제한되는 경우가 많습니다. 일반적으로 메모리 크기, 처리 능력 또는 에너지가 제한되어 있으며 데이터 가용성 또한 장치마다 다릅니다. 이처럼, On-Device AI는 해당 기기의 연산 능력이 상대적으로 작다는 점과 다양한 하드웨어 리소스와 기능을 지원하기에는 무리가 있다는 특성이 있고 이는 개발자에게 큰 고민을 안겨주었습니다.


이에 Samsung Research에서는 On-Device AI 시스템의 개발 비용과 하드웨어 자원을 절약하고 성능을 높이기 위해 On-Device AI 시스템에 Stream Pipeline Framework인 NNStreamer를 2019년부터 사용자 기기에 적용하기 시작했습니다.





저희는 삼성전자 제품의 On-Device AI뿐 아니라 다른 기업의 제품과 서비스에 사용될 수 있도록 생태계 기여를 위해 NXP, FaindersAI, Klleon, PrintNanny, Eyepop.ai, OpenNCC(*NNStreamer 사용을 공개적으로 언급하거나 NNStreamer Conference에서 발표한 업체만 표시함)를 포함한 여러 기업에서 NNStreamer를 AI 서비스 구현에 사용하며 함께 개발해 나갈 수 있도록 만들어왔습니다. 또한, 각 AI 서비스가 재배포 가능하고 Atomic하게 재구성될 수 있고, 기기 간 연결 및 공유가 가능하도록 만들고자 합니다.


이에 따라 'Among-Device AI'라는 새로운 요구를 만족하기 위해 서로 다른 기기 내에서 동작하는 NNStreamer 기반의 AI Pipeline끼리 연결되고, 제조사에 관계없이 광범위한 기기에 걸쳐 컴퓨팅 자원과 하드웨어 역량을 공유할 수 있도록 개발하였습니다.


NNStreamer가 장치 간 AI 기능을 제공할 수 있도록 개발된 스트림 파이프라인 프레임워크인 ‘확장 NNStreamer’은 NNStreamer-Edge를 통한 Pipeline 간 연결 그리고 Device용 MLOps를 제공하는 Machine Learning Service를 포함합니다.


*이 기능은 타이젠 7.0부터 Machine Learning Domain에 포함되었으며, NNStreamer는 리눅스 재단(LF AI & Data) 오픈소스 프로젝트 [2]로, 누구나 참여할 수 있습니다.  https://github.com/nnstreamer/nnstreamer 

NNStreamer-Edge








NNStreamer-Edge는 Pub/Sub/Query 기능을 가진 NNStreamer Pipeline 혹은 Edge Device와 연결하기에 가볍고 이식성이 높은 라이브러리입니다. NNStreamer-Edge는 메인 프로젝트인 NNStreamer와 그 기반인 GStreamer[3]로부터 독립된 오픈소스 소프트웨어 패키지로서, GStreamer를 포함한 무거운 운영체제를 감당할 수 없는 기기들이 NNStreamer-Edge를 쉽게 사용할 수 있도록 그리고 NNStreamer나 GStreamer에 의존하지 않도록 설계되었습니다.


NNStreamer-Edge는 다른 SW에 최소한의 종속성을 가지며, 목적에 관계없이 누구나 NNStreamer-Edge로 자신의 소프트웨어를 구현할 수 있습니다. 예를 들어, Third-party 개발자들이 자신의 MediaPipe Pipeline이 NNStreamer Pipeline과 통신할 수 있도록 NNStreamer-Edge로 MediaPipe[4] Plugin을 비공개 SW로 구현할 수도 있습니다. DeepStream[5] Pipeline은 DeepStream과 NNStreamer 모두 GStreamer를 기반으로 하기 때문에 NNStreamer 파이프라인에 쉽게 연결될 수 있으며, GStreamer Community에서도 이들 간 연결에 대한 표준안을 논하고 있습니다.



Figure 1. NNStreamer-Edge 사용 시나리오


Fig.1은 다양한 NNStreamer-Edge 시나리오를 보여줍니다. NNStreamer에서 제공하는 Pipeline Element인 tensor_query는 원격 추론 기능을 제공합니다. Tensor_query는 다른 파이프라인으로 전처리된 텐서 스트림을 보내고 그 추론 결과를 수신하는 AI Offloading 기능을 제공하는 필터입니다. NNStreamer-Edge는 파이프라인 또는 Edge Device 간의 연결을 위해 다양한 방법(Publish, Subscribe, Query)을 지원합니다.

Machine Learning Service

당사의 휴대폰, 웨어러블, TV, 가전을 포함한 다양한 기기에 사용되고 당사 내외의 다양한 시제품에도 사용되면서 다음과 같은 교훈을 얻었고, 앞으로 필요한 새로운 기능에 대해 생각해 볼 수 있었습니다.


많은 사용자들이 Pipe-and-Filter Architecture를 채택하는 것에 대해 장벽을 느끼는 것으로 보였습니다. 초기 프로토타입을 구현하거나 사용자를 위해 Pair Programming을 함께 하는 과정에서 사용자들이 Pipeline 개념을 채택하고 Pipeline Topology를 표현하기 위해서는 저희가 예상했던 것보다 훨씬 힘든 Learning Curve를 보이는 것을 확인할 수 있었습니다. 그래서 저희는 Pipeline 개념을 더 쉽게 이해하고 채택할 수 있도록 사용자를 위해 더 다양한 파이프라인 예제와 문서를 작성하고 있습니다. 또한, Pipeline Topology를 보다 쉽게 표현하기 위해 Pipeline 편집기를 구현하거나 다른 편집기를 통해 NNStreamer Pipeline을 표현할 수 있도록 만들 계획을 가지고 있습니다.


또한 다양한 채널(Slack, Github Issues, Linux Foundation Mailing List, Conference)에서 기술적인 질문과 토의를 진행했습니다. NNStreamer 커뮤니티와의 커뮤니케이션을 통해 사용자들이 사용상의 어려움을 상당히 완화할 수 있습니다. 그러나, 유사 사용 사례가 있고 NNStreamer 개발자들이 도와줄 수 있음에도 불구하고 종종 사용자들이 부적절한 형태의 NNStreamer Pipeline들을 꾸준히 만들고 때로는 공개하기도 하였습니다. 아직도 많은 AI 개발자들에게 AI 추론 실행을 위한 Pipeline Paradigm의 적용은 초기 단계라는 점을 고려하면 이 문제는 심각할 수 있습니다.



Figure 2. Machine learning service overview


이에 따라 당사는 파이프라인 개발 및 배포 과정에 직접 개입하는 Machine Learning Service를 제안했습니다. 첫째, Pipeline(혹은, 그 일부인 Sub-pipeline) 공통부분을 사용자의 Pipeline에 의해 호출되거나 삽입될 수 있는 라이브러리로 제공할 필요가 있습니다. AI 애플리케이션의 Pipeline에는 공통으로 사용되는 부분이 많이 있습니다. 객체 검출을 위한 비디오 스트림 전처리가 그 예입니다. 이를 통해 파이프라인이 부적절하게 설계되는 경우도 일부분 예방할 수 있습니다.


둘째, 특별하지 않은, 일반적인 AI 기능을 사용하는 애플리케이션이 파이프라인을 직접 작성하지 않고도 그러한 파이프라인을 호출할 수 있도록 소프트웨어 플랫폼에 Pipeline(혹은 Sub-pipeline)을 준비하여 애플리케이션으로부터 분리될 수 있도록 합니다. 이는 일반적인 AI 애플리케이션을 위한 Pipeline 작성의 필요성을 제거할 뿐 아니라, 다른 애플리케이션 간에 Pipeline을 공유할 수 있게 합니다. 더욱이 제조사의 애플리케이션 개발 부서와 AI 개발 부서가 분리되어 있다면, 각자의 Code Repository와 Package도 명확하게 분리할 수 있도록 하여 개발 및 배포를 훨씬 효율적으로 운영할 수 있습니다.


이번 포스팅은 여기에서 줄입니다. 감사합니다.




출처

[1]  MyungJoo Ham, Sangjung Woo, Jaeyun Jung, Wook Song, Gichan Jang, Yongjoo Ahn, and Hyoung Joo Ahn. 2022. Toward Among-Device AI from On-Device AI with Stream Pipelines. In Proceedings of The 44th International Conference on Software Engineering (ICSE 2022).

[2]  NNStreamer. https://lfaidata.foundation/projects/nnstreamer.

[3]  GStreamer. https://gstreamer.freedesktop.org

[4]  Camillo Lugaresi, Jiuqiang Tang, Hadon Nash, Chris McClanahan, Esha Uboweja, Michael Hays, Fan Zhang, Chuo-Ling Chang, Ming Guang Yong, Juhyun Lee, et al. 2019. MediaPipe: A Framework for Building Perception Pipelines. arXiv preprint arXiv:1906.08172 (2019).

[5]  Nvidia. DeepStream SDK. https://developer.nvidia.com/deepstream-sdk

[6]  https://arxiv.org/abs/2201.06026

[7]  https://github.com/nnstreamer

[8]  https://nnstreamer.ai/

[9]  https://niklasjang.github.io/nnstreamer/Understanding-NNStreamer

[10]  https://research.samsung.com/blog/NNStreamer-2-0-and-Beyond

[11]  https://nnstreamer.github.io/edge-ai.html

[12]  https://semiconductor.samsung.com/news-events/tech-blog/on-the-edge-how-edge-ai-is-reshaping-the-future


저자

정재윤

Global AI센터(SR)

이메일 문의하기


함명주

SoC Architecture팀(SR)

이메일 문의하기


우상정

Global AI센터(SR)

이메일 문의하기


장기찬

Global AI센터(SR)

이메일 문의하기


안용주

Global AI센터(SR)

이메일 문의하기