🧸

ローカル LLM を構築した

に公開
1

AI は好きだが AI ハイプは嫌いだ

こんにちは。みなさんは AI を使いこなしていますか? 私は正直、あまり乗れていません。もちろん AI は非常に便利な道具だと思うし、使わない日はありません。しかし、その非決定論的な性質を考えると、いささか過大評価されているように感じます。

AI 企業の倫理的な問題も気になります。 Anthropic の CEO であるダリオ・アモディ氏はわざと恐怖心を煽るような宣伝をしていると批判されています[1]。アメリカによるイランへの攻撃には xAI の Grok が使われています[2]。データセンターの建設による環境破壊の懸念もあります。

かれらの煽動に乗せられて「AI を使いこなせるようにならなければいけない」という言説が拡がっているのも悲しいです。商品がより簡単な方法で作れるようになるということは、賃金の高い労働が別の賃金の低い労働で置き換わるということです[3]。それによって生産性が上がったとしても、私たち労働者はその恩恵を受ける立場にありません[4]

とはいえ、社会がそのような方向に進んでいってしまったのはしかたありません。こうした中、ふと 「ローカル LLM を運用してみようかな?」 と思い至りました。いまの潮流から一定の距離を保ちつつ、 AI 技術をキャッチアップするのにちょうどよい題材だと思ったからです。

もちろんお金も時間もかかることですので、誰もがローカル LLM を試せるわけではないことは重々承知しています。しかし、私が試したことをこのように記事にして、いつか誰もがローカル LLM を試せるようになったときの助けになれば(あるいは、その日を早められれば)いいと願います。

ローカルでも性能がいい Qwen3.6-27B を目標にする

ローカルLLMを構築するうえでまずはじめに決めることは、動かすモデルをどれにするかということです。2026年6月時点において、パラメータ数が 100B 未満のオープンウェイトモデルで最も性能がよいのは、 Google の開発する Gemma 4 かアリババの開発する Qwen3.6 です[5]。いずれも2026年4月に公開されたモデルで、 SWE-bench を含む多くのベンチマークでは Claude Opus 4.5 と並ぶ性能を出しています。


Qwen3.6, Gemma4, Opus4.5 の比較(Qwen/Qwen3.6-27B · Hugging Faceより引用)

Gemma 4 と Qwen3.6 は、エージェント用途での利用やコーディングの能力において若干の違いがあるようですが、性能はほぼ互角です[6]。Qwen は私がローカル LLM に興味を持ったきっかけでもあり、その名前をローカル LLM の代名詞のように思っていたため、ここでは Qwen3.6 を選ぶことにしました。

また、ひとくちに Qwen3.6 と言っても、異なるパラメータを持つ2種類のモデルがあります。 Qwen3.6-27BQwen3.6-35B-A3B です。 Qwen3.6-27B は Denseモデル で、270億個のパラメータすべてを使って推論を行います[7]。一方の Qwen3.6-35B-A3B は MoE (Mixture-of-Experts) モデル で、350億個のパラメータのうち関係のある30億個のパラメータだけを使って推論ができます[8]

一般に MoE モデルは、推論の速度が速かったり、限られた計算資源でも動作させられるなどの特徴があります。 MoE は現在頻繁に研究が進められている分野の一つでもあり、今後のローカル LLM としては主流になっていくのだろうと予想しますが、 Qwen3.6 に限って言えばまだ Dense モデルのほうが性能がよいです[9]。ここでは Dense モデルを使うことにします。

ところで、この Qwen3.6-27B は先述のとおり270億個のパラメータをもっており、それぞれが16ビット浮動小数点数です[10]。そのため、モデル本体だけでも 270億 × 2B = 54 GB もの(オーバーヘッドを含めるとその倍以上の)メモリが必要になってしまいます。

これだけのメモリ容量を用意するのは現実的ではないため、なるべくもとの精度を維持しつつモデルサイズを削減する量子化という技術を使います[11]。ここでは、8ビット浮動小数点数に変換した Qwen3.6-27B-FP8 というモデルを使うことにします。

https://huggingface.co/Qwen/Qwen3.6-27B-FP8/

以上の経緯から、今回は Qwen3.6-27B-FP8 を動かすことを目標としてローカル LLM を構築していくことにしました。

