Quay lại
Trang chủ / Kiến thức / 技術とトレンド / vLLMを使ってコストゼロで実現するローカルLLMホスティング実装ガイド

vLLMを使ってコストゼロで実現するローカルLLMホスティング実装ガイド

2025/03/28
2025/03/28
vLLMを使ってコストゼロで実現するローカルLLMホスティング実装ガイド

AIを手元で動かしたい、でも高いAPIは使いたくない――

こんな思いを抱えているエンジニアは少なくないでしょう。

LLM(大規模言語モデル)を自分のマシンで動かすことが、最近ますます現実的になってきました。特にvLLMのようなフレームワークの進化により、ローカル環境でのAIモデル運用が格段に手軽になっています。

結論から申し上げると、vLLMを使えば、クラウドAPIに縛られることなく、自分の好きなAIモデルを手元で自由に動かすことができます。

実は、vLLMを使えば、APIの使用制限や高額な利用料金、外部サービスへの依存といった一般的な課題を解消できます。

自分のパソコンやサーバー上でAIモデルを動かせるため、コストを抑えつつ柔軟に使える、とても効率的な選択肢です。

前回の記事では、Ollama を使用して LLM を提供するプロセスについて説明し、デプロイのための合理化されたアプローチをご紹介しました。

本記事ではRabilooのAIエンジニアが、vLLM を使用して LLM をローカルにホストする方法について詳しく説明します。

この記事でわかること
  • vLLMを使ったローカルLLMホスティングの具体的な実装方法

  • 初心者でも簡単に実装できるDockerとPythonの2つの方法

  • モデル選択からアプリケーション統合までの全ステップ

  • GPUを持っていない場合の代替案

vLLMとは?ローカルでLLMを動かすための高速エンジン

vLLM(Very Fast LLM) は、大規模言語モデル(LLM)を高速かつ効率的に動かすための推論エンジンです。オープンソースで開発されており、特に「モデルを使う(=推論)」場面でのスピード・効率・コスト削減に特化しています。

通常、LLMを動かすにはクラウドAPI(例:OpenAI)を利用するのが一般的ですが、vLLMを使えば自分のPCやサーバーでLLMを直接ホスティングできるようになります。つまり、API制限・課金・プライバシーの心配なしで、手元の環境から自由にAIを使えるようになります。

さらにvLLMは、使用するハードウェアに応じて自動で最適化される機能と、複数のリクエストを効率的に処理できる「連続バッチ処理」を備えています。これにより、個人開発用途はもちろん、商用のプロダクション環境でも安定した高パフォーマンスを実現できます。

なぜvLLMは「速くて効率的」なのか?

vLLMの中核技術は、「PagedAttention」と呼ばれる独自のメモリ管理アルゴリズムです。これにより以下のようなメリットがあります:

通常のLLM推論の課題

  • 会話が長くなると GPUメモリがすぐ足りなくなる

  • メモリを無駄に確保してしまい、リソース効率が悪い

  • 処理が重くなり、遅延や高コストの原因に

vLLMの解決策

  • 必要な部分だけメモリを割り当てる → メモリの無駄を削減

  • 連続バッチ処理でリクエストをまとめて高速処理

  • スループット(処理量)を大幅に向上

  • OpenAI互換のAPIをそのまま提供 → 既存アプリに簡単に組み込める

なぜvLLMを使うべきか?

vLLMを使うメリットは、クラウドAPIと比較して次のような点があります:

  1. コスト削減: APIの利用料金が不要で、自分のハードウェアを活用できる

  2. プライバシー向上: データがローカル環境に留まるため、機密情報の漏洩リスクが低減

  3. 制限なし: APIのレート制限に悩まされることなく、必要なだけモデルを利用可能

  4. カスタマイズ性: モデルのパラメータや動作を細かく調整可能

特に、自前のGPUを持っていて、AI開発や実験に興味がある方にとって、vLLMは自由度が高く、コスパも最強な選択肢です。

必要な準備物

vLLMを始めるには、以下のものが必要です:

  • Python 3.8以上

  • 基本的なPythonの知識(print('Hello, world!')が書ける程度)

  • (推奨)GPUを搭載したPC(理想的には16GB以上のVRAM、ただし低スペックでも動作可能)

  • GPUを活用する場合は、NVIDIA CUDAのインストール(nvidia-smiコマンドでバージョン確認可能)

