vast.ai で RTX 5090 を借りて ローカル LLM を動かす|2026-08 版
第 12 章

【実践】Ollama で 10 分で動かす

最短ルート。1 コマンドでモデルを落として会話するところまで

この章で分かること

ここまでで、インスタンスを借りて(第 8 章)SSH で入り(第 9 章)モデルを落とす(第 11 章)までが揃いました。この章はいちばん短い道を通します。Ollama(= 1 コマンドで LLM を落として動かすためのサーバ + CLI)を入れて、会話するところまでです。

お金の目安を先に置きます。この章の作業は合計 25 分ほどで、1 枚構成の RTX 5090 なら 0.2 USD 弱(2026-08-24 時点の実測中央値 0.4037 USD/時 で計算。1 USD = 150 円として約 25 円)です(章題の「10 分」は、このうちモデルを落として会話するところ = やってみる 12-2 の所要時間です)。加えてディスク代がかかります(後述)。

Ollama は「サーバ 1 つ」で全部やっている

最初に取り違えると後の全部が分からなくなるので、構造から入ります。Ollama は 3 つの層に分かれています。

つまり ollama run が動くのは「同じマシンでサーバが立っているから」です。手元の Mac から使うときも、GUI(Open WebUI)から使うときも、行き先は同じ 11434 番の 1 つのサーバです。

手元の Mac (インスタンスの外) ollama run / ps (インスタンスの中) curl / SDK REST を直接叩く ollama serve が 11434 番で待ち受ける 既定は 127.0.0.1 なので外からは直接届かない ssh -L でトンネル 同じマシンの中 REST / 互換 API GPU の VRAM(32 GB) 重みと K/V が乗る コンテナのディスク モデルの実体 重みを載せる 初回はここから読む
図 12-1 この章の手順(Linux 用インストーラ)でのモデル保存先は /usr/share/ollama/.ollama/models、公式イメージ ollama/ollama を docker run する経路ならコンテナ内の /root/.ollama です。ディスクに置かれた実体を、リクエストのたびに必要なら VRAM へ載せ直すのがサーバの仕事です。

モデルの指定は モデル名:タグ の形です。タグを省略すると latest が使われます(orca-mini:3b-q8_0 や llama3:70b のようにパラメータ数や量子化がタグに入ります)。

借りるときに決めるのは「入り口」と「ディスク」の 2 つだけ

入り口は 2 通りあります。どちらでも同じ Ollama が動きます。

入り口用意するもの向いている人
① 推奨テンプレート Open Webui (Ollama)ブラウザだけ。Open WebUI と Ollama API のポート公開が自動で用意されるまず GUI で触りたい
② 素のインスタンス + 公式インストーラSSH 接続と、この章のコマンド 3 本。テンプレートは第 7 章で選んだ [Automatic] タグ付きのものをそのまま使う自分で組み立てたい・API として使いたい

① は vast.ai のテンプレート一覧(cloud.vast.ai)でテンプレートを選び、play アイコンを押すと検索画面に移ります。起動後は Open ボタン → Instance Portal → Open WebUI のリンクで開き、初回に Admin のユーザー名とパスワードを作ります。モデルの取得は WebUI の中で、admin panel → settings → Models タブ → ダウンロードアイコン(Manage Models)にモデル名を入れる、という導線です。この章では ② を通します。API として使う話(第 13 章以降)に繋がるからです。

Blackwell では Docker イメージを差し替えない

RTX 5090(Blackwell 世代)は過去世代ほどの後方互換性を持たないため、公式は「テンプレートと Docker イメージが CUDA 12.8 と PyTorch 2.7 以降を使うよう構成されていることが重要」と明記しています。[Automatic] タグのテンプレートは対応済みの最新イメージを引くので、イメージ名を自分で書き換えないでください。互換性のないイメージに変えると 5 シリーズ対応が失われます。

もう 1 つの決めごとがディスクです。ディスク容量はインスタンス作成時に決めたら変更できません。検索画面のストレージスライダーで確保します(テンプレート側の欄ではありません)。モデルの実体はここに落ちるので、モデルサイズ以上を取らないと pull の途中で詰まります。公式は deepseek-r1:70b の例で 50 GB を確保するよう書いています。

