Android용 LiteRT

LiteRT를 사용하면 Android 앱에서 TensorFlow, PyTorch, JAX 모델을 실행할 수 있습니다. LiteRT 시스템은 하드웨어 가속 옵션을 비롯하여 Android에서 모델을 빠르고 효율적으로 실행하기 위한 사전 빌드되고 맞춤설정 가능한 실행 환경을 제공합니다.

LiteRT를 사용하는 Android 애플리케이션의 예는 LiteRT 샘플 저장소를 참고하세요.

머신러닝 모델

LiteRT는 더 작고 휴대 가능하며 효율적인 머신러닝 모델 형식으로 변환된 TensorFlow, PyTorch, JAX 모델을 사용합니다. Android에서 LiteRT와 함께 사전 빌드된 모델을 사용하거나 자체 모델을 빌드하고 LiteRT 형식으로 변환할 수 있습니다.

이 페이지에서는 이미 빌드된 머신러닝 모델의 사용에 대해 설명하며 모델 빌드, 학습, 테스트 또는 변환은 다루지 않습니다. 모델 페이지에서 LiteRT용 머신러닝 모델 선택, 수정, 빌드, 변환에 대해 자세히 알아보세요.

Android에서 모델 실행

Android 앱 내에서 실행되는 LiteRT 모델은 데이터를 가져와 데이터를 처리하고 모델의 논리에 따라 예측을 생성합니다. LiteRT 모델을 실행하려면 특수 런타임 환경이 필요하며 모델에 전달되는 데이터는 텐서라는 특정 데이터 형식이어야 합니다. 모델이 데이터를 처리할 때(추론 실행) 새로운 텐서로 예측 결과를 생성하고 이를 Android 앱에 전달하여 사용자에게 결과를 표시하거나 추가 비즈니스 로직을 실행하는 등의 작업을 취할 수 있습니다.

Android 앱의 LiteRT 모델을 위한 기능 실행 흐름

그림 1. Android 앱의 LiteRT 모델을 위한 기능 실행 흐름

기능 설계 수준에서 Android 앱이 LiteRT 모델을 실행하려면 다음 요소가 필요합니다.

  • 모델 실행을 위한 LiteRT 런타임 환경
  • 데이터를 텐서로 변환하는 모델 입력 핸들러
  • 출력 결과 텐서를 수신하고 이를 예측 결과로 해석하는 모델 출력 핸들러

다음 섹션에서는 LiteRT 라이브러리와 도구가 이러한 기능 요소를 제공하는 방법을 설명합니다.

LiteRT로 앱 빌드

이 섹션에서는 Android 앱에서 LiteRT를 구현하는 데 권장되는 가장 일반적인 경로를 설명합니다. 런타임 환경개발 라이브러리 섹션에 가장 주의를 기울여야 합니다. 맞춤 모델을 개발한 경우 고급 개발 경로 섹션을 검토하세요.

런타임 환경 옵션

Android 앱에서 모델을 실행하기 위한 런타임 환경을 사용 설정하는 방법은 여러 가지가 있습니다. 다음은 권장되는 옵션입니다.

일반적으로 Google Play 서비스에서 제공하는 런타임 환경을 사용하는 것이 좋습니다. 이 환경은 동적으로 로드되므로 표준 환경보다 공간 효율성이 높아 앱 크기를 작게 유지할 수 있습니다. Google Play 서비스는 또한 LiteRT 런타임의 가장 최근의 안정화 버전을 자동으로 사용하여 시간이 지남에 따라 추가 기능과 향상된 성능을 제공합니다. Google Play 서비스가 포함되지 않은 기기에서 앱을 제공하거나 ML 런타임 환경을 세부적으로 관리해야 하는 경우 표준 LiteRT 런타임을 사용해야 합니다. 이 옵션은 앱에 추가 코드를 번들로 묶어 앱의 다운로드 크기를 늘리는 대신 앱에서 ML 런타임을 더 세부적으로 제어할 수 있도록 합니다.

