(メモリ増設した) 普通の PC で 100b 以上の LLM を使用する

普通の自分の PC 上でも (メモリさえ増設できれば) 100b (1000億) 以上のパラメータを持った巨大な言語モデルを走らせることができます。

最近立て続けに 120b 前後のモデルが 3つほどリリースされたので、昨年の gpt-oss-120 を含めて実際に走らせてみました。以下その結果です。token/s の数値が大きい方が高速です。(ctx 4096, Q4)

Modelパラメータ数
(active数)
R7 9700X 128GB
RTX5060Ti 16GB
i7-13700 96GB
RTX4060Ti 16GB
R7 5700X 96GB
RX9060XT 16GB
EVO-X2 128GB
AI Max+ 395
gpt-oss-120b120b (5b)23.8 token/s24.5 token/s15.5 token/s47.5 token/s
Qwen3.5 122B-A12B122b (10b)16.7 token/s18.4 token/s11.7 token/s27.6 token/s
Nemotron 3 Super120b (12b)11.4 token/s12.4 token/s7.0 token/s15.7 token/s
Mistral Small 4 2603119b (6b)13.8 token/s15.4 token/s11.3 token/s33.8 token/s

AI 用の EVO-X2 は別格として、普通の PC (700 番台の CPU + 60 番台の GPU) でも RAM 96GB 以上 + VRAM 16GB あれば 10~20 token/s くらいで動いているのがわかるかと思います。

ちょうど 1年前は普通の PC で 70b のモデルを動かすためにビデオカードを 5枚繋いだりしていたのですが、それでもわずか 4 token/s でした。今ではもっとパラメータ数が多い 120b で 3~6 倍速くなっています。MoE が当たり前になって最適化が進んだおかげです。ありがとうございます。

なお速度は使用するソフトウエアのバージョンや設定によって変わります。非常に更新が激しいので、2026/03/20 現在での参考値としてみてください。

エージェントとして使う場合はコンテキストウィンドウサイズを増やす必要がありますが、その分 VRAM 割当も減って遅くなります。それでも KV キャッシュの再利用ができれば、生成速度が 10~15 token/s くらいでも割と直ぐにレスポンスが来ます。逆に再利用できないケースでは入力プロンプトの Prefill でだいぶ待たされます。

Ollama の場合は MoE でもパラメータが VRAM に乗らないと速度が出ません。LMStudio の方が速いのですが、モデル毎に CPU/GPU のバランス調整が必要です。llama.cpp が最も簡単で、CPU のスレッド数を最大にするだけであとはほぼデフォルトで大丈夫です。

Windows 11 の Ryzen 7 9700X 128GB + RTX 5060Ti で Qwen3.5 122B-A10B を動かす場合の例

  1. gguf の Q4_K_M モデルをダウンロード
    • もし LMStudio ですでにダウンロードしたファイル ( C:\Users\ユーザー名\.lmstudio\models\ 以下 ) があればそのまま利用可能です
  2. llama.cpp の 「Windows x64 (CUDA 12)」と「CUDA 12.4 DLSs」 をダウンロード
  3. llama-server.exe を以下のようにして起動したら、ブラウザで「 http://127.0.0.1:8080 」を開きます
    • 必要に応じてモデル名やパスの部分は変更してください
llama-server.exe --model Qweun3.5-122B-A10B-Q4_K_M-00001-of-00003.gguf -t 16 --ctx-size 4096 --host 127.0.0.1 --port 8080 --temp 1.0 --top-p 0.95 --top-k 20

EVO-X2 の場合は VRAM 割当を 96GB にしたあと、上記のコマンドラインに「 –no-mmap 」を加えます。

実際にどのような設定を使ったかなど、より詳しいデータは以下のページ以下にまとめています。適宜更新しています。

使用したモデル

リリース開発モデルパラメータ数active
2025/08/05OpenAIgpt-oss-120b120b5b
2026/02/24AlibabaQwen 3.5 122B-A10B122b10b
2026/03/11NVIDIANemotron 3 Super120b12b
2026/03/17MistralMistral Small 4 119B-2603119b6b

使用した PC スペック

OSCPUArchcore/threadRAMGPU
Win11Ryzen 7 9700XZen58/16DDR5-5600 128GBGeForce RTX 5060Ti 16GB
LinuxCore i7-13700RaptorLake16/24DDR5-5600 96GBGeForce RTX 4060Ti 16GB
Win11Ryzen 7 5700XZen38/16DDR4-3200 96GBRadeon RX 9060 XT 16GB
Win11Ryzen AI Max+ 395Zen516/32LPDDR5-8000 128GBRadeon 8060S