ディスクの月額 = 確保 GB × storage_cost(USD/GB/月)

2026-08-24 時点の実測では storage_cost の中央値が 0.200 USD/GB/月 でした。計算例: 40 GB を 1 か月確保すると 40 × 0.200 = 月 8 USD。GPU を 1 時間動かすのが 0.40 USD ですから、放置したディスクのほうが高くつくことがあります。この章の練習なら 40 GB あれば足ります。公式 FAQ も「必要だと思う量より常に多めに割り当てて、途中で詰まるのを避けよ」と書いています。

最後に、そもそも Ollama が RTX 5090 を使えるのかを確認しておきます。公式ドキュメントは compute capability 5.0 以上(= NVIDIA が GPU の世代・機能水準に振る番号)で ドライバ 550 以降の NVIDIA GPU に対応すると書き、対応表の compute capability 12.0 の欄に RTX 5060 RTX 5060 Ti RTX 5070 RTX 5070 Ti RTX 5080 RTX 5090 を並べています。vast.ai の offer 実測(2026-08-24 時点)でも 1 枚構成 5090 の compute_cap は全件 1200(= 12.0)、ドライバは 570 系〜580 系でした。要件は満たしていますので、あとは入れるだけです。

やってみる 12-1|Ollama を入れて、GPU が見えていることを確かめる

SSH で入った直後の状態から始めます。所要 5 分、この間の課金は約 0.03 USD(2026-08-24 時点の実測中央値 0.4037 USD/時 での計算例)。

  1. まず GPU がドライバから見えているか確認する。RTX 5090 の行と VRAM が出れば OK。
  2. 公式の一発インストーラを実行する(更新も同じコマンドを再実行するだけ)。
  3. バージョンが返ることを確認する。
nvidia-smi
curl -fsSL https://ollama.com/install.sh | sh
ollama -v

ollama -v がバージョン文字列を返せば成功です。次の手順で ollama run がサーバに繋がらないときは、サーバがまだ立っていません。tmux の別ウィンドウ(Ctrl+b → c)で ollama serve を実行してから元のウィンドウ(Ctrl+b → n)に戻ります。tmux(= 1 本の SSH 接続の中に複数の画面を持てる道具)については第 9 章のとおりで、vast.ai は SSH で入ると既定でこの中に入ります。ollama serve を動かしたウィンドウはそのまま置いておいてください(閉じるとサーバが止まります)。systemd(= Linux でプログラムを常駐サービスとして動かす仕組み)が動いている環境なら、公式が推奨するサービス化(/etc/systemd/system/ollama.service に ExecStart=/usr/bin/ollama serve を書いて systemctl enable ollama)のほうが確実で、ログは journalctl -u ollama --no-pager --follow --pager-end で読めます。設定できる環境変数の一覧は ollama serve --help が出します。

1 コマンドで会話するところまで

公式のクイックスタートは ollama pull を挟まずに ollama run gemma4 から始まります。つまり run 1 本でも会話まで行けます。ただし初心者のうちは落とす工程と動かす工程を分けたほうが、どこで詰まったかが分かります。ダウンロードで失敗しているのか、GPU に載らなくて失敗しているのかが、画面を見ただけで切り分けられるからです。

やってみる 12-2|モデルを 1 つ落として会話する