앱 개발 환경에 LiteRT 개발 라이브러리를 추가하여 Android 앱에서 이러한 런타임 환경에 액세스합니다. 앱에서 표준 런타임 환경을 사용하는 방법에 관한 자세한 내용은 다음 섹션을 참고하세요.

라이브러리

Google Play 서비스를 사용하여 Interpreter API에 액세스할 수 있습니다. Android 앱에서 LiteRT coresupport 라이브러리를 사용할 수 있습니다. LiteRT 라이브러리 및 런타임 환경 사용에 관한 프로그래밍 세부정보는 Android 개발 도구를 참고하세요.

모델 획득

Android 앱에서 모델을 실행하려면 LiteRT 형식 모델이 필요합니다. 사전 빌드된 모델을 사용하거나 모델을 빌드하여 Lite 형식으로 변환할 수 있습니다. Android 앱용 모델을 획득하는 방법에 관한 자세한 내용은 LiteRT 모델 페이지를 참고하세요.

입력 데이터 처리

ML 모델에 전달하는 모든 데이터는 특정 데이터 구조가 있는 텐서여야 하며, 이를 텐서의 모양이라고 합니다. 모델로 데이터를 처리하려면 앱 코드가 이미지, 텍스트, 오디오 데이터와 같은 기본 형식을 모델에 필요한 모양의 텐서로 변환해야 합니다.

추론 실행

모델을 통해 데이터를 처리하여 예측 결과를 생성하는 것을 추론 실행이라고 합니다. Android 앱에서 추론을 실행하려면 LiteRT 런타임 환경, 모델, 입력 데이터가 필요합니다.

특정 기기에서 모델이 추론을 생성할 수 있는 속도는 처리된 데이터의 크기, 모델의 복잡성, 메모리 및 CPU와 같은 사용 가능한 컴퓨팅 리소스 또는 가속기라고 하는 특수 프로세서에 따라 달라집니다. 머신러닝 모델은 그래픽 처리 장치 (GPU) 및 텐서 처리 장치 (TPU)와 같은 특수 프로세서에서 대리자라고 하는 LiteRT 하드웨어 드라이버를 사용하여 더 빠르게 실행할 수 있습니다. 위임 및 모델 처리의 하드웨어 가속에 관한 자세한 내용은 하드웨어 가속 개요를 참고하세요.

출력 결과 처리

모델은 예측 결과를 텐서로 생성하며, Android 앱은 작업을 수행하거나 사용자에게 결과를 표시하여 이를 처리해야 합니다. 모델 출력 결과는 이미지 분류의 경우 단일 결과에 해당하는 숫자 (0 = 개, 1 = 고양이, 2 = 새)와 같이 간단할 수도 있고, 이미지에 분류된 여러 객체의 여러 경계 상자와 0~1 사이의 예측 신뢰도 등급과 같이 훨씬 더 복잡한 결과일 수도 있습니다.

고급 개발 경로

더 정교하고 맞춤설정된 LiteRT 모델을 사용하는 경우 위에서 설명한 것보다 더 고급 개발 접근 방식을 사용해야 할 수 있습니다. 다음 섹션에서는 Android 앱에서 모델을 실행하고 LiteRT용으로 모델을 개발하는 고급 기법을 설명합니다.

고급 런타임 환경

LiteRT의 표준 런타임 및 Google Play 서비스 런타임 환경 외에도 Android 앱에서 사용할 수 있는 추가 런타임 환경이 있습니다. 이러한 환경은 LiteRT의 표준 런타임 환경에서 지원하지 않는 ML 작업을 사용하는 머신러닝 모델이 있는 경우에 가장 유용합니다.

LiteRT 유연한 런타임을 사용하면 모델에 필요한 특정 연산자를 포함할 수 있습니다. 모델 실행을 위한 고급 옵션으로, Android용 LiteRT를 빌드하여 TensorFlow 머신러닝 모델을 실행하는 데 필요한 연산자와 기타 기능을 포함할 수 있습니다. 자세한 내용은 Android용 LiteRT 빌드를 참고하세요.

C 및 C++ API