メルカリで GPU を買って VRAM 48GB のマシンを構築する

動かすモデルが決まったら、さっそく必要なマシンを作っていきましょう。 Qwen3.6-27B-FP8 を動かすためにはどれくらいのスペックが必要なのでしょうか? ローカル LLM を動かすうえで最も重要なのは GPU の ビデオメモリ(VRAM) です。

必要な VRAM を計算すると 44 GB だった

必要な VRAM がどれくらいになるのかはモデルのパラメータ数などから概算できます。後ほど詳しく紹介する vLLM のドキュメントには、必要な VRAM は KVキャッシュモデルの重みアクティベーションメモリ、およびオーバーヘッドで定まるとし、以下の近似式を紹介しています[12]

  • KV キャッシュ ≒ batch_size × seq_len × hidden_size × num_layers × 2 × dtype_size
  • モデルの重み ≒ num_parameters × dtype_size
  • アクティベーションメモリ ≒ モデルの重みの10%〜30%
  • 必要な VRAM ≧ KV キャッシュ + モデルの重み + アクティベーションメモリ

それぞれの変数は以下のような意味です。

変数名 意味 Qwen3.6-27B-FP8 での値
num_parameters モデルのパラメータの数 270億
batch_size バッチ処理するトークン列の数 1以上の任意の整数。ここでは並列処理をしないので1にする。
dtype_size パラメータ1つあたりの情報量 8ビット
seq_len モデルのコンテキスト長 262,144[13]
hidden_size KV部分のパラメータ数 4×256[14]
num_layers KV部分のレイヤー数 16[15]

計算すると以下のようになります[16]

必要なVRAM ≧ KVキャッシュ + モデルの重み + アクティべーション
          ≒ KVキャッシュ + モデルの重み × 1.3
          ≒ (1 × 262,144 × 4 × 256 × 16 × 2 × 8b) + (27 × 10^9 × 8b) × 1.3
          = 349,519,476,736 b
          = 43.69 GB

したがって 約44 GB 以上の VRAM があれば Qwen3.6-27B-FP8 を動かすことができます。もっとも、最適化に使われるメモリやアプリケーションによるオーバーヘッドなどもあるため、実際はもう少し余裕を持たせておくとよいでしょう。

PCIe のレーンと消費電力に注意してパソコンの部品を揃える

ローカル LLM にあたっては、 NVIDIA GeForce RTX 3090 というチップを搭載した GPU が人気です。VRAM が 24GB と大容量で、また発売からかなり時間が経っていることから、中古で安く手に入りやすいためです。

今回の制作では2枚の RTX 3090 を導入します。 VRAM は合計で 48 GB となり、目標の 44 GB を達成できます。メーカーはバラバラで、いずれもメルカリで購入しました。どちらの出品者の方も丁寧に梱包し、すばやく配送してくださりました。


RTX 3090 1枚目


RTX 3090 2枚目

もちろん、GPUを用意しただけではコンピュータになりません。これとあわせて、マザーボードやCPUなどの他の部品を用意する必要があります。 AI 需要によっていずれの部品も生産が少なくなっており、価格が高騰していたため、なるべく安く済むように揃えました[17]


制作にあたって購入した部品

最終的な部品は以下のようになりました。

部品 名称 金額
電源 玄人志向 KRPW-PA1200W/92+ 19,246
ケース Fractal Design Epoch Black Solid 14,900
マザーボード ASUS ProArt X870E-CREATOR WIFI 79,980
CPU AMD Ryzen 7 7700 BOX 35,800
RAM Crucial CP2K16G56C46U5 67,800
SSD ADATA SLEG-860-1000GCS-DP (M.2 2280 1TB) 29,980
GPU① NVIDIA RTX 3090(中古) 179,000
GPU② NVIDIA RTX 3090(中古) 160,000
総額 - 586,706

特筆すべき点としては、次のようなものがあります。マザーボードは、2枚の GPU を接続したときに x8/x8 レーンとして動作するものを選びました。一般的な CPU と接続できる PCIe レーンは多くても20個程度ですから、 GPU を2つ接続する場合はどうにかして20レーンを分配しなければなりません[18]。多くのマザーボードではしばしば x16/x4 などとして分配されていますが、これでは2枚目の帯域幅がボトルネックとなってしまうため、注意が必要です[19]