初心者の方でも理解できるよう、インストールから最適化まで、詳細なステップバイステップガイドを提供します。これにより、効率を最大化しながらAIインフラの完全な所有権を維持することができます。

vLLMを使ったローカルLLMホスティングの実装方法

vLLMでLLMをホスティングする方法としては、Docker環境かPython環境の2つがあります。環境の競合を避け、トラブルのない設定を行うなら、Dockerがおすすめです。

Dockerでの実装方法

Dockerのインストール

まずはDockerをインストールする必要があります。システムにDockerがまだ設定されていない場合は、公式サイトからダウンロードしてインストールしましょう。

Docker上でvLLMを実行

ターミナルで以下のコマンドを実行して、Dockerコンテナ内でvLLMを起動します:

docker run -itd --rm --runtime nvidia --gpus all \\
-v ~/.cache/huggingface:/root/.cache/huggingface \\
-p 8000:8000 \\
-e MAX_BATCH_SIZE=16 -e BATCH_TIMEOUT_MS=100 \\
vllm/vllm-openai:latest \\
--model Qwen/Qwen2-1.5B-Instruct \\
--tokenizer-mode auto \\
--gpu-memory-utilization 0.8 \\
--max-model-len 16384

このコマンドについて詳しく説明します:

- docker run -itd --rm: コンテナをインタラクティブモードで実行し、終了後に自動削除

- -runtime nvidia --gpus all: NVIDIAのランタイムを使用してGPUアクセラレーションを有効化

- v ~/.cache/huggingface:/root/.cache/huggingface: Hugging Faceのモデルキャッシュをマウント

- p 8000:8000: ポート8000をホストマシンにマッピング

- e MAX_BATCH_SIZE=16 -e BATCH_TIMEOUT_MS=100: バッチ処理の設定

- vllm/vllm-openai:latest: 使用するvLLMのDockerイメージ

- -model Qwen/Qwen2-1.5B-Instruct: 使用するモデル

- -tokenizer-mode auto: トークナイザーモードを自動選択

- -gpu-memory-utilization 0.8: GPUメモリの80%を使用

- -max-model-len 16384: モデルが処理できる最大シーケンス長

ログの確認

サーバーが正しく実行されているか確認するために、ログを確認します:

docker logs -f <docker-container-id>

以下のようなログが表示されれば成功です:

INFO:     Started server process [1]
INFO:     Waiting for application startup.
INFO:     Application startup complete.

おめでとうございます!vLLMを使ってLLMがローカルで実行されています。

APIリクエストをhttp://localhost:8000に送信して、モデルと対話を開始できます。

CPU版の実装(GPUがない場合)

GPUを持っていない場合や、CPUでのみLLMをテストしたい場合は、CPU特化のvLLM環境を構築できます。

まず、GitHubからvLLMのソースコードをダウンロードし、プロジェクトディレクトリに移動します:

git clone <https://github.com/vllm-project/vllm.git> vllm_source
cd vllm_source

次に、CPU専用のDockerイメージをビルドします:

docker build -t vllm-cpu -f Dockerfile.cpu .

ビルドしたイメージを使ってCPUモードでコンテナを起動します:

docker run -itd --rm \\
 -v ~/.cache/huggingface:/root/.cache/huggingface \\
 -p 8000:8000 \\
 -e MAX_BATCH_SIZE=16 \\
 vllm-cpu:latest \\
 --model Qwen/Qwen2-1.5B-Instruct \\
 --trust-remote-code \\
 --device cpu \\
 --dtype bfloat16 \\
 --tokenizer-mode auto

これで、Qwen/Qwen2-1.5B-InstructモデルがCPU上で実行されます。

Pythonでの実装方法

より柔軟で軽量なアプローチとして、Python環境でvLLMを直接実行することも可能です。

Pythonのインストール

まず、Python 3.8以上がシステムにインストールされていることを確認します。必要に応じて、公式Pythonサイトから最新バージョンをダウンロードできます。

仮想環境のセットアップ

クリーンで独立した開発環境を維持するため、仮想環境を作成して有効化します:

python -m venv vllm-env
source vllm-env/bin/activate  # Windowsの場合は "vllm-env\\Scripts\\activate"

vLLMのインストール

