Google Cloud で Codex CLI を動かす ― CPU VM から GPU VM の Gemma4 26B を利用する

1. 概要

先日、こちらのリンク先の手順で Coding Agent の Qwen-Code をローカル環境で実行しました。利用可能な VRAM (ビデオメモリ) が 4GiB (4096MiB) 以下の NVIDIA GeForce GTX 1650 を搭載した PC で動作確認しました。LLM (qwen3:1.7b) を Ollama を使って動作させ、Qwen-Code と Ollama が HTTP で通信する構成で動作確認しました。Qwen-Code と Ollama の間の HTTP の通信内容も確認しました。

今回は Coding Agent として Qwen-Code ではなく OpenAI Codex CLI を使用し、同様の動作確認をしました。Qwen3 1.7B より大きな LLM を試したかったので Google Cloud 上の GPU VM で実行しました。

今回試した内容は Google Cloud の使用開始の無料クレジット 300 ドル (90日間以内) の範囲内で試すことができました。ここに記載した動作確認以外の操作も試しましたが、今のところかかった費用は 1,329円 (約 8.52 ドル) です。GPU VM は無料トライアルの状態では使用できなかったため、有料版に切り替えました。有料版に切り替えても 300 ドル (90日間以内) の無料クレジットは使用し続けられるようでした。

2. システム構成

下記のようなシステム構成で動作確認しました。

  • Google Cloud
    • CPU VM
      • Codex CLI をインストールして実行
      • LLM へのリクエストを GPU VM へ送信
    • GPU VM
      • Ollama をインストールして実行
      • Gemma4 26B (gemma4:26b) を LLM として配置
      • GPU を利用して LLM を実行
    • ネットワーク
      • CPU VM → GPU VM の内部通信
      • 外部 IP(External IP)は使用しない構成
  • ローカル PC
    • SSH / IAP を利用して CPU VM へ接続
    • CPU VM 上で Codex CLI を操作

図にすると下のようになります。

┌─────────────────────────────────────────────────────────┐
│                      Google Cloud                       │
│                                                         │
│   ┌──────────────────┐       ┌──────────────────┐       │
│   │      CPU VM      │       │      GPU VM      │       │
│   │                  │       │                  │       │
│   │    Codex CLI     │──────▶│      Ollama      │       │
│   │                  │  LLM  │                  │       │
│   └──────────────────┘       └────────┬─────────┘       │
│                                       │                 │
│                                       ▼                 │
│                               ┌─────────────┐           │
│                               │ gemma4:26b  │           │
│                               └─────────────┘           │
│                                                         │
│                       No External IP                    │
└─────────────────────────────────────────────────────────┘
                         ▲
                         │
                     SSH / IAP
                         │
                  ┌─────────────┐
                  │Local Machine│
                  └─────────────┘

処理の流れは下記のようになります。

Local Machine
      │
   SSH / IAP
      │
      ▼
   CPU VM
      │
   Codex CLI
      │
      │ LLM Request
      ▼
   GPU VM
      │
    Ollama
      │
      ▼
  gemma4:26b
3. ローカル PC への gcloud のインストールと設定
3.1. ローカル PC への gcloud のインストール

まず、Google Cloud の使用を開始します。後で変更しても大丈夫ですが、GPU VM を使用するため有料版にします。

WSL2 上の Ubuntu のシェルから操作したかったのでローカル PC の Ubuntu に gcloud コマンドをインストールしました。

Ubuntu のシェルで下記のコマンドを順に入力し、gcloud コマンドを使用できるようにしました。

$ sudo apt update
$ sudo apt upgrade
$ sudo apt install -y ca-certificates gnupg curl
$ curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | sudo gpg --dearmor -o /usr/share/keyrings/cloud.google.gpg
$ echo "deb [signed-by=/usr/share/keyrings/cloud.google.gpg] https://packages.cloud.google.com/apt cloud-sdk main" | sudo tee /etc/apt/sources.list.d/google-cloud-sdk.list
$ sudo apt update
$ sudo apt install -y google-cloud-cli

下記のコマンド gcloud –version を実行しました。私の環境では下記のようになりました。