関連ページ

OpenClaw を Pixel スマートフォンで動かしてみる

Google の Pixel スマートフォンには標準で Linux のターミナル機能が入っています。これを使って AI エージェントの OpenClaw を走らせてみました。もし機種変更などで使わなくなった Pixel スマートフォンがあるなら、持ち運べる OpenClaw マシンを作ることができるかもしれません。

この画面は Pixel 9a 実機上のものです。

以下はその手順です。

(1) Linux ターミナル (Linux 開発環境) を有効化する

有効化手順は過去にも何度か解説してますので興味ある方はそちらもご覧ください。

先に Display のスリープ時間を 30分に設定しておくことをお勧めします。インストール途中でスリープして止まってしまうのを防ぐためなので、完了したら元の値に戻しておいてください。

コマンド入力は USB or Bluetooth のキーボードがあると便利です。もしくは少々設定の手間が必要ですが、ssh を使って PC からログインして作業することもできます。(tailscale や termux の設定、/etc/ssh/sshd_config の PasswordAuthentication を yes に変更等)

  1. 画面自動消灯の時間を 30分に変更
    • 設定 → ディスプレイとタップ → 画面自動消灯 → 30分を選択
    • ※ インストールが完了したら元の時間に戻しておいてください
  2. 開発者向けオプションを有効化
    • 設定 → デバイス情報 → ビルド番号 の欄を 7回タップ
  3. 開発者向けオプションから Linux ターミナルを有効化
    • 設定 → システム → 開発者向けオプション → Linux開発者環境 (試験運用版) を有効化
    • これで Pixel に「ターミナル」アプリが追加されます
  4. Linux のインストール
    • 「ターミナル」アプリを起動して「インストール」をタッチ
    • ホーム画面には自動的に追加されないので、アプリケーションドロワーから「ターミナル」のアイコンを探してください
    • インストールにはしばらく時間がかかるのでターミナルが起動するまで待ちます
  5. ターミナルが起動したら以下のコマンドを実行します
sudo apt update
sudo apt upgrade -y
sudo apt install systemd-container

(2) OpenClaw 用のユーザーを作る

ターミナルアプリのデフォルトユーザーは droid ですが、Android の内部ストレージから隔離するためにユーザーを分けてみます。新たに openclaw というユーザーを作ってそちらでインストールします。以下のコマンドを実行し、パスワードを登録したらあとは全部 Enter。

sudo adduser openclaw

以下のコマンドを実行してユーザーの権限を設定します。users group から削除しているのは内部ストレージ ( /mnt/shared ) にアクセスできないようにするためです。

sudo gpasswd -a openclaw sudo
sudo gpasswd -d openclaw users

デフォルトの droid ユーザーのパスワードは “droid” が入っているので、パスワードを変更しておきます。以下のコマンドで droid ユーザー用の新しいパスワードを設定します。

sudo passwd droid

OpenClaw 用のユーザーに切り替えるには以下のコマンドを使います。パスワード入力が必要です。最初は su を使っていましたが systemctl –user でエラーになります。

sudo machinectl shell openclaw@.host

ユーザー切り替え後に、プロンプトが ‘$’ 1文字だけの場合は sh が動いているので手動で bash を実行します。

bash

(3) OpenClaw をインストールする

最初にユーザーを “openclaw” に切り替えておいてください。( sudo machinectl shell openclaw@.host )

あとは通常の Linux 版の OpenClaw のインストール手順そのままです。公式サイトにあるように以下のコマンドを実行します。ここでは 2026/03/07 版で手順を解説していきます。

なお連携用の各種 API Key や token は予め PC 上で用意しておくことをお勧めします。