仮想環境が有効化されたら、vLLMとその必要な依存関係をインストールします:

pip install vllm

vLLMサーバーの起動

以下のコマンドを実行して、vLLM OpenAI互換APIサーバーを起動します:

python -m vllm.entrypoints.openai.api_server \\
--model Qwen/Qwen2-1.5B-Instruct \\
--trust-remote-code \\
--dtype half

このコマンドの内容:

  • python -m vllm.entrypoints.openai.api_server: OpenAI API形式に従うAPIサーバーとしてvLLMを起動

  • -model Qwen/Qwen2-1.5B-Instruct: Qwen2-1.5B-Instructモデルをロード

  • -trust-remote-code: Hugging Faceからダウンロードされたカスタムモデルコードの実行を許可

  • -dtype half: 高速推論と低メモリ使用のための半精度(FP16)を使用

サーバーが起動したら、http://localhost:8000にリクエストを送信してモデルと対話できます。このアプローチはDocker方式と同様に機能し、LLM推論用のAPI互換エンドポイントを提供します。

適切なLLMモデルの選択と統合方法

vLLMが設定できたら、次のステップは、デプロイするLLMモデルを選択することです。Hugging Faceには、モデルサイズ、パフォーマンス、使用目的など、特定の要件に基づいて選択できる膨大な事前訓練済みモデルコレクションがあります。

Hugging Face(ハギングフェイス) は、AI開発者向けの機械学習モデルの共有・活用プラットフォームです。特に自然言語処理(NLP)や大規模言語モデル(LLM)の分野で、世界中の研究者やエンジニアから支持されています。

Hugging Faceで正しいモデル名を見つける

互換性を確保するために、Hugging Face Model Hubから正しいモデル名を取得する必要があります:

  1. Hugging Faceにアクセス

  2. モデルを検索(例:Llama 3、Mistral、Qwen)

  3. 選択したモデルをクリック

  4. ページURLから完全なリポジトリ名(通常はorg_name/model_name形式)をコピー。例:Qwen/Qwen2-1.5B-Instructまたはmicrosoft/Magma-8B

注意: LoRA、DeepSpeed、その他の最適化手法で訓練された微調整LLMも使用できます。

Transformersライブラリのインストール(Pythonを使用する場合)

Dockerを使用していない場合は、モデルを手動でダウンロードする必要があります。まず、transformersライブラリがインストールされていることを確認します:

pip install transformers

モデルの可用性の確認

モデルが正しくダウンロードおよびロードできるかどうかを確認するために、以下を実行します:

python -c "from transformers import AutoModel; AutoModel.from_pretrained('Qwen/Qwen2-1.5B-Instruct')"

'Qwen/Qwen2-1.5B-Instruct'を、Hugging Faceからコピーした実際のモデル名に置き換えてください。

ヒント: 一部のモデルは、vLLMで実行する際に--trust-remote-codeが必要です。「安全でないコード実行」に関連するエラーが表示された場合は、vLLMサーバーの起動時にこのフラグを有効にしてください。

アプリケーションへの統合

LLMが実行されるようになったら、次のステップはPythonからリクエストを送信してテストすることです。vLLMは、FastAPIやGradioなどのフレームワークを使用してアプリケーションに統合し、Ollamaの運用方法と同様に、APIエンドポイントやシンプルなチャットインターフェイスを作成できます。

FastAPIを使用した統合

import requests
from fastapi import FastAPI, Form

app = FastAPI()
VLLM_URL = "<http://localhost:8000/v1/chat/completions>"

@app.post("/chatbot")
async def chatbot(
    model_alias: str = Form(default="Qwen/Qwen2-1.5B-Instruct"),
    question: str = Form(default=""),
):
    payload = {
        "model": model_alias,
        "messages": [{"role": "user", "content": question}],
        "temperature": 0.2,
    }
    response = requests.post(VLLM_URL, json=payload).json()

    if response.get("choices") is None:
        return response["error"].get("message", "Error: No response from vLLM.")

    return response["choices"][0]["message"].get("content", "Error: No response from vLLM.")

Gradioを使用した統合

import json
import gradio as gr
import requests

VLLM_URL = "<http://localhost:8000/v1/chat/completions>"
HEADERS = {"Content-Type": "application/json"}
MODEL_NAME = "Qwen/Qwen2-1.5B-Instruct"