fukagai@LAPTOP-EU3HB722:~$ gcloud --version
Google Cloud SDK 583.0.0
alpha 2026.08.31
beta 2026.08.31
bq 2.1.38
bundled-python3-unix 3.14.7
core 2026.08.31
gcloud-crc32c 1.0.0
gsutil 5.37
preview 2026.08.31
3.2. gcloud の初期設定

下記の例では、予め Google Cloud の Web 管理画面 Google Cloud Console で Google Cloud のプロジェクト codex-cli-project を作成してから gcloud init コマンドを実行しました。gcloud init コマンドからも新しいプロジェクトを作成できそうです。

下記のコマンドを実行します。

$ gcloud init

下記のように表示されるので Y を入力し、Enter を押します。

You must sign in to continue. Would you like to sign in (selecting "Y" will open your browser to the sign-in page where you
complete authentication) (Y/n)?

下記の例のような長い URL が表示されます。こちらをコピーして Web ブラウザのアドレス欄に貼り付けます。

https://accounts.google.com/o/oauth2/auth?response_type=code&...&code_challenge_method=...

Web ブラウザでユーザー認証がされます。

gcloud init を実行したシェルに下記の例のようなメッセージが表示されます。ここでプロジェクトを選択します。今回は予め Web 管理画面で作成しておいたプロジェクト codex-cli-project を選択するようにしたため、1 を入力して Enter を押しました。

Pick cloud project to use:
 [1] codex-cli-project
 ...
 [5] Enter a project ID
 [6] Create a new project
Please enter numeric choice or text value (must exactly match list item): 
3.3. gcloud の設定確認

コマンド gcloud config list を入力すると設定情報を確認できます。

fukagai@LAPTOP-EU3HB722:~$ gcloud config list
[core]
account = XXXXXXXXX@gmail.com
disable_usage_reporting = True
project = codex-cli-project

Your active configuration is: [default]
4. Compute Engine API を有効化

Compute Engine API を有効化します。Compute Engine API は、Google Cloud の Compute Engine(仮想マシン)をプログラムやコマンドから操作するための API です。

下記のコマンドで Compute Engine API を有効化します。

$ gcloud services enable compute.googleapis.com

Compute Engine API が有効化されていれば、下記のように表示されます。

fukagai@LAPTOP-EU3HB722:~$ gcloud services list --enabled | grep compute
compute.googleapis.com               Compute Engine API
5. CPU VM を作成 (Codex CLI 実行用)

下記の設定で Codex CLI 実行用の VM を作成しました。

プロジェクト codex-cli-project
VM名 codex-cli-vm
リージョン asia-northeast1
ゾーン asia-northeast1-a
マシンタイプ e2-standard-2
OS Ubuntu 24.04 LTS
GPU なし

下記のコマンドを実行し、上記の表の設定の VM を作成しました。Codex CLI 実行用の VM になります。

$ gcloud compute instances create codex-cli-vm \
  --zone=asia-northeast1-a \
  --machine-type=e2-standard-2 \
  --image-family=ubuntu-2404-lts-amd64 \
  --image-project=ubuntu-os-cloud

上記のコマンドの実行に成功すると、下記のように表示されます。

