見出し画像

llama.cppをDockerで実行すると遅くなるのか? ~Windowsネイティブ VS WSL2上Docker比較~

こんにちはRcatです。
私の環境では2種類のllama.cppをビルドしていまして、LinuxマシンはROCmベースのllama.cppで、WindowsはCUDAベースのllama.cppを使っています。

それぞれDockerとネイティブでビルド方法が違い煩雑です。そこでふと、Dockerに統一しちゃえば楽じゃないと思いました。
しかし、Windows版をDockerにすると、WSL越しでパフォーマンスに差が出ないかという懸念が付きまといます。
というわけで、わからないなら検証してしまいましょう



はじめに

利用規約

情報や作品の活用時は事前に利用規約をご確認ください。


コメントについて

利用規約のガイドラインを確認の上コメントしてください。
則っていないコメントは削除します。


概要

目的

冒頭に書きましたが、現在WindowsマシンはWindowsネイティブのexeファイルをビルドするようなやり方で、LinuxマシンはDocker内で実行ファイルをビルドしています。
当たり前といえば当たり前なのですが、Dockerを知ってると無駄に思えます。

どっちもDockerにすれば、CUDA/ROCmの二大環境のイメージができ、かつWindows側の場合はCUDA ToolkitやVisual Studioとかを気にしなくてよくなります。これ結構大きいですね。特にVisual StudioがCUDA見つけられないとか言い出してなかなかコンパイル始まらないなんてざらなので。

懸念

Windows側のパフォーマンスが懸念点です。
DockerはLinuxベースですのでLinuxマシンは自分のカーネル共有で動いておりほぼオーバーヘッド無しです。
しかし、Windowsの場合は、WSL2上で動いています。なので軽量が売りのコンテナ仮想環境がそもそもWSLという仮想の上で動いてるんですね。

なので、環境構築の便利さと引き換えにパフォーマンスが落ちる懸念があります。
どの程度なのかわからないです。なら確かめればいいのです。


準備と環境

マシン側

ドライバは先ほど更新したので最新です

CUDAは13.2です。

Docker側

ベースイメージはNvidia公式のCUDAイメージを使います。
タグは`13.2.1-devel-ubuntu22.04`です。

llama.cpp

現時点での最新状態をクローンしてそのままビルドします。
ログを確認すると、b10068のようです。

ビルド(Windowsネイティブ)

いつも使っているワンクリックリビルドバッチを使います。
やってることは単純で、プルしてからビルドする。
終わったら既存の"build"フォルダをよけて新しいので置き換えることで最新の実行ファイルに勝手に置換する。

ビルド(Dockerコンテナ)

Dockerfileはこんな感じ。
事前にビルド用のいろいろが要るのでその辺はGeminiに丸投げ。通ればいい。

ビルド長い…
いつもはRyzen AI Max 395でコンパイルしてたから早かっただけなのか…

実測

対象文書

さて、実測と行きますか。今回は下記記事の文字だけを読み込ませて要約させます。
選定理由: 長いからw

モデル

  • Qwythos-9B-Claude-Mythos-5-1M
    Qwen3.5 9Bベースのチューニングモデル。1Mコンテキストに対応している。ただしVRAMの影響で1Mを使用することは難しい。

  • Gemma4 E4B
    手元にあった軽量モデル代表。


Windowsネイティブ

読み込みは3秒くらいで終わる

Qwythos-9B-Q4_K_M

前処理は5000t/s前後。デコードは98t/s前後。

Gemma4 E4B Q4_K_M

前処理は7000t/s前後。デコードは110t/s前半。

Docker(Windows)

読み込みに40秒くらいかかる。

Qwythos-9B-Q4_K_M

前処理は5100t/s前後。デコードは100t/s前後。

Gemma4 E4B Q4_K_M

前処理は7000t/s前後。デコードは110t/s未満。


まとめ

結論としては大きな差はなさそうだと感じた。
しかし、ほぼ誤差だが、Qwythosの場合はDockerのほうがパフォーマンスが出たのが驚き。

一番大きいのが読み込みにかかる時間で、40秒ほど沈黙したのち読み込みが開始されるので、頻繁にリソースを開放してしまうと読み込み時間が無駄にかかってしまうと予想される。
これは多分Windows <=> WSLのファイルシステムの変換問題だと思われる。\\wsl$から始まるWSLのファイルシステムにあらかじめモデルを置いておけば解消されると思われる。

そのあたりを容認できれば構築や移植の簡単さからDockerを選びたい。

それではまたお会いしましょう


リンク集

感想投稿フォーム

コメントは公開で恥ずかしい!! Rcatだけに送りたい人向け


メンバーシップの説明


Docker-Composeマネージャー


【Windows】タスクスケジューラーの追加方法


【ローカルLLM】バイブコーディング完全ガイド


【ローカルLLM】自己成長AIエージェントHermesをホスト


ミニPCにLinuxをインストール


メンバー特典

ここから先は

3,553字

メンバーシップ ¥ 300 /月

普段の開発のうち、プランに応じて情報やツールのダウンロード情報などが読み放題。 今後はAI対策で画像…

Lv1

¥300 / 月

情報が役に立ったと思えば、僅かでも投げ銭していただけるとありがたいです。