9月末に「WSL 3.0」がリリースされ「コンテナー」機能の一般提供が開始されたことで、Dockerを利用せずにWindowsでコンテナを利用できるようになりました。(しかもコマンドはDockerに近い)
今回はこのWSLコンテナーを使って、llama.cppを実行してみます。CUDA対応のGPUを持っている人向けの解説です。
前準備
WSLを最新バージョンへアップデートします。Powershell等で以下を実行するだけです。
wsl --update
自分の環境では、アップデート後以下のようになりました。WSL バージョンが3.0.1.0になっていれば問題ないと思います。
> wsl --version WSL バージョン: 3.0.1.0 カーネル バージョン: 6.18.40.1-1 WSLg バージョン: 1.0.79 MSRDC バージョン: 1.2.7214 Direct3D バージョン: 1.611.1-81528511 DXCore バージョン: 10.0.26100.1-240331-1435.ge-release Windows バージョン: 10.0.26200.9457
続けて、wslcが利用できることを確認します。
wslc version
コマンドの実行結果として、wslc 3.0.1.0のような出力が得られたらokです。
より実際の挙動を試したいなら、hello-worldを実行するとよいです。
wslc run --rm hello-world
GPUが利用できることを確認する
まずWindows側でnvidia-smiが正常に実行できることを確認しておきます。
そのあと、以下を実行することでWSL containersからGPUを利用できるか確認できます。
wslc run --rm --gpus all nvidia/cuda:12.8.1-base-ubuntu24.04 nvidia-smi
wslcでpullしたimageなどの保存先を変更する
標準の状態ではCドライブの%LOCALAPPDATA%\wslc\sessions\wslc-cli-{ユーザー名}\storage.vhdxという場所にデータが保存されていくので、Cドライブの容量を圧迫したくない場合などはサイズの大きなimageをpullする前にストレージの配置場所を変えた方がよいです。
%LOCALAPPDATA%\wslc\settings.yamlを作成して、以下のようにsession.storagePathという項目の値を変更できます。
session: storagePath: D:\wsl
設定を変更した後は、wsl --shutdownを実行したあと、さらにRestart-Service -Name WSLServiceでサービスを再起動する必要があります(管理者権限が必要です)。shutdownだけだと設定の変更が反映されません。
llama.cpp公式イメージを実行する
以降、gguf形式のモデルをC:\llm\modelsというディレクトリに置いていると仮定します。自分がモデルを保存しているディレクトリに読み替えてください。
llama.cpp公式では現在、ghcr.io/ggml-org/llama.cpp:server-cudaというCUDA 12対応イメージが配布されています。今回はこれを使用します。
他にも、
server server-cuda server-cuda13 full full-cuda light light-cuda
などが配布されています。自分はRTX 3070を使用していますが、より新しいGPUを使っている場合、server-cuda13が必要なケースがあるかもしれません。
あとは以下のコマンドを実行するだけで、推論用のサーバーが立ち上がります。このコマンド例はPowershell用です。
wslc run ` --name llama ` --gpus all ` -p 8080:8080 ` -v "C:\llm\models:/models" ` ghcr.io/ggml-org/llama.cpp:server-cuda ` -m /models/gemma-4-E2B-it-Q4_K_M.gguf ` --host 0.0.0.0 ` --port 8080 ` -ngl 99 ` -c 16384
コンテナーに公開するGPUを変えたり、コンテキスト長を変えたりしたい場合は引数を編集してください。
llama.cppのサーバーはWeb UIを内蔵しており、http://localhost:8080からアクセスできます。Webのチャット画面を利用するためだけに他のツールを持ってこなくていいので便利です。

自分の環境では、Gemma 4 E2B (Q4_K_M)の回答の生成スピードが87.25 t/sでした。

ローカルならやはり試したいのは無検閲モデルです。今回はGemma-4-E4B-Uncensored-HauhauCS-AggressiveのQ4_K_M版を試してみました。このモデルでも回答の生成スピードは49 t/s程度出ていて、日本語の自然さも十分かなあと感じました。

API経由でモデルを利用する
llama.cppのサーバーはOpenAI互換APIを提供しており、対応しているアプリで以下のURLを指定することでローカルのモデルを外部から利用できます。
http://localhost:8080/v1
コンテナ管理のコマンドチートシート
コンテナの停止:
wslc container stop llama
コンテナの一覧:
wslc container list
コンテナの一覧(停止済みも含む):
wslc container list --all
ログ:
wslc container logs llama
イメージの一覧:
wslc image list
不要な停止済みコンテナを削除:
wslc container prune
不要なイメージを削除:
wslc image prune