Created [https://www.googleapis.com/compute/v1/projects/codex-cli-project/zones/asia-northeast1-a/instances/codex-cli-vm].
NAME          ZONE               MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP   STATUS
codex-cli-vm  asia-northeast1-a  e2-standard-2               10.146.0.2   34.180.115.1  RUNNING

下記のコマンドを実行し、作成した VM に ssh で接続します。

$ gcloud compute ssh codex-cli-vm --zone=asia-northeast1-a

下記の出力は、ssh 接続後、lsb_release -a コマンドを実行した例になります。

fukagai@codex-cli-vm:~$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 24.04.4 LTS
Release:        24.04
Codename:       noble

下記のコマンドを実行し、VM からインターネットに接続できることを確認しました。

fukagai@codex-cli-vm:~$ curl -I https://www.google.com
HTTP/2 200
content-type: text/html; charset=ISO-8859-1
...
6. 外部 IP を削除

今回は、codex-cli-vm の外部 IP を削除したうえで IAP 経由で ssh 接続します。IAP(Identity-Aware Proxy)は、Google Cloud の VM などへ安全にアクセスするための仕組みです。IAP を利用すると、VM に外部 IP を設定しなくても認証されたユーザーが ssh などで VM へ接続できます。

補足

外部 IP を削除することで、VM をインターネットから直接アクセスできない構成にします。外部からの ssh 接続などを直接受け付ける必要がなくなるため、VM の公開範囲を狭め、セキュリティを高めることができます。ただし、外部 IP を削除すると VM からインターネットへアクセスすることもできなくなるため、外向きの通信には後ほど Cloud NAT を利用します。

まず、VM からログアウトします。

$ exit

ログアウト後、ローカルの Linux から下記のコマンドを実行し、現在の外部 IP を確認します。下記の例では 34.180.115.1 となっています。

fukagai@LAPTOP-EU3HB722:~$ gcloud compute instances describe codex-cli-vm \
  --zone=asia-northeast1-a \
  --format="get(networkInterfaces[0].accessConfigs[0].natIP)"
34.180.115.1

外部 IP を削除する前に VM を停止します。

$ gcloud compute instances stop codex-cli-vm \
  --zone=asia-northeast1-a

下記のコマンドを実行し、外部 IP のアクセス構成名を参照します。下記の例では external-nat です。

fukagai@LAPTOP-EU3HB722:~$ gcloud compute instances describe codex-cli-vm \
  --zone=asia-northeast1-a \
  --format="get(networkInterfaces[0].accessConfigs[0].name)"
external-nat

アクセス構成名 external-nat を指定し、下記のコマンドで外部 IP を削除します。

$ gcloud compute instances delete-access-config codex-cli-vm \
  --zone=asia-northeast1-a \
  --access-config-name="external-nat"

もう一度 VM を起動します。

$ gcloud compute instances start codex-cli-vm \
  --zone=asia-northeast1-a

下記のコマンドを実行し、外部 IP (EXTERNAL_IP) が空になったことを確認します。

fukagai@LAPTOP-EU3HB722:~$ gcloud compute instances list
NAME          ZONE               MACHINE_TYPE   PREEMPTIBLE  INTERNAL_IP  EXTERNAL_IP  STATUS
codex-cli-vm  asia-northeast1-a  e2-standard-2               10.146.0.2                RUNNING

下記のコマンドを実行し、IAP 経由で ssh 接続します。

$ gcloud compute ssh codex-cli-vm \
  --zone=asia-northeast1-a \
  --tunnel-through-iap

VM に入って下記のコマンドを実行すると、今度は下記のようになります。VM からインターネットへアクセスできなくなっています。

fukagai@codex-cli-vm:~$ curl -I https://www.google.com
curl: (28) Failed to connect to www.google.com port 443 after 300411 ms: Timeout was reached
7. Cloud NAT を作成

外部 IP 削除後、VM からインターネットに接続できるようにするため、Cloud NAT を作成します。

VM からログアウトし、ローカルの Linux で下記のコマンドを順に実行します。

まず、下記のコマンドを実行し、Cloud Router を作成します。

fukagai@LAPTOP-EU3HB722:~$ gcloud compute routers create codex-cli-router \
  --network=default \
  --region=asia-northeast1
Creating router [codex-cli-router]...done.
NAME              REGION           NETWORK
codex-cli-router  asia-northeast1  default

Cloud Router が作成されたことを確認します。

fukagai@LAPTOP-EU3HB722:~$ gcloud compute routers list \
  --regions=asia-northeast1
NAME              REGION           NETWORK
codex-cli-router  asia-northeast1  default

次に下記のコマンドを実行し、Cloud NAT を作成します。

fukagai@LAPTOP-EU3HB722:~$ gcloud compute routers nats create codex-cli-nat \
  --router=codex-cli-router \
  --region=asia-northeast1 \
  --auto-allocate-nat-external-ips \
  --nat-all-subnet-ip-ranges
Creating NAT [codex-cli-nat] in router [codex-cli-router]...done.

Cloud Nat が作成されたことを確認します。

fukagai@LAPTOP-EU3HB722:~$ gcloud compute routers nats list \
  --router=codex-cli-router \
  --region=asia-northeast1
NAME           NAT_IP_ALLOCATE_OPTION  SOURCE_SUBNETWORK_IP_RANGES_TO_NAT  ENDPOINT_TYPES
codex-cli-nat  AUTO_ONLY               ALL_SUBNETWORKS_ALL_IP_RANGES       ENDPOINT_TYPE_VM

もう一度、下記のコマンドで VM にログインし、

fukagai@LAPTOP-EU3HB722:~$ gcloud compute ssh codex-cli-vm \
  --zone=asia-northeast1-a \
  --tunnel-through-iap

下記のコマンドを実行します。今度は VM からインターネットに接続できています。

fukagai@codex-cli-vm:~$ curl -I https://www.google.com
HTTP/2 200
content-type: text/html; charset=ISO-8859-1
...

下記の図は、今回作成した Cloud Router と Cloud NAT の関係を表した構成図になります。Cloud Router と Cloud NAT を用意することで外部 IP を持たない VM からインターネットにアクセスできるようにしています。

codex-cli-project
│
├─ default VPC
│    │
│    └─ codex-cli-vm
│         └─ 外部IPなし
│
└─ asia-northeast1
     │
     └─ codex-cli-router
          │
          └─ codex-cli-nat
8. CPU VM に Codex CLI をインストール

下記のコマンドを実行し、CPU VM に Codex CLI をインストールします。

$ curl -fsSL https://chatgpt.com/codex/install.sh | sh

次に下記のコマンドを順に実行し、インストールした Codex CLI のバージョンを確認しました。

fukagai@codex-cli-vm:~$ source /home/fukagai/.bashrc
fukagai@codex-cli-vm:~$ codex --version
codex-cli 0.153.2

下記のコマンド codex を入力し、Codex CLI を起動します。

$ codex

下の画像のようなテキストが表示されます。「2. Sign in with Device Code」を上下キーで選択し、Enter キーを押します。

下記のようなテキストが表示されます。ブラウザのアドレスに「https://auth.openai.com/codex/device」を貼り付け、Google アカウント等を選択します。その後、下記の例の「XXXXX-XXXXX」に表示される文字列をブラウザに貼り付けると認証されます。

  Welcome to Codex, OpenAI's command-line coding agent

  Finish signing in via your browser

  1. Open this link in your browser and sign in

  https://auth.openai.com/codex/device

  2. Enter this one-time code after you are signed in (expires in 15 minutes)

  XXXXX-XXXXX

  Continue only if you started this login in Codex. If a website or another person gave you this code, cancel.

  Press esc to cancel

ブラウザでの認証が済むと、下の画像のような表示になります。プロンプトに文字列を入力し、Codex CLI の利用を開始することができます。下の画像の例では LLM として OpenAI の GPT 5.6 Terra が選択されています。ここでプロンプトに文字を入力して Codex CLI を利用する場合は、インターネット上の OpenAI の GPT 5.6 Terra が LLM として利用されます。

Ctrl キーと C キーを同時に押して Codex CLI を終了させます。

以降の手順では、Google Cloud 上の GPU VM に LLM を用意し、Codex CLI から GPU VM 上の LLM を利用できるようにします。

9. GPU VM を作成 (LLM 実行用)

下記のコマンドを実行し、GPU を使用できる VM をプロジェクト codex-cli-project に一つ作成する準備をします。下記のコマンドの example@gmail.com には使用している Google アカウントのメールアドレスをセットします。

$ gcloud quotas preferences create \
  --service=compute.googleapis.com \
  --project=codex-cli-project \
  --quota-id=GPUS-ALL-REGIONS-per-project \
  --preferred-value=1 \
  --email="example@gmail.com" \
  --justification="Need 1 GPU for an NVIDIA L4 Standard VM used for an Ollama/Codex CLI experiment."

下記の設定内容で GPU VM を作成します。ゾーン asia-northeast1-a と asia-northeast1-b には GPU L4 の空きがなく作成できなかったため、ゾーン asia-northeast1-c に作成しました。

VM名 gpu-ollama-vm
マシンタイプ g2-standard-4
GPU NVIDIA L4 × 1
GPUメモリ 24 GB
OS Ubuntu 24.04 LTS
ブートディスク 50 GB pd-balanced
リージョン asia-northeast1
ゾーン asia-northeast1-c
VPC default
Provisioning Standard
外部IP 作成後に削除

下記のコマンドで上記の表の設定の GPU VM を作成しました。

$ gcloud compute instances create gpu-ollama-vm \
  --zone=asia-northeast1-c \
  --machine-type=g2-standard-4 \
  --accelerator=type=nvidia-l4,count=1 \
  --maintenance-policy=TERMINATE \
  --provisioning-model=STANDARD \
  --image-project=ubuntu-os-cloud \
  --image-family=ubuntu-2404-lts-amd64 \
  --boot-disk-size=50GB \
  --boot-disk-type=pd-balanced \
  --network=default

下記のコマンドを実行し、GPU VM の外部 IP を削除しました。

$ gcloud compute instances delete-access-config gpu-ollama-vm \
  --zone=asia-northeast1-c \
  --access-config-name="external-nat"

下記のコマンドの実行結果が、

$ gcloud compute instances list

下記のようになったのを確認しました。

NAME           ZONE               MACHINE_TYPE   INTERNAL_IP  EXTERNAL_IP  STATUS
codex-cli-vm   asia-northeast1-a  e2-standard-2  10.146.0.2                TERMINATED
gpu-ollama-vm  asia-northeast1-c  g2-standard-4  10.146.0.3                RUNNING

GPU VM も、先ほどプロジェクト codex-cli-project 用に作成した Cloud NAT を使用してインターネットにアクセスすることができます。

 自宅 PC
   │
   │ IAP
   ▼
┌──────────────────────────┐
│ VPC: default             │
│                          │
│ codex-cli-vm             │
│ 10.146.0.2               │
│                          │
│ gpu-ollama-vm            │
│ 10.146.0.3               │
│ NVIDIA L4                │
└────────────┬─────────────┘
             │
             │ Cloud NAT
             ▼
          Internet
10. GPU VM に Ollama 環境を構築

下記のコマンドで GPU VM に ssh でログインします。

$ gcloud compute ssh gpu-ollama-vm \
  --zone=asia-northeast1-c \
  --tunnel-through-iap

次に、NVIDIA ドライバをインストールして、nvidia-smi を実行できるようにします。

下記のコマンドで ubuntu-drivers-common をインストールします。

$ sudo apt update
$ sudo apt install -y ubuntu-drivers-common

下記のコマンドで推奨ドライバ (recommended) を確認します。

$ ubuntu-drivers devices
...
model    : AD104GL [L4]
...
driver   : nvidia-driver-595-open - distro non-free recommended
...

下記のコマンドで推奨ドライバ nvidia-driver-595-open をインストールします。

$ sudo apt install -y nvidia-driver-595-open

上記のコマンドが完了したら下記のコマンドでリブートします。

$ sudo reboot

IAP 接続は一度切断されるため、下記のコマンドで PC から再度 GPU VM に接続します。

$ gcloud compute ssh gpu-ollama-vm \
  --zone=asia-northeast1-c \
  --tunnel-through-iap

nvidia-smi コマンドを実行できるようになります。

fukagai@gpu-ollama-vm:~$ nvidia-smi
Fri Sep  4 02:24:47 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 595.84                 Driver Version: 595.84         CUDA Version: 13.2     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA L4                      Off |   00000000:00:03.0 Off |                    0 |
| N/A   51C    P8             14W /   72W |       0MiB /  23034MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|  No running processes found                                                             |
+-----------------------------------------------------------------------------------------+

下記のコマンドを実行し、Ollama をインストールします。

$ curl -fsSL https://ollama.com/install.sh | sh

下記のバージョンの Ollama がインストールされました。

$ ollama --version
ollama version is 0.33.2

下記のコマンドを実行し、Ollama で Gemma4 26B を利用できるようにしました。

$ ollama pull gemma4:26b

下記のコマンドを実行し、Ollama サービスの設定を変更しました。

$ sudo systemctl edit ollama

上記のコマンド実行後、起動されるエディタで下記のような環境変数をセットしました。Ollama 上で動作する LLM の Context Length を 65,536 に変更し、127.0.0.1 以外からの Ollama のポート 11434 へのアクセスを可能にする変更になります。

[Service]
Environment="OLLAMA_CONTEXT_LENGTH=65536"
Environment="OLLAMA_HOST=0.0.0.0:11434"

設定ファイル更新後、下記のコマンドを実行して Ollama サービスに変更を反映させました。

$ sudo systemctl daemon-reload
$ sudo systemctl restart ollama

Codex CLI が動作する CPU VM (codex-cli-vm) から Ollama が動作する GPU VM (gpu-ollama-vm) に下記のようなネットワーク構成でアクセスします。CPU VM から GPU VM への通信だけを許可するように Google Cloud のファイアウォールで制限をかけたほうが良いのですが、今回は簡単な動作確認のため、この制限の設定は省きます。

codex-cli-vm
10.146.0.2
      │
      │ TCP 11434
      ▼
gpu-ollama-vm
10.146.0.3
11. GPU VM での Codex CLI の利用 (設定ファイルの取得)

Codex CLI で LLM として Gemma4 26B を使用するための設定ファイルを出力するため、GPU VM 上にも Codex CLI をインストールしました。

下記のコマンドを実行し、GPU VM に Codex CLI をインストールしました。

$ curl -fsSL https://chatgpt.com/codex/install.sh | sh

次に下記のコマンドを順に実行し、インストールした Codex CLI のバージョンを確認しました。

$ source /home/fukagai/.bashrc
$ codex --version
codex-cli 0.153.2

下記のコマンドで Ollama から Codex CLI を起動しました。下記のように gemma4:26b を選択しました。

fukagai@gpu-ollama-vm:~$ ollama launch codex --config
Select model for Codex: Type to filter...

  Recommended
    glm-5.3-flash:cloud (Sign in required)
      Fast reasoning for coding and agentic workloads with 1M context and native image understanding
    glm-5.3:cloud
      Long-horizon coding and agentic engineering with deep reasoning and a 1M context
    deepseek-v4-flash:cloud
      Fast coding and agentic tool use with 1M context
    gemma4:31b-cloud
      Agentic workflows and multimodal reasoning
  ▸ gemma4:26b
      Agentic workflows and multimodal reasoning

  More
    gemma4:12b
    qwen3:14b
    qwen3:8b

↑/↓ navigate • enter select • ← back

上記の設定画面の More のところに表示されているのは別途 ollama pull でこの GPU VM にダウンロードしていた他のモデルです。これらのモデルを選択して Codex CLI を起動することも可能です。

次の画面で Codex CLI を起動するかの確認があり、Yes を選択すると選択した LLM を使用する設定で Codex CLI が起動されます。ここまで実行すると下記のような設定ファイルが生成されます。

fukagai@gpu-ollama-vm:~$ cat ~/.codex/ollama-launch.config.toml
model = "gemma4:26b"
model_provider = "ollama-launch"
model_catalog_json = "/home/fukagai/.codex/model.json"

[model_providers.ollama-launch]
name = "Ollama"
base_url = "http://127.0.0.1:11434/v1/"
wire_api = "responses"

[projects."/home/fukagai"]
trust_level = "trusted"

下記のファイルの “context_window”: 65536 は、動作確認用に Ollama の Context Length の値に合わせて私が更新した値になります。最初は Gemma4 26B が利用可能な Context Length の最大値 262144 がセットされていました。Codex CLI 側がモデルの利用可能な Context Length として想定する値になります。

fukagai@gpu-ollama-vm:~$ cat ~/.codex/model.json
{
  "models": [
    {
      "base_instructions": "",
      "context_window": 65536,
      "default_verbosity": "low",
      "display_name": "gemma4:26b",
      "experimental_supported_tools": [],
      "input_modalities": [
        "text",
        "image"
      ],
      "priority": 0,
      "shell_type": "default",
      "slug": "gemma4:26b",
      "support_verbosity": true,
      "supported_in_api": true,
      "supported_reasoning_levels": [],
      "supports_parallel_tool_calls": false,
      "supports_reasoning_summaries": false,
      "truncation_policy": {
        "limit": 10000,
        "mode": "bytes"
      },
      "visibility": "list"
    }
  ]
}

上記のファイルを修正した後、設定内容が上書きされないように下記のコマンドで Codex CLI を起動して動作確認しました。GPU VM 上の Gemma4 26B を使用して Codex CLI を動作させられることを確認しました。

$ codex --profile ollama-launch
補足

Ollama の Context Length を 262144 にして動作させたところ、下記のコマンドの出力のように Gemma4 26B が L4 GPU だけに収まり切らなかったため、今回は 65536 で動作させました。

fukagai@gpu-ollama-vm:~/workspace$ ollama ps
NAME          ID              SIZE      PROCESSOR          CONTEXT    UNTIL
gemma4:26b    08ae7ec1744b    1.8 GB    31%/69% CPU/GPU    262144     2 minutes from now

Context Length が 65536 なら、下記のように 100% GPU メモリで動かせることを確認しています。Context Length をもう少し増やすこともできそうでしたが、この設定で動作確認しました。

fukagai@gpu-ollama-vm:~$ ollama ps
NAME          ID              SIZE      PROCESSOR    CONTEXT    UNTIL
gemma4:26b    08ae7ec1744b    1.0 GB    100% GPU     65536      4 minutes from now
fukagai@gpu-ollama-vm:~$ nvidia-smi
Fri Sep  4 06:01:35 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 595.84                 Driver Version: 595.84         CUDA Version: 13.2     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA L4                      Off |   00000000:00:03.0 Off |                    0 |
| N/A   53C    P0             28W /   72W |   19972MiB /  23034MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

+-----------------------------------------------------------------------------------------+
| Processes:                                                                              |
|  GPU   GI   CI              PID   Type   Process name                        GPU Memory |
|        ID   ID                                                               Usage      |
|=========================================================================================|
|    0   N/A  N/A            1676      C   ...local/lib/ollama/llama-server      19964MiB |
+-----------------------------------------------------------------------------------------+
12. CPU VM の Codex CLI から GPU VM の LLM を利用

GPU VM に出力された Ollama 上の Gemma4 26B 用の Codex CLI の設定ファイルを参考に、CPU VM に下記の二つの設定ファイルを用意しました。

fukagai@codex-cli-vm:~$ cat ~/.codex/ollama-gemma4_26b.config.toml
model = "gemma4:26b"
model_provider = "ollama-remote"
model_catalog_json = "/home/fukagai/.codex/model_gemma4_26b.json"

[model_providers.ollama-remote]
name = "Ollama Remote"
base_url = "http://10.146.0.3:11434/v1"
wire_api = "responses"

[projects."/home/fukagai/workspace"]
trust_level = "trusted"
fukagai@codex-cli-vm:~$ cat ~/.codex/model_gemma4_26b.json
{
  "models": [
    {
      "base_instructions": "",
      "context_window": 65536,
      "default_verbosity": "low",
      "display_name": "gemma4:26b",
      "experimental_supported_tools": [],
      "input_modalities": [
        "text",
        "image"
      ],
      "priority": 0,
      "shell_type": "default",
      "slug": "gemma4:26b",
      "support_verbosity": true,
      "supported_in_api": true,
      "supported_reasoning_levels": [],
      "supports_parallel_tool_calls": false,
      "supports_reasoning_summaries": false,
      "truncation_policy": {
        "limit": 10000,
        "mode": "bytes"
      },
      "visibility": "list"
    }
  ]
}

上記の設定ファイルを参照して Codex CLI を起動するコマンド codex –profile ollama-gemma4_26b を ~/workspace で実行して動作確認しました。

fukagai@codex-cli-vm:~/workspace$ codex --profile ollama-gemma4_26b
⚠ Codex's Linux sandbox uses bubblewrap and needs access to create user namespaces.

╭─────────────────────────────────────────────────╮
│ >_ OpenAI Codex (v0.153.2)                      │
│                                                 │
│ model:     gemma4:26b medium   /model to change │
│ directory: ~/workspace                          │
╰─────────────────────────────────────────────────╯

  Tip: New Build faster with Codex.

› Ask Codex to do anything

  gemma4:26b medium · ~/workspace

下記のようなプロンプトを入力して動作確認しました。

fukagai@codex-cli-vm:~/workspace$ codex --profile ollama-gemma4_26b
⚠ Codex's Linux sandbox uses bubblewrap and needs access to create user namespaces.

╭─────────────────────────────────────────────────╮
│ >_ OpenAI Codex (v0.153.2)                      │
│                                                 │
│ model:     gemma4:26b medium   /model to change │
│ directory: ~/workspace                          │
╰─────────────────────────────────────────────────╯

  Tip: New Build faster with Codex.

› 現在のディレクトリに system_info.py を作成してください。PythonでOS名、Pythonのバージョン、現在の作業ディレクトリを取得して表示するスクリプトにしてください。作成後、実行して結果を確認してください。

◦ Working (11s • esc to interrupt)

› Ask Codex to do anything

  gemma4:26b medium · ~/workspace

途中、下記のようにファイルを作成したりスクリプトを実行したりして良いかを確認するメッセージが何度か表示されました。全て Yes を選択して処理を進めました。

  Would you like to run the following command?

  Environment: local

  Reason: The system is returning a 'bwrap' sandbox error when trying to execute basic commands. I need escalated privileges to write files and execute the script.

  $ python3 -c '
  import platform
  import sys
  import os

  content = """import platform
  import sys
  import os

  def main():
      print(f"OS Name: {platform.system()} {platform.release()}")
      print(f"Python Version: {sys.version}")
      print(f"Current Working Directory: {os.getcwd()}")

  if __name__ == "__main__":
      main()
  """
  [… 28 lines] ctrl + a view all

› 1. Yes, proceed (y)
  2. No, and tell Codex what to do differently (esc)

  Press enter to confirm or esc to cancel
• Running python3 system_info.py

  Would you like to run the following command?

  Environment: local

  Reason: Executing the created system_info.py script.

  $ python3 system_info.py

› 1. Yes, proceed (y)
  2. Yes, and don't ask again for commands that start with `python3 system_info.py` (p)
  3. No, and tell Codex what to do differently (esc)

  Press enter to confirm or esc to cancel

下記のように意図した通りの動作をしました。

• system_info.py を作成し、実行しました。

  ### 作成したスクリプト (system_info.py)

  import platform
  import sys
  import os

  def main():
      print(f"OS Name: {platform.system()} {platform.release()}")
      print(f"Python Version: {sys.version}")
      print(f"Current Working Directory: {os.getcwd()}")

  if __name__ == "__main__":
      main()

  ### 実行結果

  OS Name: Linux 6.17.0-1022-gcp
  Python Version: 3.12.3 (main, Jul 15 2026, 23:46:41) [GCC 13.3.0]
  Current Working Directory: /home/fukagai/workspace

─ Worked for 3m 05s ────────────────────────────────────────────────────────────────────────────────────────────────────────

Codex CLI とは別のシェルで system_info.py が作成されていることも確認しました。

fukagai@codex-cli-vm:~/workspace$ cat system_info.py
import platform
import sys
import os

def main():
    print(f"OS Name: {platform.system()} {platform.release()}")
    print(f"Python Version: {sys.version}")
    print(f"Current Working Directory: {os.getcwd()}")

if __name__ == "__main__":
    main()
補足

Codex CLI を起動した際、一行目に下記のような警告が表示されたため、bubblewrap をインストールしました。

⚠ Codex could not find bubblewrap on PATH. Install bubblewrap with your OS package manager. See the sandbox prerequisites:
  https://developers.openai.com/codex/concepts/sandboxing#prerequisites. Codex will use the bundled bubblewrap in the
  meantime.

下記のコマンドで bubblewrap をインストールしました。

$ sudo apt update
$ sudo apt install -y bubblewrap
$ bwrap --version
bubblewrap 0.9.0

bubblewrap インストール後は下記のような警告に変わりました。

⚠ Codex's Linux sandbox uses bubblewrap and needs access to create user namespaces.
補足2

費用節約のため VM の動作を止めるときは下記の例のコマンドを実行します。

$ gcloud compute instances stop gpu-ollama-vm --zone=asia-northeast1-c

動作中の VM がないかは下記のコマンドで確認できます。下記の例のように Listed 0 items. と出力されたら動作中の VM はありません。

$ gcloud compute instances list --filter="status=RUNNING"
Listed 0 items.

停止させた VM を起動するときは下記の例のコマンドを実行します。

$ gcloud compute instances start gpu-ollama-vm --zone=asia-northeast1-c

返信を残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA