Home About Contact
Local LLM , LM Studio , Llama CPP

LM Studio ヘッドレス起動して Claude Code から使う 【Qwen3.5 9b】

Ubuntu Server に 12GB VRAM の GPU があるので、これで LM Studio を常時ヘッドレス起動しておくことにした。 12GB VRAM で Claude Code とセットで使うのに(Claude Opus 3.7 曰く)Qwen3.5 9b Q4_K_M がいいらしいのでそれを使う。

LM Studio のセットアップは済んでいることとする。 → LM Studio を試した

Qwen3.5 9b Q4_K_M を入れる:

lms get qwen/qwen3.5-9b

AI によると詳しく指定 lms get qwen/qwen3.5-9b-gguf のように、とあったのだが、 単に lms get qwen/qwen3.5-9b したら To download: Qwen3.5 9B Q4_K_M [GGUF] - 6.55 GB が落ちてきた。 詳細は不明。

いつもの手順で起動してモデルがどうなったか確認:

lms daemon up
lms load qwen/qwen3.5-9b --yes --context-length 65536
lms server start
$ curl http://localhost:1234/v1/models
{
  "data": [
    {
      "id": "qwen/qwen3.5-9b",
      "object": "model",
      "owned_by": "organization_owner"
    },
    {
      "id": "google/gemma-4-e4b",
      "object": "model",
      "owned_by": "organization_owner"
    },
    {
      "id": "text-embedding-nomic-embed-text-v1.5",
      "object": "model",
      "owned_by": "organization_owner"
    }
  ],
  "object": "list"
}

ちなみに ダウンロードしたモデルはここに配置された:

~/.lmstudio/models/lmstudio-community/Qwen3.5-9B-GGUF/Qwen3.5-9B-Q4_K_M.gguf

あとは使うだけなのですが、その Ubuntu Server には Claude Code がない。 すでに Claude Code をインストール済の MacBook Air から使うことにする。

ここでは仮に Ubuntu Server の IPアドレス が 192.168.10.100 でユーザー名は foo だっとして以後は話を進める。

Ubuntu Server 側

この手順で起動しておく:

lms daemon up
lms load qwen/qwen3.5-9b --yes --context-length 65536
lms server start

MacBook Air 側の準備

~/.bashrc に次の環境変数を記述:

# Claude Code for LM Studio
export ANTHROPIC_BASE_URL=http://localhost:1234
export ANTHROPIC_AUTH_TOKEN=lmstudio
export ANTHROPIC_MODEL="qwen/qwen3.5-9b"
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1

トンネルする:

ssh -L 1234:localhost:1234 foo@192.168.10.100

これ curl http://localhost:1234/v1/models して MacBook Air 側から LM Studio にアクセスできるか確認しておく。

Claude Code を起動して使う

MacBook Air 側で Claude Code を起動します。 先ほど設定した環境変数が有効になっていれば例のマスコット(Clawd)の下の辺りに qwen/qwen3.5-9b のように使用モデルが表示される。 あとは使うだけです。

ここにある pokemon_data.json ( https://github.com/kotofurumiya/pokemon_data/blob/master/data/pokemon_data.json ) を試しにプロジェクトルートに配置して

次の指示:

read ./pokemon_data.json and create xlsx file, headers are name and types.

これでこのエクセルデータ が生成できました。

⏺ Created successfully! The xlsx file has been generated at /path/to/pokemon_data.xlsx with:
  - 918 rows (pokemon entries)
  - 2 columns: name and types
The types column contains comma-separated type strings (e.g., "くさ、どく") for each pokemon.  

たぶん簡単過ぎる課題だったのでしょう。

Systemd に登録してスタートアップ時に自動起動

Create Systemd Service に説明があります。

/etc/systemd/system/lmstudio.service :

[Unit]
Description=LM Studio Server

[Service]
Type=oneshot
RemainAfterExit=yes
User=YOUR_USERNAME
Environment="HOME=/home/YOUR_USERNAME"
ExecStartPre=/home/YOUR_USERNAME/.lmstudio/bin/lms daemon up
ExecStartPre=/home/YOUR_USERNAME/.lmstudio/bin/lms load qwen/qwen3.5-9b --yes --context-length 65536
ExecStart=/home/YOUR_USERNAME/.lmstudio/bin/lms server start
ExecStop=/home/YOUR_USERNAME/.lmstudio/bin/lms daemon down

[Install]
WantedBy=multi-user.target

元のページで load openai/gpt-oss-20b --yes の部分だけ Qwen3.5 9b 用の記述に変えています。

パーミッション設定:

sudo chmod 777 /etc/systemd/system/lmstudio.service

設定を反映させます:

sudo systemctl daemon-reload
sudo systemctl enable lmstudio.service
sudo systemctl start lmstudio.service

sudo systemctl enable ... しないと Systemd にこの設定が反映されないので注意。

必要なら再起動して curl http://localhost:1234/v1/models が通るか確認しましょう。

追伸) LM Studio の代わりに llama.cpp を使う

LM Studio の UI 使わないのだったら llama.cpp 直接使えばよくない?

次のコードで起動:

#!/bin/bash

model=~/.lmstudio/models/lmstudio-community/Qwen3.5-9B-GGUF/Qwen3.5-9B-Q4_K_M.gguf

$HOME/.local/llama.cpp/llama-server -m $model \
  -ngl 99 \
  --jinja \
  --ctx-size 65536 \
  --host 127.0.0.1 \
  --port 1234

Claude Code の設定変更しないで使うために LM Studio と同じ 1234 ポートにしています。

llama.cpp のセットアップはこちら: Gemma 4 を macOS で使う llama cpp で