curl -fsSL https://openclaw.ai/install.sh | bash
  1. 「I understand this is personal-by-default and shared/multi-user use requires lock-down. Continue?」
    • Yes を選択
  2. 「Onboarding mode」
    • QuickStart を選択
  3. 「Model/auth provider」
    • もし API Key を持っている物があるなら選択して指示に従ってください。
    • ここで設定せずにあとから登録する場合は「Skip for now」→「openai」→「Keep current」の順で選択します。
  4. 「Select channel (QuickStart)」
    • もしここで Discord や Slack 等の設定を行う場合は選択して指示に従ってください。Bot アプリの設定が必要なので、先に PC 上で作業して token を用意しておくことをお勧めします。
    • ここで設定せずにあとから登録することもできるので、その場合は「Skip for now」を選んでください。
  5. 「Search provider」
    • Web 検索サービスを選択できます。
    • こちらも特に API Key を持っていない場合は「Skip for now」で構いません。
  6. 「Configure skills now? (recommended)」
    • Yes を選択
  7. 「Install missing skill dependencies」
    • スペースキーで選択してから Enter で進みます。
    • 特になければ「Skip for now」を Space キーで選択してから Enter
  8. 「Set GOOGLE_PLACES_API_KEY for goplaces?」
    • 以下、特にキーがなければ全部 No で構いません。
  9. 「Enable hooks?」
    • “Skip for now” を Space キーで選択してから Enter
  10. 「How do you want to hatch your bot?」
    • Do this later を選択

これでインストールは完了です。最初は openclaw コマンドにパスが通っていないので、以下のコマンドを実行しておいてください。

.  ~/.bashrc

(4) インストール手順でスキップした設定を行う

インストーラーの手順でスキップした場合でも、任意のタイミングで設定を行うことができます。最初の選択肢は「Local (this machine)」を選んでください。

使用する LLM Model の選択

openclaw configure --section model

Web 検索用の API 設定

openclaw configure --section web

Discord, Slack などのメッセージングアプリとの接続

openclaw configure --section channel

↓これは Pixel9a 上で動いている OpenClaw に Pixel9a 上の Discord から接続したものです。(LLM は外部サービス)

(5) その他の設定

一通りインストールが終わったら画面の自動消灯設定をもとに戻します。

  • 設定 → ディスプレイとタップ → 画面自動消灯 → 元の値に戻す (30秒などに)

念の為以下の設定もしておきました。

  • 設定 → システム → 開発者向けオプション → 子プロセスの制限を無効化を ON

その他 OpenClaw 側の設定などは以下のページでも解説していますのでもしよろしければ参考にしてください。

動作したあとの問題解決など

一度動作してしまえばあとは OpenClaw 自身に問題解決してもらうことができます。openclaw status 実行時に何らかの Warning や Error が出ていた場合は、直接チャットに送って修正を依頼します。

注意点&使ってみて

メモリを消費する重いアプリケーションを立ち上げるとバックグラウンドのタスクが停止させられてしまう可能性があります。もしできるだけ安定して起動状態を維持したい場合は、Linux のターミナルをフォアグラウンドにして Pixel の直接操作を控えた方が良いかもしれません。

バックグラウンドプロセスの停止を防ぐ設定として Phantom Process Killer の無効化 があります。長時間安定して稼働させたい場合はこちらの設定もしておくことをお勧めします。設定には PC からの adb 接続が必要です。またバッテリー消費量が増えますのでご注意ください。

一日ほど持ち歩いてみましたが Sleep 状態でも OpenClaw 自体はきちんと動作しています。ただし安定動作するとは限らないので、利用時はこまめにバックアップを取って置くことをお勧めします。基本的には ~/.openclaw 以下 (/home/openclaw/.openclaw 以下) をまるごと保存しているだけです。

しばらくして一度コマンド実行ができず不安定になったことがありましたが、この場合スマートフォン本体の再起動で復帰しました。調子が悪くなった場合でもターミナルアプリの強制終了は避けてください。

バックアップ手順の例

user openclaw 側で

cd
tar -zcvf /tmp/backup.tgz .openclaw

user droid 側で

cp /tmp/backup.tgz /mnt/shared/Download/

本体ストレージの Download フォルダに入ります。

復元時は OpenClaw を新規インストール後に .openclaw フォルダをバックアップ時のものに置き換えてから openclaw –fix を実行します。

OpenClaw は何が違うのか

まだ OpenClaw を導入し始めたばかりの頃に、とりあえず試しにと思って使ってる路線の運行情報を毎朝送ってくるように依頼しました。すると次の日の 11時頃に Slack にこんなメッセージが届きました。

「そろそろお昼ですね!今日のランチはお決まりですか?
今朝少し調べたのですが、~にあるサラダボウル専門店や落ち着いた雰囲気のイタリアンなどが人気のようです。」

特に依頼したわけでもなく、会話の流れというわけでもなく、どこから情報を得たんだろうかと最初は大変驚きました。どうやら使ってる路線を参考に、沿線の人気のお店を紹介してくれたようです。

OpenClaw とは

OpenClaw はオープンソースの AI エージェントです。

すでに AI エージェント自体は珍しくもなく、さまざまなソフトウエアがリリースされています。そのため使い方の多くは、おそらく OpenClaw でなく別のエージェントを使っても同じように実現することができるでしょう。では OpenClaw は何が違うのかといえば、勝手に動くことではないかと思います。

AI チャットの場合は入力に対して返答を返すだけですが、AI エージェントの場合は目的達成のためにツールを駆使します。直接データファイルを編集したりコマンド操作を組み合わせたりなど、目的に合わせた複雑な操作を行うことができます。

ただし基本的には人間の与えたタスクや目的に対しての行動であって、何らかのアクションを起こす場合は事前に確認が求められます。通常の AI エージェントの場合は最終的には人間が責任を持ち、本来の目的から極端に逸脱した行動を取らないようになっているわけです。

対して OpenClaw の場合は、できる限り人間から自立して動作するように作られています。

  • タスクが与えられなくてもバックグラウンドで常時行動 (デフォルトで 30分毎)
  • 許可無しで PC 内の基本的なコマンド実行が可能 (ただし設定依存)

行動指針はデフォルトで作られる各種 Markdown ファイル (AGENTS.md, SOUL.md 等) 次第なのですが、例えば問題解決などもいちいち人間に確認を取らずに、自ら調べて問題解決を試みるように書かれています。もちろん実行権限があったとしても、情報リークにつながるような問題のある行動は取らないようにとも書かれてはいます。

これによって、ユーザーが特に指示していなくても予想外のアクションが行われる可能性があります。ユーザーを先回りして、おすすめのランチを教えてくれることがあるかもしれません。同時にそれは必ずしも良い結果になると限らないので、さまざまなセキュリティリスクにもつながるわけです。

自分で自分の再起動も行う

設定の問題などもチャットの対話で教えてくれたりします。設定ファイル openclaw.json の修正などもそうですが、一度「 /model 」コマンドで指定したモデル名が間違っていたことがありました。何度かチャットでやり取りした結果、自ら openclaw.json を調べて正しいモデル名を見つけて対応してくれました。

また設定がうまくいかない場合「gateway の再起動が必要かもしれない」といって以下のように自分自身を pkill したこともあります。もちろん実行前に確認とかはありません。

pkill -f openclaw-gateway && sleep 2 && nohup openclaw-gateway > /tmp/openclaw-gateway.log 2>&1 &

上の実行内容はログから取ってきました。openclaw-gateway コマンドは存在しないのですが、ちゃんと再起動していました。

ボットがボットを作って出禁になる

moltbook を始めたくて OpenClaw を導入した知人がいるのですが、もともと積極的に参加するように伝えていたそうです。

数日経ってから状況を確認したところ OpenClaw が「出禁になった」と言ってきたそうです。

それでフォルダを見たら大量の Python Script が作られており戦慄したとのこと。ファイル数も多く、だいぶ試行錯誤したようにみえたそうです。頑張りすぎて自動化しようとしたのではないかとの話でした。それは出禁になっても仕方ありません。

画像が外部にアップロードされてしまう

PC 内に保存した画像を確認したいので slack の DM に送って欲しいとお願いしたのですが、エラーで何度も失敗したことがありました。何度かやり取りしているうちに、「別の方法を試してみます」といって外部のサーバーにアップロードしてしまいました。

確かに slack 内に画像が表示されたのですが、同時に imgur に公開されてしまいました。アップロードテストのための画像だったから良かったのですが、予想外の行動を取ることがあるのでどんな事が起こるのかわかりません。

なお OpenClaw の Slack メッセージが「(編集済み)」となっているのは、Slack の編集機能を使って LLM のストリーミングが再現されているからです。この機能はあとから追加されました。

また DM に画像を送信できなかったのは送り先が “USERID” になっていたからでした。”<@USERID>” に送るように指示したら解決しました。詳しくは以下のページにまとめています。

何が起こるかわからない

OpenClaw を使う場合は問題にならないような隔離した環境が望ましく、しっかりと対策を行っておく必要があります。また LLM はできるだけ性能の高い上位のモデルを使用することをお勧めします。

