OllamaをマルチGPU環境で動かす方法|複数NVIDIAカードのVRAM合算で70BモデルをLinuxサーバーで稼働させる手順

宮崎智広 この記事の監修:宮崎智広(Linux実務・教育歴20年以上・受講者3,100名超)
HOME > Linux技術 リナックスマスター.JP(Linuxマスター.JP) > ローカルLLM > OllamaをマルチGPU環境で動かす方法|複数NVIDIAカードのVRAM合算で70BモデルをLinuxサーバーで稼働させる手順
「NVIDIAカードを2枚積んだのに、Ollamaが片方のGPUしか使っていない」
「1枚では24GBしかVRAMがなく70BモデルをGPUで動かせない。2枚合算できないのか」

そんな悩みを抱えるインフラエンジニアは多いはずです。OllamaはNVIDIAカードを自動検出してモデルのレイヤーを複数GPUに分散配置します。この記事では、OllamaのマルチGPU動作の仕組み・環境確認コマンド・CUDA_VISIBLE_DEVICESとOLLAMA_GPU_OVERHEADによる制御・nvidia-smiでのリアルタイム監視・「1枚しか使われない」問題の対処法を実機コマンドとともに解説します。

この記事のポイント

・OllamaはCUDAドライバが認識する全GPUを自動検出しVRAMを合算してレイヤー分散する
・ollama psとnvidia-smiの組み合わせで複数GPU使用を確認できる
・CUDA_VISIBLE_DEVICESで使用するGPUを明示的に制限・指定できる
・OLLAMA_GPU_OVERHEADで予約VRAMを設定しOOM(メモリ不足)クラッシュを防げる


OllamaをマルチGPU環境で動かす方法|複数NVIDIAカードのVRAM合算で70BモデルをLinuxサーバーで稼働させる手順

「このままじゃマズい」と感じていませんか?
参考書を開く気力もない、同年代に取り残される不安——
でも安心してください。プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

OllamaのマルチGPU動作の仕組み

Ollamaは推論エンジンとしてllama.cppを内部で使っています。llama.cppはモデルを「レイヤー」という単位で分割してGPUに割り当てます。複数のNVIDIAカードがある場合、各GPUの空きVRAMを調べ合計VRAMに収まるようレイヤーを振り分けます。

たとえばGPU0(16GB)とGPU1(16GB)の2枚構成であれば理論上32GBのモデルを全レイヤーGPUに乗せられます。1枚では動かせなかった70B・q4_K_M(約40GB)もこの構成なら運用できます。複数GPUをまたぐ推論ではGPU間PCIe転送が発生するため、NVLinkや同じPCIeスイッチで接続されたカード同士の方が有利です。

Ubuntu ServerへのOllama構築手順でシングルGPUの初期設定は済んでいる前提で、ここではマルチGPU固有の設定と確認に絞ります。

前提確認:nvidia-smiですべてのGPUを認識しているか調べる

まずホストOSがすべてのカードを認識できているかを確認します。

1. GPUの一覧を確認する

# list all gpus detected by the cuda driver $ nvidia-smi -L GPU 0: NVIDIA GeForce RTX 4090 (UUID: GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx) GPU 1: NVIDIA GeForce RTX 3090 (UUID: GPU-yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy)

2行表示されればOSレベルでは2枚認識されています。1枚しか出ない場合はドライバの再インストール、PCIeスロットの確認が必要です。

2. 各GPUのVRAM空き容量を確認する

$ nvidia-smi --query-gpu=index,name,memory.total,memory.free --format=csv,noheader 0, NVIDIA GeForce RTX 4090, 24576 MiB, 23800 MiB 1, NVIDIA GeForce RTX 3090, 24576 MiB, 24100 MiB

空きVRAMの合計(ここでは約47GB)がロードしたいモデルのサイズより大きければ全レイヤーGPU配置できます。
モデル比較と量子化選定の記事でモデル別のVRAM消費目安を確認しておくと良いでしょう。

3. CUDAバージョンの確認

$ nvidia-smi | head -5 +-----------------------------------------------------------------------------+ | NVIDIA-SMI 550.90.07 Driver Version: 550.90.07 CUDA Version: 12.4 | |-------------------------------+----------------------+----------------------+

CUDAバージョンは右上に表示されます。12.x以上であればOllamaの最新版が問題なく動きます。

Ollamaが複数GPUを使っているか確認する

モデルをpullして実行するだけで自動的にマルチGPUが使われます。確認方法は2つあります。

