GPUStack：オープンソースGPUクラスターマネージャーの完全ガイド

## はじめに

人工知能（AI）と機械学習（ML）の急速な発展に伴い、大規模言語モデル（LLM）の需要が高まっています。しかし、これらのモデルを効率的に実行し管理することは、多くの組織にとって課題となっています。ここで登場するのが、GPUStackです。

## GPUStackとは？

GPUStackは、大規模言語モデル（LLM）を実行するためのオープンソースGPUクラスターマネージャーです。複数のGPUを効率的に管理し、LLMの実行を最適化することで、AIプロジェクトの生産性を大幅に向上させることができます。

```mermaid
%%{init:{'theme':'base'}}%%
graph TD
    A[GPUStack] --> B[GPU管理]
    A --> C[LLM実行]
    A --> D[クラスター最適化]
    B --> E[リソース割り当て]
    B --> F[パフォーマンスモニタリング]
    C --> G[モデルのデプロイ]
    C --> H[推論の実行]
    D --> I[負荷分散]
    D --> J[スケーリング]
```

この図は、GPUStackの主な機能と、それらがどのように相互に関連しているかを視覚的に示しています。

## 主な特徴

GPUStackには、以下のような優れた特徴があります：

1. **多様なハードウェアサポート**: Apple MacBook、Windows PC、Linuxサーバーなど、様々な種類のGPUで動作します。

2. **スケーラビリティ**: GPUやノードを簡単に追加して、処理能力を拡張できます。

3. **軽量なPythonパッケージ**: 最小限の依存関係で、運用のオーバーヘッドを抑えています。

4. **OpenAI互換API**: OpenAIの標準に準拠したAPIを提供します。

5. **ユーザーとAPIキー管理**: ユーザーとAPIキーの管理を簡素化します。

6. **GPUメトリクスモニタリング**: GPUのパフォーマンスと使用率をリアルタイムで監視できます。

7. **トークン使用量とレート制限**: トークンの使用量を追跡し、レート制限を効果的に管理します。

```mermaid
%%{init:{'theme':'base'}}%%
mindmap
  root((GPUStack))
    多様なハードウェアサポート
      Apple MacBook
      Windows PC
      Linuxサーバー
    スケーラビリティ
    軽量Pythonパッケージ
    OpenAI互換API
    ユーザー/APIキー管理
    GPUメトリクスモニタリング
    トークン使用量管理
```

この図は、GPUStackの主な特徴を視覚的にまとめたものです。各特徴がGPUStackの中心にどのように関連しているかを示しています。

## インストール方法

GPUStackのインストール方法は、使用するオペレーティングシステムによって異なります。ここでは、主要なOSごとのインストール手順を説明します。

### Linux / macOS

LinuxやmacOSでは、以下のコマンドを使用してGPUStackをサービスとしてインストールできます：

```bash
curl -sfL https://get.gpustack.ai | sh -s -
```

### Windows

Windowsでは、管理者権限でPowerShellを実行し、以下のコマンドを入力します：

```powershell
Invoke-Expression (Invoke-WebRequest -Uri "https://get.gpustack.ai" -UseBasicParsing).Content
```

### クラスターへのワーカー追加

他のノードをGPUStackクラスターに追加する場合は、以下のコマンドを使用します（`http://myserver`と`mytoken`を実際のサーバーURLとトークンに置き換えてください）：

#### Linux / macOS
```bash
curl -sfL https://get.gpustack.ai | sh -s - --server-url http://myserver --token mytoken
```

#### Windows
```powershell
Invoke-Expression "& { $((Invoke-WebRequest -Uri 'https://get.gpustack.ai' -UseBasicParsing).Content) } -server-url http://myserver -token mytoken"
```

```mermaid
%%{init:{'theme':'base'}}%%
graph TD
    A[インストール開始] --> B{OSの選択}
    B -->|Linux/macOS| C[curlコマンドを実行]
    B -->|Windows| D[PowerShellコマンドを実行]
    C --> E[GPUStackサービスがインストールされる]
    D --> E
    E --> F{クラスターに追加?}
    F -->|はい| G[ワーカー追加コマンドを実行]
    F -->|いいえ| H[インストール完了]
    G --> H
```