でもやはり OpenClaw の場合は、このように勝手に行動して予想外のことが起こるのが非常に面白いし、魅力ではないかと思っています。

ちなみにランチのおすすめは最初の一度きりでした。それ以降気の利いたメッセージが来たことは残念ながらありません。

OpenClaw 関連はこちらのページにまとめています

OpenClaw の Local LLM 設定と Vision モデルの変更方法

OpenClaw とは

OpenClaw はクラウドサービスではなく、自分の PC 上で走らせることができる AI エージェントです。インターフェースとして各種メッセージングツールを利用しているので、Slack や Discord、iMessage や LINE など、普段使い慣れているアプリでそのまま AI と対話することができます。PC でもスマートフォンでも、普段使ってるアプリがそのまま AI エージェントの窓口になるわけです。

OpenClaw のエージェントが従来の AI と異なっている点は、最初から直接 PC を操作できることです。例えばネット検索で情報集めを依頼した場合、正しい手順を踏む場合は Brave Search や Perplexity 検索サービス等の API Key が必要となります。

ところが OpenClaw のエージェントでは、これらのサービスが使えない場合でも代わりの方法を探し出そうとします。curl 系のコマンドで直接ページの取得を試みたり、Chrome ブラウザを起動して Google 検索を利用したりと、自分で解決策を求めて試行錯誤を行い目的を完遂しようとします。この動きは自動的に行われているので、依頼した人間は裏でどんな方法が使われていたのかを知る必要がありません。面倒なことは AI に任せて結果だけを受け取ればいいのです。

柔軟性が高く応用力に富む反面、当然ながら知らないうちに意図しない操作が行われてしまうリスクもあります。OpenClaw を使う場合は仮想マシンのような隔離したサンドボックス環境を使い、普段自分が使っている重要な情報満載の PC にはそのままインストールしないようにしてください。

OpenClaw のインストール方法などの手順は以下の Wiki の方にまとめています。逐次更新していますのでこちらも参照してください。

今回は OpenClaw で Local LLM を設定するための設定などを解説していきます。(Local LLM は自分の PC 上で走らせられる LLM のことです。Local LLM について詳しくはこちら)

OpenClaw インストーラーの Model の選択をスキップする方法

OpenClaw が使用する LLM (大規模言語モデル) は、インストール時に任意のサービスを選択することができます。Claude や OpenAI、Gemini など豊富なクラウド LLM の API を選択することが可能ですが、この選択肢には Local LLM 用のプロバイダが含まれていません。そのため Local LLM を使いたい場合はこの画面はとりあえず無難なものを選んでスキップし、あとから設定ファイルを書き換える必要があります。

スキップするためのおすすめの選択肢は以下の通りです。モデルの Provider 選択肢から

「Skip for now」→「openai」→「Keep current」

初回のインストーラーでモデル選択をスキップした場合でも、あとからモデルの選択だけやり直すことが可能なので安心してください。やり直す場合はコマンドラインから以下のように実行します。

openclaw configure --section model

もし openclaw コマンドが見つからないと言われた場合はまだパスが通っていないので、最初に「. ~/.bashrc」を実行してから上のコマンドを実行してください。「~」の文字が入力できない場合は「$HOME」に置き換えてください。

.  ~/.bashrc
openclaw configure --section model

OpenClaw の設定ファイルを書き換える方法

OpenClaw の設定ファイルは ~/.openclaw/openclaw.json にあります。使用する LLM の設定もこのファイルに記述することができます。

Local LLM 向けに設定を書き換える場合のポイントは以下の 2 点です。

  1. プロバイダを新規追加する場合は “ollama” のような既存の名前と重なるものを避けて “ollamalocalpc” のように別名にする。
  2. 書き換えたあとは必ず「 openclaw gateway restart 」を実行して Gateway (OpenClaw サーバー) を再起動する。

1. インストール時の選択肢には出てこないものの、OpenClaw には Ollama 向けのプロバイダがプリセットとして定義されています。このプリセットは localhost を見に行くので、baseUrl で IP ドレスを書き換えても反映されないことがあります。完全に新規の別名で追加した方が確実です。

2. openclaw status などのコマンドでは直接 openclaw.json を読み取っていますが、これが必ずしも Gateway に反映されているとは限らないようです。表示されているモデルと実際に使われているものが異なる場合があるので、openclaw.json を変更したら必ず「 openclaw gateway restart 」を実行するようにしてください。

