🔖

ローカルLLMを試す (Qwen3-30B-A3B, 2025-05)

に公開

古めのPCで Qwen3-30B-A3B を試した際の環境構築の備忘録です。

テストに用いた PC の GPU は VRAM 不足で LLM を全て載せることはできないため、 llama.cpp を用いて専ら CPU で動かしますが、 GPU に一部の層をオフロードする方法も説明します。

本稿では llama.cpp は Docker コンテナ上で実行するようにしています。

試したPCのスペック

  • CPU: Intel(R) Core(TM) i7-7700K CPU @ 4.20GHz
  • memory: 32GB
  • GPU: NVIDIA GeForce RTX 2080 (VRAM 8GB)
  • OS: Ubuntu 24.04.2 LTS

CUDA環境構築

Nvidiaドライバーのインストール

こちらのガイドの手順にしたがい、nvidia-open のインストールまでを実施します。

https://docs.nvidia.com/datacenter/tesla/driver-installation-guide/#ubuntu-installation

sudo apt install nvidia-open

Docker のインストール

こちらのガイドの手順にしたがいインストールします。

https://docs.docker.com/engine/install/ubuntu/

Nvidia Container Toolkit のインストール

こちらのガイドの手順にしたがい、nvidia-container-toolkit をインストールします。

https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/install-guide.html

sudo apt install nvidia-container-toolkit

LLMをコンテナで動かす手順

LLMモデルのダウンロード

llama.cpp 用の gguf ファイルをダウンロードします。Qwen3 の gguf モデルは複数の方が公開されておりますが、本稿ではこちらのモデルを使用させていただきます。

https://huggingface.co/mmnga/Qwen3-30B-A3B-gguf

以下の例では、Qwen3-30B-A3B-Q6_K.gguf/data/gguf 配下にダウンロードしたものとします。

docker-compose.yml の編集

Docker で GPU を有効にしつつ、llama.cpp で Qwen3 をサーブするための Docker Compose 設定ファイルは次のようになります。GPU 以外にもポート番号やローカルホスト以外からのアクセスを有効にするなどの設定をしています。

llama.cpp の動作はコンテナ内の環境変数で設定できます。例えば、LLAMA_ARG_THREADS で使用する CPU スレッド数、 LLAMA_ARG_CTX_SIZE でコンテキストサイズを設定できます。LLAMA_ARG_N_GPU_LAYERS の行を有効にすると、指定されたレイヤー数だけ GPU にオフロードします。お持ちのグラフィックカードの VRAM サイズに応じてレイヤー数を調整します。

docker-compose.yml
services:
  llama:
    image: ghcr.io/ggml-org/llama.cpp:server-cuda
    deploy:
      resources:
        reservations:
          devices:
            - driver: nvidia
              count: all
              capabilities: [gpu]
    environment:
      - LLAMA_ARG_THREADS=7
      - LLAMA_ARG_CTX_SIZE=2048
      - LLAMA_ARG_MODEL=/data/Qwen3-30B-A3B-Q6_K.gguf
      - LLAMA_ARG_N_GPU_LAYERS=14
      - LLAMA_ARG_HOST=0.0.0.0
    volumes:
      - /data/gguf:/data
    ports:
      - "8080:8080"
    networks:
      - default

llama.cpp コンテナの起動

docker-compose.yml のあるディレクトリで次のコマンドを実行するとコンテナが起動します。

docker compose up

LLM を試す

コンテナを起動すると、 http://<テストPC>:8080 で llama.cpp サーバーにアクセスできるようになります。

回答時間

以下のスクリーンショットの質問では、上の設定ファイルのように GPU に14層オフロードした場合の平均回答時間は約150秒、GPU に全くオフロードせず CPU のみで実行した場合の平均回答時間は約160秒でした。
同じ質問でも回答時間はかなりブレますし試行回数も少ないため数値は参考程度にしていただければと思いますが、一部だけオフロードしても効果は限定的かと思います。

チャットのスクリーンショット

回答内容

Qwen3 は他の軽量 LLM モデルと比べても、回答内容も日本語への応答という面でも有望だと感じます。

llama.cpp コンテナの終了

コンテナの終了は別のコンソールで次のコマンドを実行します。

docker compose down

Discussion