ローカル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
のインストールまでを実施します。
sudo apt install nvidia-open
Docker のインストール
こちらのガイドの手順にしたがいインストールします。
Nvidia Container Toolkit のインストール
こちらのガイドの手順にしたがい、nvidia-container-toolkit
をインストールします。
sudo apt install nvidia-container-toolkit
LLMをコンテナで動かす手順
LLMモデルのダウンロード
llama.cpp 用の gguf ファイルをダウンロードします。Qwen3 の 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 サイズに応じてレイヤー数を調整します。
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