On-device 생성형 AI 개발 체험기

On-device 생성형 AI. 현재 각광을 받고 있는 생성형 AI의 다음 세대 서비스로 각광을 받고 있는 아이템입니다.

오늘은 Qualcomm사에서 제공을 하고 있는 On-device 개발 프레임워크를 써보고 주목해야 할 점들과 앞으로 AP 제공업체들이 On-device AI app 개발자 에코시스템 활성화를 위해 제공해야 할 기능들에 대한 사항들을 정리해 보려 합니다.

micro chip

사용할 Use case와 Model

스마트폰에서 수행되는 On-device AI 실습을 위해 사용할 Use case는 image segmentation입니다.

Tesla

이미지 분할의 대표적인 예는 애플의 페이스 타임과 같은 영상 회의 소프트웨어에서 배경을 흐릿하게 처리하는 사용 예를 들 수 있습니다.

사용할 Model은 Qualcomm사가 제공하는 FFNet(Fuss free network)입니다. 모델은 ResNet을 기본으로 Encoder/Decoder구조를 가진 segmentation 속도에 중점을 둔 모델입니다.

본 포스팅의 목적은 segmentation이 어떤 방식으로 수행되는 지에 관련된 것이 아니라 HPC환경하에서 동작하는 생성형 AI 모델을 어떤 방식을 사용하여 on-device환경에서 수행하도록 하는 방법에 관한 것이므로 자세한 모델 study는 건너 뛰고 그냥 검증된 encoder/decoder 모델이다라는 정도만 생각하고 진행하도록 하겠습니다.

개발 환경 구축

Pytorch tensor

개발환경은 Qualcomm사에서 제공하는 Python package를 사용해야 합니다.

pip install "qai-hub-models[ffnet_40s]"

아울러 Qualcomm사에서 제공하는 toolchain을 사용하기 위해 별도의 API_KEY를 발급받아야 하며 이를 위해서는 Qualcomm사의 개발자 portal에 사용자 등록을 해야 합니다.

(이와는 별도로 Deeplearnling.ai사에서 제공하는 별도의 on-line class를 수강하면 원격으로 사용이 가능한 파이썬 노트북이 제공됩니다.)

On-device 생성형 AI 이식 절차

Samsung Galaxy

아래는 스마트폰에 생성형 AI를 이식하는 일반적인 절차입니다.

퀄컴사에서 제공하는 인프라 스트럭쳐를 사용하였기 때문에 툴 사용 측면에서는 다른 NPU제공 회사와 다를 수 있습니다. (만약에 퀄컴의 경쟁사들도 이와 비슷한 소프트웨어 개발 환경을 제공해 준다면요.)

트레이닝 된 모델 캡쳐하기

Pytorch에서 제공해 주는 jit.trace 메서드를 사용합니다.

PyTorch의 jit.trace는 모델을 최적화하고 배포하는 데 매우 유용한 도구입니다.

jit.trace는 주어진 입력으로 모델을 한 번 실행하면서 연산 그래프를 추적하여 연산결과를 바탕으로 정적 그래프를 생성합니다. 이렇게 생성된 그래프는 TorchScript 형태로 변환합니다.

traced_model = torch.jit.trace(ffnet_40s, example_inputs)

위에서는 예제로 사용되는 FFNet_40s 모델을 사용하며 정적그래프 생성을 위하여 임의의 값으로 input값을 줍니다. 플랫폼에 독립적이지 않은 일반 서버에서 실행하여 결과를 얻습니다.

디바이스용으로 컴파일하기

퀄컴에서 제공되는 qai_hub 패키지 소프트웨어를 사용합니다. 생성을 하는 방법은 아래와 같습니다.

compile_job = qai_hub.submit_compile_job(
    model=traced_model,                        # Traced PyTorch model
    input_specs={"image": input_shape},        # Input specification
    device=device,                             # Device
)

target_model = compile_job.get_target_model()

지원되는 모든 device들은 퀄컴의 Snapdragon이 탑재된 device 들이어야 합니다. 실제로 퀄컴사는 개발자 허브를 통하여 on-device AI를 porting할 수 있는 개발 툴들과 device들을 simulation해 줄 수 있는 실행환경을 클라우드의 형태로 제공합니다.

디바이스 탑재용 모델 다운로드하기

target_model = compile_job.get_target_model()
_ = target_model.download("FFNet_40s.tflite")

