linux」タグアーカイブ

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 のように使えるのは魅力的です。

Android 上で動く Linux 開発環境 (ターミナル)

スマートフォン Pixel の新しい OS 更新 (Android 15 2025/03/05 BPA1A.250305.019) で Linux 開発環境 (ターミナル) が使えるようになりました。まだ試験運用版 (Experimental) なので制限もありますが、普通のスマートフォン上で Debian の仮想マシンが動いています。Chromebook (ChromeOS) の Linux 開発環境や Windows の WSL2 と同じように Linux 向けのアプリケーションをそのまま走らせることができます。

以下の手順や注意事項は 2025/03 (試験運用) 版のものです。今後更新によっていろいろ変わる可能性があります。

有効化手順

  1. 作業中はスリープしないように、先に自動消灯時間を変更しておくことをお勧めします
    • 設定 → ディスプレイとタップ → 画面自動消灯 → 30分に変更
    • インストールや初期設定が終わったら元に戻してください
  2. もしまだ「開発者向けオプション」が有効になっていない場合以下の手順で有効化します
    • 設定 → デバイス情報 →「ビルド番号」を何度か(7回)タップして「開発者向けオプション」を有効化
  3. Linux 開発環境を有効化します
    • 設定 → 開発者向けオプション → Linux 開発環境 →「Android で Linux ターミナルを実行する」を On
  4. これでアプリ一覧 (アプリドロワー) に「ターミナル」アプリが追加されるので「ターミナル」アプリを起動します
  5. 初回は「インストール」をタップして 565MB のデータをダウンロードします
    • ダウンロードに時間がかかりますが、そのまま画面を切り替えないようにしてください
    • インストールが終わり「ターミナルを準備しています」の画面が始まったらコンソール画面になるまでしばらく待ちます
    • ターミナルが起動して Debian のコンソール画面になります
  6. ストレージサイズの変更 (オプション)
    1. デフォルトでは 5.9GB しか割り当てられていないので、先にストレージサイズを増やしておくことをお勧めします。不要な場合はスキップして構いません。
    2. ターミナルで以下のコマンドを実行
      • sudo halt
    3. 「Press ↲ to Recoonect」と表示されたらターミナルの右上の設定アイコン(歯車)をタップ
    4. 「ディスクサイズを変更」を選択し、5.9 GB から最大の 16GB まで増やして「適用」
    5. 自動的にターミナルが終了します
    6. もう一度ターミナルアプリを起動します
      • もしここで「修復不可能なエラー」と表示されてもリカバリしないでください
      • 一旦ターミナルアプリをタスク管理画面で終了させてから起動し直すと正常に繋がります
  7. 以下のコマンドを入力して OS の更新をします
    • sudo apt update ; sudo apt upgrade -y
    • 時間がかかりますが、終わるまでスリープさせずそのままの画面を維持しておいてください
  8. 更新が終わったら 1. で行った画面の自動消灯時間設定を元に戻します。

あとはそのまま Linux 環境として使えます。Docker も使えますので様々なアプリケーションを走らせることが可能です。Bluetooth キーボードがあると便利かもしれません。

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

トラブル対策など

ターミナルアプリと VM は別のプロセスですが連動もしています。おそらくターミナル起動時に VM が立ち上がり、終了すると VM も終了するようになっているようです。ただし VM が先に終了してターミナルだけ起動している状態になると Reconnecting 表示のまま進まなくなります。この場合はターミナルを起動し直してください。

修復不可能エラー画面が表示されても、よほどのケースでない限りリストアは不要なようです。リストアしても、同じ手順を行うと結局同じ状態になってしまうので、まずはターミナルの再起動を優先してください。

初期ストレージサイズが 5.9GB しかないため、大きなアプリケーションをインストールしようとすると途中でストレージがあふれてしまうことがあります。いろいろインストールを考えている場合は先に最大の 16GB まで拡張しておくことをお勧めします。

メモリ (RAM) を多く消費している状態で他のアプリに切り替えたりバックグラウンドに移行すると、VM のプロセス自体が kill されてしまうことがあります。インストール途中で強制切断されると中途半端な状態になってしまうので、初回のインストールや更新中は画面を切り替えないようにしてください。

その他気がついたこと、制限など

本体ストレージへのアクセス

/mnt/shared で本体ストレージの Downloads にアクセスできるようです。Android 側のブラウザでダウンロードしたファイルにアクセスすることができます。

また VM のストレージサイズが 16GB に制限されているので、大きなデータファイルをこちらに置いておくと容量を節約できるかもしれません。

RAM 容量

Pixel 8 (VRAM 8GB) を使用していますが、Linux VM 側で使用可能なメモリは 4GB 固定でした。そのためメモリを大量に使うコマンドは、Termux 上では動作するものの Linux VM (Linux 開発環境) ではメモリ不足で実行できない場合があります。

実際に Termux 上では ollama を使って LLM の gemma3:4b (6.4GB) を起動できますが VM 側 (Linux 開発環境) ではメモリ不足で読み込めませんでした。qwen2.5:3b (2.6GB) は動きます。

