「Gemma 3n」×「 Jetson Orin Nano 」試したが、ダメだった話
お疲れ様です。オートロの福田です。今回も、オートロのインターン生が試したことを発表していきたいと思います。Gemma 3n を公式が用意する前に自前で実行しようとしてダメだった話になります。まだ Android しか対応していなかったようで、試してみてって言って調べもせずに依頼して反省です。
こんにちは。オートロ株式会社でインターンをしております釜土です。
今回は、Nvidiaが販売している「Jetson Orin Nano」という生成AIスーパーコンピューター開発キットを用いて、Googleが2025年5月20日に発表したAIモデルである「Gemma 3n」をローカル環境で走らせることに挑戦した体験を、ひとつの記事としてまとめました。
この記事では、Jetson Orin Nanoの使い方、AIモデルの導入方法、そして開発中に得られた気づき・工夫したポイントなどを中心にご紹介します。
小型スーパーコンピューターで最新AIモデルは作動するのか
Gemma 3n とは
Gemma 3n は、Google DeepMind が Gemma 3 モデルファミリーの一員として公開した「モバイルファースト」な軽量大規模言語モデル(LLM)です。特にスマホやエッジデバイスなどリソース制約のある環境でのローカル推論を念頭に設計されており、以下の特徴を持ちます:
-
低フットプリント:
約4 B(40億)アクティブメモリサイズで、必要に応じて品質とレイテンシーをトレードオフできるサブモデル分割をサポート。 -
オフライン・プライバシー重視:
ネットワーク不要で動作し、ユーザーデータをデバイス内に保持する設計。 -
マルチモーダル対応:
テキストと画像の入力を統合して解析・応答。将来的には動画や音声もサポート予定。 -
高効率推論:
モバイル/エッジ向けに最適化されたアーキテクチャで、仕組みを小型デバイスでも高速に回せるようコ・デザイン。
現在は早期プレビュー版として提供されており、オンデバイス AI 機能を搭載した次世代アプリケーション開発を後押しします。
以下の表で、従来の Gemma(Gemma 3)と Gemma 3n、および代表的な他の大規模言語モデル(例:GPT-3.5 や LLaMA 2)との主な違いをまとめました。
項目 | 従来の Gemma (Gemma 3) | Gemma 3n | 他の AI モデル(例:GPT-3.5 / LLaMA 2) |
---|---|---|---|
パラメータ数 | 約 8 B | 約 4 B(サブモデルでさらに分割可能) | GPT-3.5: ~175 B LLaMA 2: 7 B/13 B/70 B |
実行環境 | 主にクラウド(サーバー) | スマホ・エッジデバイス(Jetson Orin Nano 等)対応 | 主にクラウド (一部 7 B モデルは高スペック端末でオンデバイス可) |
ネットワーク要件 | 常時オンライン | オフライン単独動作可 | 常時オンライン(モデルサイズが大きく、端末単独動作は難しい) |
入力モダリティ | テキスト | テキスト+画像 (将来音声・動画も計画) |
テキストのみ(別途カスタム実装でマルチモーダル化可能) |
推論速度 | 中程度(クラウド GPU/TPU 前提) | 高速(端末上で低レイテンシ動作を最適化) | GPT-3.5: 標準的(クラウド依存) LLaMA 2: 7 B は中~高速、13 B 以上は低速 |
メモリ/ストレージ | 数十 GB(クラウド) | 数百 MB~数 GB(デバイスの制約内に収まる) | GPT-3.5: 数百 GB(クラウド) LLaMA 2: 7 B は ~14 GB、13 B は ~26 GB |
プライバシー | データ送受信が必要 | 完全デバイス内完結、ユーザーデータを外部に送らない | クラウドサーバーで処理→データ外部流出リスクあり |
ライセンス/公開状況 | Google 提供・限定公開 | 早期プレビュー公開 | GPT-3.5: 商用 API(閉鎖) LLaMA 2: オープンソース(GPL 相当) |
カスタマイズ性 | 限定的(Google 提供の API 経由) | サブモデル分割やファインチューニングが可能 | GPT-3.5: プロンプト操作中心 LLaMA 2: 自前でファインチューニング可能 |
主なユースケース | クラウド連携アプリ、チャットボット | オンデバイス AI、リアルタイム画像認識+会話 | 高度な対話サービス、大規模データ分析、研究用途 |
Jetson Orin Nanoとは
Jetson Orin Nano は、NVIDIA の組み込み向け AI プラットフォーム「Jetson」シリーズの最新モデルのひとつで、エッジデバイス上での大規模なディープラーニング推論を想定して設計されています。主な特徴は以下のとおりです。
- SoC(System on Chip) に NVIDIA Ampere アーキテクチャを採用し、CUDA コア+Tensor コアを統合
- AI 推論性能:最大 40 TOPS(INT8)
- CPU:6 コア ARM Cortex-A78AE
- メモリ:8 GB LPDDR5
- 消費電力:10 ~ 15 W の範囲で動的制御
- 開発キット形式:コンパクトなキャリアボード同梱。PCIe/M.2 スロットやカメラ/ディスプレイインターフェイスも装備
これによって、ファクトリーオートメーションやロボティクス、スマートシティ、オンデバイス生成 AI(例:小型ロボットのリアルタイム音声/映像生成)など、高い推論性能を要するエッジ用途に最適です。
他の「小型生成AIスーパーコンピューター」との比較
項目 | Jetson Orin Nano | Jetson Xavier NX | Google Coral Dev Board | Intel Neural Compute Stick 2 |
---|---|---|---|---|
SoC | NVIDIA Orin Nano (Ampere) | NVIDIA Xavier NX (Volta) | NXP i.MX 8M + Edge TPU | Intel Myriad X VPU |
CPU | 6× ARM Cortex-A78AE | 6× ARM Carmel | 4× ARM Cortex-A53 | —(ホスト CPU 必須) |
AI エンジン | 512 CUDA コア+32 Tensor コア | 384 CUDA コア+48 Tensor コア | Edge TPU(4 TOPS) | 1 TOPS |
メモリ | 8 GB LPDDR5 | 8 GB LPDDR4 | 1 GB LPDDR4 | ホスト側メモリを利用 |
AI 推論性能 | 約 40 TOPS (INT8) | 約 21 TOPS (INT8) | 約 4 TOPS (INT8) | 約 1 TOPS (FP16) |
消費電力 | 10 ~ 15 W(動的制御可) | 10 ~ 15 W | 約 2 W | 約 1 W |
価格(開発キット) | 約 USD 199 | 約 USD 399 | 約 USD 149 | 約 USD 70 |
フォームファクタ | キャリアボード一体型(M.2/MIPI/PCIe 搭載) | キャリアボード一体型(M.2/MIPI/PCIe 搭載) | シングルボード | USB スティック |
用途例 | エッジ生成 AI、ロボティクス、スマートシティ等 | 産業用エッジ AI、ロボティクス、医療機器 | 軽量エッジ推論、IoT センサーノード | 既存 PC/Raspberry Pi への AI アクセラレータ |
Jetson Orin Nano の起動方法
**ここでまず最初の関門がありました。**どんなトラブルがあったかは当項目の後半で説明します。
まず、箱から本体と充電器を取り出します。
キーボード、マウス、モニターと接続するためのケーブル、マイクロSDカードは自分で用意する必要があります。
SDカードにはJetpackイメージをフラッシュする必要があります。Jetpackとは、NVIDIA Jetson デバイス(Orin 系を含む)向けに「OS+AI コンピュートスタック」をまとめて“フラッシュ”できるシステムイメージです。JetPack 6.0 イメージをフラッシュするだけで、最新の Linux カーネルや Ubuntu、GPU ドライバ、深層学習/マルチメディアライブラリ、そしてデバッグ・プロファイリングツールまで、Jetson デバイス開発に必要なソフトウェアスタックが丸ごと導入できるのが最大の特徴です。
Jetpack6.0は公式サイトからインストールでき、「JETSON ORIN NANO DEVELOPER KIT」というボタンをクリックするとインストールボタンが出てきます。
「jp60dp-orin-nano-sd-card-image.zip」という14.11GBのファイルをインストールしたあと、SDカードをJetpackをインストールしたパソコンに繋ぎ、balenaEtcherというアプリを使用してフラッシュするのが一番楽な方法だと思います。ファイルがかなり大きいので、数十分から1時間ほど時間がかかります。
フラッシュが終わったらSDカードをJetson Orin Nanoに挿入して、Jetson本体とキーボード、マウスを接続して、モニターとケーブルを接続して電源を入れればJetpack6.0を使用して起動画面が表示される、と思っていました…
何回電源を差し抜きして、ケーブルの接続を確認しましたが、一向に起動画面が表示されませんでした。SDカードの破損も確認しましたが SDカードには異常がなく、調べてみると
-
JetPack 6.0 単独フラッシュでは起動しない
→ 古いブートローダー/ファームウェア(u-boot)が 6.0 を認識できないため。 -
JetPack 5.1.3 で一度起動して「update & upgrade」
→ ブートローダーやファームウェア、カーネルなど基盤部分を最新化。 -
再度 JetPack 6.0 をフラッシュすると正常起動
→ 6.0 の要件を満たした環境下であれば、Ubuntu 22.04 ベースのシステムが立ち上がる。
ということだと判明。半信半疑でJetpack 5.1.3 をインストールし、SDカードの中身を全て消してJetpack 5.1.3をフラッシュして恐る恐る Jetson Orin Nano にSDカードを差してみると、起動開始!
その後、設定(言語、キーボード、地域など)が終わると、やっとJetson Orin Nanoを使い始めることができます。
でもJetpack5.1.3で起動した環境にあまり用はないので、鑑賞に浸るのも束の間、Terminalを開いて
sudo apt update
sudo apt upgrade -y
sudo reboot
この3つのコマンドを実行し終わったら電源を落とし、SDカードを抜いてパソコンに差し、再度SDカードの初期化とJetpack6.0のフラッシュを行います。すると今度はJetpack6.0を利用してJetson Orin Nano を使用することができます。
開発開始
そして、ようやく本来の目標である「Jetson Orin Nano × Gemma 3n の実験環境」が整いました。
ここからは、実際に MediaPipe Edge をインストールし、さらに Google の生成AIモデル「Gemma 3n」をローカルで動かすチャレンジに移ります。
模索①:Pythonローカル実行環境でトライ 〜Transformers + PyTorch〜
Transformers と PyTorchを使う手法は、モデルをあらかじめダウンロードし、手元のGPU/CPU上で推論させる方法です。依存ライブラリはtransformersとtorch(場合によってはsentencepieceも必要です。)で、CUDA/cuDNN/TensorRT の整備が必要で、大きいモデルはダウンロードに時間がかかるしメモリの消費も Jetson Orin Nano の8GB というメモリを考えると懸念点ですが、ネットワーク接続が不要でオフライン動作ができるというメリットがあります。
似た手法で Hugging Face側のサーバー上にあるモデルを使用して、REST/gRPC API でテキストを送り、生成結果だけを取得する方法もあるのですが、オフライン環境での利用はできず、今回はローカル環境でオフラインでも作動できることが目標なので採用しませんでした。
Transformers + PyTorchの手法では、
python3 -m venv venv-jp6
source venv-jp6/bin/activate
pip install --upgrade pip
pip install \
transformers \
accelerate \
numpy \
huggingface_hub
wget https://developer.download.nvidia.com/compute/redist/jp/v60/pytorch/torch-2.4.0a0+07cecf4168.nv24.05.14710581-cp310-cp310-linux_aarch64.whl
pip install torch-2.4.0a0+07cecf4168.nv24.05.14710581-cp310-cp310-linux_aarch64.whl
まずは上記の通りに、仮想環境を構築して必要なライブラリを揃えました。
python3 -c "import torch; print(torch.cuda.is_available())"
次に上記のコマンドでJetson上の GPU(CUDA)が正しく認識され、Gemma などの推論が GPU 上で可能かどうかを確かめました。
うまくいけば “True“ と表示されるはずです。
次に、GemmaシリーズはHuggingfaceを使用して走らせるつもりでしたが、Huggingface上でアクセストークンを作り、Gemmaシリーズを使用する許可を取る必要があるので、
pip install huggingface_hub[cli]
huggingface-cli login
とTerminalに入力し、入手したアクセストークンをペーストすることで使用許可をもらいます。
今回使用したモデルは、Google DeepMindが開発した Gemma 3n-E4B-it-litert-preview です。
モデルの基本情報
- モデル名: Gemma 3n-E4B-it-litert-preview
- 開発元: Google DeepMind
- 対応モダリティ: テキスト、画像(音声・動画は今後対応予定)
- 量子化: dynamic_int4(4bit量子化済み)
- トークン数制約: 入力・出力ともに最大32Kトークンまで対応
- アーキテクチャ: Matformer(ネスト化対応型)、選択的パラメータ活性化技術(実質2B〜4B相当の軽量化)
このモデルは、Google の Gemini系モデルの技術を活かし、スマートフォンなどのリソース制約デバイスでも動作できることを目指したプレビュー版です。このモデルを使用し、Gemmaを走らせる Python スクリプトを作成して実行しました。
from transformers import AutoTokenizer, AutoModelForCausalLM
import torch
model_id = "google/gemma-3n-E4B-it-litert-preview"
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(model_id, device_map="auto", torch_dtype=torch.float16)
inputs = tokenizer("こんにちは、自己紹介してください。", return_tensors="pt").to("cuda")
outputs = model.generate(**inputs, max_new_tokens=50)
print(tokenizer.decode(outputs[0], skip_special_tokens=True))
SDカードの容量問題
しかし実行に至る前にに問題に直面します。32GBのSDカードを使っていたのですが、Jetpackのフラッシュと上記のライブラリのインストールだけで容量がいっぱいになってしまったのです。Transformers + PyTorch の手法はモデル自体(重みファイル)をあらかじめダウンロードし、手元の GPU/CPU 上で推論するので、Gemma 3n のような大きめのモデルは容量を空けないとダウンロードできませんでした。
# APTキャッシュの削除
sudo apt clean
# 使われていないパッケージの削除
sudo apt autoremove -y
# ローカルキャッシュの削除
rm -rf ~/.cache/*
# ゴミ箱の中身を空にする
rm -rf ~/.local/share/Trash/*
上記のようなコマンドで容量を開けることを図りましたが、今後プロジェクトを進めるに当たって、どこかしらのタイミングで必ず容量不足に陥ることが明らかだったので、64GBのSDカードに変えて、1から構築をやり直しました。もし今後 Jetson Orin Nano のようにSDカードを使用してプロジェクトを進める方がいましたら、絶対にSDカードはケチらない方がいいと個人的には感じました。
SDカードを変えて再度構築
SDカードを64GBのものに変えて、Pythonスクリプトの実行まで辿り着き、実行を試みるとエラーによって阻まれてしまいました。
エラーログから見えた問題点
実行すると以下の2つの大きな問題に遭遇しました。
- NumPy 2.x系の互換性問題:PyTorch/transformersの一部がNumPy 1.x前提のため、NumPyをダウングレードする必要があった。
pip install "numpy<2"
最後の壁:Gemma 3nの実ファイル未整備
最終的に出たエラーログは、
AttributeError: 'NoneType' object has no attribute 'encode'
などの tiktoken 依存部分の失敗。**Gemma 3nはHugging Faceにまだ完全公開されていない(tokenizer.model未整備)**ため(2025年6月10日現在)、Google内部プレビュー版Gemma 3nは、transformersでそのまま動きませんでした
模索②:コンテナ/CLI ベース 〜Ollama〜
Ollama とは?
Ollama は Docker コンテナやネイティブバイナリで動作する CLI ツールで、モデルのダウンロード・管理・実行を一貫してローカルで完結できます。
さまざまなフォーマットをサポートしていて、llama.cpp や GGUF フォーマットに加えて、Gemma 系モデルも、Gated でなければ直接 pull して自己ホスト可能です。設定や依存関係が少なく、Jetson のようなリソース制約デバイスでも比較的スムーズに動くというメリットもあります。2025年4月3日にYoutubeチャンネル「Google for Developers」が公開した動画でも、Ollamaを使用して Jetson Orin Nano で Geema 3 を動かしていました。
curl -fsSL https://ollama.ai/install.sh | sh
まずは Ollama をインストールして、自分は下記のコマンドで Docker イメージを pull してエイリアスで簡易実行しました。
docker pull ollama/ollama:latest
alias ollama='docker run --rm -it --gpus all --name ollama \
-v $HOME/.ollama:/root/.ollama \
-v $PWD:/workspace ollama/ollama:latest'
その後まずは動画の通りに、
ollama pull gemma3:4b
ollama run gemma3:4b
Gemma3 モデルを動かしてみました。
会話は問題なく行うことができるのですが、Google AI Studio で公開されているものに比べるとかなり遅いです。画像認識を試してみたかったので、エドワード・ヘンリー・ポトハストという画家の作品である、「A Holiday」を読み込ませて作品名と画家を当てさせようとしてみました。
Gemma3はエドワード・ヘンリー・ポトハストが描いた別の作品である「Children on the Beach」だと回答して、それ自体はかなりニアピン回答なのですが、画家の名前は関西学院大学の創立者であるウォルター・ラッセル・ ランバスを回答しました。画家名に関しては知識データベースの問題な気がしますが、画像認識はかなりの精度だと言っていいと思います。
肝心の Gemma 3n は?
Gemma3 モデルで遊ぶのもそこそこに、Gemma 3n モデルを Ollama Library で探したのですが、2025年6月10日現在、まだ Gemma 3n モデルはありませんでした。
Edge タスクファイル(.task)実行 〜MediaPipe GenAI(Python)〜
MediaPipe GenAI(Python)とは?
MediaPipe GenAI(Python)は、Google が提供する .task 形式の量子化モデル(Gemma 3n E4B など)を Python 上で手軽に呼び出し、オンデバイスで大規模言語モデル(LLM)の推論を行うための API です。従来の Transformers+PyTorch のように巨大なフレームワークを組むことなく、軽量な Python モジュール1本でモデルをロードし、チャット形式やテキスト生成が可能になります。MediaPipe GenAI の特徴と利点は以下の通りです。
-
.task ファイル対応
TensorFlow Lite ベースのランタイムで動く.taskファイルをそのまま読み込める -
エッジデバイス最適化
CPU/GPU(TFLite Delegate)どちらにも対応し、Jetson などの小型デバイスでも高速推論 -
シンプルな API
BaseOptions
→LlmInferenceOptions
→create_from_options()
→chat()
の4ステップで完結
まずはHugging Face のgoogle/gemma-3n-E4B-it-litert-preview
ページの Files and versions から gemma3n_e4b_int4.task
をダウンロードし、それをプロジェクトディレクトリに移動します。
chmod 644 ./models/gemma3n_e4b_int4.task
上記のコマンドでファイルパスと読み込み権限を確認したのち、サンプル Python スクリプト run_genai.py
を作成しました。
from mediapipe.tasks.python import core
from mediapipe.tasks.python import genai
model_path = "models/gemma3n_e4b_int4.task"
base_options = core.BaseOptions(model_asset_path=model_path)
llm_options = genai.LlmInferenceOptions(base_options=base_options)
# (オプションで top_k/top_p/temperature も設定可)
# llm_options.decoding_options.top_k = 64
# llm_options.decoding_options.top_p = 0.95
# llm_options.decoding_options.temperature = 1.0
llm_task = genai.LlmInference.create_from_options(llm_options)
result = llm_task.chat("こんにちは、自己紹介してください。")
print("Model Response:", result.text)
あとは下記のコマンドで mediapipe-genai
をインストールして python スクリプト を実行すればコンソールにモデルからの返答テキストが出力されるという寸法です。
pip install mediapipe-genai
python run_genai.py
**しかし、mediapipe-genai のインストールに失敗してしまいました。**調べてみると、 Jetson Orin Nano の ARM64環境では mediapipe-genai
は公式に提供されていませんでした。mediapipe-genai は Google の Android/iOS/Edge 向けライブラリで、Google が公開している .task
ファイル向けのAPIは Android/Edge対応であり、Pythonではそもそも必要とされている genai.LlmInferenceOptions
というAPIはないようです。Android Studio でのアプリ実装を考えている方はこの手法で実行できるはずです。
模索③:Edge タスクファイル(.task)実行 〜MediaPipe Edge(C++/TFLite)〜\
MediaPipe Edge とは?
Google がオープンソースで公開している MediaPipe Edge は、C++/Bazel ベースのフレームワークで、TensorFlow Lite(TFLite)をバックエンドにした高速なエッジ推論パイプラインを提供します。
特に .task
形式で配布される Gemma 3n E4B のような量子化モデルを、そのまま読み込んでローカル実行できるのが大きな特徴です。
- 軽量ランタイム:TFLite エンジン+Delegate(CPU/GPU)で高速に動作
- C++ ネイティブ:Python のオーバーヘッドなしで最小限のバイナリを生成
- Bazel 管理:依存ライブラリ(FlatBuffers/Protobuf/TensorFlow Lite/OpenCV 等)を自動取得
- .task ファイル対応:MediaPipe GenAI タスク API を C++ から直接呼び出せる
まずは、ビルドツールのインストールから行いました。
sudo apt update
sudo apt install -y build-essential git pkg-config \
openjdk-11-jdk curl unzip zip \
protobuf-compiler libprotobuf-dev libabsl-dev \
libopencv-dev
curl -Lo /usr/local/bin/bazelisk \
https://github.com/bazelbuild/bazelisk/releases/download/v1.19.0/bazelisk-linux-arm64
sudo chmod +x /usr/local/bin/bazelisk
sudo ln -sf /usr/local/bin/bazelisk /usr/local/bin/bazel
次に、MediaPipe Edge ソースをクローンしました。
git clone https://github.com/google-ai-edge/mediapipe.git mediapipe_edge
cd mediapipe_edge git fetch --all --tags
git checkout tags/v0.10.0 -b release-v0.10.0
クローンが終われば、モデル(.task)ファイルを適切な場所に配置します。
mkdir -p models
cp /path/to/gemma-3n-E4B-it-int4.task models/gemma3n_e4b_int4.task
chmod 644 models/gemma3n_e4b_int4.task
実際に走らせるためのコードサンプルはC++で書く必要があるのでC++ サンプルコードの作成examples/genai_cpp/run_gemma3n_e4b.cc
を作成し、以下のように記述します
#include <iostream>
#include "mediapipe/tasks/cc/genai/llm_inference/llm_inference.h"
#include "mediapipe/tasks/cc/core/base_options.h"
using namespace mediapipe::tasks::genai;
using mediapipe::tasks::core::BaseOptions;
int main() {
BaseOptions base_options;
base_options.mutable_model_asset_buffer()->load_from_file(
"models/gemma3n_e4b_int4.task");
LlmInferenceOptions llm_options;
llm_options.mutable_base_options()->CopyFrom(base_options);
// llm_options.mutable_decoding_options()->set_top_k(32);
// llm_options.mutable_decoding_options()->set_top_p(0.9f);
auto status_or = LlmInference::CreateFromOptions(llm_options);
if (!status_or.ok()) {
std::cerr << "Failed: " << status_or.status().message();
return -1;
}
auto llm = std::move(status_or).value();
auto result = llm->Chat("こんにちは、自己紹介してください。");
std::cout << result.text() << std::endl;
return 0;
}
BUILD ファイルの定義する必要があり、mediapipe_edgeの中にexamples/genai_cpp
というファイルを作ってあげて、examples/genai_cpp/BUILD
に以下を記述します:
load("//mediapipe/framework:mediapipe.bzl", "mediapipe_cc_library")
cc_binary(
name = "run_gemma3n_e4b",
srcs = ["run_gemma3n_e4b.cc"],
deps = [
"//mediapipe/framework:calculator_framework",
"//mediapipe/tasks/cc/genai/llm_inference:llm_inference_lib",
"@org_tensorflow_lite//:tensorflow_lite",
"@com_google_absl//absl/strings",
"@com_google_protobuf//:protobuf_lite",
"@com_google_flatbuffers//:flatbuffers",
"@mediapipe//third_party/glog:glog",
],
linkopts = ["-pthread"],
)
これら全てが終わったらやっと、Bazel でビルドと実行が行えます。
# 必要なら LD_LIBRARY_PATH を通す
export LD_LIBRARY_PATH=/usr/lib/aarch64-linux-gnu:$LD_LIBRARY_PATH
bazel build -c opt --copt="-O3" \
//examples/genai_cpp:run_gemma3n_e4b
./bazel-bin/examples/genai_cpp/run_gemma3n_e4b
長かった試行錯誤の末、C++にまで手を出してやっと Gemma3n Jetson Orin Nano で動かすことができると思ったのですが、
ModuleNotFoundError: No module named 'mediapipe.tasks.genai'
というエラーに直面しました。調査したところ、このモジュールは Google の社内専用で、まだ外部向けには正式リリースされていないようです。
今後の展望:Gemma 3n E4B を正常に動かすために
1. 今後どうすれば Gemma 3n をローカルで走らせられるか
-
MediaPipe Edge GenAI LLM ライブラリの正式リリースを待つ
-
mediapipe/tasks/cc/genai/llm_inference
モジュールが含まれる v0.11.0 以降を取得 - Bazel で
//mediapipe/tasks/cc/genai/llm_inference:llm_inference_lib
をビルドすれば、.task ファイルを直接ロード可能に
-
-
Python バインディング(mediapipe-genai)の ARM64 wheel 提供
-
pip install mediapipe-genai
が Jetson Orin Nano 上で通るよう、aarch64 向け wheel の公開を希望 - 依存の
tiktoken
、sentencepiece
も合わせてメンテナンスを
-
-
Gemma 3n E4B の .task ファイルの整備
- ファイル名・フォーマットを安定版として公開(例:
gemma3n_e4b_int4.task
) - MediaPipe のサンプルリポジトリに同梱し、パス一発で参照できるように
- ファイル名・フォーマットを安定版として公開(例:
-
Hugging Face Transformers 側の対応
-
transformers>=5.0
でGemmaTokenizer
とALL_PARALLEL_STYLES
の None チェック問題を解消 - Python 上でも Gemma 3n のインポート → 推論 → 結果取得がシームレスに
-
-
コンテナ/CLI(Ollama)でも Gemma 3n E4B に対応
- Ollama が
gemma3n:e4b
を pull/run できるよう GGUF 形式の公開 - Jetson 向けの最適化バイナリを提供してもらう
- Ollama が
2. どのようなバージョンアップがあれば走るか
コンポーネント | 現状 | 必要なバージョン/変更点 |
---|---|---|
JetPack / CUDA / cuDNN | JetPack 6.0, CUDA 12.2, cuDNN 8.9 | → JetPack 6.1+(CUDA 12.2→13.0 に対応) |
TensorRT | 8.6.2.3 | → 8.9.x(GPU Delegate の安定化・最適化向け) |
TensorFlow Lite(Bazel) | Bazel 自動フェッチ | → TFLite 2.13+(ARM64 ビルドの最適化版) |
MediaPipe Edge / GenAI | v0.10.0(genai 未対応) | → v0.11.0+(//tasks/cc/genai モジュール追加) |
mediapipe-genai (Python) | wheel 未提供 | → mediapipe-genai-0.1.0a0-aarch64.whl の公開 |
Transformers / tiktoken | v4.x(None 判定バグあり) | → v5.x(Gemma 3n トークナイザ統合&バグフィックス) |
Hugging Face Hub CLI | v0.x(PATH 問題など) | → v0.14.x (huggingface-cli login が仮想環境でも動作) |
Ollama / llama.cpp |
gemma3:4b のみ |
→ gemma3n:e4b (GGUF 量子化モデル) の追加サポート |
これらのアップデートが揃えば、
-
完全オフライン かつ C++/Python 双方から
.task
ファイルを呼び出せる - Jetson Orin Nano 上でも安定した GPU Delegate 推論が可能
- Hugging Face や Ollama など、好みのインターフェイスで Gemma 3n を自由に試せる
といった状態が実現します。次世代のオンデバイス LLM 実行環境へ、もう一息です!
Discussion