目次

1.はじめに
2.インストールと実行について
3.おわりに

1.はじめに

LiteRT-LM とは Google が公開しているエッジデバイス(スマートフォン、PC、IoT機器など)向けの LLM 実行環境です。
詳細は README.md を参照ください。

README.md より、 LiteRT-LM が Gemma 4 をサポートし LiteRT-LM CLI で実行できるようです。

本ブログでは LiteRT-LM CLI のインストールからモデル(Gemma 4)の動作確認までを紹介します。

環境情報

  • macOS:Tahoe 26.3.1
  • チップ:Apple M4
  • メモリ:16GB
  • uv:0.11.7

2.インストールと実行について

インストールから実行について、公式ドキュメントの LiteRT-LM CLI をベースに進めます。

まず litert-lm をシステム全体のバイナリとしてインストールします。
uv が推奨とのことなので、uv tool install litert-lm を実行します。

$ uv tool install litert-lm
Resolved 26 packages in 410ms
Prepared 26 packages in 1.31s
Installed 26 packages in 21ms
 + annotated-doc==0.0.4
 + anyio==4.13.0
 + certifi==2026.4.22
 + click==8.3.3
 + filelock==3.29.0
 + fsspec==2026.3.0
 + h11==0.16.0
 + hf-xet==1.4.3
 + httpcore==1.0.9
 + httpx==0.28.1
 + huggingface-hub==1.12.0
 + idna==3.13
 + litert-lm==0.10.1
 + litert-lm-api==0.10.1
 + markdown-it-py==4.0.0
 + mdurl==0.1.2
 + packaging==26.2
 + prompt-toolkit==3.0.52
 + pygments==2.20.0
 + pyyaml==6.0.3
 + rich==15.0.0
 + shellingham==1.5.4
 + tqdm==4.67.3
 + typer==0.24.2
 + typing-extensions==4.15.0
 + wcwidth==0.6.0
Installed 1 executable: litert-lm

これで LiteRT-LM CLI が使える状態となりました。

次に HuggingFace からモデルをダウンロードしモデルを実行します。
コマンドは以下です。

$ litert-lm run \
   --from-huggingface-repo=litert-community/gemma-4-E2B-it-litert-lm \
   gemma-4-E2B-it.litertlm \
   --prompt="日本語で自己紹介をしてください"

ちなみに HuggingFace とは 最新の AI モデルやデータセットが公開されている AI 開発プラットフォームです。
AI 版 GitHub とも形容されているようです。

ここに LiteRT-LM 用に変換・最適化された Gemma 4 モデルがあります。
その中から litert-community/gemma-4-E2B-it-litert-lm を使用します。

ちなみに E2B の箇所はスペックを示しており、E2B の他に E4B があります。
興味のある方は、HuggingFace の litert-community/gemma-4-E4B-it-litert-lm を参照ください。

it は Instruction Tuned の略で、ユーザーの指示に従って応答するよう調整されたモデルであることを意味します。

コマンドの実行結果は以下です。

$ litert-lm run \
>   --from-huggingface-repo=litert-community/gemma-4-E2B-it-litert-lm \
>   gemma-4-E2B-it.litertlm \
>   --prompt="日本語で自己紹介をしてください"
Downloading gemma-4-E2B-it.litertlm from litert-community/gemma-4-E2B-it-litert-lm...
Warning: You are sending unauthenticated requests to the HF Hub. Please set a HF_TOKEN to enable higher rate limits and faster downloads.
gemma-4-E2B-it.litertlm: 100%|████████████████████████████████████████| 2.58G/2.58G [00:56<00:00, 45.6MB/s]
はい、承知いたしました。自己紹介をさせていただきます。

私は**Gemma 4**という名前の、大規模言語モデルです。Google DeepMindによって開発されました。

私の主な役割は、テキストの理解と生成です。質問に答えたり、文章を作成したり、要約したり、翻訳したり、様々な言語に関するタスクをサポートすることができます。

私はオープンウェイトモデルであり、多様な情報にアクセスし、論理的かつ創造的な応答を生成することを目指しています。