もしかしたら RAM を 12GB/16GB 搭載している他のデバイスではメモリ割り当てが異なってるかもしれません。

CPU は Tensor G3 の 9 コア全部有効になっています。

ターミナル

ターミナルはブラウザ上で動いているようです。

ターミナルを複数画面開くことはできませんが、sshd を起動して Android の ssh Terminal アプリや Termux を使えば複数のコンソール画面を使い分けることができます。なお ssh 接続する場合はデフォルトユーザーの droid にパスワードを設定しておく必要があります。

  1. sudo apt install openssh-server
  2. sudo passwd droid

自分の環境では VM に 192.168.0.2 が割り当てられていました。ssh Terminal アプリなどから droid@192.168.0.2 でログインできます。Termux の場合「ssh 192.168.0.2 -l droid」です。

リモート接続

VM にはプライベート IP が割り当てられているためスマートフォンの 外部からはそのままでは繋がりません。PC 等から ssh 接続したい場合は Termux を踏み台にしたり、VM 側から ssh でトンネルを作る必要があります。

VM 側
$ ssh -l <PCUSER> -R 9022:127.0.0.1:22 <PCIPADDR>

PC 側
$ ssh -p 9022 -l droid 127.0.0.1

私は VM 側 (Linux 開発環境) に Linux 版 Tailscale をインストールして接続しています。

対応機種

現時点では Google Pixel (Android 15) のみとなっているようです。

OS 標準の Linux 環境なので、特別なアプリをインストールしたり複雑な設定なしに使えるのは非常に便利です。まだ不安定な部分はありますが、利用できるアプリケーションの幅がだいぶ広がりました。スマートフォンには高性能な端末も多いので、Pixel 以外の対応も待ち遠しいです。

Proxmox VE の GPU パススルー設定

Proxmox VE の GPU パススルーを色々試しています。以下のページにまとめました。

GeForce の外付け GPU であれば、Proxmox 上の GUI だけで簡単に設定できることがわかりました。

AMD CPU はもともと設定不要ですし、Intel CPU でも Proxmox VE 8.2 から intel_iommu=on がデフォルトで有効化されており grub 上のカーネルオプションの設定が不要になっています。

実際に Ryzen 9 3950X + X570 にビデオカードを最大 4枚繋いでパススルーを行うことができました。

2枚はマザー上の x16 スロットに直接、もう一つは PCIe x1 からライザーケーブル経由、最後は M.2 スロットから OCulink で DEG1 に外部 GPU として接続しています。

それぞれ異なる VM に割り当ててもいいですし、全部同じ VM で使うこともできます。

例えば VRAM 8GB のビデオカードでも、3台集めれば 27b の LLM モデルを GPU で走らせることができます。GeForce RTX 2070 Super + GeForce GTX 1080 + GeForce GTX 1070 はいずれも VRAM 8GB ですが、3台使うことで ollama 上の Gemma2:27b が 13 token/s ほどになりました。CPU のみだと 1.5 token/s くらいです。

試した GPU は以下の通りです。動かなかったのは今のところ RADEON RX Vega 56 のみです。詳しくはまとめたページの方をご覧ください。

  • GeForce RTX 4060 Ti
  • GeForce RTX 2070 Super
  • GeForce GTX 1080
  • GeForce GTX 1070
  • GeForce GTX 970
  • GeForce GTX 960
  • RADEON RX 6400
  • RADEON RX 480

関連ページ

IvyBridge と N100 を比較する

OS サポートが切れた 12年前の Mac mini をずっと Linux マシンとして使用していましたが、今なら Intel N100 の方が速いのではないかと思い速度を比べてみました。N100 は AlderLake (第12世代) の E-Core のみ搭載した CPU です。

以下は Ubuntu 22.04 におけるコンパイル時間 (clang 14) を比較したものです。

PCCPUTDPClockCoreThreadコンパイル時間
Mac mini Late2012Core i7-3615QM45W3.3GHzIvyBridge4C 8T69.57
Mini PCIntel N10020W3.2GHzAlderLake(E)4C 4T59.67
  • ↑コンパイル時間の数値が小さい方が高速

ストレージもメモリもクロックもちょうど同じくらいの性能でしたが、N100 の方が 10秒ほど早くビルドが終わっています。N100 は Atom 系の省電力コアながら、第3世代 Core の IvyBridge よりも速いことがわかります。

搭載されているメモリとストレージは以下の通りです。

PCCPURAM 容量メモリの種類メモリ速度STORAGE
Mac mini Late2012Core i7-3615QM16GBDDR3-1600 x225.6 GB/sSATA SSD
Mini PCIntel N10016GBDDR4-3200 x125.6 GB/sSATA SSD

なお N100 の TDP はスペックを見ると 6W ですが、テストした PC の UEFI (BIOS) では PL1=20W, PL2=無効 に設定されていたため今回の結果は 20W 時の値になっています。

さらに N100 で vfpbench の値も調べてみました。IvyBridge と比較してみます。