1. ollama psで現在のGPU割り当てを確認する

$ ollama run llama3.3:70b-instruct-q4_K_M "こんにちは" & $ ollama ps NAME ID SIZE PROCESSOR UNTIL llama3.3:70b-instruct-q4_K_M abc123 41 GB 100% GPU 4 minutes from now

`PROCESSOR` 列に `100% GPU` と出ていれば全レイヤーGPUに載っています。

2. nvidia-smiでGPU別のメモリ使用量を確認する

$ nvidia-smi --query-gpu=index,name,memory.used --format=csv,noheader 0, NVIDIA GeForce RTX 4090, 22100 MiB 1, NVIDIA GeForce RTX 3090, 19200 MiB

両方でメモリが消費されていればレイヤーが分散できています。片方が0 MiBのままなら次のセクションの設定を見直してください。

CUDA_VISIBLE_DEVICESで使用するGPUを制御する

`CUDA_VISIBLE_DEVICES` 環境変数でOllamaが使うGPUを限定・除外できます。systemdのoverride.confに設定します。

1. 使用するGPUを明示指定する

$ sudo mkdir -p /etc/systemd/system/ollama.service.d/ $ sudo tee /etc/systemd/system/ollama.service.d/override.conf << 'EOF' [Service] Environment="CUDA_VISIBLE_DEVICES=0,1" EOF $ sudo systemctl daemon-reload $ sudo systemctl restart ollama

`CUDA_VISIBLE_DEVICES=0,1` は nvidia-smi -L のインデックス番号と対応します。`0` だけにすれば強制的に1枚運用になります。表示用と推論専用を使い分けたい場合もこの設定で推論専用カードのみ指定します。

設定変更後は必ず `ss -tlnp | grep 11434` と `ollama ps` で正常起動を確認してください。

2. UUIDで指定する(スロット番号が変わる環境向け)

再起動やカードの抜き差しでインデックス番号が変わる環境ではUUID指定が確実です。`nvidia-smi -L` で表示されるUUIDをoverride.confに書きます。

# UUID指定の例(override.conf内) Environment="CUDA_VISIBLE_DEVICES=GPU-xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx,GPU-yyyyyyyy-yyyy-yyyy-yyyy-yyyyyyyyyyyy"

OLLAMA_GPU_OVERHEADでVRAM予約量を設定する

Ollamaはモデルロード時に各GPUの空きVRAMをフルに使おうとし、OSやドライバ側のVRAM消費と競合するとOOMクラッシュが起きます。これを防ぐのが `OLLAMA_GPU_OVERHEAD` です。

$ sudo tee /etc/systemd/system/ollama.service.d/override.conf << 'EOF' [Service] Environment="CUDA_VISIBLE_DEVICES=0,1" Environment="OLLAMA_GPU_OVERHEAD=1073741824" EOF # 1073741824 bytes = 1 GiB / GPU(各GPUごとに1GiB確保) $ sudo systemctl daemon-reload $ sudo systemctl restart ollama

値はバイト単位です。ヘッドレスサーバーなら512MB(536870912)、4Kディスプレイ接続GPUでは2GiB(2147483648)程度が目安です。
【注意】ゼロにするとOSのVRAM確保領域と衝突しOOMクラッシュが起きやすくなります。最低512MBは予約しておくのが安全です。OOMクラッシュ時はまずこの値を増やしてください。

複数GPUの負荷をnvidia-smiでリアルタイム監視する

# 1秒間隔でGPU一覧を更新表示 $ watch -n1 nvidia-smi # dmon でGPU使用率・メモリを連続出力(sm=GPUコア使用率・fb=VRAMメモリ使用量) $ nvidia-smi dmon -d 1 -s um 0 22100 1024 87 76 0 0 1 19200 512 82 71 0 0 # ログからレイヤー分散状況を確認(分散配置なら両GPU行に layers 値が出る) $ sudo journalctl -u ollama -n 100 | grep -i "gpu\|layer" time=2026-09-30T09:14:22Z level=INFO msg="offload" gpu=0 layers=50 time=2026-09-30T09:14:22Z level=INFO msg="offload" gpu=1 layers=30

推論中は両GPUの `sm`(コア使用率)と `fb`(VRAMメモリ)が上昇します。片方が0のままならレイヤーがそのGPUに入っていません。

よくある問題とトラブルシュート

**問題1: 2枚あるのに1枚しかメモリを使っていない**