また、電源ユニットは『PC Power Supply Calculator – PSU Wattage Calculator | Newegg』を活用し、必要な消費電力を計算して 1200W まで出せるものを選びました。なお RTX 3090 の TDP(熱設計電力)は 350W ですが、電気代や排熱が心配なのでパワーリミットを 250W に設定して運用しています[20]

一方で、メモリと CPU はオフロードしないならばそれほど重要ではないため、予算をはみ出ない限りで手に入るものを選びました。組み上がった様子は以下の写真の通りです。


組み上がった様子

Ubuntu Server に NVIDIA ドライバーをインストールする

組み上がったマシンで LLM を動かすためには、まず OS に GPU を認識させる必要があります。このマシンは、もっぱら SSH で接続するか Web サーバーをホストして LAN 内で利用するつもりですので、 Ubuntu Server をインストールしました。

NVIDIA ドライバーのインストールは『Ubuntu — NVIDIA Driver Installation Guide』を参考に行いました。ドキュメントは更新されている場合があるので、以下はあくまで参考にとどめ、ご自身で最新の手順を調べることを強くおすすめします。

まずは、ドライバーが Linux カーネルにアクセスするために必要なカーネルヘッダーをインストールします。

# apt install linux-headers-$(uname -r)

次に NVIDIA リポジトリを登録します。ここで、 Linux ディストリビューション名は『Index of /compute/cuda/repos』から対応するものを探しました。

# wget https://developer.download.nvidia.com/compute/cuda/repos/ubuntu2604/x86_64/cuda-keyring_1.1-1_all.deb
# dpkg -i cuda-keyring_1.1-1_all.deb
# apt update

NVIDIAドライバーは公式ドキュメントでインストールするドライバのバージョンを固定することが推奨されていますので、そのようにします[21]apt search で最新版を調べ nvidia-driver-pinning-xxx をインストールします。これにより /etc/apt/preferences.d/nvidia というファイルが生成され、インストールされるドライバーのバージョンが固定できます。

# apt install nvidia-driver-pinning-595.71.05

最後にドライバーをインストールします。今回は Vulkan などのデスクトップ環境のためのパッケージは不要なので、ヘッドレスのパッケージだけをインストールします[22]。セキュアブートが有効になっている場合には MOK の入力を求められますので、入力してください[23]

# apt install libnvidia-compute nvidia-dkms-open cuda-toolkit-13-3

インストールが済んだら再起動します。ふたたび起動した際にさきほど設定した MOK を入力する必要があるため、モニタを接続して作業します。

# reboot

インストールが正常にできていれば、 nvidia-smi というコマンドが利用できるようになっているはずです。以下のように RTX 3090 が2枚認識されていることがわかります。

$ nvidia-smi
Fri Jul 10 15:47:17 2026
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 595.71.05              Driver Version: 595.71.05      CUDA Version: 13.2     |
+-----------------------------------------+------------------------+----------------------+
| GPU  Name                 Persistence-M | Bus-Id          Disp.A | Volatile Uncorr. ECC |
| Fan  Temp   Perf          Pwr:Usage/Cap |           Memory-Usage | GPU-Util  Compute M. |
|                                         |                        |               MIG M. |
|=========================================+========================+======================|
|   0  NVIDIA GeForce RTX 3090        On  |   00000000:01:00.0 Off |                  N/A |
|  0%   51C    P8             32W /  250W |   23312MiB /  24576MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+
|   1  NVIDIA GeForce RTX 3090        On  |   00000000:03:00.0 Off |                  N/A |
|  0%   58C    P8             35W /  250W |   23312MiB /  24576MiB |      0%      Default |
|                                         |                        |                  N/A |
+-----------------------------------------+------------------------+----------------------+

vLLM をインストールしてモデルを動かす

ここからは LLM をホストするソフトウェアを使ってモデルを Web API として公開し、外部から利用できるようにします。LLM のホストには vLLM を使います。

https://vllm.ai/

類似のソフトウェアには Ollamallama.cpp などがありますが、複数のリクエストを同時に処理するパフォーマンスが最も高いという理由で vLLM を選びました[24][25]。いずれも OpenAI API と互換性があり、OpenCode や Cursor などの多くの既存のツールと連携できます。

uv を使って Python の仮想環境を作り、 vLLM をインストールします。

$ uv venv --python 3.12 --seed
$ source .venv/bin/activate
$ uv pip install vllm --torch-backend=auto

vLLM の起動のための引数を設定する YAML ファイルを作成します[26]。これらの設定はコマンドライン引数から渡すこともできますが、メンテナンス性のためにファイルに記述します。モデルカードの推奨設定を参考に、以下のように設定しました。

config.yaml
host: 0.0.0.0
port: 8000

model: Qwen/Qwen3.6-27B-FP8
tensor-parallel-size: 2
max-num-seqs: 1
kv-cache-dtype: fp8

enable-auto-tool-choice: true
tool-call-parser: qwen3_coder
reasoning-parser: qwen3
speculative-config: '{"method":"mtp","num_speculative_tokens":2}'

それぞれの設定の意味は以下の通りです。

引数名 意味
tensor-parallel-size Tensor Parallel グループの個数[27]。マルチ GPU 環境では GPU の個数と同じにする[28]。ここでは2にした。
kv-cache-dtype KVキャッシュのデータタイプ[29]。デフォルト(auto)では正しくフォールバックされなかったため、明示的に fp8 を指定した。
max-num-seqs 一つのバッチとして並列処理するリクエストの数[30]
enable-auto-tool-choice モデルの判断で tool calling を行えるようにするか[31]。モデルカードの推奨設定に従った。
tool-call-parser モデルが出力した tool calling を解釈するパーサ[32]。モデルカードの推奨設定に従った。
reasoning-parser モデルが出力した reasoning を解釈するパーサ[33]。モデルカードの推奨設定に従った。
speculative-config Speculative Decoding の設定[34]。モデルカードの推奨設定に従った。

最後に、 vllm serve を使ってモデルをホストします。

$ vllm serve --config config.yaml

サーバーが起動できているかを確認するために、以下のコマンドでリクエストを送ってみましょう。

$ curl http://localhost:8000/v1/chat/completions \
  -s \
  -H "Content-Type: application/json" \
  -d '{"model":"Qwen/Qwen3.6-27B-FP8","messages":[{"role": "user","content":"こんにちは!"}]}' \
| jq '.choices.[0].message.content'
"\n\nこんにちは!😊 お元気ですか?何かお手伝いできることや、お話ししたいことはありますか?ぜひ教えてください!"

ちゃんと応答が返ってきました。これでモデルが動作していることを確認できました。

推論を行わせている最中に nvidia-smi を実行して GPU が実際に利用されているかを確認しましょう。 tmux を使ってペインを2つ作り、一方のペインでリクエストを、もう一方で nvidia-smi を実行します。画像のように、リクエストを送った直後から GPU の使用率や温度が上がっている様子が観察できます。


推論させながら nvidia-smi で GPU の使用率などをモニタリングする様子。リクエストを送った直後から 95% の表示になっていることがわかる。

このときに vLLM 側のログを見ると、1秒間に生成されたトークンの個数 token/s が表示されています。この値は、一般にモデルのスループットを計測されるのに用いられます[35]。ここでは 33.2 token/s と表示されていました。


vLLMのログ

より精度の低い量子化モデルと比較するとやや遅いように感じますが、日常使いには差し支えないでしょう。もし速度が気になるようであれば、よりパラメータ数の少ないモデルや、4ビットに量子化したモデルなども検討してみるとよいでしょう。

チャット UI やテキストエディタと連携して日常的に使う

ここまでの手順でモデルを vLLM を使ってホストし、 OpenAI API 互換の Web API として利用できるようになりました。ここからは、実際に日常で使うためのアプリケーションと連携する方法を見ていきます。

LibreChat でブラウザからチャットする

ずっとコマンドラインから会話しているわけにはいかないので、 ChatGPT や Claude のようにブラウザからも利用できるようにしましょう。 OpenAI API 互換のサービスと連携できるチャット UI はいくつか種類がありますが、ここでは LibreChat を使います。

https://www.librechat.ai/

類似のソフトウェアとしては Open WebUI が有名ですが、昨年11月に変更されたライセンスにより OSI によるオープンソースの定義を満たさなくなったことや、使ってみたところバグが多く動作が不安定だったことがあり、ここでは紹介しません[36]