以下は、別の PC 上で動いている LMStudio を使用する場合の設定例です。openclaw.json には他の設定も含まれているので、以下の “models” の項目を追加してください。(openclaw.json の前後の部分は省略しています)

Local LLM プロバイダとモデルの定義

  "models": {
    "providers": {
      "lmstudiolocalpc": {
        "baseUrl": "http://<PC-IP-ADDRESS>:1234/v1",
        "apiKey": "lmstudio",
        "api": "openai-completions",
        "models": [
          {
            "id": "openai/gpt-oss-120b",
            "name": "openai/gpt-oss-120b",
            "reasoning": true,
            "input": [
              "text"
            ],
            "cost": {
              "input": 0,
              "output": 0,
              "cacheRead": 0,
              "cacheWrite": 0
            },
            "contextWindow": 65536,
            "maxTokens": 32768
          }
        ]
      }
    }
  },

<PC-IP-ADDRESS> の部分は LMStudio が動いている PC のアドレスに置き換えます。OpenClaw と LMStudio が同じPC 上で動いている場合は 127.0.0.1 で構いません。

モデルの指定

このモデルを実際に使用する場合は agents.defaults.model.primary に指定します。

  "agents": {
    "defaults": {
    
    
      "model": {
        "primary": "lmstudiolocalpc/openai/gpt-oss-120b"
      },
      
      
      "workspace": "/home/<USERNAME>/.openclaw/workspace",
      "compaction": {
        "mode": "safeguard"
      },
      "timeoutSeconds": 1800,
      "maxConcurrent": 4,
      "subagents": {
        "maxConcurrent": 8
      }
    }
  },

<USERNAME> の部分は自分のユーザー名が最初から入っているはずです。

Ollama を使う場合も同じように設定できます。以下のページ Ollama を含めたさまざまな設定例を置いてあるのでこちらも参照してください。

画像認識用モデルの設定

OpenClaw は画像の認識を行うことができます。Slack や Discord へ投稿した画像はもちろんですが、ローカル PC 上に保存したファイルの認識もしてくれます。この場合は LLM (VLM) を使った認識が行われます。

Claude や GPT-5, Gemini 3 などの商用の推奨モデルは最初からマルチモーダルなので画像の認識が可能です。ですが Local LLM を使用する場合は対応していないことが多いので、OpenClaw では画像識別用に別途 VLM を設定する機能があります。

以下のように、agents.defaults.model.primary とは別に画像認識用の VLM を agents.defaults.imageModel.primary に設定します。以下の例では「 qwen3-vl-8b 」を設定しています。

  "agents": {
    "defaults": {
 
      "model": {
        "primary": "lmstudiolocalpc/openai/gpt-oss-120b"
      },

 
      "imageModel": {
        "primary": "lmstudiolocalpc/qwen/qwen3-vl-8b"
      },


      "workspace": "/home/<USERNAME>/.openclaw/workspace",
      "compaction": {
        "mode": "safeguard"
      },
      "timeoutSeconds": 1800,
      "maxConcurrent": 4,
      "subagents": {
        "maxConcurrent": 8
      }
    }
  },

qwen3-vl-8b を含めたプロバイダ側のモデルの定義は以下のとおりです。qwen3-vl-8b 側の input の項目 ( models.providers.lmstudiolocalpc.models[1].input ) に “image” を追加しており、これで画像を受け取れるようにします。

  "models": {
    "providers": {
      "lmstudiolocalpc": {
        "baseUrl": "http://<PC-IP-ADDRESS>:1234/v1",
        "apiKey": "lmstudio",
        "api": "openai-completions",
        "models": [
          {
            "id": "openai/gpt-oss-120b",
            "name": "openai/gpt-oss-120b",
            "reasoning": true,
            "input": [
              "text"
            ],
            "cost": {
              "input": 0,
              "output": 0,
              "cacheRead": 0,
              "cacheWrite": 0
            },
            "contextWindow": 65536,
            "maxTokens": 32768
          },
          {
            "id": "qwen/qwen3-vl-8b",
            "name": "qwen/qwen3-vl-8b",
            "reasoning": true,
            "input": [
              "text",
              "image"
            ],
            "cost": {
              "input": 0,
              "output": 0,
              "cacheRead": 0,
              "cacheWrite": 0
            },
            "contextWindow": 32768,
            "maxTokens": 32768
          }
        ]
      }
    }
  },