PCCPUTDPClockSingle SpSingle DpMulti SpMulti Dp
Mac mini Late2012Core i7-3615QM45W3.3GHz51.7G26.1G193.4G97.0G
Mini PCIntel N10020W3.2GHz54.2G27.1G185.0G92.6G
  • ↑数値の単位は FLOPS、値が大きい方が高速

すべての結果は以下の場所にあります。

掲載した表の数値はピーク値のみです。これを見るとどちらもあまり差が生じていないように見えますが、その内訳は大きく異なっています。

IvyBridge は 256bit の浮動小数点演算パイプを 2本持っており、それぞれ加算と乗算を受け持ちます。FMA には非対応ですが AVX 256bit の add と mul 命令を同時に実行できるため、この組み合わせがピーク値になります。add または mul 命令単独の場合は片方のみが使われるため効率は半減します。

N100 は FMA に対応しているため 1命令で積和演算が可能です。その代わり 256bit の AVX 命令はクロックあたりひとつしか実行できず、256bit fma がピーク値になります。128bit の AVX/SSE であれば 2命令実行できているため、浮動小数点演算の実行パイプラインは 128bit が 2本あることがわかります。この構成は AMD の Jaguar 系と似ています。

これらの結果より FMA や AVX2 があるので互換性の面でも N100 が有利ですが、fma 以外の 256bit AVX 浮動小数点演算が混在するようなケースでは IvyBridge の方がスループットが高くなる可能性があります。

大まかに両者の性能がわかったところで、他の PC ともコンパイル時間を比較してみたいと思います。

以下の表は同じ Linux 上での比較です。Ubuntu 22.04 Clang 14。SteamDeck は Distrobox を使用しています。

PCCPUTDPThreadCoreSTORAGEコンパイル時間
Mac mini Late2012Core i7-3615QM45W4C 8TIvyBridgeSATA SSD69.57 秒
Mini PCIntel N10020W4C 4TAlderLake(E)SATA SSD59.67 秒
SteamDeck LCDCustom APU 040515W4C 8TZen2NVMe 452.31 秒
Desktop PCRyzen 5 260065W6C 12TZen1+SATA SSD29.78 秒
  • ↑コンパイル時間の数値が小さい方が高速

以下の表は同じ Ubuntu 22.04 Clang 14 ですが Windows 上の WSL2 を使用しています。同じ N100 や Ryzen 5 2600 で比べるとわかるように、Native の Linux よりも若干遅めの数値になります。

CPUTDPTHREADCORESTORAGEコンパイル時間
Intel N10020W4C 4TAlderLake(E)NVMe 367.26 秒
Core i5-940065W6C 6TCoffeeLakeNVMe 355.86 秒
Core i7-4790K88W4C 8THaswellSATA SSD39.77 秒
Core i7-6700K65W4C 8TSKyLakeSATA SSD35.83 秒
Ryzen 5 5560U25W6C 12TZen3NVMe 335.04 秒
Ryzen 5 260065W6C 12TZen1+NVMe 332.10 秒
Ryzen 5 360065W6C 12TZen2NVMe 322.78 秒
Ryzen 7 4750G45W8C 16TZen2NVMe 322.36 秒
Ryzen Z1 Extreme25W8C 16TZen4NVMe 417.33 秒
Ryzen 9 3950X105W16C 32TZen2NVMe 39.17 秒
Core i7-1370065W16C 24TRaptorLakeNVMe 48.39 秒
  • ↑コンパイル時間の数値が小さい方が高速

やはりコア数が多い CPU や新しいアーキテクチャの CPU、消費電力の高い CPU は性能が上がります。

下の表はさらに Android 上の Termux (Clang 18.1.7) での計測してみた結果です。モバイルデバイスも CPU もコア数が多いので今回のケースでは速度が出ています。ただし RAM 容量が少ないことや放熱の問題があるので、大きなプロジェクトや長時間の連続稼働にはおそらく向きません。

PCCPUTHREADCOREコンパイル時間
iPlay 50 Mini ProHelio G998C 8T (2+6)A76 / A5553.68 秒
iPlay 50 ProHelio G998C 8T (2+6)A76 / A5547.45 秒
Huawei P30 ProKirin 9808C 8T (4+4)A76 / A5527.73 秒
Pixel 8aTensor G39C 9T (1+4+4)X3 / A715 / A51021.94 秒
Pixel 8Tensor G39C 9T (1+4+4)X3 / A715 / A51020.35 秒
  • ↑コンパイル時間の数値が小さい方が高速

N100 搭載 PC は安価で入手できることもあり人気があります。Raspberry Pi 5 を一通り揃えても同じくらいの価格帯になりますので、入手のしやすさは魅力といえます。IvyBridge の Core i7-3615QM との比較でも十分 N100 の方が速いことがわかりました。

ただし思ったよりも差は少なく、他の PC と比べると性能には限界があります。もし少ない価格差で Ryzen 5 5560U にアップグレードできるならビルド時間は約半分、浮動小数点演算性能も数倍になりますので、用途によってはこちらの方がコストパフォーマンスは良いかもしれません。

関連エントリ