LibreChat は Docker Compose を使って簡単に起動できます。まず、任意のディレクトリに公式リポジトリをクローンし、 .env の設定を行います。

$ git clone https://github.com/danny-avila/LibreChat.git
$ cd ./LibreChat
$ cp .env.example .env # 値を入れる

librechat.example.yamllibrechat.yaml としてコピーし endpoints 以下の custom に、次のような内容を追記します。ここで apiKey は任意の文字列で構いません[37]

librechat.yaml
endpoints:
  custom:
    # ...他の設定
    - name: "vLLM"
      apiKey: "hoge"
      baseURL: "http://host.docker.internal:8000/v1"
      models:
        default: ["Qwen/Qwen3.6-27B-FP8"]
        fetch: true
      titleConvo: true
      titleModel: "current_model"
      titleMessageRole: "user"
      summarize: false
      summaryModel: "current_model"

同様に docker-compose.override.yml.exampledocker-compose.override.yml としてコピーし、以下の内容を追加します。ここで、コンテナ内からホストの vLLM に接続するために host.docker.internal を使っていることに注目してください[38]

docker-compose.override.yml
services:
  api:
    volumes:
      - type: bind
        source: ./librechat.yaml
        target: /app/librechat.yaml
    image: registry.librechat.ai/danny-avila/librechat:latest
    extra_hosts:
      - "host.docker.internal:host-gateway"

最後に Docker コンテナを起動します。

$ docker compose up -d

すると 3080 番のポートで Web サーバが立ち上がり、チャット画面が見れるようになります。左上のモデル名から Qwen/Qwen3.6-27B-FP8 を選択すると、ローカルの vLLM に接続してチャットができます。


Firefox から LibreChat を使って Qwen3.6 と会話する様子

Minuet でコードを補完する

私は、業務などで必要に迫られない限りは Vibe Coding や Agentic Coding をしません。コードに対する理解の不足が長期的に負債になるように思うし、解決しようとしている現実の課題に対してプログラミングが不必要に難しいと感じたことがないからです[39]

代わりに、初期の GitHub Copilot のようなオートコンプリート型の AI が気に入っています。私が使っている Neovim というテキストエディタでは、 Minuet というプラグインで AI によるオートコンプリートができます。このプラグインは OpenAI API に互換性のあるサーバと連携できるため、当然 vLLM から使うこともできます。

https://github.com/milanglacier/minuet-ai.nvim

Minuet を使うためには、各自のプラグインマネージャから Minuet を追加します。ここでは Neovim 0.12 から追加された vim.pack を使って次のリポジトリを追加しました。

init.lua
vim.pack.add({
    -- ...
    "https://github.com/milanglacier/minuet-ai.nvim",
})

README.md を参考に次の設定を追記します。ここで end_point には vLLM がデプロイされているホストの URL を設定します。 api_key は、設定していなければ任意の文字列で構いません[40]。また Qwen3.6 はデフォルトで reasoning が有効ですが、コード補完には必要ないため reasoning_effortnone を設定しています[41]

vim.lua
require('minuet').setup {
    provider = 'openai_fim_compatible',
    n_completions = 1,
    context_window = 512,
    provider_options = {
        openai_fim_compatible = {
            api_key = 'null',
            name = 'vLLM',
            end_point = 'http://127.0.0.1:8000/v1/completions',
            model = 'Qwen/Qwen3.6-27B-FP8',
            optional = {
                max_tokens = 56,
                top_p = 0.9,
                reasoning_effort = "none",
            },
            template = {
                prompt = function(context_before_cursor, context_after_cursor, _)
                    return '<|fim_prefix|>'
                        .. context_before_cursor
                        .. '<|fim_suffix|>'
                        .. context_after_cursor
                        .. '<|fim_middle|>'
                end,
                suffix = false,
            },
        },
    },
}

設定したあとに Neovim で任意のファイルを開き :Minuet virtualtext enable というコマンドを入力すると以下のようにオートコンプリートが生成されます。 <A-A> で補完を確定させることができます。


Minuet と Neovim を使ってオートコンプリートを生成する様子

まとめ

この記事では Ubuntu Server, RTX 3090, vLLM を使って Qwen3.6-27B をホスティングする方法、および LibreChat や Minuet などと連携して日常的に活用する方法を紹介しました。参考になれば幸いです。

