ローカル環境で大規模言語モデルを動かすための決定版UI
Text Generation WebUI(通称:oobabooga)は、大規模言語モデル(LLM)を自分のコンピュータ上で簡単に実行・操作できるように設計された、GradioベースのWebユーザーインターフェースです。目標は、画像生成AI分野における AUTOMATIC1111/stable-diffusion-webui のような、テキスト生成分野での標準的なツールになることです。
ローカル環境でLLMを動作させたいけれど、複雑なコマンドライン操作は苦手…という方や、様々なモデルを手軽に試してみたい研究者・開発者にとって、非常に強力な味方となります。この記事では、Text Generation WebUIの魅力的な機能、インストール方法、基本的な使い方、そして拡張性について詳しく解説していきます。
主な特徴
Text Generation WebUIは、多くの便利な機能を備えています。
- 多様なモデルローダーのサポート:
- Hugging Face
Transformersライブラリをベースにしたローダー(多くのモデル形式に対応) llama.cpp(GGUF形式など): CPUでも比較的高速に動作可能ExLlamaV2/ExLlamaV2_HF: 高速な推論が可能 (NVIDIA GPU向け)AutoGPTQ,AutoAWQ,HQQ,AQLM: 量子化モデルのロードに対応 (手動インストールが必要な場合あり)TensorRT-LLM: NVIDIAの最適化ライブラリを利用可能 (専用Dockerfile経由)
- Hugging Face
- 複数のインターフェースモード:
Chat (チャット): 対話形式でLLMとコミュニケーション。キャラクター設定も可能。Notebook (ノートブック): OpenAI Playgroundのような自由形式のテキスト生成。Default (デフォルト): 入力と出力が分かれたシンプルなインターフェース。
- チャットモードの詳細機能:
instruct,chat-instruct,chatの3つのサブモード。chat-instructではJinja2テンプレートによる自動プロンプトフォーマットに対応。- 過去のチャット履歴を簡単に切り替え・再開可能。
- カスタムキャラクター設定(名前、挨拶、ペルソナなど)。
- モデル管理の容易さ:
- UIからHugging Face上のモデルを直接ダウンロード可能。
- 起動中でもUIからモデルを簡単に切り替え。
- LoRA(Low-Rank Adaptation)の読み込み・アンロード、簡易的なLoRAファインチューニングツールも搭載。
- 豊富な生成パラメータ: 温度 (temperature)、top-p、top-k、繰り返しペナルティ (repetition penalty) など、細かな生成制御が可能。
- 拡張機能 (Extensions) システム: 様々な追加機能(TTS、画像生成連携、Web検索など)を導入可能。活発なコミュニティにより多数の拡張機能が開発されています。
- APIアクセス: OpenAI互換API(Chat, Completionsエンドポイント)を提供。プログラムからの利用も容易です。
- 自己完結型のインストール: Minicondaを利用したインストーラーは、システム環境を汚さずに独立した環境 (
installer_filesディレクトリ) を構築します。
インストール方法
Text Generation WebUIのインストールは、いくつかの方法がありますが、最も簡単なのは「ワンクリックインストーラー」を使用する方法です。
1. ワンクリックインストーラー (推奨)
開発元のGitHubリポジトリで、Windows, Linux, macOS 用のインストーラーが提供されています。
- oobabooga/text-generation-webui の GitHubリポジトリ にアクセスします。
- リポジトリをクローンするか、ZIPファイルをダウンロードして展開します。
git clone https://github.com/oobabooga/text-generation-webui.git cd text-generation-webui - お使いのOSに対応するスタートスクリプトを実行します。
- Windows:
start_windows.bat - Linux:
start_linux.sh - macOS:
start_macos.sh - WSL (Windows Subsystem for Linux):
start_wsl.bat
# Linuxの場合の例 bash start_linux.sh - Windows:
- 初回起動時に、使用するGPUの種類(NVIDIA, AMD, Apple Metal, None/CPU)を尋ねられます。環境に合わせて選択してください。
- 必要なライブラリ(PyTorchなど)や依存関係が自動的にダウンロード・インストールされます。これには時間がかかることがあります。
- インストールが完了すると、ターミナルにローカルURL (
http://127.0.0.1:7860など) が表示されます。これをウェブブラウザで開くと、Web UIが表示されます。
この方法では、Minicondaが installer_files というディレクトリ内にインストールされ、独立したPython環境が構築されます。再インストールが必要な場合は、この installer_files ディレクトリを削除してから再度スタートスクリプトを実行します。
アップデートは、対応する update_wizard_*.sh または update_wizard_*.bat スクリプトを実行します。
2. 手動インストール (Condaを使用)
より詳細な制御が必要な場合や、既存のConda環境を利用したい場合は、手動でインストールすることも可能です。
- Miniconda または Anaconda がインストールされていることを確認します。
- 新しいConda環境を作成し、アクティベートします (Python 3.10 または 3.11 が推奨されることが多いです)。
conda create -n textgen python=3.10 conda activate textgen - システム構成(OS、GPUの種類、CUDAバージョンなど)に合わせてPyTorchをインストールします。PyTorch公式サイト で適切なコマンドを確認してください。
# 例: Linux/WSL で CUDA 11.8 を使用する場合 conda install pytorch torchvision torchaudio pytorch-cuda=11.8 -c pytorch -c nvidia - Text Generation WebUIのリポジトリをクローンします。
git clone https://github.com/oobabooga/text-generation-webui.git cd text-generation-webui - 必要なPythonパッケージをインストールします。GPUの種類によって使用する
requirements.txtファイルが異なります。
特定のローダー(AutoGPTQなど)を使用する場合は、追加のライブラリが必要になることがあります。# NVIDIA GPUの場合 (CUDA) pip install -r requirements_cuda.txt # AMD GPUの場合 (ROCm) # pip install -r requirements_rocm.txt # CPUのみの場合 # pip install -r requirements_cpu.txt - サーバーを起動します。
python server.py
手動インストールの場合、依存関係の管理は自己責任となります。アップデートは git pull でリポジトリを更新し、必要に応じて pip install -r requirements*.txt --upgrade でライブラリを更新します。
3. Docker を使用
Dockerを利用してコンテナ内で実行することも可能です。NVIDIA GPUを使用する場合は、NVIDIA Container Toolkitが必要です。公式リポジトリや関連プロジェクトでDockerfileやdocker-composeファイルが提供されている場合があります。
基本的な使い方
インストール後、スタートスクリプトを実行するか、python server.py コマンドでWeb UIを起動します。ブラウザで指定されたURL (http://127.0.0.1:7860) にアクセスすると、インターフェースが表示されます。
1. モデルのダウンロードと読み込み
- モデルの配置場所: ダウンロードしたモデルは、
text-generation-webui/modelsディレクトリ内に配置します。 - UIからのダウンロード:
- 「Model」タブを開きます。
- 「Download model or LoRA」セクションを見つけます。
- Hugging Faceのリポジトリ名(例:
TheBloke/Llama-2-7B-Chat-GGUF)を入力します。 - 「Download」ボタンをクリックします。モデルファイルが自動的に
modelsディレクトリにダウンロードされます。GGUF形式のような単一ファイルモデルの場合は、ファイル名を指定することもできます(例:llama-2-7b-chat.Q4_K_M.gguf)。
- モデルの選択と読み込み:
- 「Model」タブ上部の「Model」ドロップダウンメニューの横にある更新ボタン()をクリックします。
modelsディレクトリ内の利用可能なモデルがリスト表示されます。- 使用したいモデルを選択します。
- 必要に応じて「Model loader」を選択します(通常は自動検出されますが、明示的に指定することもできます)。
- 「Load」ボタンをクリックします。モデルがメモリ(GPU VRAMやRAM)に読み込まれます。読み込みには時間がかかる場合があります。
注意: モデルによっては大量のVRAMやRAMを必要とします。お使いのPCのスペックに適したサイズのモデルを選択してください。量子化されたモデル(GGUF, GPTQなど)は、少ないリソースで動作させることができます。
2. テキスト生成の実行
- インターフェースの選択: 画面上部のタブで「Text generation」を選択し、その下の「Interface mode」で「Chat」「Notebook」「Default」のいずれかを選びます。
- Chatモード:
- 画面下部の入力ボックスにメッセージを入力し、「Generate」ボタンをクリックするかEnterキーを押します。
- キャラクター設定を行う場合は、「Parameters」タブ内の「Character」サブタブで設定します。
- モデルによっては特定の指示(Instruct)テンプレートが必要です。「Parameters」タブ内の「Instruction template」で適切なものを選択します(多くの場合、モデルロード時に自動で選択されます)。
- Notebookモード / Defaultモード:
- 入力エリアにプロンプト(指示文や書き出し)を入力します。
- 「Generate」ボタンをクリックすると、続きのテキストが生成されます。
- 生成パラメータの調整: 「Parameters」タブ内の「Generation」サブタブで、
temperature,top_p,max_new_tokensなどのパラメータを調整して、生成されるテキストの多様性や長さを制御できます。
3. コマンドラインフラグ
起動時に様々なオプションを指定することで、動作をカスタマイズできます。./start_*.sh --help や python server.py --help で利用可能なフラグを確認できます。よく使われるフラグには以下のようなものがあります。
--model [モデル名]: 起動時に指定したモデルを自動でロードします。--chat: 起動時のデフォルトモードをChatモードにします。--api: OpenAI互換APIを有効にします (デフォルトポート: 5000)。--listen: ローカルネットワーク内の他のデバイスからのアクセスを許可します。--share: Gradioの機能を使って公開リンクを生成し、インターネット経由でアクセス可能にします(セキュリティに注意)。--loader [ローダー名]: 使用するモデルローダーを明示的に指定します(例:--loader ExLlamav2_HF)。--gpu-memory [メモリ量]: 各GPUに割り当てる最大VRAMを指定します(例:--gpu-memory 10GiB)。--cpu: CPUのみを使用して推論を実行します。--extensions [拡張機能名...]: 起動時に読み込む拡張機能を指定します(例:--extensions silero_tts gallery)。
これらのフラグは、CMD_FLAGS.txt というファイルに記述しておくことでも適用できます。
拡張機能 (Extensions)
Text Generation WebUIの大きな魅力の一つが、拡張機能システムです。text-generation-webui/extensions ディレクトリ内にサブフォルダを作成し、script.py という名前のファイルに機能を記述することで、Web UIに新しい機能を追加できます。
拡張機能は、起動時に --extensions フラグで指定することで読み込まれます。
# silero_tts と gallery 拡張機能を読み込んで起動する例
python server.py --extensions silero_tts gallery組み込みの拡張機能の例
標準でいくつかの便利な拡張機能が含まれています。
- api: OpenAI互換のAPIエンドポイントを提供します。プログラム連携の基本となります。
- silero_tts: 生成されたテキストを音声で読み上げる機能を追加します (Silero TTSを使用)。
- google_translate: 入力と出力をGoogle翻訳で自動的に翻訳します。
- gallery: 設定したチャットキャラクターを一覧表示するギャラリー機能を追加します。
- send_pictures: Stable Diffusion WebUI (AUTOMATIC1111) のAPIと連携し、チャットボットに画像生成をリクエストできるようにします。
- multimodal: テキストと画像を扱えるマルチモーダル機能を追加します (LLaVAなどに対応)。
- superbooga: ChromaDBを利用して、大量のテキストファイルやURLの内容を擬似的なコンテキストとして扱えるようにします (RAGのような機能)。
- whisper_stt: マイクからの音声入力をテキストに変換します (Whisperを使用)。
サードパーティ製の拡張機能
コミュニティによって開発された多くの拡張機能が存在します。text-generation-webui-extensions リポジトリ にそのリストがあります。
例:
- AllTalk TTS: Coqui XTTSなど、複数のTTSエンジンをサポートする高機能な音声読み上げ拡張。
- LucidWebSearch: LLMがWeb検索を行い、その結果を応答に利用できるようにする拡張。
- Deep Reason: 応答生成前に、LLMに入力を分析させる思考ステップを追加する拡張。
これらの拡張機能は、通常、各リポジトリの指示に従って extensions ディレクトリにクローンし、起動時に --extensions フラグで指定することで利用できます。
API連携
Text Generation WebUIは、--api フラグを付けて起動することで、OpenAI互換のAPIサーバーとしても機能します。これにより、他のアプリケーションや自作のプログラムからLLMの機能を利用することができます。
デフォルトでは、http://127.0.0.1:5000/v1 エンドポイントでAPIが提供されます。
APIの利用例 (Python – requests)
以下は、Chat Completions APIを利用して対話を行うPythonコードの例です。
import requests
import json
# Text Generation WebUIのAPIエンドポイント
api_url = "http://127.0.0.1:5000/v1/chat/completions"
headers = { "Content-Type": "application/json"
}
payload = { "messages": [ {"role": "system", "content": "あなたは親切なアシスタントです。"}, {"role": "user", "content": "日本の首都はどこですか?"} ], "mode": "chat", # または "instruct", "chat-instruct" "character": "Example", # Chatモードで使用するキャラクター名 (オプション) # 必要に応じて他の生成パラメータを追加 "temperature": 0.7, "max_tokens": 200
}
try: response = requests.post(api_url, headers=headers, json=payload, verify=False) response.raise_for_status() # エラーチェック result = response.json() assistant_message = result['choices'][0]['message']['content'] print("アシスタントの応答:") print(assistant_message)
except requests.exceptions.RequestException as e: print(f"APIリクエストエラー: {e}")
except json.JSONDecodeError: print("APIレスポンスの解析エラー") print(f"レスポンス内容: {response.text}")
except KeyError: print("APIレスポンスの形式が予期したものと異なります。") print(f"レスポンス内容: {result}")このAPIを利用することで、以下のような応用が可能になります。
- 自作アプリケーションへのLLM機能の組み込み
- 特定のタスクを自動化するスクリプトの作成
- LangChain や LlamaIndex などのフレームワークとの連携
- 複数のLLMを切り替えて使用するシステムの構築
APIの詳細は、Text Generation WebUIのドキュメントや、組み込みの api 拡張機能のコードを確認してください。
まとめ
Text Generation WebUI (oobabooga) は、ローカル環境で大規模言語モデルを手軽に、かつ高機能に利用するための優れたツールです。多様なモデル形式やローダーへの対応、使いやすいインターフェース、豊富なパラメータ調整機能、そして強力な拡張機能システムにより、初心者から上級者まで幅広いユーザーのニーズに応えます。
API機能を使えば、他のプログラムとの連携も容易で、LLMを活用したアプリケーション開発の可能性を広げてくれます。活発な開発とコミュニティにより、日々進化を続けている点も魅力です。
ぜひ Text Generation WebUI を導入して、ローカルLLMの世界を探求してみてください!