20
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ローカル LLM で AI コーディング支援環境を構築する① (Bonsai-8B セットアップ)

20
Last updated at Posted at 2026-04-09

はじめに

!!!!! モデルおよびコードの利用は自己責任でお願いします !!!!!

クラウドの生成 AI を使いたいが、セキュリティポリシーやコストの都合で使えない──そんな環境に置かれている方も多いと思います。

近頃は、

  • 外部の生成 AI サービスは原則利用不可
  • それでも生成 AI サービスを使わざるを得ない状況が近い

といったお話を伺うことも増えてきました。

そこで今回は、ローカル LLM を使って VSCode から生成 AI コーディング支援を使える環境を構築した際の記録を整理してみます。

第1回となる本稿では、今話題の Bonsai-8B をローカル環境にセットアップし、VSCode(Continue)から動作確認するところまでを扱います。

同じような制約下で悩んでいる方のヒントになれば幸いです。

修正履歴

2026/5/5:Docerfile と コンテナー起動コマンドを CPU 対応に修正

前提条件

今回の検証は、以下のような前提で行いました。

  • クラウド生成 AI サービスは利用不可
  • 開発端末はローカル PC
  • エディタは VSCode
  • モデルは Bonsai-8B

細かい OS や GPU の差異はありますが、「ローカルで LLM を動かし、VSCode から叩く」という点が本質です。

セットアップ手順

前提環境

本稿では、コンテナーで GPU が認識できているところまでを前提環境としています。
ざっと手順を記載しますので、参考にご準備ください。

  1. Windows に最新の GPU ドライバーをインストール
  2. WSL をインストール
  3. Docker をインストール
  4. NVIDIA Container Toolkit をインストール
  5. コンテナーから GPU が認識されることを確認

① カスタム llama 同梱のコンテナーイメージビルド

Bonsai-8B は本稿執筆時点でまだ一般的な LLM ランタイムでは動作しないため、Bonsai 用にビルドされたカスタム llama-server 同梱のコンテナーイメージを作成します。

ポイントは以下の通りです。

  • ビルドステージで Bonsai-demo を clone
  • setup.sh を実行して CUDA 対応の llama-server をビルド
  • ランタイムイメージには必要最小限の成果物のみをコピー

Dockerfile の全体像は以下の通りです。

# =========================
# build stage
# =========================
FROM nvidia/cuda:12.8.1-cudnn-devel-ubuntu24.04 AS build

ARG BONSAI_REPO=https://github.com/PrismML-Eng/Bonsai-demo.git
ARG BONSAI_REF=main

