Model Explorer: 에지 기기용 ML 모델 간소화

6월 26, 2024
Kristen Wright Technical Program Manager
Eric Yang Software Engineer

강력한 그래프 시각화 도구인 Model Explorer를 공유하게 되어 기쁩니다. 자체 모델을 개발하든, 포맷 간에 모델을 변환하든, 특정 기기에 맞게 최적화하든, 성능과 품질을 디버깅하든, 모델 아키텍처와 노드 간에 데이터가 흐르는 방식을 시각화하는 기능은 매우 유용하게 사용될 수 있습니다. 가장 큰 그래프조차도 직관적이고 계층적으로 시각화할 수 있는 Model Explorer를 사용하면 특히 에지 기기에 맞춰 최적화할 때 개발자가 대규모 모델 작업의 복잡성을 극복할 수 있습니다.

이 글은 Google AI Edge 개발자 출시 정보를 다루는 시리즈의 세 번째 블로그 게시물입니다. 앞서 공개한 두 게시물에서는 PyTorch 모델과 고성능 LLM을 온디바이스에서 지원하는 AI Edge TorchGenerative API를 소개했습니다.

원래 Google 연구원과 엔지니어를 위한 유틸리티로 개발된 Model Explorer는 이제 Google AI Edge 제품군의 일부로서 공식 출시됩니다. Model Explorer의 초기 버전은 다음 기능을 제공합니다.

  • 수만 개의 노드를 포함하는 초대형 모델 그래프를 매끄럽게 60 FPS 환경에서 시각화

  • Colab 노트북에서 직접 실행

  • 사용자 지정 확장 프로그램을 통해 더 많은 모델 형식으로의 확장성

  • 메타데이터(예: 속성, 입력/출력 등) 및 사용자 설정 데이터(예: 성능)를 노드에 직접 오버레이

  • 나란히 배치된 그래프 비교를 위한 분할 창 뷰를 포함해 더 빠르게 작업을 수행할 수 있도록 설계된 강력한 UI 기능

이 블로그 게시물에서는 Model Explorer를 시작하는 방법과 몇 가지 아주 효과적인 사용 사례를 소개합니다. 자세한 설명서와 예시는 여기에서 확인하실 수 있습니다.


시작하기

Model Explorer의 설치하기 쉬운 PyPI 패키지는 기기, Colab 또는 Python 파일에서 로컬로 실행됩니다.


기기에서 로컬로 실행

$ pip install ai-edge-model-explorer
$ model-explorer
 
Starting Model Explorer server at http://localhost:8080

이러한 명령을 실행하면 localhost:8080에서 서버가 시작되고 브라우저 탭에서 Model Explorer 웹 앱이 열립니다. 명령줄 가이드에서 Model Explorer 명령줄 사용법에 대해 자세히 알아보세요.

로컬 호스트 서버가 실행되면 컴퓨터에서 모델 파일(지원되는 형식에는 JAX, PyTorch, TensorFlow, TensorFlow Lite에서 사용되는 형식이 포함)을 업로드하고 필요한 경우 ‘Adapter‘ 드롭다운 메뉴를 통해 모델에 가장 적합한 어댑터를 선택합니다. 지원되지 않는 모델 형식 시각화를 위해 Model Explorer 어댑터 확장 시스템 활용법을 알아보려면 여기를 클릭하세요.


Colab 노트북에서 실행

# 모델 다운로드(이 예에서는 Efficientdet TFLite 모델을 사용함)
import os
import tempfile
import urllib.request
 
tmp_path = tempfile.mkdtemp()
model_path = os.path.join(tmp_path, 'model.tflite')
urllib.request.urlretrieve("https://storage.googleapis.com/tfweb/model-graph-vis-v2-test-models/efficientdet.tflite", model_path)
 
# Model Explorer 설치
pip install ai-edge-model-explorer
 
# 다운로드한 EfficientDet 모델 시각화
import model_explorer
model_explorer.visualize(model_path)

셀을 실행하면 Model Explorer가 새 셀에 삽입된 iFrame에 표시됩니다. Chrome에서는 UI에 'Open in new tab' 버튼도 표시되는데, 이 버튼을 클릭하여 UI를 별도의 탭에 표시할 수 있습니다. Colab에서 Model Explorer를 실행하는 방법에 대해 자세히 알아보려면 여기를 방문하세요.

Visualize models via the Model Explorer API

Model Explorer API를 사용하여 비주얼라이저 열기

model_explorer 패키지는 파일 또는 PyTorch 모듈에서 모델을 시각화할 수 있는 편리한 API와 여러 소스의 모델을 시각화할 수 있는 로우 레벨 API를 제공합니다. 설치 가이드에 따라 먼저 이 API를 설치해야 합니다. 자세히 알아보려면 Model Explorer API 가이드를 참조하세요.

다음은 PyTorch 모델을 시각화하는 방법의 예입니다. PyTorch에는 표준 직렬화 형식이 없기 때문에 PyTorch 모델을 시각화하려면 다른 형식과는 조금 다른 접근 방식이 필요합니다. Model Explorer는 torch.export.exportExportedProgram을 사용하여 PyTorch 모델을 직접 시각화하는 특수 API를 제공합니다.

import model_explorer
import torch
import torchvision
 
# PyTorch 모델과 모델의 입력을 준비함
model = torchvision.models.mobilenet_v2().eval()
inputs = (torch.rand([1, 3, 224, 224]),)
ep = torch.export.export(model, inputs)
 
