自律型AIアシスタントOpenClawを、Radeon 890M(iGPU)上のvLLMをバックエンドにして動かすまでの記録。
環境
| 項目 | 値 |
|---|---|
| CPU | AMD Ryzen AI 9 HX 370 |
| iGPU | Radeon 890M (gfx1150, RDNA 3.5) |
| VRAM | 2GB (BIOS UMA設定) |
| GTT | 64GB (amdgpu.gttsize=65536) |
| RAM | 91GB |
| OS | Ubuntu 24.04 |
| ROCm | 10.0.0 |
| Node.js | v25.3.0 |
vLLMのセットアップについては前回の記事を参照: vLLMをRadeon 890M(iGPU)で動かす
OpenClawとは
OpenClaw(旧Clawdbot/Moltbot)は、オープンソースの自律型AIアシスタント。ChatGPTやClaudeのようなチャットUIだけでなく、シェルコマンド実行やファイル操作などを自律的に行えるのが特徴。
- モデル非依存: OpenAI, Anthropic, Ollama, vLLM等に対応
- プライバシーファースト: データはすべてローカル保存
- MITライセンス
OpenClawのインストール
$ npm install -g openclaw@latest
$ openclaw --version
OpenClaw 2026.5.26 (10ad3aa)
初回セットアップにはウィザードを使う。
$ openclaw onboard --install-daemon
vLLMの起動
Radeon 890M向けのvLLMコンテナイメージを使う。
$ podman images | grep vllm
docker.io/rocm/vllm rocm7.13.0_gfx1150_ubuntu24.04_py3.13_pytorch_2.10.0_vllm_0.19.1 a3bc9f1c0307 36.7 GB
モデルの選択
Qwen3.8-27B(最新)を使いたかったが、いくつか問題があった。
AWQ量子化モデル(cyankiwi/Qwen3.8-27B-AWQ-INT4)の場合:
ValueError: Failed to find a kernel that can implement the WNA16 linear layer. Reasons:
ConchLinearKernel cannot implement due to: Group size (32) not supported
ExllamaLinearKernel cannot implement due to: Quant type (uint4) not supported
gfx1150(RDNA 3.5)ではAWQ/GPTQ等の量子化カーネルが動作しない。これらのカーネルはCDNA(MI250/MI300等)向けにコンパイルされており、コンシューマ向けRDNA GPUではサポートされていない。
結論: FP16で動くモデルを使うしかない。
Qwen3.8-27BのFP16は約54GBでGTT 64GBギリギリのため、まずはQwen3-8B(FP16, 約16GB) で動作確認することにした。
コンテナの起動
$ podman run -d \
--name vllm-qwen3 \
--device /dev/kfd --device /dev/dri \
--group-add 44 --group-add 110 \
-v ~/.cache/huggingface:/root/.cache/huggingface \
-p 8000:8000 \
--ipc=host \
-e HIP_VISIBLE_DEVICES=0 \
rocm/vllm:rocm7.13.0_gfx1150_ubuntu24.04_py3.13_pytorch_2.10.0_vllm_0.19.1 \
python3 -m vllm.entrypoints.openai.api_server \
--model Qwen/Qwen3-8B \
--dtype float16 \
--enable-auto-tool-choice \
--tool-call-parser qwen3_coder \
--host 0.0.0.0 \
--port 8000 \
--max-model-len 32768 \
--gpu-memory-utilization 0.6 \
--enforce-eager
ポイント:
| オプション | 説明 |
|---|---|
--group-add 44 --group-add 110 |
video/renderグループのGIDを数値指定(コンテナ内にグループ名がないため) |
--gpu-memory-utilization 0.6 |
デスクトップ環境(GNOME, Firefox, VS Code等)がVRAM/GTTを使用しているため低めに設定 |
--enforce-eager |
CUDAグラフのコンパイルを回避(gfx1150でのHIPカーネルエラー対策) |
--enable-auto-tool-choice |
OpenClawのfunction calling用 |
--tool-call-parser qwen3_coder |
Qwen3系モデル用のツールコールパーサー |
--max-model-len 32768 |
OpenClawのシステムプロンプトが約8500トークンあるため、8192では不足 |
-e HIP_VISIBLE_DEVICES=0 |
使用するGPUを指定 |
注意: HSA_OVERRIDE_GFX_VERSION=11.0.0はこのイメージでは設定しない。イメージ自体がgfx1150ネイティブ対応のため、設定するとHIPカーネルエラー(device kernel image is invalid)が発生する。
起動確認
$ curl -s http://localhost:8000/v1/models | python3 -m json.tool
{
"data": [
{
"id": "Qwen/Qwen3-8B",
"object": "model",
"owned_by": "vllm",
"max_model_len": 32768
}
]
}
$ curl -s http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-d '{
"model": "Qwen/Qwen3-8B",
"messages": [{"role": "user", "content": "Hello!"}],
"max_tokens": 50
}' | python3 -m json.tool
{
"choices": [
{
"message": {
"role": "assistant",
"content": "Hello! How can I assist you today?"
},
"finish_reason": "stop"
}
]
}
OpenClawの設定
~/.openclaw/openclaw.jsonを編集して、vLLMをモデルプロバイダとして追加する。
デフォルトモデルの変更
{
"agents": {
"defaults": {
"model": {
"primary": "vllm/Qwen/Qwen3-8B"
},
"models": {
"vllm/Qwen/Qwen3-8B": {}
}
}
}
}
primaryの形式はプロバイダ名/モデルID。モデルIDはvLLMの/v1/modelsが返すidと一致させる必要がある。
プロバイダの追加
{
"models": {
"mode": "merge",
"providers": {
"vllm": {
"baseUrl": "http://127.0.0.1:8000/v1",
"api": "openai-completions",
"apiKey": "none",
"models": [
{
"id": "Qwen/Qwen3-8B",
"name": "Qwen3-8B",
"reasoning": true,
"input": ["text"],
"cost": {
"input": 0,
"output": 0,
"cacheRead": 0,
"cacheWrite": 0
},
"contextWindow": 32768,
"maxTokens": 8192,
"compat": {
"supportsTools": true,
"supportsUsageInStreaming": true
}
}
]
}
}
}
}
ポイント:
-
apiは"openai-completions"を指定する。"openai"ではない(openclaw doctorが自動修正してくれる) -
idはvLLMのserved_model_nameと完全一致させる(デフォルトは--modelに渡した値) -
contextWindowはvLLMの--max-model-lenと合わせる -
costはすべて0(ローカル実行なので課金なし)
設定の検証
$ openclaw config validate
Config valid: ~/.openclaw/openclaw.json
動作確認
$ openclaw agent --agent main --message "Hi, respond in one short sentence." --local --json
{
"finalAssistantRawText": "Hello! How can I assist you today?",
"executionTrace": {
"winnerProvider": "vllm",
"winnerModel": "Qwen/Qwen3-8B",
"attempts": [
{
"provider": "vllm",
"model": "Qwen/Qwen3-8B",
"result": "success"
}
],
"fallbackUsed": false,
"runner": "embedded"
}
}
vLLMプロバイダ経由でQwen3-8Bが応答を返している。
ハマりどころまとめ
1. 量子化モデルはgfx1150で動かない
AWQ, GPTQ等の量子化カーネル(Marlin, Exllama等)はCDNA(MI系)向け。RDNA 3.5ではFP16/BF16のみ使用可能。
2. HSA_OVERRIDE_GFX_VERSIONの罠
gfx1150ネイティブ対応のコンテナイメージを使う場合、HSA_OVERRIDE_GFX_VERSION=11.0.0を設定すると逆にHIPカーネルエラーになる。PyTorch単体のROCm 10.0.0環境では必要だったが、このvLLMイメージでは不要。
3. GPUメモリはデスクトップ環境が消費している
ValueError: Free memory on device cuda:0 (28.78/45.97 GiB) ...
GNOME Shell(1.7GB), VS Code(1.0GB), Firefox(1.0GB)等がGPUメモリを使用している。--gpu-memory-utilizationを下げて対応する。
4. OpenClawのモデルID不一致
OpenClawはプロバイダ名/モデルIDの形式でモデルを指定する。models.providers.vllm.models[].idがvLLMのserved_model_nameと完全一致していないと404エラーになる。
5. コンテキストウィンドウが小さいとシステムプロンプトが入らない
OpenClawのシステムプロンプトは約8500トークンある。vLLMの--max-model-lenが8192だと、ユーザーメッセージを送る前にcontext overflowになる。32768以上を推奨。
今後
- Qwen3.8-27B(FP16, 54GB)への挑戦 — GTT 64GBに収まるか検証
- OpenClawのスキル(coding-agent, github等)を有効化して実用性を確認
- 推論速度のベンチマーク