강력한 그래프 시각화 도구인 Model Explorer를 공유하게 되어 기쁩니다. 자체 모델을 개발하든, 포맷 간에 모델을 변환하든, 특정 기기에 맞게 최적화하든, 성능과 품질을 디버깅하든, 모델 아키텍처와 노드 간에 데이터가 흐르는 방식을 시각화하는 기능은 매우 유용하게 사용될 수 있습니다. 가장 큰 그래프조차도 직관적이고 계층적으로 시각화할 수 있는 Model Explorer를 사용하면 특히 에지 기기에 맞춰 최적화할 때 개발자가 대규모 모델 작업의 복잡성을 극복할 수 있습니다.
이 글은 Google AI Edge 개발자 출시 정보를 다루는 시리즈의 세 번째 블로그 게시물입니다. 앞서 공개한 두 게시물에서는 PyTorch 모델과 고성능 LLM을 온디바이스에서 지원하는 AI Edge Torch와 Generative API를 소개했습니다.
원래 Google 연구원과 엔지니어를 위한 유틸리티로 개발된 Model Explorer는 이제 Google AI Edge 제품군의 일부로서 공식 출시됩니다. Model Explorer의 초기 버전은 다음 기능을 제공합니다.
이 블로그 게시물에서는 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 어댑터 확장 시스템 활용법을 알아보려면 여기를 클릭하세요.
# 모델 다운로드(이 예에서는 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를 실행하는 방법에 대해 자세히 알아보려면 여기를 방문하세요.
model_explorer
패키지는 파일 또는 PyTorch 모듈에서 모델을 시각화할 수 있는 편리한 API와 여러 소스의 모델을 시각화할 수 있는 로우 레벨 API를 제공합니다. 설치 가이드에 따라 먼저 이 API를 설치해야 합니다. 자세히 알아보려면 Model Explorer API 가이드를 참조하세요.
다음은 PyTorch 모델을 시각화하는 방법의 예입니다. PyTorch에는 표준 직렬화 형식이 없기 때문에 PyTorch 모델을 시각화하려면 다른 형식과는 조금 다른 접근 방식이 필요합니다. Model Explorer는 torch.export.export의 ExportedProgram을 사용하여 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의 계층적 뷰를 통해 더 쉽게 이해할 수 있습니다.
모델을 한 형식에서 다른 형식으로(예: PyTorch에서 TFLite로) 변환하는 것은 까다로울 수 있지만, Model Explorer를 사용하면 원본 그래프와 변환된 그래프를 나란히 놓고 비교할 수 있습니다. 이를 통해 모델의 성능에 영향을 미칠 수 있는 변경 사항을 쉽게 발견할 수 있습니다. 예를 들어, 아래 이미지에서 변환 중에 레이어 내의 하위 그래프가 어떻게 변경되었는지 알 수 있으므로 잠재적인 오류를 식별하고 수정하는 데 도움이 됩니다.
Model Explorer가 제공하는 강력한 기능은 그래프에 노드별 데이터를 오버레이하는 기능으로, 해당 데이터의 값을 사용해 노드를 정렬, 검색, 스타일 지정할 수 있습니다. Model Explorer의 계층 뷰 시스템과 함께 이 기능을 사용하면 성능 또는 숫자 병목 현상을 빠르게 파악할 수 있습니다. 아래 예에서는 양자화된 TFLite 모델과 그에 대한 부동 소수점 모델 간에 각 노드에서의 평균 제곱 오차를 보여줍니다. Model Explorer는 품질 저하가 그래프의 하단 근처에 있음을 강조 표시하여 양자화 방법을 조정하는 데 필요한 정보를 제공합니다. Model Explorer에서 사용자 지정 데이터로 작업하는 방법에 대한 자세한 내용은 Github에 있는 설명서를 확인해 보세요.
Google에서 Model Explorer를 가장 눈에 띄게 잘 사용하는 예로는 Waymo와 Google Silicon이 있습니다. Model Explorer는 이들 팀이 Gemini Nano와 같은 온디바이스 모델을 디버깅하고 최적화하는 데 결정적인 역할을 했습니다.
저희는 이것이 단지 시작에 불과하다고 봅니다. 앞으로 몇 달 동안 그래프 차이 및 편집과 같은 주요 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 팀에도 감사드립니다.