# 시각화
model_explorer.visualize_pytorch('mobilenet', exported_program=ep)

어떤 방식으로 모델을 시각화하든, 보이지 않는 곳에서 Model Explorer는 WebGL과 three.js로 GPU 가속 그래프 렌더링을 구현하고 수만 개의 노드가 포함된 그래프에서도 매끄러운 60 FPS 시각화 경험을 달성합니다. Model Explorer가 대형 그래프를 렌더링하는 방법에 대해 자세히 알아보려면 Google 연구팀 블로그에서 관련 내용을 읽어보세요.


모델 아키텍처 이해

대형 모델은 복잡할 수 있지만, Model Explorer를 사용하면 시각화를 계층 구조의 레이어로 나누어 더 쉽게 이해할 수 있습니다. 아래 그림의 MobileBert 모델을 살펴보세요. 셀프 어텐션 마스크와 삽입이 트랜스포머 레이어에 어떻게 공급되는지 분명히 알 수 있습니다. 삽입 레이어를 더 깊이 파고들어 살펴보면 다양한 유형의 삽입 간의 관계를 파악할 수도 있습니다. 아무리 복잡한 모델 아키텍처라도 Model Explorer의 계층적 뷰를 통해 더 쉽게 이해할 수 있습니다.

Model architecture
`self_attention_mask`, `embedding`, `transformer_layer` 등의 레이어 정보를 사용하면 모델 아키텍처를 쉽게 이해할 수 있습니다.

변환 오류 디버깅

모델을 한 형식에서 다른 형식으로(예: PyTorch에서 TFLite로) 변환하는 것은 까다로울 수 있지만, Model Explorer를 사용하면 원본 그래프와 변환된 그래프를 나란히 놓고 비교할 수 있습니다. 이를 통해 모델의 성능에 영향을 미칠 수 있는 변경 사항을 쉽게 발견할 수 있습니다. 예를 들어, 아래 이미지에서 변환 중에 레이어 내의 하위 그래프가 어떻게 변경되었는지 알 수 있으므로 잠재적인 오류를 식별하고 수정하는 데 도움이 됩니다.

A side-by-side comparison of the original PyTorch model (left) and the optimized TensorFlow Lite model (right)
원본 PyTorch 모델(왼쪽)과 최적화된 TensorFlow Lite 모델(오른쪽)을 나란히 비교할 수 있습니다. 이는 모델 그래프 변환을 디버깅할 때 유용합니다.

노드별 데이터 오버레이를 사용한 디버그 성능 및 수치 정확도

Model Explorer가 제공하는 강력한 기능은 그래프에 노드별 데이터를 오버레이하는 기능으로, 해당 데이터의 값을 사용해 노드를 정렬, 검색, 스타일 지정할 수 있습니다. Model Explorer의 계층 뷰 시스템과 함께 이 기능을 사용하면 성능 또는 숫자 병목 현상을 빠르게 파악할 수 있습니다. 아래 예에서는 양자화된 TFLite 모델과 그에 대한 부동 소수점 모델 간에 각 노드에서의 평균 제곱 오차를 보여줍니다. Model Explorer는 품질 저하가 그래프의 하단 근처에 있음을 강조 표시하여 양자화 방법을 조정하는 데 필요한 정보를 제공합니다. Model Explorer에서 사용자 지정 데이터로 작업하는 방법에 대한 자세한 내용은 Github에 있는 설명서를 확인해 보세요.

Per-node data overlay
사용자는 이 노드별 데이터 오버레이를 통해 모델 내의 성능 또는 숫자 문제를 신속하게 파악할 수 있습니다.

Google에서의 사용

Google에서 Model Explorer를 가장 눈에 띄게 잘 사용하는 예로는 Waymo와 Google Silicon이 있습니다. Model Explorer는 이들 팀이 Gemini Nano와 같은 온디바이스 모델을 디버깅하고 최적화하는 데 결정적인 역할을 했습니다.

Model Explorer...allows us to swiftly address bottlenecks, leading to the successful launch of multiple image, speech, and LLM use cases - especially the Gemini Nano on Pixel devices" - Dongdong Li - Pixel AI Experiences Lead

다음 단계

저희는 이것이 단지 시작에 불과하다고 봅니다. 앞으로 몇 달 동안 그래프 차이 및 편집과 같은 주요 UI 기능을 개선하여 핵심 기능을 강화하고 자체 도구를 Model Explorer에 통합할 수 있도록 하여 확장성을 개선하는 데 주력할 예정입니다.



감사의 말

이 작업은 Google의 여러 기능 팀이 힘을 합해 이루어졌습니다. 엔지니어 Na Li, Jing Jin, Eric (Yijie) Yang, Akshat Sharma, Chi Zeng, Jacques Pienaar, Chun-nien Chan, Jun Jiang, Matthew Soulanille, Arian Arfaian, Majid Dadashi, Renjie Wu, Zichuan Wei, Advait Jain, Ram Iyengar, Matthias Grundmann, Cormac Brick, Ruofei Du, 기술 프로그램 관리자 Kristen Wright, 제품 관리자 Aaron Karp에게 감사드립니다. Zi Yuan, Anila Alexander, Elaine Thai, Joe Moran, Amber Heinbockel을 포함한 UX 팀에도 감사드립니다.