위의 download 메서드를 사용하게 되면 실제로 device에 배포 가능한 tflite파일을 download 할 수 있습니다. .tflite는 TensorFlow Lite 모델 파일의 확장자이며 Google에서 개발한 모바일 및 임베디드 기기를 위한 경량화된 머신러닝 프레임워크입니다. 따라서 device에서는 TensorFlow lite가 실행 가능한 환경이어야 합니다.

On-device 생성형 AI – 추가적으로 고려해야 할 요소

이상으로 On-devie AI모델을 일반적인 휴대폰에서 실행 가능한 소프트웨어로 변환하는 일반적인 과정을 알아보았습니다.

그 외에 추가적으로 고려해야 할 요소로는 해당 모델을 On-device AI용으로 변환했을때 실제로 동작할 수 있을정도의 성능을 낼 것인가를 판단해야 합니다.

주요한 성능 요소로는 모델이 추론을 하는데 걸리는 시간 (Inference time)과 사용된 메오리 피크치가 있을 수 있습니다. 수행시간은 On-device AI가 단말에서 수행하는 일의 실시간성에 중요한 영향을 끼칩니다.

만약 20ms단위로 입력되는 화면 프레임에대한 이미지 segmentation을 처리해야 한다면 위의 모델은 적합하지 않을 수 있습니다. 왜냐하면 위의 모델은 삼성 갤럭시 S24 Ultra위에서 한 번 수행에 걸리는 시간이 20.5 ms정도의 시간이 걸리기 때문입니다.

On-device 생성형 AI 활성화를 위해 AP 업체들이 제공해야 할 플랫폼적인 요소들

Software developer

실제로 On-device AI를 제작하기 위해서는 새로운 모델을 만드는 것이 아니라 기존 서버 플랫폼에서 검증된 모델을 이식하는 경우가 많을 것으로 생각됩니다.

서버의 Training/Inference환경은 대부분 Nvidia의 GPU로 가속되기 때문에 실제로 On-device에서 AI 프로그램이 동작하기 위해서는 이런 가속 솔루션이 On-device NPU에 종속적일 수 밖에 없습니다.

따라서 On-device 생성형 AI를 목표로 NPU를 제공하고 또한 이를 통해 다양한 개발자 그룹을 확보하기 원하는 기업에서는 개발자들이 쉽게 자신의 App을 개발할 수 있는 환경이 제공되어야 합니다.

대표적인 것으로는

  • 자신의 NPU환경에 맞는 compiler tool
    • Pytorch로 작성된 모델들이 있다 하더라도 이 Pytorch의 모델이 자사 NPU에서 원할히 수행되기 위해서는 자사 고유 NPU에 최적화된 실행 코드로의 변환이 필요합니다.
  • 다향한 simulation 환경
    • 일반적인 서버 환경에서는 모델의 제작과 실행환경이 같습니다.
    • 그러나 On-device의 경우 대부분이 임베디드 환경에서 실행되므로 다양한 AP/NPU조합을 검증해 줄 수 있는 simulation 환경을 제공해야 합니다.
  • 그 외 고려해야 할 것들
    • 수학연산의 크기를 줄여 줄 수 있는 양자화 툴들
    • 변환된 모델이 서버와 동일하게 동작함을 보여 줄 수 있는 검증 툴

마치며

퀄컴사에서 제공하는 개발 툴과 서비스를 사용하여 image segmentation에 사용되는 모델을 device에 porting 하는 일반적인 절차에 대해서 알아 보았습니다.

기본적으로 안드로이드 플랫폼과 TensorFlow lite환경하에서 inference에 최적화된 모델을 만듦으로써 다양한 어플리케이션들이 customized된 생성형 AI를 통신을 통해 클라우드에서 얻어 오는 것이 아니라 디바이스에서 직접 실행할 수 있는 가능성이 열리고 있습니다.

좀 더 다양한 On-device AI app들이 지원되기 위해서는 위에 언급된 개발 플랫폼요소들이 지원되어야 합니다. 아울러 이런 플랫폼 요소들은 NPU 제공사에 종속적일 수 밖에는 없습니다.

이런 제약사항을 해결하기 위한 개발/Simulation tool 개발 프로젝트가 Open source형태로 제공되면 많은 개발자 확보와 On-device 생성형 AI의 보급에 큰 도움이 되지 않을까 합니다.

감사합니다.

Similar Posts

Leave a Reply