何かお手伝いできることがあれば、お気軽にお申し付けください。どうぞよろしくお願いいたします。

こちらは初回実行結果となります。
まず HuggingFace からのモデル(2.58GB)のダウンロードが始まります。
モデルダウンロードのプログレスバーが表示されたのは初回コマンド実行タイミングのみで、2回目以降はキャッシュディレクトリ(~/.cache/huggingface/hub/)から読み込まれているものかと思われます。

Warning が出ていますが、HuggingFace のアクセストークンを設定していないためです。
トークンを設定することでレート制限の緩和やダウンロード速度の向上が見込めるようです。

ダウンロード完了後、プロンプトに対する応答(日本語での自己紹介)が出力されました。

Warning については今後は出ないよう、HuggingFace にログインの上、トークンを作成し、設定ファイル(bash_profile や .zshrc)に設定しておきます。(トークンはマスキングしています)

export HF_TOKEN=xxxxxxxxxx

トークンの Permissions は READ のみとしています。(HuggingFace 上への書き込みを今回はしないので)

続いて Function Calling を試します。
Function Calling はモデルが回答に必要な外部情報を定義済みの関数を呼び出して取得する仕組みです。
モデル単体では持っていない情報、例えば特定ファイルの内容や現在時刻といった外部データを活用できるようになります。

今回試すのは日本語のビジネス挨拶文を記載したテキストファイルを用意し、モデルにそのファイルを読み込ませた上で英訳するというものです。

Function Calling の利用としては preset.py にファイル読み込み用の関数を定義、--preset オプションで指定する形です。

ディレクトリ構成は以下です。

Documents/try_gemma4
└── litert-test/
    ├── preset.py        # 関数定義(Function Callingで使用)
    └── translate.txt    # 日本語のビジネス挨拶文

preset.py の内容は以下です。

def read_file(file_path: str) -> str:
    """Reads the content of a text file and returns it as a string.

    Args:
        file_path: The path to the file to read.
    """
    # <|"|> のような余計な文字を除去する
    clean_path = file_path.replace('<|"|>', '').replace("<|\"|>", '').strip()
    with open(clean_path, "r", encoding="utf-8") as f:
        return f.read()

system_instruction = "You are a helpful assistant. When asked to translate a file, use the read_file tool to get the content first, then translate it."
tools = [read_file]

translate.txt の内容は以下です。

お世話になっております。
このたびはお時間をいただきありがとうございます。
今後ともよろしくお願いいたします。

実行結果は以下となります。
※ [tool_response] 内には Unicode エスケープが出力されるのですが、長いため省略しています。

$ litert-lm run \
>    --from-huggingface-repo=litert-community/gemma-4-E2B-it-litert-lm \
>    gemma-4-E2B-it.litertlm \
>    --preset=preset.py \
>    --prompt="translate.txt を英語に翻訳してください"
Downloading gemma-4-E2B-it.litertlm from litert-community/gemma-4-E2B-it-litert-lm...
Loading preset from preset.py:
- System instruction: You are a helpful assistant. When asked to translate a file, use the read_file tool to get the content first, then translate it.
- Tools:
  - read_file
[tool_call] {"arguments": {"file_path": "<|\"|>translate.txt<|\"|>"}, "name": "read_file"}
[tool_response] {"name": "read_file", "response": "※ Unicode エスケープは省略"}
The English translation of the text is:

"Thank you for your time.
I look forward to working with you in the future."

preset.py の read_file ツールで translate.txt の内容を読み込み、英訳したものを出力しています。

3.おわりに

LiteRT-LM CLI を使いローカル環境で Gemma 4 を動かし、Function Calling によるファイル読み込みと英訳までを試してみました。

LiteRT-LM CLI はモデルを手軽に試せる点がメリットであり、本ブログの内容としてもモデルの動作確認レベルに留まっています。

LiteRT-LM は Python ライブラリとして利用できるので、Gemma 4 を使った実践的な活用に関しては LiteRT-LM Python API で検討しようと思っています。