RUN apt-get update && apt-get install -y --no-install-recommends \
    git cmake build-essential ca-certificates \
 && rm -rf /var/lib/apt/lists/*

WORKDIR /src
RUN git clone --depth 1 --branch "${BONSAI_REF}" "${BONSAI_REPO}" "Bonsai-demo"
WORKDIR /src/Bonsai-demo

# CUDA版ビルド(既存)
RUN chmod +x setup.sh && ./setup.sh

# CPU版バイナリを固定URLで取得
RUN mkdir -p bin/cpu && \
    curl -L --fail \
      "https://github.com/PrismML-Eng/llama.cpp/releases/download/prism-b8846-d104cf1/llama-prism-b8846-d104cf1-bin-ubuntu-x64.tar.gz" \
      -o /tmp/llama-cpu.tar.gz && \
    tar -xzf /tmp/llama-cpu.tar.gz -C bin/cpu --strip-components=1 && \
    rm -f /tmp/llama-cpu.tar.gz


# =========================
# runtime stage
# =========================
FROM nvidia/cuda:12.8.1-cudnn-runtime-ubuntu24.04

RUN apt-get update && apt-get install -y --no-install-recommends \
  libgomp1 ca-certificates \
 && rm -rf /var/lib/apt/lists/*

RUN useradd -m -u 10001 -s /usr/sbin/nologin appuser

# GPU / CPU 両方のバイナリと共有ライブラリを配置
COPY --from=build /src/Bonsai-demo/bin/cuda/ /opt/bonsai/cuda/
COPY --from=build /src/Bonsai-demo/bin/cpu/  /opt/bonsai/cpu/

# 起動スクリプト
RUN printf '%s\n' \
  '#!/bin/sh' \
  'set -eu' \
  '' \
  'if [ "${USE_GPU:-0}" = "1" ]; then' \
  '  echo "[INFO] Starting GPU version"' \
  '  export LD_LIBRARY_PATH="/opt/bonsai/cuda:${LD_LIBRARY_PATH:-}"' \
  '  exec /opt/bonsai/cuda/llama-server \' \
  '    -m "${MODEL_PATH:-/models/Bonsai-8B.gguf}" \' \
  '    --host 0.0.0.0 \' \
  '    --port "${PORT:-11435}" \' \
  '    -ngl "${GPU_LAYERS:-99}"' \
  'else' \
  '  echo "[INFO] Starting CPU version"' \
  '  export LD_LIBRARY_PATH="/opt/bonsai/cpu:${LD_LIBRARY_PATH:-}"' \
  '  exec /opt/bonsai/cpu/llama-server \' \
  '    -m "${MODEL_PATH:-/models/Bonsai-8B.gguf}" \' \
  '    --host 0.0.0.0 \' \
  '    --port "${PORT:-11435}" \' \
  '    -ngl 0' \
  'fi' \
  > /entrypoint.sh
RUN chmod +x /entrypoint.sh

EXPOSE 10000
USER appuser
ENTRYPOINT ["/entrypoint.sh"]

Docker の CUDA イメージ一覧は以下を参照しています。

この時点で、

  • Bonsai 専用にビルドされた llama-server
  • OpenAI 互換 API を提供するサーバー

をコンテナーとして起動できる下地が整います。

② Bonsai-8B モデルのセットアップ

続いて、Bonsai-8B のモデルファイル(GGUF)を準備します。

# ソースをクローンしてセットアップ
git clone https://github.com/PrismML-Eng/Bonsai-demo.git
cd Bonsai-demo/
./setup.sh

# モデルファイルをマウント元のディレクトリにコピー
sudo cp ./models/gguf/8B/Bonsai-8B.gguf /mnt/models

このモデルファイルは、

  • コンテナー起動時にボリュームマウント
  • MODEL_PATH 環境変数で指定

という形で llama-server から参照されます。

③ コンテナー起動

モデルとイメージの準備ができたら、GPU を有効にした状態でコンテナーを起動します。
ポート番号は環境に合わせて変更してください。

# GPU
docker run -d --rm \
	--name bonsai_gpu_run \
	--gpus all \
	-p 11435:11435 \
	-e USE_GPU=1 \
	-e PORT=11435 \
	-e MODEL_PATH=/models/Bonsai-8B.gguf \
	-v /mnt/models:/models \
	bonsai-llama:latest

# CPU
docker run -d --rm \
	--name bonsai_cpu_run \
	-p 11435:11435 \
	-e USE_GPU=0 \
	-e PORT=11435 \
	-e MODEL_PATH=/models/Bonsai-8B.gguf \
	-v /mnt/models:/models \
	bonsai-llama:latest

起動後、以下の API を使って動作確認を行います。

# ヘルスチェック
curl http://localhost:11435/health

# OpenAI 互換 Chat Completions API
curl http://localhost:11435/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{
    "model": "Bonsai-8B",
    "stream": false,
    "messages": [
      {"role": "user", "content": "こんにちは。自己紹介してください。"}
    ]
  }'

この時点で、

  • llama-server が起動していること
  • OpenAI 互換 API として応答すること

が確認できました。

④ Continue のインストールと設定

最後に、VSCode からこのローカル LLM を使えるように設定します。

  1. VSCode に Continue 拡張機能をインストール
  2. Continue の Local Config(config.yaml)を開く
  3. Bonsai-8B をモデルとして追加

設定例は以下の通りです。

name: Local Config
version: 1.0.0
schema: v1
models:
  - name: Bonsai-8B (docker)
    provider: openai
    model: Bonsai-8B.gguf
    apiBase: http://localhost:11435/v1
    apiKey: not-needed
    roles:
      - chat
      - edit
      - apply
    requestOptions:
      timeout: 180000

ここでは、Continue から見ると 「OpenAI 互換 API を提供するローカルモデル」として見える構成にしています。

動作確認

Continue チャット

Continue のチャット画面からプロンプトを入力し、ローカルの Bonsai-8B が応答することを確認しました。

image.png

GPU 負荷

推論実行中に GPU 使用率が上がることも確認でき、GPU を使った推論が行われていることが分かります。

image.png

補足

本来は VSCode のチャットからローカル LLM を自然に呼び出したかったのですが、

  • モデルは認識される
  • しかし選択肢として表示されない

という挙動に遭遇しました。

Bonsai-8B は登場したばかりで、かつカスタム llama-server を使う構成であるため、現時点では不可避の制約の可能性がありそうです。

おわりに

本稿では、

  • Bonsai-8B を使った Local LLM 環境のセットアップ
  • VSCode(Continue)からの動作確認

の流れを、実際のセットアップ内容に基づいて整理しました。

今回は Bonsai-8B を使って、ローカル LLM を VSCode(Continue)から利用できるところまでを確認しました。

次回は、Bonsai-8B 以外のモデルを同様の構成で動かし、その実力はパフォーマンスを比較してみる予定です。

本稿を読んでいただきありがとうございました!

20
18
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
20
18

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?