最近、Redditの投稿が目に留まりました。誰かがXiaomi 12 Proを24時間稼働のヘッドレスAIサーバに改造し、Snapdragon 8 Gen 1で、Ollamaに量子化したGemmaモデルを動かしているのです。最初の反応は「ありえない」でした。二回目の反応は「待って、引き出しに古いスマホが3台あるぞ」です。
そこで、クラウドのAI APIと自前でホストするローカルLLMの実際のトレードオフについて考えるようになりました。理屈の話ではなく、月々のOpenAI請求額を見て「もっと良い方法はないのか」と思うような、現場での話です。
なぜこの比較が今重要なのか
最近、状況が変わった点が2つあります。1つ目は、量子化モデルが本当に実用的になったことです。4ビット量子化の2B〜4Bパラメータモデルなら、要約、分類、簡単なチャット、コードレビューなどを、多くのプロダクション用途で十分な品質でこなせます。2つ目は、ツール類が追いついたことです。Ollamaのおかげで、ローカルモデルの実行がdocker pullと同じくらい簡単になりました。
もう「ローカルモデルでGPT-4の代わりはできるのか」という問いではありません。「どのタスクはクラウドAPIに残し、どのタスクはローカル推論へ移すべきか」という問いです。
勝負どころ
クラウドAPI(OpenAI、Anthropic、Google):巨大なモデル、インフラ不要、トークン課金。
適切なハードウェアでセルフホスト(デスクトップGPU、古いサーバ):完全な制御、一度きりのコスト、より大きいモデルを動かせる。
転用したモバイル機器でセルフホスト(古いスマホ、SBC):ほぼ無料、低消費電力、小さめのモデルなら驚くほど高性能。
コスト内訳:高ボリュームの作業では比較にならない
たとえば、1日に5万件の短文を分類するコンテンツモデレーションのパイプラインを回しているとします。
# クラウドAPI方式 — OpenAI gpt-4o-mini
import openai
client = openai.OpenAI()
def classify_cloud(text: str) -> str:
response = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": f"Classify this text as safe/unsafe: {text}"}],
max_tokens=10
)
return response.choices[0].message.content
# ~100 tokens per request at $0.15/1M input tokens
# 50k requests/day = 5M tokens/day = ~$0.75/day input
# Plus output tokens — roughly $1-2/day total
# Monthly: ~$30-60
# ローカルOllama方式 — 同じタスク、追加コストはゼロ
import requests
def classify_local(text: str) -> str:
response = requests.post(
"http://localhost:11434/api/generate", # Ollamaのデフォルトエンドポイント
json={
"model": "gemma3:4b-it-q4_K_M", # 4ビット量子化、~3GB RAMに収まる
"prompt": f"Classify this text as safe/unsafe: {text}",
"stream": False
}
)
return response.json()["response"]
# コスト:電気代(スマホなら月$2-5程度)
# レイテンシ:リクエストごとは遅いが、レート制限はない
# プライバシー:データはネットワーク外に出ない
月$30-60 vs 電気代で月$3。小さなモデルが90%+の精度で動く分類タスクでは、クラウドAPIを正当化するのは難しいです。
スマホでOllamaをセットアップする(本当にやる?)
Redditの投稿で使っていたのは、AndroidのTermuxです。これにより、完全なLinux環境が手に入ります。ざっくりした手順は以下の通りです。
# F-DroidからTermuxをインストール(Play Store版は古いです)
# Termuxの中で:
pkg update && pkg upgrade
pkg install golang cmake
# ソースからOllamaをクローンしてビルド
git clone https://github.com/ollama/ollama.git
cd ollama
go build .
# スマホのRAMに収まるモデルを取得
# Xiaomi 12 Proは8-12GB RAM — 4ビット4Bモデルなら動きます
./ollama pull gemma3:4b-it-q4_K_M
# サーバを起動
./ollama serve
正直に言うと、いくつか注意点があります。ARM環境でソースからビルドするのは時間がかかることがあります。熱によるスロットリングも現実の問題です。スマホは、継続的な計算負荷を前提に設計されていません。そしてTermuxのバッテリー最適化を無効化したくなるでしょう。サーバをバックグラウンドで動かすと、殺されてしまう可能性があるためです。
特にXiaomiで試したわけではありませんが、Pixel 6ではTermux経由でOllamaを動かしており、動作しました。推論は遅く、たとえば小さなモデルなら毎秒5〜10トークンくらいかもしれません。ただ、非同期のバッチ処理なら気にしなくていいですよね?
それでもクラウドAPIが勝つ場面
フェアに言うと、ローカルモデルはいくつかの状況では大きく負けます:
- 複雑な推論:GPT-4クラスやClaudeクラスの出力が必要なら、4Bパラメータのモデルでは到底足りません。以上です。
- レイテンシーに敏感なユーザー向け機能:エッジキャッシュ付きのクラウドAPIなら、リアルタイムチャットにとって高速です。
- マルチモーダル課題:ビジョンや音声のモデルは巨大です。スマホでそれらを動かすことはできません。
- 迅速な反復:クラウドAPIでモデルを切り替えるのはコード1行です。ローカルでは、ギガバイト単位のデータをダウンロードすることになります。
ローカル推論が勝つとき
- データのプライバシー:医療、法律、金融データなど、ネットワーク外に出せないもの。これだけでも、一部の企業にとってローカル運用の正当性になります。
- 予測可能なコスト:予期しない請求がありません。レート制限もありません。午前2時にAPIの非推奨メールが来ることもありません。
- 大量の単純なタスク:分類、抽出、要約をスケールさせる。
- オフライン/エアギャップ環境:エッジ展開、組み込みシステム、信頼できるインターネットがない場所。
ハイブリッドアプローチ(私が実際におすすめするもの)
賢い選択は、複雑さによって振り分けることです。単純なリクエストの80%はローカルモデルで処理し、それ以外はクラウドAPIにフォールバックします。
import requests
import openai
client = openai.OpenAI()
def smart_classify(text: str) -> dict:
# まずローカルを試す
local_result = requests.post(
"http://your-phone-ip:11434/api/generate",
json={"model": "gemma3:4b-it-q4_K_M", "prompt": f"分類: {text}", "stream": False},
timeout=30 # スマホが苦しそうなら打ち切る
).json()["response"].strip().lower()
# 確信度がはっきりしているならローカル結果を使う
if local_result in ["safe", "unsafe"]:
return {"result": local_result, "source": "local", "cost": 0}
# 曖昧ならクラウドにエスカレーション
cloud_result = client.chat.completions.create(
model="gpt-4o-mini",
messages=[{"role": "user", "content": f"理由付きでsafe/unsafeとして分類して: {text}"}]
)
return {"result": cloud_result.choices[0].message.content, "source": "cloud", "cost": 0.001}
セルフホスト環境を監視する
AI推論のためにセルフホストの道を進むなら、監視も自前でホストしたくなるはずです。私はUmamiを使って自分のプロジェクトを追跡しています。これはオープンソースで、セルフホスト型の分析プラットフォームで、セットアップが信じられないほど簡単です。
PlausibleやFathomのようなものよりUmamiを選ぶ理由は?PlausibleとFathomはいずれも堅実です(さらにPlausibleはセルフホスティングも提供しています)。ただ、Umamiは開発者にとってちょうど良いところを突いています。クッキーを使わないため、最初からGDPRに準拠しており、セルフホストするのに完全に無料。そしてダッシュボードは、余計なノイズなしで必要なものをそのまま教えてくれます。すでに自宅のネットワーク上でOllamaサーバーを管理しているなら、同じマシンにUmamiインスタンスを追加するのは簡単です。
メンテナンスの手間がないマネージドサービスが欲しいならFathomは優れていますし、Plausibleのホストプランはチームにとって素晴らしい選択肢です。しかし、Dockerとセルフホスティングに慣れていて、スマホでLLMを動かしているのならあなたはすでにそうだと思います——その開発者にとっては、Umamiが自然な選択です。
結論
古いスマホを捨てないでください。Snapdragon 8 Gen 1は、GPT-2を学習させたサーバーよりも多くの計算資源を持っています。バッチ処理、プライベート推論、そして大量の単純なタスクにおいては、Ollamaを動かす転用スマホは本当に実用的です。
ただし、クラウドAPIキーは手元に用意しておいてください。最適なアーキテクチャは両方を使います──大量処理はローカル、機能性はクラウドです。Xiaomiのサーバーを使っているRedditの投稿者は気が狂っているわけではありません。彼らが時流に先んじているだけです。