LiteRT는 C 및 C++를 사용하여 모델을 실행하는 API도 제공합니다. 앱에서 Android NDK를 사용하는 경우 이 API를 사용하는 것이 좋습니다. 여러 플랫폼 간에 코드를 공유할 수 있도록 하려면 이 API를 사용하는 것이 좋습니다. 이 개발 옵션에 관한 자세한 내용은 개발 도구 페이지를 참고하세요.

서버 기반 모델 실행

일반적으로 앱에서 Android 기기로 모델을 실행하여 지연 시간을 줄이고 사용자 데이터 개인 정보 보호를 개선해야 합니다. 하지만 기기 외부의 클라우드 서버에서 모델을 실행하는 것이 더 나은 해결책인 경우도 있습니다. 예를 들어 사용자의 Android 기기에 맞는 크기로 쉽게 압축되지 않거나 해당 기기에서 적절한 성능으로 실행할 수 있는 대형 모델이 있는 경우입니다. 또한 다양한 기기에서 모델의 일관된 성능이 최우선인 경우 이 접근 방식이 선호하는 솔루션일 수 있습니다.

Google Cloud는 AI 모델을 실행하기 위한 전체 서비스를 제공합니다. 자세한 내용은 Google Cloud의 AI 및 머신러닝 제품 페이지를 참고하세요.

맞춤 모델 개발 및 최적화

고급 개발 경로에는 맞춤 머신러닝 모델 개발과 Android 기기에서 사용할 수 있도록 모델 최적화가 포함될 수 있습니다. 맞춤 모델을 빌드할 계획이라면 모델에 양자화 기술을 적용하여 메모리 및 처리 비용을 줄이는 것이 좋습니다. LiteRT에서 사용할 고성능 모델을 빌드하는 방법에 관한 자세한 내용은 모델 섹션의 성능 권장사항을 참고하세요.

지원되는 Android 버전

LiteRT 버전 상태 최소 SDK 수준 최소 NDK 버전 (사용된 경우) 출시일
v1.2.0 ⚠️ 지원 중단됨 21 (Android 5 Lollipop) r26a 2025-03-13
v1.3.0 ⚠️ 지원 중단됨 21 (Android 5 Lollipop) r26a 2025-05-19
v1.4.0 ⚠️ 지원 중단됨 26 (Android 8 Oreo) r26a 2025-06-25
v1.4.1 ✅ 활성 21 (Android 5 Lollipop) r26a 2025-11-07
v2.0.3 ✅ 활성 26 (Android 8 Oreo) r26a 2025-11-08
v2.1.0 예정 23 (Android 6 Marshmallow) r26a 아직 출시되지 않음

중요: 최신 기능 및 보안 업데이트와의 호환성을 유지하려면 종속 항목을 최신 상태로 유지하세요.

컴파일된 모델 API와 인터프리터 API 비교

  • 컴파일된 모델 API: 통합 버퍼 상호 운용성 및 비동기 파이프라인을 사용하는 가속기 우선 AOT/JIT 컴파일 실행
  • Interpreter API – 기존 TensorFlow Lite 스타일 코드와 하위 호환됩니다.

런타임에 API를 선택할 수 있습니다. 대부분의 새로운 성능 및 액셀러레이터 기능은 컴파일된 모델 API에 있습니다.

예시 구현은 다음을 참고하세요.

일반 및 CPU

런타임 기능 Interpreter API 컴파일된 모델 API
프로파일링
오류 보고자
I/O 버퍼 상호 운용성 (TensorBuffer/Environment) --
턴키 액셀러레이터 선택 --
동기화 실행
맞춤 작업
XNNPACK 구성
동적 모양

GPU

런타임 기능 Interpreter API 컴파일된 모델 API
동기화 실행
메모리 캐싱
CPU 대체
비동기 실행 --
제로 카피 버퍼 (AHWB/GLBuffer/Texture) --
MLD OpenCL 백엔드
MLD WebGPU 백엔드 (신규) --
MLD Metal 지원 (신규) --

NPU