この図は、GPUStackのインストールプロセスを視覚的に表現しています。OSの選択から始まり、インストールの各ステップを経て、最終的にクラスターへのワーカー追加オプションまでを示しています。

## 使い始める

GPUStackをインストールしたら、以下の手順で使い始めることができます：

1. **モデルとのチャット**: 
   コマンドラインから直接LLMとチャットできます。
   ```bash
   gpustack chat llama3 "私にジョークを教えて。"
   ```

2. **WebUI へのアクセス**:
   ブラウザで `http://myserver` を開き、GPUStack UIにアクセスします。

3. **ログイン**:
   ユーザー名 `admin` とデフォルトパスワードでログインします。パスワードは以下のコマンドで確認できます：
   
   Linux / macOS:
   ```bash
   cat /var/lib/gpustack/initial_admin_password
   ```
   
   Windows:
   ```powershell
   Get-Content -Path "$env:APPDATA\gpustack\initial_admin_password" -Raw
   ```

4. **プレイグラウンドの利用**:
   UIの「Playground」メニューから、LLMとチャットできます。

5. **API キーの作成**:
   「API Keys」メニューから新しいAPIキーを作成し、安全に保管します。

6. **API の利用**:
   作成したAPIキーを使用して、OpenAI互換APIにアクセスできます。

```mermaid
%%{init:{'theme':'base'}}%%
sequenceDiagram
    participant User
    participant CLI
    participant WebUI
    participant LLM
    participant API

    User->>CLI: gpustack chat llama3 "質問"
    CLI->>LLM: 質問を送信
    LLM-->>CLI: 回答を返す
    CLI-->>User: 回答を表示

    User->>WebUI: ログイン
    WebUI->>User: ダッシュボード表示

    User->>WebUI: プレイグラウンドでチャット
    WebUI->>LLM: 質問を送信
    LLM-->>WebUI: 回答を返す
    WebUI-->>User: 回答を表示

    User->>WebUI: APIキーを作成
    WebUI-->>User: APIキーを提供

    User->>API: APIリクエスト（APIキー使用）
    API->>LLM: リクエストを処理
    LLM-->>API: 結果を返す
    API-->>User: レスポンスを送信
```

この図は、ユーザーがGPUStackを使用する際の一般的な流れを示しています。コマンドラインインターフェース（CLI）、WebUI、LLM、APIとの相互作用が視覚化されています。

## 対応プラットフォームとアクセラレーター

GPUStackは、以下のプラットフォームとアクセラレーターをサポートしています：

### 対応プラットフォーム
- macOS
- Linux
- Windows

### 対応アクセラレーター
- Apple Metal
- NVIDIA CUDA

将来のリリースでは、以下のアクセラレーターのサポートも計画されています：
- AMD ROCm
- Intel oneAPI
- Qualcomm AI Engine

```mermaid
%%{init:{'theme':'base'}}%%
graph TB
    A[GPUStack] --> B[対応プラットフォーム]
    A --> C[対応アクセラレーター]
    B --> D[macOS]
    B --> E[Linux]
    B --> F[Windows]
    C --> G[Apple Metal]
    C --> H[NVIDIA CUDA]
    C --> I[将来のサポート]
    I --> J[AMD ROCm]
    I --> K[Intel oneAPI]
    I --> L[Qualcomm AI Engine]
```

この図は、GPUStackが現在サポートしているプラットフォームとアクセラレーター、および将来サポート予定のものを視覚的に示しています。

## サポートされているモデル

