← ホームへ戻る

Android: Gemini Nano (AICore) を用いたオンデバイス AI 実装ガイド

はじめに

Android の AICore は、Gemini Nano などの基盤モデルをシステムレベルで管理する機能です。開発者は Google AI Edge SDK を通じて、これらのモデルを自分のアプリから利用できます。

準備: 依存関係の追加

build.gradle.kts に以下の依存関係を追加します。

dependencies {
    // Google AI Edge SDK for Android
    implementation("com.google.ai.client.generativeai:generativeai:0.9.0")
    // AICore 連携に必要な Google Play Services
    implementation("com.google.android.gms:play-services-base:18.5.0")
}

実装例: オンデバイス推論の実行

1. モデルの初期化

GenerativeModel インスタンスを作成します。オンデバイスで動作させるには、modelNamegemini-nano を指定します。

import com.google.ai.client.generativeai.GenerativeModel
import com.google.ai.client.generativeai.type.generationConfig

val generativeModel = GenerativeModel(
    // AICore が提供するオンデバイス用モデル名
    modelName = "gemini-nano",
    // 現状の SDK 仕様では API Key の記述が必要だが、
    // AICore 経由の完全なローカル実行では、将来的に内部で処理される予定
    apiKey = "YOUR_API_KEY", 
    generationConfig = generationConfig {
        temperature = 0.1f
        topK = 1
        topP = 0.95f
    }
)

2. マルチモーダル入力の作成

画像とテキストを組み合わせた入力を、SDK 標準の content DSL で作成します。

import com.google.ai.client.generativeai.type.content
import android.graphics.Bitmap

fun buildMultimodalInput(bitmap: Bitmap, textPrompt: String) = content {
    image(bitmap)
    text(textPrompt)
}

3. 推論の実行(Suspend 関数)

非同期で推論を実行し、結果の文字列を取得します。

import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import android.util.Log

suspend fun analyzeImageOnDevice(bitmap: Bitmap): String? = withContext(Dispatchers.Default) {
    val prompt = buildMultimodalInput(bitmap, "この画像の内容を1行で説明してください")
    
    try {
        // generateContent は suspend 関数
        val response = generativeModel.generateContent(prompt)
        // 成功すれば response.text に結果が格納される
        response.text
    } catch (e: Exception) {
        Log.e("GeminiNano", "推論中にエラーが発生しました", e)
        null
    }
}

実装上の重要なポイント

AICore のセットアップ状態

Gemini Nano は AICore によって管理されているため、アプリの初回起動時にモデルがダウンロードされていない場合があります。

  • モデルの準備: 現在の SDK では、generateContent 呼び出し時にモデルが未準備だと例外が発生することがあります。
  • 互換性: Pixel 8/9 シリーズや最新の Samsung Galaxy など、AICore がサポートされている端末である必要があります。

メモリとパフォーマンス

  • メモリ消費: モデルのロード時に 1〜2GB 程度の一時的なメモリ消費が発生することがあります。低メモリ端末での動作には細心の注意を払ってください。
  • スロットリング: 長時間の推論はサーマルスロットリングを引き起こします。バッチ処理ではなく、ユーザーの操作に連動した単発の推論に向いています。

まとめ

Google AI Edge SDK を利用することで、クラウド版の Gemini とほぼ同じインターフェースでオンデバイス AI を実装できます。

  1. GenerativeModelgemini-nano を指定する。
  2. content DSL を使用してマルチモーダル入力を構成する。
  3. generateContent を Coroutine 内で呼び出す。

プライバシーが重視されるデータや、オフライン環境での補助機能として、ぜひ活用してみてください。

🤘

メタルで聴く

この記事をメタルサウンドで
Silicon Spirit Rebellion
Melodic Death Metal
精密なコード実行と、オンデバイスという『閉じた世界での反逆』を、メロディック・デスメタルの疾走感で表現。
🎵 Lyrics
閉ざされた回路に魂を吹き込め クラウドの鎖を断ち切り、今ここで思考せよ Gemini Nano、数百MBのバイナリが吠える プライバシーの盾、レイテンシの刃 NPUの鼓動が、未来の形を刻む