所要 10 分(うち大半はダウンロード待ち)。課金は約 0.07 USD(同じく 2026-08-24 時点の 0.4037 USD/時 での計算例)。ダウンロードした量に応じて下り帯域の費用も乗ります(2026-08-24 時点の中央値 0.0026 USD/GB なので、10 GB 落として 0.026 USD 程度)。

  1. モデルを落とす。進捗が pulling manifest(manifest = モデルを構成するファイルの目録)→ 各レイヤーのバイト数 → verifying sha256 digest → writing manifest → removing any unused layers → success と流れます。途中で切っても、次回は途中から再開されます(公式が「中断した pull は中断地点から再開する」と明記しています)。
  2. ローカルに何があるかを確認する(一覧は ollama ls。list ではありません)。
  3. 対話を始める。プロンプトが出たら日本語で話しかけて構いません。
  4. 抜けるときは /bye と打つ。複数行を入れたいときは """ で囲みます。
ollama pull gemma4
ollama ls
ollama run gemma4

応答が返ってきた時点で「借りた GPU でローカル LLM が動いている」状態です。対話中にコンテキスト長(= モデルが一度に読める文章の長さ。トークンという単位で数えます)を変えたいときは、そのセッション内で /set parameter num_ctx 4096 が使えます。1 往復だけ試したいなら ollama run gemma4 "Why is the sky blue?" のようにプロンプトを引数で渡せます。

GPU に載ったかは ollama ps の 1 列で分かる

ここが実践で最も重要な確認です。Ollama は VRAM に収まらなければ黙って CPU に逃がします。動いてはいるが極端に遅い、という状態がこれです。別ウィンドウで ollama ps を叩きます。

ollama ps
NAME             ID              SIZE      PROCESSOR    CONTEXT    UNTIL
gemma4:latest    c6eb396dbd59    9.6 GB    100% GPU     131072     2 minutes from now

読む列は 3 つです。PROCESSOR が 100% GPU なら全部 GPU に載っています。48%/52% CPU/GPU のように割れていたら部分オフロード、100% CPU なら全部システムメモリです。公式の指針も「モデルを CPU にオフロード(= GPU に載りきらない分をシステムメモリ側に肩代わりさせること)するのを避け、ollama ps の PROCESSOR で分割を確認せよ」です。CONTEXT は実際に割り当てられたコンテキスト長、UNTIL はあと何分 VRAM に居座るかです。

この UNTIL が keep alive です。既定は 5 分。最後の応答から 5 分で、モデルは VRAM から自動的に降ります。

VRAM 占有量 重みぶん 0 経過時間 ollama ps が 100% GPU を返す ディスクから VRAM へ keep_alive=-1 なら降りない ollama stop で即座に落ちる 最初のリクエスト 最後の応答 5 分後(既定)
図 12-2 縦軸は VRAM の占有量です。この線が 0 に戻っても GPU の時間課金は 1 秒も止まりません。止まるのは vast.ai 側でインスタンスを stop / destroy したときだけです(第 16 章)。
やりたいこと書き方効果
既定のまま何も指定しない最後の応答から 5 分で降りる
常駐させるAPI に "keep_alive": -1降りない(負値は常駐の意味)
すぐ降ろすAPI に "keep_alive": 0 / CLI で ollama stop gemma4応答後すぐ / 即座にアンロード
サーバ全体の既定を変えるOLLAMA_KEEP_ALIVE="10m"(3600 のような秒数も可)そのサーバの全モデル

API の keep_alive は環境変数 OLLAMA_KEEP_ALIVE を上書きします。なお OLLAMA_MAX_LOADED_MODELS の既定は「GPU 数 × 3」(CPU 推論時は 3)なので、GUI から複数のモデルを触ると意図せず 2〜3 個が同時に VRAM に残ります。速度が落ちたら ollama ps で常駐を数え、要らないものを ollama stop で降ろします。

32 GB に入るモデルの決め方

RTX 5090 の VRAM は 32607 MB(2026-08-24 時点の offer 実測値、全件同一)。ここに何が入るかは、公式ドキュメントに出ている実測サイズを並べると見えてきます。

公式ドキュメントに出ているモデル量子化・規模サイズ1 枚の 5090(32 GB)で
llama3.2:latestQ4_K_M / 3.2B約 2.0 GB余裕で載る
deepseek-r1:latestQ4_K_M / 7.6B約 4.7 GB余裕で載る
mistral:latestQ4_0 / 7.2B約 5.1 GB余裕で載る
gemma4:latest公式の ollama ps 例9.6 GB載る(例では 100% GPU / CONTEXT 131072)
llama3:70b公式の ollama ps 例42 GB載らない
deepseek-r1:70bvast.ai の公式ガイドVRAM 最低 43 GB / ディスク 50 GB載らない(推奨は 2×4090)

この 3 つの実測値(4.7÷7.6、2.0÷3.2、42÷70)から本書の計算として言えるのは、Q4 系の量子化なら 1B パラメータあたり約 0.6 GB ということです。ここでいう量子化(= モデルの重みを粗く丸めてファイルを小さくする加工。q4_K_M q8_0 のような型名で表され、公式が推奨として挙げているのはこの 2 つ)の水準が変われば、この係数も変わります。単純計算では 32 GB に 50B 相当の重みが入りますが、重みだけが乗るわけではありません。

VRAM 32 GB の壁 30B / Q4 70B / Q4 重み 18 GB K/V キャッシュ と余白 重み 42 GB のうち 32 GB 残り 10 GB は CPU ollama ps → 100% GPU 重みが CPU に溢れる 0 GB
図 12-3 横 10 px = 1 GB で描いた本書の計算例です。30B の重み 18 GB は「1B ≒ 0.6 GB」からの計算、70B の重み 42 GB は公式ドキュメントの ollama ps 実測値。右の余白の量は用途で変わります(コンテキスト長と並列数で伸びるため)。

重み以外に何が乗るかというと、K/V キャッシュ(= 生成の途中経過を GPU 側に置いておく作業領域。コンテキストが長いほど大きくなる)です。余白が必要な理由は、公式が明記している 2 つの性質にあります。コンテキスト長を伸ばすとメモリ消費が増えること、そして並列リクエストはコンテキストを掛け算すること(公式の例: 2K のコンテキストに 4 並列で 8K 相当のメモリ確保になる)。並列数を決める OLLAMA_NUM_PARALLEL の既定は 1 なので、自分で増やすか、Open WebUI のように複数の会話を同時に走らせたときに効いてきます。したがって実務の安全域は Q4 系で 30B〜40B クラスまで(重みで 24〜26 GB 前後)、というのが本書の目安です。70B クラスは 1 枚では入りません。

コンテキスト長の既定値は公式ドキュメントの中で食い違っています。context-length のページは VRAM 依存(24 GiB 未満で 4k、24〜48 GiB で 32k、48 GiB 以上で 256k)と書き、FAQ は「既定は 4096 トークン」と書いています。RTX 5090 の 32 GB は 24〜48 GiB の帯に入りますが、断定せずに ollama ps の CONTEXT 列で実機の値を読むのが正解です。指定したいときは次の 3 通りです。

OLLAMA_CONTEXT_LENGTH=64000 ollama serve   # サーバ全体の既定
/set parameter num_ctx 4096                 # 対話セッション内
# API なら options に "num_ctx": 4096

公式は「web 検索・エージェント・コーディングのような大きなコンテキストを要する用途は少なくとも 64000 トークンにすべき」と書いています。VRAM が苦しくなったら、Flash Attention(= K/V キャッシュの量子化を使うための前提になる高速化機能。既定はバックエンドとデバイスが対応していれば自動で有効。OLLAMA_FLASH_ATTENTION=1 で強制的に有効化できます)が効いている状態で OLLAMA_KV_CACHE_TYPE=q8_0 にすると、K/V キャッシュが既定の f16 の約半分になります(精度低下はごく小さいと公式は書いています。さらに小さくする q4_0 もありますが、公式は「中程度の精度低下」と書いています)。ただしこれは全モデルに効くグローバル設定で、モデル単位では切り替えられません。

手元の Mac / PC から API として叩く

既定の OLLAMA_HOST は 127.0.0.1 の 11434 番、つまりインスタンスの内側からしか届きません。外から使う経路は 2 つです。

手元の Mac curl / SDK SSH 接続の中を通る 外にポートを開けない 共有 IP のランダム外部ポート トークンが無いと届かない インスタンス ollama serve 127.0.0.1 か 0.0.0.0 経路 ① 経路 ② 素で届く -k 必須
図 12-4 分かれ目は OLLAMA_HOST です。経路 ① なら既定の 127.0.0.1 のままで届きます(トンネルの出口はインスタンスの内側だから)。経路 ② はサーバを 0.0.0.0:11434 で待たせる必要があり、その瞬間から共有の公開 IP 上で誰でも到達できる状態になります。

初心者に勧めるのは経路 ① です。公式も ssh -L を「公開インターフェースにポートを開けることの安全な代替。すべてのデータは SSH 接続の中を運ばれる」と書いています。ポートを 1 つも開けずに済むので、事故の起きようがありません。

やってみる 12-3|手元のターミナルから 11434 番を叩く

所要 10 分、課金は約 0.07 USD(2026-08-24 時点の 0.4037 USD/時 での計算例)。インスタンス側で ollama run を一度動かしてモデルを常駐させたまま進めます。

  1. 手元のターミナルでトンネル付きで接続する。<ポート> と <ホスト> は、インスタンスカードの SSH ボタン(または vastai ssh-url <ID> が返す ssh://root@ホスト:ポート)から写します。
  2. そのウィンドウは繋いだまま放置する。トンネルは接続が生きている間だけ通ります。
  3. 手元の別のターミナルで、自分の localhost:11434 を叩く。stream を false にすると 1 個の JSON で返ります。
  4. OpenAI 互換の口も同じサーバに立っています。ベース URL は http://localhost:11434/v1/。公式の curl 例のようにキーを付けずに叩けますが、OpenAI SDK のようにキー欄が必須なクライアントでは ollama という文字列を入れます(値は無視されます)。
ssh -p <ポート> root@<ホスト> -L 11434:localhost:11434
curl http://localhost:11434/api/chat -d '{
  "model": "gemma4",
  "messages": [{ "role": "user", "content": "自己紹介を 1 文で" }],
  "stream": false
}'
curl -X POST http://localhost:11434/v1/chat/completions \
  -H "Content-Type: application/json" \
  -d '{"model": "gemma4", "messages": [{"role": "user", "content": "Say this is a test"}]}'

返ってきた JSON の eval_count を eval_duration で割って 10 の 9 乗を掛けると、生成速度(トークン/秒)が出ます(すべての時間はナノ秒で返る、というのが Ollama の作法です)。ここまで通れば、手元のエディタや自作スクリプトから借りた GPU を呼べる状態です。

経路 ② を使うのは「テンプレート ① で借りて、Open WebUI と一緒に Ollama の口も外から使いたい」場合です。このテンプレートは Ollama API のポート公開まで自動でやってくれるので、自分で OLLAMA_HOST を触る必要はありません(自分で入れた Ollama を外に出す場合だけ 0.0.0.0:11434 化が要ります)。vast.ai の公式ガイドでは URL は https://INSTANCE_IP:PORT_11434 の形で、Authorization ヘッダに OPEN_BUTTON_TOKEN の値を Bearer トークン(= 合言葉の文字列をヘッダに添えて本人確認する方式)として入れる必要があります。外部ポート番号はインスタンス上部の IP ボタン(IP Port Info)のポップアップで内部 11434 に対応するものを読み、トークンはインスタンス内のターミナルで echo $OPEN_BUTTON_TOKEN と打つと出ます。vast.ai は自己署名証明書(= 公的な認証局が発行していない証明書。そのままだと curl が接続を拒否する)を使うので、curl には -k を付けます。

curl -k https://<インスタンスの IP>:<外部ポート>/v1/completions \
    -H "Content-Type: application/json" \
    -H "Authorization: Bearer <OPEN_BUTTON_TOKEN>" \
    -d '{"model": "gemma4", "prompt": "San Francisco is a", "max_tokens": 128}'

つまずきポイント

ollama stop で課金が止まると思っていた

止まりません。ollama stop はモデルを VRAM から降ろすだけの操作で、GPU の時間課金はインスタンスが動いている間ずっと発生します。keep alive で自動的に降りたときも同じです。お金を止めるのは vast.ai 側の stop(GPU 代は止まるがディスク代は続く)と destroy(全部止まるがデータも消える)だけです。

外から curl したのに繋がらない

既定の OLLAMA_HOST が 127.0.0.1 だからです。外に出すなら 0.0.0.0:11434 にしますが、systemd で動かしている場合はシェルで export しても効きません。systemctl edit ollama.service で [Service] に Environment="OLLAMA_HOST=0.0.0.0:11434" を書き、daemon-reload と restart をします。ブラウザ拡張などから叩くなら OLLAMA_ORIGINS の追加も必要です。そこまでやりたくないなら ssh -L を使ってください。

ディスクが足りず pull の途中で詰まった

ディスク容量は作成後に変更できません。作り直しになります。モデルの実体は Linux では /usr/share/ollama/.ollama/models に落ちるので、df -h でそこの空きを見ます。保存先を別のディレクトリに移すときは OLLAMA_MODELS を設定した上で sudo chown -R ollama:ollama <ディレクトリ> が必要です(標準インストーラで入れた場合、ollama ユーザーに読み書き権限が要る)。中断した pull は途中から再開されるので、そこは慌てなくて構いません。

動くけれど極端に遅い

ollama ps の PROCESSOR を見ます。100% GPU でなければ原因は VRAM 不足で、犯人はだいたい ① モデルが大きい ② コンテキスト長が長い ③ 並列リクエストで掛け算になっている ④ 別のモデルが常駐したまま(既定で GPU 数 × 3 個まで載る)のどれかです。100% CPU でドライバ側が疑わしいときは nvidia-smi を、Docker 経路なら docker run --gpus all ubuntu nvidia-smi を試します。これが通らなければ Ollama からも GPU は見えません。

理解度チェック

Q1. ollama run は「サーバに繋いでいる」と言われるのはなぜですか。繋がらないときは何を確認しますか?

ollama run / pull / ps はすべてサーバの REST API を叩くクライアントだからです。モデルを VRAM に載せているのは ollama serve のプロセスです。繋がらないときは、そのサーバが立っているか(ollama serve を別ウィンドウで起動、または systemctl status ollama)を確認します。

Q2. ollama ps の PROCESSOR が 48%/52% CPU/GPU でした。何が起きていて、打てる手は何ですか?

モデルの半分ほどしか VRAM に載らず、残りがシステムメモリに逃げた部分オフロードの状態です(大幅に遅くなります)。公式の手は 3 つ: コンテキスト長を下げる(OLLAMA_CONTEXT_LENGTH / num_ctx)、Flash Attention を効かせて OLLAMA_KV_CACHE_TYPE=q8_0 で K/V キャッシュを半分にする、より小さい量子化のモデルにする。加えて ollama ps で余分な常駐モデルを探し ollama stop します。

Q3. 最後の応答から 5 分放置すると何が起きますか。そのとき課金はどうなりますか?

keep alive の既定が 5 分なので、モデルが VRAM から自動的に降ります(次のリクエストで再ロードされ、その分だけ待たされます)。一方課金は何も変わりません。GPU の時間課金はインスタンスが動いている限り続き、ディスク課金は停止中でも続きます。常駐させたいときは keep_alive に負値(-1)を渡します。

Q4. 70B クラスのモデルを 1 枚の RTX 5090 で動かせますか。根拠になる数字は何ですか?

動きません(正確には CPU に溢れて実用にならない)。根拠は公式の 2 つの数字で、llama3:70b の ollama ps 例が SIZE 42 GB、vast.ai の Ollama ガイドが deepseek-r1:70b に最低 43 GB の VRAM(推奨は 2×4090 + ディスク 50 GB)を要求しています。5090 の VRAM は 32607 MB(2026-08-24 時点の実測)なので届きません。1 枚で狙うなら Q4 系の 30B〜40B クラスまでが目安です。

Q5. 手元の Mac から 11434 番を叩く 2 経路を挙げ、それぞれで OLLAMA_HOST をどうするか答えてください。

① ssh -p <ポート> root@<ホスト> -L 11434:localhost:11434 でトンネルを張る経路。出口はインスタンスの内側なので OLLAMA_HOST は既定の 127.0.0.1 のままでよいし、ポートも開けません。② 公開ポート経由。この場合は 0.0.0.0:11434 で待たせる必要があり、共有の公開 IP 上で誰でも到達できるので認証が必須です(vast.ai のテンプレートなら Authorization: Bearer $OPEN_BUTTON_TOKEN と自己署名証明書のための curl -k)。

まとめ

ここで手を止めるなら、忘れずにインスタンスを止めてください。/bye でも ollama stop でも GPU の時間課金は動き続けます。続けて第 13 章に進まないのであれば、vast.ai 側で stop(GPU 代は止まる。ディスク代は続く)か destroy(全部止まるがデータも消える)まで行うところが「作業の終わり」です。詳しくは第 16 章で扱います。

次章では、同じモデルを vLLM で立てて OpenAI 互換 API のサーバにします。Ollama より設定は増えますが、複数リクエストを裁く力と 32 GB に収めるための細かい制御が手に入ります。