def chat_with_llm(message, history):
    messages = [{"role": "system", "content": "You are a helpful assistant."}]
    if history:
        for user_msg, bot_reply in history:
            messages.append({"role": "user", "content": user_msg})
            messages.append({"role": "assistant", "content": bot_reply})

    # 最新のユーザーメッセージを追加
    messages.append({"role": "user", "content": message})

    payload = {
        "model": MODEL_NAME,
        "messages": messages,
        "temperature": 0.2,
    }

    response = requests.post(VLLM_URL, headers=HEADERS, data=json.dumps(payload)).json()
    if response.get("choices") is None:
        return response["error"].get("message", "Error: No response from vLLM.")

    return response["choices"][0]["message"].get("content", "Error: No response from vLLM.")

gr.ChatInterface(fn=chat_with_llm, title="vLLM Chatbot").launch(share=True)

vLLMとOllamaの重要な違いの1つは、デフォルトのAPIポートです:

FastAPIを使用したAPI主体のアプローチと、Gradioを使用したWeb主体のチャットボットのどちらを選択するかは、プロジェクトの特定の要件によって異なります。

GPUがなくても大丈夫:Google Colabでの実装方法

ローカルマシンにGPUがなくても問題ありません!Google ColabやKaggle Notebookなどのクラウドベースのソリューションを使用して、無料のGPUアクセスでvLLMをテストすることができます。

vLLMとGradioのインストール

Colabノートブックのセルで以下のコマンドを実行して、vLLMとGradioをインストールします:

!pip install -q vllm gradio

Gradioでシンプルなチャットボットを作成

新しいColabセルで、LLMと対話してGradioインターフェースを通じて提供するPythonスクリプトを定義します:

import json
import gradio as gr
import requests

API_URL = "<http://localhost:8000/v1/chat/completions>"
MODEL_NAME = "Qwen/Qwen2-1.5B-Instruct"

def chat_with_llm(message, history):
    headers = {"Content-Type": "application/json"}
    messages = [{"role": "system", "content": "You are a helpful assistant."}]
    if history:
        for user_msg, bot_reply in history:
            messages.append({"role": "user", "content": user_msg})
            messages.append({"role": "assistant", "content": bot_reply})

    # 最新のユーザーメッセージを追加
    messages.append({"role": "user", "content": message})

    payload = {
        "model": MODEL_NAME,
        "messages": messages,
        "temperature": 0.2,
    }

    response = requests.post(API_URL, headers=headers, data=json.dumps(payload))
    try:
        reply = response.json()["choices"][0]["message"]["content"]
    except:
        reply = "Error: Could not get response from model."

    return reply

# Gradioチャットインターフェースを起動
gr.ChatInterface(fn=chat_with_llm, title="vLLM Chatbot").launch(share=True)

Google ColabでvLLMサーバーを起動

3番目のセルを実行して、vLLMを起動します:

!python -m vllm.entrypoints.openai.api_server \\
--model Qwen/Qwen2-1.5B-Instruct \\
--trust-remote-code \\
--dtype half

重要な注意点

