API、APIサーバ、vLLNを整理してみる
はじめに
vllmを学習する過程で「API」や「APIサーバ」といった用語をよく見かけるのですが、違いが少し分かりにくいです。
この記事では、それぞれを分かりやすく解説し、関係性を整理していきます。
APIとは?
API(Application Programming Interface) とは、アプリケーション同士がやり取りを行うための仕組みです。
ポイントは 「窓口」と「ルール」 の両方の側面を持っていることです。
-
窓口としての役割
外部のアプリケーションが機能を利用できる「窓口」になる。
例:LLMに「質問を送る」ための入り口。 -
ルールとしての役割
どんな形式で依頼を送るか、どんな形式で応答が返すか、といったやり取りのルールを定める。
例:「入力はJSON形式」「出力もJSON形式」といった決まりごと。
つまりAPIは、外から利用できる窓口であり、同時にそのやり取りを成り立たせるルール になります。
🏢イメージで理解しよう🏢
- API は「建物にある窓口」+「その窓口を利用するルール」に相当します。
- 例えば銀行で「この窓口に申込書を出せばお金を下ろせます」という案内があるように、
APIも「このURLにこの形式でデータを送れば応答が返ります」という決まりになっています。
イメージ:👉APIとは、利用者が建物の中のサービスを使うための窓口と、その利用ルール!!
APIサーバとは?
APIサーバとは、API(窓口とルール)を実際に動かして提供しているサーバのことです。
住所(URL)を持ち、そこにアクセスすると外部からリクエストを受け付けて応答を返してくれます。
-
実体としての役割
API(窓口とルール)という設計図を、実際に動かしている存在。
例:OpenAIのhttps://api.openai.com/v1/...
というサーバ。 -
入り口を提供する役割
外部から利用できるベースURL(住所)を持ち、その中に複数の部屋(エンドポイント)が存在する。
例:-
/chat/completions
→ チャットを依頼できる部屋 -
/models
→ 利用できるモデル一覧の部屋
-
🏢イメージで理解しよう🏢
- APIサーバは「建物」そのものです。
- 住所(ベースURL)を持ち、その中に窓口(API)が設置されている。
- 部屋(エンドポイント)ごとに機能が分かれている。
- 利用者は住所を頼りに建物へ行き、窓口のルールに従って依頼を行うことでサービスを利用できます。
イメージ:👉APIサーバとは、窓口(API)を設置し、実際に稼働している建物!!
💡 コラム:「APIを叩く」とは?
技術系の記事でよく「APIを叩く」という表現を見かけます。
これはラフな表現で、APIサーバにリクエストを送り、レスポンスを受け取ることを意味します。
-
なぜ「叩く」?
→ ドアをノックして中の人にお願いするイメージから。 -
建物の例で言うと?
→ 建物(APIサーバ) の 窓口(API) をコンコンと叩いて依頼書(リクエスト)を渡すイメージ。
つまり「APIを叩く」とは、APIサーバに依頼を送って答えをもらうことなんです。
vLLMとは?
vLLMとは、大規模言語モデル(LLM)を効率的かつ高速に推論するためのエンジンです。
特徴的なのは、単なる推論エンジンにとどまらず、OpenAI互換のAPIサーバ機能をあわせ持っている点です。
-
推論エンジンとしての役割
GPUを効率よく使い、LLMの応答を高速に生成する。
大きなバッチ処理や複数リクエストを同時にさばけるのが強み。 -
APIサーバとしての役割
起動すると自動でhttp://0.0.0.0:8000/v1
にAPIサーバを立てる。
OpenAIと同じ形式のエンドポイント(/chat/completions
など)を提供するので、
既存のコードをほとんど変えずに利用できる。
💡 OpenAI互換とSDK
vLLMが便利なのは、OpenAI互換API を提供しているからです。
これは「エンドポイント名・リクエスト形式・レスポンス形式が本家OpenAIと同じ」という意味です。
そのおかげで、OpenAI公式のSDK(開発者向けライブラリ) をそのまま利用できます。
つまり、本来はOpenAIクラウドを叩くためのコードを、そのまま自前のvLLMサーバに向けても動かせるのです。
🏢イメージで理解しよう🏢
- vLLM = 建物の中で働く「頭脳スタッフ(推論エンジン)」であり、同時に自分で建物(APIサーバ)を建てて窓口(API)を設置できる便利屋。
- 普通は「頭脳」と「窓口」は別々に用意する必要があるが、vLLMは両方をセットで提供してくれる。
👉 つまりvLLMとは、推論エンジンとAPIサーバを一体化した仕組みなのです。
vLLMのPythonコード例
from openai import OpenAI
# vLLMサーバが LAN内の 10.0.1.23:8000 に立っていると仮定
client = OpenAI(
base_url="http://10.0.1.23:8000/v1",
api_key="EMPTY" # vLLMはAPIキー不要でも、SDKの仕様上ダミーが必要
)
# chat/completions エンドポイントを叩く
resp = client.chat.completions.create(
model="Qwen2.5-7B-Instruct", # サーバ側でロードしているモデル名
messages=[{"role": "user", "content": "APIサーバとAPIの違いを説明して"}],
max_tokens=200,
)
print(resp.choices[0].message["content"])
まとめ
この記事では API・APIサーバ・vLLM の違いと関係性を整理しました。
-
API = 窓口+ルール
→ 「どう依頼すれば、どう応答が返るか」を定めた仕組み -
APIサーバ = 建物
→ 実際に住所(ベースURL)を持ち、窓口(API)を設置して稼働している -
vLLM = 頭脳スタッフ+建物を建てる機能
→ 推論エンジンであり、同時にOpenAI互換APIサーバを自動で立ち上げられる便利屋
Discussion