この記事で紹介したコードは、再現可能な Ansible Playbook として GitHub で公開しています。併せてご覧ください。

https://github.com/neet/homelab

脚注
  1. “The company says Mythos' ability to find cybersecurity bugs far surpasses human experts, and it could have world-altering consequences if similar technology lands in the wrong hands.”Why AI companies want you to be afraid of them ↩︎

  2. “Pentagon AI chief Cameron Fields said Grok is already in use within Project Maven, the US military’s AI-assisted targeting programme”Elon Musk’s AI tool Grok was used in strikes against Iran: US govt — Arab News ↩︎

  3. “労働者階級のうち、機械によってこのように余剰な人口に、すなわち資本の自己増殖にもはや直接に必要でない人口に、転化された部分は、一方では、機械経営に反対する旧式な手工業的およびマニファクチュア的経営の勝負にならない闘争の中で没落し、他方では、はいり込みやすいあらゆる産業部門をあふれさせ、労働市場を氾濫させ、そのため労働力の価値をその価値よりも低くする。”カール・マルクス『資本論』第3分冊,新版,日本共産党中央委員会社会科学研究所監修,新日本出版社,2019年,757ページ. ↩︎

  4. “このように、労働の生産力の発展による労働の節約は、資本主義的生産においては、決して労働日の短縮を目的とはしていない。それは、一定分量の商品の生産に必要な労働時間の短縮を目的としているだけである。”カール・マルクス『資本論』第3分冊,新版,日本共産党中央委員会社会科学研究所監修,新日本出版社,2019年,567ページ. ↩︎

  5. Open LLM Leaderboard 2026 - Compare Open Source LLM Rankings ↩︎

  6. “個人開発者やエッジデバイスでの日常的な高速対話・日本語整形タスクにはGemma4 26B A4Bを、深い論理的思考が要求されるコーディングエージェントの構築や、企業独自の高度な視覚・言語統合AIを開発するための基盤としてはQwen 3.6 27Bを採用することが、2026年現在のオープンモデルにおける最適解であると言える。”Gemma 4 26B と Qwen 3.6 27B の包括的性能比較:日本語処理能力とエージェント機能から迫るローカルLLMの最適解 | 藤川忠彦 ↩︎

  7. Qwen3.6-27B: Flagship-Level Coding in a 27B Dense Model ↩︎

  8. “Qwen3.6 is natively multimodal, and Qwen3.6-35B-A3B showcases perception and multimodal reasoning capabilities that far exceed what its size would suggest, with only around 3 billion activated parameters.”Qwen3.6-35B-A3B: Agentic Coding Power, Now Open to All ↩︎

  9. Qwen3.6 35B A3B vs Qwen3.6 27B - AI Model Comparison | OpenRouter ↩︎

  10. “Tensor type: BF16”Qwen/Qwen3.6-27B · Hugging Face ↩︎

  11. “In machine learning and AI, quantization aims to make models run faster, use less computing power, or both.”What is quantization in machine learning? ↩︎

  12. “The total memory used by a stage includes:”GPU Memory Calculation and Configuration - vLLM-Omni ↩︎

  13. “Context Length: 262,144 natively and extensible up to 1,010,000 tokens.”Qwen/Qwen3.6-27B · Hugging Face ↩︎

  14. “Number of Attention Heads: 24 for Q and 4 for KV Head Dimension: 256”Qwen/Qwen3.6-27B · Hugging Face ↩︎

  15. “Hidden Layout: 16 × (3 × (Gated DeltaNet → FFN) → 1 × (Gated Attention → FFN))”Qwen/Qwen3.6-27B · Hugging Face ↩︎

  16. vLLMのログに出てた内容からしてもだいたい合っている気がしていますが、あまり自信がありません。間違ってたら教えてください ↩︎

  17. “半導体メーカーはAIデータセンター向け製品の生産を、スマートフォンやPCなどに使われるメモリーより優先している。”AIブームで電子機器が再び値上がり。消費者はどうすればいいのか? | WIRED.jp ↩︎

  18. Any CPUs that provide more than 20 CPU PCIe Lanes? : r/buildapc ↩︎

  19. “そして気を付けないといけないのが、ほとんどのマザボは「x8 / x8」の動作をサポートしていないという点です。それなりのお値段(5万)以上のマザボでないとサポートしていないので、ここはしっかりと事前に確認してください。”VRAM(ビデオメモリ)32GBのローカルLLM環境(AI PC)をコスパ重視で構築してみる ↩︎

  20. “TDP: 350 W”NVIDIA GeForce RTX 3090 Specs | TechPowerUp GPU Database ↩︎

  21. “For the best experience when locking a branch, we suggest installing the pinning package prior to installing the driver.”Ubuntu — NVIDIA Driver Installation Guide ↩︎

  22. “It’s possible to install the driver without all the desktop components (GL, EGL, Vulkan, X drivers, and so on) to limit the footprint and dependencies on the system.”Ubuntu — NVIDIA Driver Installation Guide ↩︎

  23. セキュアブート有効環境でUbuntu 22.04にNVIDIAドライバをインストールする方法 #Ubuntu22.04 - Qiita ↩︎

  24. “choose vLLM when you need to serve multiple concurrent users”llama.cpp vs. vLLM: Choosing the right local LLM inference engine | Red Hat Developer ↩︎

  25. “vLLM is unequivocally the superior choice for production deployment. It is built for performance, delivering significantly higher throughput and lower latency under heavy load.”Ollama vs. vLLM: A deep dive into performance benchmarking | Red Hat Developer ↩︎

  26. “You can load CLI arguments via a YAML config file.”Server Arguments - vLLM ↩︎

  27. “Number of tensor parallel groups.”Engine Arguments - vLLM ↩︎

  28. “To run multi-GPU serving, pass in the --tensor-parallel-size argument when starting the server.”Parallelism and Scaling - vLLM ↩︎

  29. “Data type for kv cache storage. If "auto", will use model data type.”Engine Arguments - vLLM ↩︎

  30. “Maximum number of sequences to be processed in a single iteration.”Engine Arguments - vLLM ↩︎

  31. “Auto tool choice. It tells vLLM that you want to enable the model to generate its own tool calls when it deems appropriate.”Tool Calling - vLLM ↩︎

  32. “--tool-call-parser -- select the tool parser to use (listed below).”Tool Calling - vLLM ↩︎

  33. “The --reasoning-parser flag specifies the reasoning parser to use for extracting reasoning content from the model output.”Reasoning Outputs - vLLM ↩︎

  34. “Use --speculative-config to pass speculative decoding settings as a JSON object on the CLI”Speculative Decoding - vLLM ↩︎

  35. Metrics — NVIDIA NIM LLMs Benchmarking ↩︎

  36. OpenWebUI license change: red flag? : r/LocalLLaMA ↩︎

  37. “Local vLLM deployments don't require authentication, so the API key is just a placeholder. Point baseURL at your running vLLM server. Add the endpoint under endpoints.custom in your librechat.yaml” — vLLM | LibreChat ↩︎

  38. “Resolves to the internal IP address of your host”Explore networking how-tos on Docker Desktop | Docker Docs ↩︎

  39. “私は、ソフトウェア構築において困難な部分は、この概念構造体の仕様作成とデザインおよびテストにあって、それを表現する仕事やその表現に忠実か否かをテストする仕事ではないと考えている。私たちは今でも必ず構文上の誤りを犯すが、システムでのコンセプト上の誤りに比べたら、たいてい取るに足らない。”フレデリック・P・ブルックス Jr. 著『人月の神話』,丸善出版,2014年,170ページ. ↩︎

  40. “If using Ollama, you need to assign an arbitrary, non-null environment variable as a placeholder for it to function.”milanglacier/minuet-ai.nvim: 💃 Dance with Intelligence in Your Code. Minuet offers code completion as-you-type from popular LLMs including OpenAI, Gemini, Claude, Ollama, Llama.cpp, Codestral, and more. ↩︎

  41. “Disable thinking by setting reasoning_effort to none, or use minimal if your chosen model does not support none.”milanglacier/minuet-ai.nvim: 💃 Dance with Intelligence in Your Code. Minuet offers code completion as-you-type from popular LLMs including OpenAI, Gemini, Claude, Ollama, Llama.cpp, Codestral, and more. ↩︎

Discussion

ゆるくさゆるくさ

すごすぎる。私もチャレンジしてみようかな。

2