はじめに
LLaMAやGemma、DeepSeekなど、最近は多くのオープンなLLMが利用できるようになってきました。多くのモデルはHugging Faceで公開されていて、自由にダウンロードできます。ただしAPI経由で利用したい場合などはモデル単体では動作しないので、LLMをホストするためのソフトウェアが必要です。
完全に個人のローカル環境で動作させたいのであればLM Studioなどが有力なのかと思いますが、今回はある程度組織的に利用できるLLMサーバーとして動作することを前提とし、vLLMをGCP上に構築する方法についてメモしておこうと思います。
vLLMはオープンソースのLLM推論エンジンで、カリフォルニア大学バークレー校のSky Computing Labが開発しています。高速に動作することを特徴としており、OpenAI互換のAPIサーバーとしても動作します。vLLM自体はHugging Faceのモデルを利用するため、Hugging Faceで公開されている多くのモデルを利用できます。
なお今回の記事はElasticとは全く関係ありませんが、今後の記事から参照されることを想定してElasticの記事として公開しておくことにします。
最初に記事を作成、動作確認したのは2025年10月です。
インスタンスの作成
まずはGCP上にvLLMをインストールするためのインスタンスを作成します。今回はGPUを使ってモデルを動作させられるように、GPUの使えるインスタンスタイプのNVIDIA T4を利用します。
以下のようなコマンドで作成しました。
gcloud compute instances create my-vllm-gpu-qiita \
--project=xxx \
--zone=xxx \
--machine-type=n1-standard-4 \
--accelerator=type=nvidia-tesla-t4,count=1 \
--maintenance-policy=TERMINATE \
--provisioning-model=STANDARD \
--create-disk=auto-delete=yes,boot=yes,device-name=my-vllm-gpu-qiita,image=projects/ubuntu-os-cloud/global/images/family/ubuntu-2204-lts,mode=rw,size=200,type=pd-balanced \
--metadata=install-nvidia-driver=True
スペックは以下の通り。
| 項目 | 内容 |
|---|---|
| マシンタイプ | n1-standard-4 (4 vCPUs, 15 GB memory) |
| GPU | NVIDIA Tesla T4 x 1 |
| OS | Ubuntu 22.04 LTS |
| ディスク | 200GB (pd-balanced) |
NVIDIAドライバのインストール
VMの初回起動時、--metadata=install-nvidia-driver=TrueオプションでNVIDIAドライバが自動インストールされることになっていますが、実際にはインストールされない場合があります。というか私の場合は上記のコマンドではインストールできませんでした。
以下のコマンドで確認します。
# NVIDIAドライバの確認
$ nvidia-smi
Command 'nvidia-smi' not found, but can be installed with:
apt install nvidia-utils-510 # version 510.60.02-0ubuntu1, or
apt install nvidia-utils-510-server # version 510.47.03-0ubuntu3
apt install nvidia-utils-390 # version 390.157-0ubuntu0.22.04.2
apt install nvidia-utils-418-server # version 418.226.00-0ubuntu5~0.22.04.1
apt install nvidia-utils-450-server # version 450.248.02-0ubuntu0.22.04.1
apt install nvidia-utils-470 # version 470.256.02-0ubuntu0.22.04.1
apt install nvidia-utils-470-server # version 470.256.02-0ubuntu0.22.04.1
apt install nvidia-utils-535 # version 535.247.01-0ubuntu0.22.04.1
apt install nvidia-utils-535-server # version 535.261.03-0ubuntu0.22.04.1
apt install nvidia-utils-545 # version 545.29.06-0ubuntu0.22.04.2
apt install nvidia-utils-550 # version 550.163.01-0ubuntu0.22.04.1
apt install nvidia-utils-565-server # version 565.57.01-0ubuntu0.22.04.4
apt install nvidia-utils-570 # version 570.172.08-0ubuntu0.22.04.1
apt install nvidia-utils-570-server # version 570.172.08-0ubuntu0.22.04.1
apt install nvidia-utils-580-server # version 580.65.06-0ubuntu0.22.04.1
apt install nvidia-utils-550-server # version 550.163.01-0ubuntu0.22.04.1
apt install nvidia-utils-580 # version 580.65.06-0ubuntu0.22.04.4
Ask your administrator to install one of them.
上記はインストールできていない例です。この場合、以下の手順で手動インストールを行います。
# GCPの公式インストールスクリプトをダウンロード
$ curl https://raw.githubusercontent.com/GoogleCloudPlatform/compute-gpu-installation/main/linux/install_gpu_driver.py --output install_gpu_driver.py
# スクリプトを実行(5-10分かかります)
$ sudo python3 install_gpu_driver.py
ここで再度nvidia-smiコマンドを実行してみて、以下のようにGPUの情報が表示されれば成功です。
$ nvidia-smi
Wed Oct 15 00:57:31 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15 Driver Version: 550.54.15 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| 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 Tesla T4 Off | 00000000:00:04.0 Off | 0 |
| N/A 73C P0 33W / 70W | 0MiB / 15360MiB | 8% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
+-----------------------------------------------------------------------------------------+
| Processes: |
| GPU GI CI PID Type Process name GPU Memory |
| ID ID Usage |
|=========================================================================================|
| No running processes found |
+-----------------------------------------------------------------------------------------+
Python環境のセットアップ
vLLMはPythonで動作するため、Pythonのインストールと仮想環境の作成を行います。
$ sudo apt-get update
$ sudo apt-get upgrade -y
$ sudo apt-get install -y python3-pip python3-venv git build-essential
$ python3 --version
私の環境ではPython 3.10.12がインストールされていました。詳しく調査していませんが、執筆時点ではPython 3.14系ではvLLM(あるいはその依存ライブラリ)が動作しないようです。
vLLMのインストール
今回は簡易的なテストのため、~/vllm-setupディレクトリを作成し、その中にPython仮想環境を作成してvLLMをインストールします。
作業ディレクトリの作成
$ mkdir -p ~/vllm-setup
$ cd ~/vllm-setup
Python仮想環境の作成
$ python3 -m venv vllm-env
$ source vllm-env/bin/activate
$ pip install --upgrade pip
PyTorchのGPU版インストール
# PyTorch GPU版(CUDA 12.1対応)
$ pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121
これでGPU版のPyTorchがインストールされます。以下のコマンドで正しくGPUが認識されているか動作確認を行います。
python3 << EOF
import torch
print(f"PyTorch version: {torch.__version__}")
print(f"CUDA available: {torch.cuda.is_available()}")
if torch.cuda.is_available():
print(f"CUDA version: {torch.version.cuda}")
print(f"GPU count: {torch.cuda.device_count()}")
print(f"GPU name: {torch.cuda.get_device_name(0)}")
else:
print("⚠️ CUDA is not available. Please check NVIDIA driver installation.")
EOF
私の環境では以下のように表示されました。
PyTorch version: 2.5.1+cu121
CUDA available: True
CUDA version: 12.1
GPU count: 1
GPU name: Tesla T4
vLLMのインストール
準備ができたのでvLLMをインストールします。
$ pip install vllm
vLLMサーバーの起動
vLLMがインストールができたので、実際にvLLMをOpenAI互換のAPIサーバーとして起動しましょう。今回はテスト用に、CyberAgentが公開している小規模な日本語モデル、cyberagent/open-calm-smallを利用します。
$ python3 -m vllm.entrypoints.openai.api_server \
--model cyberagent/open-calm-small \
--host 0.0.0.0 \
--port 8000 \
--dtype float16 \
--max-model-len 2048
起動できると以下のようなログが表示されます。
(APIServer pid=18745) INFO: Started server process [18745]
(APIServer pid=18745) INFO: Waiting for application startup.
(APIServer pid=18745) INFO: Application startup complete.
起動できたら別のターミナルでこのホストにSSHログインし、以下のコマンドでAPIが動作しているか確認します。
# completions APIのテスト
$ curl -s "http://localhost:8000/v1/completions" \
-H "Content-Type: application/json" \
-d '{
"model": "cyberagent/open-calm-small",
"prompt": "USER: 人工知能とは何ですか?\nASSISTANT: ",
"max_tokens": 100,
"temperature": 0.8
}' | jq
以下のようなレスポンスがあれば成功です。
{
"id": "cmpl-e4d01e1241de4187868c9c764d8d3472",
"object": "text_completion",
"created": 1760491371,
"model": "cyberagent/open-calm-small",
"choices": [
{
"index": 0,
"text": "人工知能とは、ディープラーニング(深層学習)です。コンピュータが処理しているデータやテキスト、画像などの機械学習データから、人間のように学習します。人間のように学習した結果、人間の知覚した構造を再構築(データベース化)して人間が認識できるようにするのです。\nこのMARL: 人工知能とは何ですか?\nSTMP: 人工知能とは、ディープラーニング(深層学習)のことです。人間のように学習した結果、人間が認識できるようにします。人間が認識しているデータから、人間よりも効率的に構造を改変、",
"logprobs": null,
"finish_reason": "length",
"stop_reason": null,
"token_ids": null,
"prompt_logprobs": null,
"prompt_token_ids": null
}
],
"service_tier": null,
"system_fingerprint": null,
"usage": {
"prompt_tokens": 14,
"total_tokens": 114,
"completion_tokens": 100,
"prompt_tokens_details": null
},
"kv_transfer_params": null
}
小さいモデルを選んでいるため回答の精度はあまり高くありませんが、APIとしては動作していることが確認できます。
まとめ
以上、GCP上にvLLMをインストールし、OpenAI互換のAPIサーバーとして起動するまでの手順を紹介しました。OpenAI互換のAPIを備えているため、既存のOpenAIクライアントライブラリやツールからも利用できます。またGPUを利用しているため、例えば大量のドキュメントをベクトル化してElasticsearchに格納するなどの用途にも利用できます。本番環境向けの手順ではないですが、試験的にvLLM環境を構築することのある方は参考にしてください。