原因の大半は「1枚のVRAMにモデルが収まっている」ことです。GPU0が24GBでモデルが20GBなら1枚で足りるためGPU1は使われません。2枚に分散させるには1枚のVRAMを超えるモデルを選ぶ必要があります。

**問題2: モデルはロードされるが推論速度が遅い**

マルチGPU推論はGPU間PCIe通信が発生するため枚数×速度にはなりません。シングルGPUで収まるモデルを並列リクエストで処理する用途では `OLLAMA_SCHED_SPREAD=1` で複数GPUにリクエストを分散できます。

**問題3: CUDAエラーでOllamaがクラッシュする**

`CUDA error: out of memory` がjournalctlに出る場合はOLLAMA_GPU_OVERHEADを増やします。`CUDA error: device-side assert triggered` はドライバとCUDAのバージョン不一致を疑います。
社内でのローカルLLM導入の前に、既存の複数GPU構成が正常に機能しているかをこの手順で確認しておくと良いでしょう。

まとめ

マルチGPU構成のポイントを整理します。現場インフラエンジニアの多くが「VRAMが足りなくなったらもう1枚積む」という選択をする理由は、より大きなモデルを全レイヤーGPUに乗せられるようになるためです。ただし「増やせば速くなる」ではなく「収まるようになる」が正確な表現です。

やりたいこと コマンド・設定
全GPUの一覧とUUIDを確認 nvidia-smi -L
GPU別の空きVRAMを確認 nvidia-smi --query-gpu=index,name,memory.total,memory.free --format=csv,noheader
モデルのGPU配置を確認 ollama ps
GPU別メモリ使用量を確認 nvidia-smi --query-gpu=index,name,memory.used --format=csv,noheader
使用GPUをインデックスで指定 override.confに Environment="CUDA_VISIBLE_DEVICES=0,1"
GPU予約VRAMを設定 override.confに Environment="OLLAMA_GPU_OVERHEAD=1073741824"
リアルタイムGPU使用率を確認 nvidia-smi dmon -d 1 -s um
Ollamaのレイヤー分散状況を確認 sudo journalctl -u ollama -n 100 | grep -i "gpu\|layer"

マルチGPU環境でのOllama実機ハンズオンを2日間で体験する

本記事で解説した複数GPU構成・nvidia-smiによる監視・VRAM最適化の手順を、実機GPUサーバーで手を動かしながら確認したい方向けに、「ローカルAIマスターセミナー」を開催しています。
少人数(最大8名)ZOOMハンズオン形式で実施しています。

>> ローカルAIマスターセミナーの詳細を確認する
ローカルLLMの構築・運用に関する関連記事もあわせて参考にしてください。

・Ubuntu ServerでローカルLLMを構築する方法|Ollamaで機密データを外に出さず業務AIを動かす完全ガイド
・社内でChatGPTが使えないときの代替手段|機密データを守るローカルLLMという選択肢
・ローカルLLMのモデルを比較する方法|Llama3.3・Mistral・Gemma・Phi-4をUbuntuで使い分けるポイント

無料メルマガで学習を続ける

Linuxの実践スキルをメールで毎週お届け。
登録は30秒、解除もいつでも可。

登録無料・いつでも解除できます

暗記不要・1時間後にはサーバーが動く

3,100名以上が実践した「型」を無料で公開中

プロのエンジニアはコマンドを暗記していません。
「現場で使える型」を効率よく使いこなしているだけです。
その「型」を図解60Pにまとめた入門マニュアルを、完全無料でプレゼントしています。

姓・名・メールの3つだけ/30秒/解除は3秒 / 詳細はこちら

Linux無料マニュアル(図解60P) 名前とメールで30秒登録
宮崎 智広

この記事を書いた人

宮崎 智広(みやざき ともひろ)

株式会社イーネットマーキュリー代表。現役のLinuxサーバー管理者として20年以上の実務経験を持ち、これまでに累計3,100名以上のエンジニアを指導してきたLinux教育のプロフェッショナル。「現場で本当に使える技術」を体系的に伝えることをモットーに、実践型のLinuxセミナーの開催や無料マニュアルの配布を通じてLinux人材の育成に取り組んでいる。

趣味は、キャンプにカメラ、トラウト釣り。好きな食べ物は、ラーメンにお酒。休肝日が作れない、酒量を減らせないのが悩み。最近、ドラマ「フライトエンジェル」を観て涙腺が崩壊しました。