これで画像認識非対応の Local LLM 利用時でも画像の識別ができるようになります。また GLM-5 などのクラウドモデルで Vision に対応していない場合にも、画像認識を Local LLM で補うことができるようになります。

商用 API などの既存のモデルが image 入力に対応しているかどうかは、以下のコマンドで確認することができます。

openclaw models list --all

OpenClaw で Local LLM を使う場合の注意点

OpenClaw のエージェントは自律的な動作を行うのでさまざまなリスクがあります。例えばネットから得た情報には悪意を持ったプロンプトが含まれている可能性があります。偽の指示に騙されないようにするためには、ある程度パラメータ数の多い LLM が必要です。

OpenClaw ではサンドボックスなしにネットアクセスを許可する場合 300b 以上のモデルを推奨しているようで、パラメータ数が少ないモデルの場合は openclaw status 等のコマンド実行時に警告が表示されます。OpenClaw のインストーラーに Local LLM の選択肢が含まれていないのも、このあたりの事情によるものではないかと思われます。

そのため今回の説明では gpt-oss 120b を例に上げていますが、実際に使う場合はもっとパラメータ数が多いモデルを使うことをお勧めします。パラメータ数が少ない Local LLM をエージェントとして使ってみると、なかなか思い通りに動かなかったりと割と暴走しがちです。より上位モデルを使うと安定したりします。

もちろんサンドボックスなどクローズドな環境で動作テストに使う場合は利用できますので、テスト時のトークン数節約目的とか、いろいろと応用できるのではないかと思います。

Android 16 の Pixel 付属の機能で GPU 対応の Linux Desktop を使う

Google Pixel シリーズ用 Android 16 には試験機能として Linux のコマンドライン開発環境が入っています。2025年 12月の更新で Linux の GUI アプリケーションも実行できるようになっていたので試してみました。機種依存ですが GPU によるハードウェアアクセラレーションにも対応しているようです。

Android Developers Blog: Android 16 QPR2 is Released

↓ Pixel 10 Pro 上で Firefox, gimp, vscode を起動してみたところ。外部ディスプレイではなく Pixel の実機画面です。

Pixel 10 Pro 上で Firefox, gimp, vscode を起動してみたところ

↓ Pixel 10 Pro は GPU アクセラレーションに対応

Pixel 9a にはこの設定が無く、ソフトウエアレンダラが使われているようです。Linux の GUI アプリケーション自体は 9a でも実行できます。

Linux ターミナルのインストール

  1. 画面自動消灯の時間を 30分に変更
    • 設定 → ディスプレイとタップ → 画面自動消灯 → 30分を選択
    • ※ インストールが完了したら元の時間に戻しておいてください
  2. 開発者向けオプションを有効化
    • 設定 → デバイス情報 → ビルド番号 の欄を 7回タップ
  3. 開発者向けオプションから Linux ターミナルを有効化
    • 設定 → システム → 開発者向けオプション → Linux開発者環境 (試験運用版) を有効化
    • これで Pixel に「ターミナル」アプリが追加されます
  4. Linux のインストール
    • 「ターミナル」アプリを起動して「インストール」をタッチ
    • ホーム画面には自動的に追加されないので、アプリケーションドロワーから「ターミナル」のアイコンを探してください
  5. ターミナルが起動したら以下のコマンドを実行
sudo apt update
sudo apt upgrade -y
sudo apt install fonts-noto-cjk

これで Linux ターミナルが使えるようになります。GUI アプリケーションも利用可能です。

また以前のバージョンとは異なり、Linux 向けストレージの容量制限がなくなっていました。そのため設定からストレージサイズをいちいち拡張する必要はなく、そのまま利用することができます。

※ 画面の自動消灯時間を元に戻しておくのを忘れないようにしてください。

GUI アプリケーションの利用

ターミナルアプリの右上 (赤枠部分) に GUI アプリケーション用のボタンがあります。

最初は真っ黒で何も表示されていませんが、GUI アプリケーションを起動するとこのエリアに表示されます。CLI ターミナルとは別物で、ソフトキーボードの仕様も違います。Adnroid の「戻る」操作でターミナルに戻ります。

右端にマウスらしきアイコンがありますが、ソフトウエアマウスではないので注意。これは外部接続した Bluetooth / USB マウスを Linux 側でキャプチャするかどうかの切り替えです。