Gradioを使用してvLLMを実行する際に、スムーズな体験を確保するには、特定の手順を正しい順序で実行する必要があります。チャットボットの機能を維持するためには、モデルサーバーをアクティブに保つことが不可欠です。

  1. 順序が重要! 最初に2番目のセルを実行してGradioを起動し、チャットボットUIを初期化します。次に3番目のセルを実行してvLLMを起動し、LLMリクエストを処理するモデルサーバーを開始します。

  2. 3番目のセルを実行し続ける! チャットボットが適切に機能するためには、vLLMサーバーが常にアクティブである必要があります。

  3. Gradioインターフェースへのアクセス Gradioインターフェースが正常に起動すると、2番目のセルに公開リンクが生成されます(通常はhttps://xxxxxxxxxxxxxxxxx.gradio.live/形式)。

この方法により、ハイエンドのローカルマシンを必要とせずに、vLLMのGPUアクセラレーションを体験することができます。

OllamaとvLLMの違い

OllamaとvLLMは、どちらもローカル環境で大規模言語モデル(LLM)を実行するためのツールですが、目的や特徴が大きく異なります。

Ollamaは、「とにかく手軽にLLMを試したい」人に向いています。

インストールしてすぐに使えるシンプルなCLI(コマンドライン)ベースの設計で、MacやLinux(Apple Silicon含む)にも対応しており、数行のコマンドでローカルにモデルを立ち上げることができます。

そのため、AIの導入に不慣れな初心者や、ちょっとした検証やプロトタイピングをしたい開発者にとって、非常に使いやすいツールです。ただし、同時に複数リクエストを処理する能力には限界があり、スケーラブルな環境での運用には不向きです。

一方、vLLMは「本格的なAIサービスをローカルやオンプレで構築したい」開発者や企業向けの高性能な推論エンジンです。

特徴は、独自技術である「PagedAttention」と「連続バッチ処理」によって、複数リクエストを高速かつ効率的にさばける点にあります。また、OpenAIのAPIと互換性があるため、既存のGPTベースのアプリケーションとも簡単に統合できるのが大きな利点です。ただし、その分初期セットアップや動作環境(NVIDIA製GPUなど)にはある程度の技術的な知識が求められます。

▶︎LLMをローカルで動かす方法:Ollamaで最小構成からスタート

機能

Ollama

vLLM

使いやすさ

非常に簡単、CLIベース

より複雑な設定が必要

パフォーマンス

ローカル使用向けに最適化、バッチなし

連続バッチ処理による高性能サービング

スケーラビリティ

複数の同時リクエスト処理には設計されていない

マルチユーザーと高スループット推論向け

API対応

カスタムAPI、シンプルな使用

OpenAI互換API、既存アプリケーションとの統合が容易

GPU活用

限定的な最適化

GPUメモリ管理と大規模モデル向けに最適化

最適用途

個人プロジェクト、ローカル実験

プロダクションレベルAIサービング、スケーラブルアプリケーション

プラットフォーム互換性

Mac(Apple Silicon最適化)、Linux

NVIDIA GPUを搭載したLinuxで最適動作

まとめると、Ollamaは手軽さ重視のローカルテスト向けvLLMはスケーラビリティと本番運用に適したパフォーマンス重視の選択肢です。用途や目的に応じて、適切なツールを選ぶことが重要です。

vLLMのメリットとデメリット

LLMをデプロイする際には、vLLMのメリットとデメリットの両方を評価することが重要です。

メリット

  1. 高性能 vLLMはパイプライン実行と連続バッチ処理を活用して複数のリクエストを同時に処理するよう設計されています。このアプローチはGPU使用率を最大化し、大規模アプリケーションのレイテンシを大幅に削減し、応答時間を改善します。

  2. スケーラビリティ
    vLLMの主な強みの1つは、最小限のレイテンシで複数の同時リクエストを処理する能力です。従来のモデルが高負荷の下で苦戦する可能性がある一方、vLLMはリソース割り当てを最適化し、リアルタイムAI推論を必要とするプロダクション環境に最適です。

  3. OpenAI API互換性
    vLLMはOpenAIのGPT API形式と完全に互換性があり、開発者は既存のAIアプリケーションにシームレスに統合できます。この互換性は開発の労力を削減し、OpenAIモデル向けに設計されたアプリケーションは最小限の修正でvLLMに移行できます。

  4. 効率的なGPU使用
    動的メモリ管理を実装することで、vLLMはGPUリソースを最適化して過度なメモリ消費なしに大きなモデルと長いシーケンスをサポートします。この機能により、AIモデルは複雑な入力を処理する場合でも効率的に実行でき、高性能機械学習タスクに有用なソリューションとなります。

デメリット

  1. より複雑なセットアップ
    より単純な代替手段と異なり、vLLMはGPUアクセラレーション、メモリ最適化、APIサービングのための手動設定が必要です。環境設定にはシステムパラメータの微調整が含まれ、深層学習インフラストラクチャに不慣れな場合は課題となる可能性があります。

  2. 高いハードウェア要件
    vLLMはCPUベースの推論をサポートしていますが、NVIDIA GPUに高度に最適化されており、最適なパフォーマンスにはCUDAアクセラレーションに依存しています。CPUでvLLMを実行すると処理速度が大幅に低下し、実際のデプロイメントにはGPUアクセスがほぼ必須となります。

  3. 初心者向けではない
    Ollamaのようなユーザーフレンドリーなソリューションと比較して、vLLMはLLMデプロイメントとハードウェア最適化の深い理解を要求します。AIモデルサービングの経験がないユーザーは学習曲線が急で、システムを効果的に設定・管理するには追加の努力が必要になるかもしれません。

パフォーマンス比較

パフォーマンスについては、NVIDIA T4 GPU上で実行するいくつかのLLMのベンチマークを紹介します:

モデル

メモリ使用量 (GB)

トークン/秒

Qwen2-1.5B-Instruct

3.2

44.6

Qwen2-VL-2B-Instruct-GPTQ-Int4

1.8

28.8

Dolphin3.0-Qwen2.5-0.5B

1.1

62.9

これらの数値は、使用するモデルと量子化の種類によって、パフォーマンスとメモリ使用量にどのような違いがあるかを示しています。少ないメモリで動作する小型モデルは処理速度が速い傾向がありますが、大型モデルは精度が高いという一般的なトレードオフがあります。

まとめ:vLLMでローカルLLMを最大限活用しよう

vLLMを使ったローカルLLMサーバーのセットアップは、AIモデルを効率的に実行するための強力で柔軟な方法を実現します。実験、微調整、本格的なプロダクションスケールのデプロイメントのいずれであっても、vLLMはリソース使用量を抑えながらパフォーマンスを最適化します。

複数のモデルを扱う能力、既存のAPIとシームレスに統合する機能、ハードウェアポテンシャルを最大化する能力により、vLLMはクラウドベースのソリューションに代わる強力な選択肢となります。適切な設定を行えば、vLLMはAIワークフローを効率化し、スケーラブルで高性能な言語モデルを実際のアプリケーションに近づけることができます。

自分だけのAIモデルを手元で自由に動かしたい方、APIの制限に悩んでいるエンジニア、AI開発でコストを削減したい方は、ぜひvLLMを試してみてください。最適化されたAI体験があなたを待っています。

AIソリューション開発はRabiloo(ラビロー)へ

LLMやAI技術の導入にお悩みではありませんか?Rabiloo(ラビロー)では、ローカルLLMホスティングのような最新技術を活用したAIソリューションの開発を承っております。

当社のエンジニアチームは、vLLMをはじめとする先端技術に精通しており、お客様のビジネスニーズに合わせたカスタムAIソリューションを提供いたします。リソース不足でAI導入が進まない、自社に最適なAI実装方法がわからないといった課題を抱えている企業様に、技術的な知見と実績をもとにした最適な解決策をご提案します。

お客様のビジネスを成長させるAIソリューションの開発について、まずはお気軽にご相談ください。Rabilooは、お客様のデジタル変革を加速させる信頼できるパートナーとして、共に未来を切り拓きます。

Share


Tran Duong
RabilooのAIエンジニア。約4年間にわたり、銀行業界向けのAIサービスやコンピュータビジョンアプリケーションの開発・運用に従事。大規模言語モデル(LLM)、コンピュータビジョン、AI自動化の分野に情熱を持ち、最先端技術を活用した革新的なソリューションの創出に取り組んでいる。
Tìm kiếm
オフショア開発とは?メリットやベンダー選びのポイントを簡単に解説!
オフショア開発とは?メリットやベンダー選びのポイントを簡単に解説!
Kakimoto Kota
2024/01/03
2024/10/28
令和時代のベトナムラボ型開発の魅力とは?良いパートナー選びのコツ
令和時代のベトナムラボ型開発の魅力とは?良いパートナー選びのコツ
Kakimoto Kota
2023/11/28
2025/01/08

Cập nhật bài viết mới nhất từ chuyên gia

Không được để trống
Không được để trống
Không được để trống
Không được để trống
Tìm kiếm
Tags
オフショア開発とは?メリットやベンダー選びのポイントを簡単に解説!
オフショア開発とは?メリットやベンダー選びのポイントを簡単に解説!
Kakimoto Kota
2024/01/03
2024/10/28
令和時代のベトナムラボ型開発の魅力とは?良いパートナー選びのコツ
令和時代のベトナムラボ型開発の魅力とは?良いパートナー選びのコツ
Kakimoto Kota
2023/11/28
2025/01/08

Gặp gỡ và lắng nghe

Không được để trống
Không được để trống
Không được để trống
Không được để trống