런타임 기능 Interpreter API 컴파일된 모델 API
동기화 실행
비동기 실행 (Pixel) --
CPU 대체
GPU 대체 --
제로 버퍼 복사 (AHWB) --
QC/MTK AOT --
Pixel AOT --
QC/MTK/Pixel JIT --

빠른 시작 (컴파일된 모델 API)

컴파일된 모델 API로 추론을 실행하려면 다음 주요 단계를 따르세요.

  1. 호환되는 모델을 로드합니다.
  2. 입력 및 출력 텐서 버퍼를 할당합니다.
  3. 컴파일된 모델을 호출합니다.
  4. 추론을 출력 버퍼로 읽습니다.

다음 코드 스니펫은 Kotlin 및 C++에서 전체 프로세스의 기본 구현을 보여줍니다.

C++

// Load model and initialize runtime
LITERT_ASSIGN_OR_RETURN(auto model, Model::CreateFromFile("mymodel.tflite"));
LITERT_ASSIGN_OR_RETURN(auto env, Environment::Create({}));
LITERT_ASSIGN_OR_RETURN(auto compiled_model,
    CompiledModel::Create(env, model, kLiteRtHwAcceleratorCpu));

// Preallocate input/output buffers
LITERT_ASSIGN_OR_RETURN(auto input_buffers, compiled_model.CreateInputBuffers());
LITERT_ASSIGN_OR_RETURN(auto output_buffers, compiled_model.CreateOutputBuffers());

// Fill the first input
float input_values[] = { /* your data */ };
input_buffers[0].Write<float>(absl::MakeConstSpan(input_values, /*size*/));

// Invoke
compiled_model.Run(input_buffers, output_buffers);

// Read the output
std::vector<float> data(output_data_size);
output_buffers[0].Read<float>(absl::MakeSpan(data));

Kotlin

// Load model and initialize runtime
val  model =
    CompiledModel.create(
        context.assets,
        "mymodel.tflite",
        CompiledModel.Options(Accelerator.CPU)
    )

// Preallocate input/output buffers
val inputBuffers = model.createInputBuffers()
val outputBuffers = model.createOutputBuffers()

// Fill the first input
inputBuffers[0].writeFloat(FloatArray(data_size) { data_value /* your data */ })

// Invoke
model.run(inputBuffers, outputBuffers)

// Read the output
val outputFloatArray = outputBuffers[0].readFloat()

자세한 내용은 Kotlin 시작하기C++ 시작하기 가이드를 참고하세요.

주요 기능 (컴파일된 모델 API)

  • 턴키 가속기 선택 및 비동기: 생성 시 CPU/GPU/NPU를 선택하고 대리자 배관 없이 비동기로 실행합니다.
  • 통합된 제로 카피 버퍼: 사전 처리 및 사후 처리와 추론 간에 AHWB/GL/OpenCL/WebGPU/Metal 버퍼를 공유합니다.
  • 생성형 지원 처리량: 메모리 캐싱 및 GPU/NPU 대체가 있는 대규모 모델에 최적화되어 있습니다.

인터프리터 API는 기존 TensorFlow Lite 코드베이스의 호환성 경로로 유지됩니다. 안정적인 대리자 동작이나 클래식 인터프리터를 사용하는 서드 파티 래퍼가 필요한 경우 사용하세요.

가속기

  • CPU (기본값): XNNPACK 최적화, 동적 형태 지원
  • GPU: 현재 OpenCL 백엔드, 컴파일된 모델 API를 통해 WebGPU 및 Metal 백엔드 사용 가능
  • NPU: Qualcomm AI Engine Direct 및 MediaTek NeuroPilot이 AOT/JIT에 지원됩니다. Pixel AOT를 사용할 수 있습니다. Apple/Intel NPU 지원이 계획되어 있습니다.

API를 선택해야 하는 경우

  • GPU/NPU, 제로 카피 버퍼 또는 비동기 실행으로 가는 가장 빠른 경로를 원하는 경우 컴파일된 모델 API를 사용하세요.
  • 기존 TensorFlow Lite 코드, 도구 또는 대리자와의 호환성을 최대한 확보해야 하는 경우 인터프리터 API를 사용하세요.