GPUStackは、[llama.cpp](https://github.com/ggerganov/llama.cpp)をバックエンドとして使用し、[GGUF形式](https://github.com/ggerganov/ggml/blob/master/docs/gguf.md)の大規模言語モデルをサポートしています。以下のソースからのモデルが利用可能です：

1. [Hugging Face](https://huggingface.co/)
2. [Ollama Library](https://ollama.com/library)

サポートされている主なモデルには以下があります：

- LLaMA
- Mistral 7B
- Mixtral MoE
- DBRX
- Falcon
- Baichuan
- Aquila
- Yi
- StableLM
- Deepseek
- Qwen
- Phi
- Gemma
- Mamba
- Grok-1

```mermaid
%%{init:{'theme':'base'}}%%
mindmap
  root((サポートモデル))
    Hugging Face
      LLaMA
      Mistral 7B
      Mixtral MoE
      DBRX
      Falcon
    Ollama Library
      Baichuan
      Aquila
      Yi
      StableLM
    その他
      Deepseek
      Qwen
      Phi
      Gemma
      Mamba
      Grok-1
```

この図は、GPUStackがサポートする主要なモデルを視覚的にまとめたものです。モデルの提供元やタイプに基づいて分類されています。

## OpenAI互換API

GPUStackは、OpenAIと互換性のあるAPIを提供しています。これらのAPIは `/v1-openai` パスの下で提供され、以下の機能をサポートしています：

1. モデルのリスト取得
2. チャット完了（Chat completions）

例えば、公式の[OpenAI Python APIライブラリ](https://github.com/openai/openai-python)を使用して、以下のようにAPIを利用できます：

```python
from openai import OpenAI
client = OpenAI(base_url="http://myserver/v1-openai", api_key="myapikey")

completion = client.chat.completions.create(
  model="llama3",
  messages=[
    {"role": "system", "content": "あなたは親切なアシスタントです。"},
    {"role": "user", "content": "こんにちは！"}
  ]
)

print(completion.choices[0].message)
```

このAPIの互換性により、既存のOpenAIベースのアプリケーションを簡単にGPUStackに移行できます。

```mermaid
%%{init:{'theme':'base'}}%%
sequenceDiagram
    participant App
    participant GPUStack
    participant LLM

    App->>GPUStack: OpenAI互換APIリクエスト
    GPUStack->>GPUStack: リクエスト検証
    GPUStack->>LLM: モデルに対してリクエスト
    LLM->>GPUStack: 応答生成
    GPUStack->>App: OpenAI形式の応答

    Note over App,GPUStack: OpenAI SDKを使用
    Note over GPUStack,LLM: 内部でLLMを実行
```

この図は、アプリケーションがGPUStackのOpenAI互換APIを使用してLLMと対話する流れを示しています。GPUStackがOpenAIのインターフェースを模倣しつつ、内部で実際のLLM処理を行う様子が表現されています。


## まとめ

GPUStackは、大規模言語モデル（LLM）の実行と管理を簡素化する強力なツールです。その主な利点は以下の通りです：

1. **柔軟性**: 様々なハードウェアとプラットフォームに対応
2. **スケーラビリティ**: 需要に応じてGPUリソースを簡単に拡張可能
3. **使いやすさ**: 直感的なUIとOpenAI互換APIにより、導入と使用が容易
4. **効率性**: GPUリソースの最適化とモニタリング機能により、コスト効率が向上
5. **オープンソース**: コミュニティによる継続的な改善と拡張が可能

GPUStackを使用することで、組織はAIプロジェクトの開発と展開を加速し、GPUリソースを最大限に活用することができます。

```mermaid
%%{init:{'theme':'base'}}%%
graph TD
    A[GPUStack] --> B[柔軟性]
    A --> C[スケーラビリティ]
    A --> D[使いやすさ]
    A --> E[効率性]
    A --> F[オープンソース]
    B --> G[多様なハードウェア対応]
    C --> H[簡単なリソース拡張]
    D --> I[直感的なUI]
    D --> J[OpenAI互換API]
    E --> K[GPUリソース最適化]
    E --> L[詳細なモニタリング]
    F --> M[コミュニティによる改善]
    F --> N[カスタマイズ可能]
```

この図は、GPUStackの主要な利点とそれらがもたらす具体的な価値を視覚的に示しています。


## 参考サイト

https://github.com/Sunwood-ai-labs/gpustack/blob/main/README.md