クラウド GPU で vLLM を使って OpenAI 互換 API を提供するには?

結論: Raw GPU をデプロイし、Python の仮想環境で uv pip install vllm --torch-backend=auto を実行して vLLM をインストールし、vllm serve <model> --api-key <key> を実行します。vLLM のクイックスタートによると、サーバーは既定で http://localhost:8000 で起動し、/v1/models や /v1/chat/completions などの OpenAI のエンドポイントを提供します(vLLM クイックスタート、2026-11-03 閲覧)。SSH でポート 8000 を転送し、任意の OpenAI クライアントを http://localhost:8000/v1 に向けます。

ステップ 1:カードを選んで Raw GPU をデプロイする

重みと KV キャッシュが 1 枚の GPU に収まる必要があります。モデルのサイズは LLM に必要な VRAMで見積もってください。必要な VRAM はモデル、精度、ワークフローによって変わります。vLLM には compute capability 7.5 以上の NVIDIA GPU が必要です。CloudGPU が vLLM 向けに掲載しているカードは /rent-gpu-for-vllm にあります。

/deploy で Raw GPU(JupyterLab と CUDA、root SSH)とカードを選びます。このガイドでは、バージョンとフラグを自分で管理できるよう vLLM を自分でインストールします。現在のテンプレート一覧は /deploy で確認してください。インスタンスの引き渡し後にインストールを自動で実行したい場合は、ステップ 2 の内容を任意のスタートアップスクリプトに貼り付けます(起動時にセットアップスクリプトを実行する方法)。

ステップ 2:vLLM をインストールする

nvidia-smi                       # GPU, driver, and the CUDA version the driver supports
pip install -U uv
uv venv --python 3.12 --seed ~/vllm-env
source ~/vllm-env/bin/activate
uv pip install vllm --torch-backend=auto
vllm --version

クイックスタートは Python 3.11〜3.14 を対象とし、uv を推奨しています。--torch-backend=auto はドライバーに合った PyTorch ビルドを選びます。RTX 5090 で PyTorch が sm_120 用のカーネルがないと報告する場合は、「no kernel image」の直し方(英語)をご覧ください。

ステップ 3:モデルをダウンロードする(任意ですが便利です)

vllm serve は初回起動時に Hugging Face からダウンロードしますが、別にダウンロードしておくほうが進み具合を確認しやすく、再開もしやすくなります:

pip install -U "huggingface_hub"
cloudgpu-net on                  # download acceleration for this shell
hf download Qwen/Qwen2.5-7B-Instruct --local-dir ~/models/qwen2.5-7b-instruct
cloudgpu-net off

Llama などのゲート付きモデルは、先に Hugging Face でライセンスに同意し、HF_TOKEN を export してください。モデルのダウンロードを速くする方法もご覧ください。

ステップ 4:サーバーを起動する

SSH が切れても動き続けるよう、tmux の中で実行します:

tmux new -s vllm
source ~/vllm-env/bin/activate
export VLLM_API_KEY="$(openssl rand -hex 16)"; echo "$VLLM_API_KEY"   # note the key
vllm serve ~/models/qwen2.5-7b-instruct \
  --host 127.0.0.1 --port 8000 \
  --served-model-name qwen2.5-7b \
  --max-model-len 16384

vLLM のエンジン引数のページ(2026-11-03 閲覧)によるフラグの意味:

フラグ 意味
--api-key または VLLM_API_KEY リクエストはこのキーを Bearer トークンとして送る必要があります(クイックスタート)
--served-model-name “The model name(s) used in the API”(API で使うモデル名)。指定しないとモデルのパスがそのまま名前になります
--max-model-len “Model context length (prompt and output)”(モデルのコンテキスト長、プロンプトと出力)。KV キャッシュが収まらなければ下げます
--gpu-memory-utilization “The fraction of GPU memory to be used for the model executor”(モデル実行に使う GPU メモリの割合)
--generation-config 既定は auto で、モデルの generation_config.json からサンプリングの既定値を読み込みます。vllm にすると vLLM 自身の既定値を使います
--dtype auto では FP32/FP16 のモデルに FP16、BF16 のモデルに BF16 を使います

127.0.0.1 にバインドするとサーバーはインターネットに公開されず、次のステップの SSH 経由でアクセスします。ログにサーバーがポート 8000 で待ち受けていると表示されるまで待ってください。

ステップ 5:手元のコンピューターから呼び出す

インスタンスの行に表示されるユーザー、ホスト、ポートでトンネルを開きます:

ssh -N -L 8000:127.0.0.1:8000 -p <ssh-port> <user>@<host>

続いて、手元のコンピューターで:

export VLLM_API_KEY=<the key from Step 4>
curl http://localhost:8000/v1/models -H "Authorization: Bearer $VLLM_API_KEY"
curl http://localhost:8000/v1/chat/completions \
  -H "Content-Type: application/json" -H "Authorization: Bearer $VLLM_API_KEY" \
  -d '{"model": "qwen2.5-7b", "messages": [{"role": "user", "content": "Say hello in one sentence."}]}'

OpenAI の Python SDK(pip install openai)でストリーミングする例:

import os
from openai import OpenAI

client = OpenAI(base_url="http://localhost:8000/v1", api_key=os.environ["VLLM_API_KEY"])
stream = client.chat.completions.create(
    model="qwen2.5-7b",
    messages=[{"role": "user", "content": "Explain the KV cache in two sentences."}],
    stream=True,
)
for chunk in stream:
    print(chunk.choices[0].delta.content or "", end="", flush=True)

OpenAI のベース URL を指定できるツール(Open WebUI、LangChain、Cursor 系のクライアントなど)も、http://localhost:8000/v1 を指定すれば同じように使えます。トンネルの詳細は クラウド GPU での SSH ポートフォワーディング(英語)をご覧ください。

トラブルシューティング

  • 起動時に CUDA out of memory: --max-model-len を下げる、量子化モデルを選ぶ、または VRAM の多いカードを使います。CUDA out of memory の直し方(英語)をご覧ください。
  • チャットのリクエストが失敗する: vLLM のサービングのドキュメントには “vLLM requires the model to include a chat template in its tokenizer configuration”(vLLM はモデルのトークナイザー設定にチャットテンプレートが含まれていることを必要とします)とあります。テンプレートのないモデルでは --chat-template <file.jinja> を指定します(オンラインサービングのドキュメント、2026-11-03 閲覧)。
  • 回答が想定と違う: vLLM は既定でモデルの generation_config.json を適用します。--generation-config vllm で vLLM の既定値を使って試してください。
  • 401 エラー: クライアントは同じキーを Authorization: Bearer <key> として送る必要があります。
  • curl が接続できない: トンネルが開いているか、サーバーのログがポート 8000 で待ち受けていることを示しているかを確認します。

提供をやめたら課金も止める

GPU は 1 分単位(切り上げ)、最低 1 分で課金され、サーバーがリクエストを待っているアイドル時間も含まれます。インスタンスを破棄すると課金は止まり、同時にインスタンス上のデータは削除されるので、残したいものは先にコピーしてください。REST API でインスタンスを起動する場合、idle_minutes を指定すると GPU がその時間アイドル状態だったインスタンスを破棄します(API ドキュメント)。GPU を自分で動かしたくない場合は、CloudGPU 自身の OpenAI 互換モデル API が https://cloudgpu.app/v1 にあります。

よくある質問

vllm serve はどのポートを使いますか?

vLLM のクイックスタートによると、サーバーは既定で http://localhost:8000 で起動します。–host 127.0.0.1 --port 8000 を明示し、SSH トンネルでアクセスしてください。

vLLM に API キーを付けるには?

vLLM のクイックスタートのとおり、–api-key を渡すか、環境変数 VLLM_API_KEY を設定します。クライアントはそのキーを Authorization: Bearer として送ります。

クライアントが使うモデル名を変えるには?

–served-model-name を使います。vLLM のエンジン引数によると、指定しない場合のモデル名は model 引数(たとえばローカルパス)と同じになります。

vLLM サーバーはどのエンドポイントを提供しますか?

vLLM のサービングのドキュメントには、Completions、Chat Completions、Embeddings、Transcriptions、Translation の各 API と Responses API が挙げられています。/v1/models では提供中のモデルを一覧できます(2026-11-03 閲覧)。

CloudGPU で vLLM サーバーはどのように課金されますか?

GPU 時間の 1 分単位(切り上げ)、最低 1 分で、アイドル時間も含まれます。インスタンスを破棄すると課金は止まります。料金は https://cloudgpu.app/ja/pricing をご覧ください。

出典(2026-11-03 閲覧、Asia/Shanghai)


起動できるカードは Deploy ページに一覧があります。料金は https://cloudgpu.app/ja/pricing に掲載しており、ここでは繰り返しません。

最終更新:2026-11-03(Asia/Shanghai)。