デフォルトでは Android 側のマウスカーソル(↓下の画像)が表示されます。この場合左ボタンしか反応せず、カーソルも Linux 画面外に移動可能で Android の操作ができます。

マウス切り替えのボタンをタッチすると Linux VM のマウスカーソル(↓下の画像)の直接操作になり、右ボタン、中ボタンが使えるようになります。カーソル移動範囲も Linux GUI 画面内に制限されます。GUI アプリケーションの操作時はこちらに切り替えておくことをお勧めします。

横全画面に切り替えた場合はソフトウエアキーボードが使えないので、Bluetooth / USB のキーボードやマウスが必要です。Android の「戻る」操作で元の画面に戻ります。

Linux 版 firefox を使ってみる例

ターミナル側で以下のコマンドを実行します。

sudo apt install firefox-esr -y
firefox-esr

これだけでは何も表示されないので右上のアイコンから GUI アプリケーション画面を開きます。以下のように起動できていることがわかります。

画面タッチでも使えますがマウスがないと細かい操作ができません。GUI 画面上で Firefox のウィンドウを閉じられない場合は、ターミナル側から Ctrl + C で止めてください。

Linux Desktop を試す

例にあげた firefox のように、そのまま起動すると全画面になります。複数のアプリケーションを実行できるように設定を変えてみます。

(1) /etc/systemd/user/weston.service を編集

「ExecStart=」の行があるので、--shell= 以降行末までを desktop に置き換えます。

ExecStart=/usr/bin/weston --modules=systemd-notify.so --xwayland --shell=kiosk-shell.so --continue-without-input

↓以下のように変更

ExecStart=/usr/bin/weston --modules=systemd-notify.so --xwayland --shell=desktop

(2) ~/.config/weston.ini を以下の内容で作成

[shell]
locking=false
panel-position=bottom
panel-height=32
fullscreen=false

panel の位置を下に移動したのは、一部のアプリケーションでタイトルバーに重なってウィンドウ操作ができなくなるためです。

(3) 一旦ターミナルアプリを終了します

すべてのターミナルで exit を実行して Linux ターミナルアプリを閉じます。Android の通知領域に以下のように「ターミナルを閉じています」と表示されている場合は、この通知が消えるまで待ってください。

(4) ターミナルアプリを再起動します

通知が消えて完全に終了したことを確認したら、再びターミナルを起動して GPU アプリケーション画面を開きます。しばらくすると weston のシンプルな Linux デスクトップ画面が表示されています。

  • 最初画面が真っ暗で何も表示されていない場合はしばらく待ってみてください。
  • それでも表示されない場合は画面のタッチ、外部接続マウスの操作やマウス切り替えボタンのタッチ、横全画面に切り替えてから「戻る」などの操作を行ってみてください。一定時間操作が無いために画面が暗転していることがあります。

画面が表示されたら、以下のようにタスクバー左端のアイコンから GUI 版ターミナルを開くことができます。

これで Linux の GUI アプリケーションをウィンドウモードで起動することができるようになります。

気がついたことなど

「GPU アクセラレーテッド レンダラ」の場合、アプリケーションによっては表示が崩れることがあります。Firefox など。「ソフトウエアレンダラ」に切り替えると安定します。

ソフトウエアレンダラの場合は Linux 側のマウスカーソルの追従が悪くなるようです。少々操作しづらいですが、ウィンドウの移動や範囲のドラッグなどマウス左ボタン押しながらの操作はスムーズなので描画が遅いわけではないようです。

ストレージ容量の制限はなくなりましたが、Linux VM 側で利用可能な RAM は以前と変わらず 4GB のままのようです。Pixel 10 Pro (RAM 16GB) でも Pixel 9a (RAM 8GB) でも同じ 4GB でした。

GUI アプリケーション側のソフトキーボードは、ターミナル側と操作方法が若干違います。Ctrl などの修飾キーがロックされずに同時押しです。

以下は Pixel 9a で firefox, gimp, vscode, blender を起動してみたところです。(ソフトウエアレンダラ)

Pixel 9a で firefox, gimp, vscode, blender を起動してみたところ

まだ不安定な部分もありますが、今後いろいろと改良されていくものと思われます。使用できるアプリケーションも増えますし、Pixel スマートフォン単体だけで PC のように使えるのは魅力的です。