LocalAI: Linux上で「自分専用」のOpenAI互換APIサーバーを構築する

Artificial Intelligence tutorial - IT technology blog
Artificial Intelligence tutorial - IT technology blog

LocalAIがインフラに欠かせない理由とは?

多くのエンジニアは、セットアップが非常に速いという理由でOllamaから使い始めることが多いでしょう。しかし、実際のプロジェクトに取り組み始めると、一つの厄介な問題に直面します。それは、Ollamaが独自のAPI構造を使用していることです。WordPressのプラグインや企業のチャットボット、あるいは古いフレームワークなどの既存システムに統合しようとする場合、リクエストをマッピングするためにコードを書き直さなければならないことがよくあります。

LocalAIはこの問題を根本的に解決します。これはOpenAIのドロップイン・リプレイスメント(直接置き換え可能な代替品)として機能します。APIの向き先を api.openai.com から内部サーバーのIPに変更するだけで、背後のロジックを一行も変更することなく動作させることができ、コードのリファクタリングにかかる時間を大幅に節約できます。

最大の差別化ポイントは、その多機能性です。LocalAIはテキスト生成(LLM)だけではありません。これ一つで画像生成(Stable Diffusion)、テキスト読み上げ(TTS)、音声認識(Whisper)まで処理できます。最も重要なのは、データがインターネットに出ることがないため, 絶対的なプライバシーが保証される点です。

LocalAIのデプロイ:最適なDocker Composeによる方法

実務での導入経験から、Docker Composeの使用を強くお勧めします。この方法なら、環境変数やモデルディレクトリの管理が非常に整理され、Linuxシステムを汚すこともありません

1. 最小ハードウェア要件

Llama 3 (8Bパラメータ) のQ4量子化版を安定して動作させるには、少なくとも8GBのRAMが必要です。画像処理やより大きなモデル(70B)を使用したい場合は、レスポンス速度を2秒以下に抑えるために、最低12GBのVRAMを搭載したNVIDIA GPUを優先的に用意してください。

2. Docker Composeファイルの設定

まず、作業環境を準備します:

mkdir local-ai && cd local-ai
nano docker-compose.yaml

以下の設定内容をファイルに貼り付けます。なお、モデルがハングアップした場合にコンテナが自動再起動するよう、ヘルスチェックをあらかじめ設定してあります:

services:
  api:
    image: localai/localai:latest-aio-cpu
    # NVIDIA GPUを搭載している場合は、推論速度を5〜10倍にするために -cublas 版を使用してください
    container_name: local-ai
    healthcheck:
      test: ["CMD", "curl", "-f", "http://localhost:8080/readyz"]
      interval: 1m
      timeout: 10s
      retries: 3
    ports:
      - 8080:8080
    environment:
      - MODELS_PATH=/models
      - CONTEXT_SIZE=4096
      - THREADS=4 # CPUの物理コア数に設定してください
    volumes:
      - ./models:/models
    restart: always

3. システムの起動

以下のコマンドでサーバーを起動します:

docker compose up -d

AIO(All-In-One)版は、いくつかのサンプルモデルを自動的にダウンロードします。このプロセスはネットワーク速度によりますが、5〜10分ほどかかる場合があります。

モデルの設定:ニーズに合わせたカスタマイズ

LocalAIはYAMLファイルを通じてモデルを管理します。起動のたびに手動でコマンドを入力する代わりに、/models ディレクトリ内で一度定義するだけで済みます。

例:Llama 3 (GGUF) の統合

Hugging FaceでLlama 3의 GGUF版を探してください。これは一般的なCPUやGPUに最適化されたフォーマットです。models/ ディレクトリにダウンロードした後、llama3.yaml ファイルを作成します:

name: llama-3
parameters:
  model: meta-llama-3-8b-instruct.Q4_K_M.gguf
context_size: 4096
template:
  chat: | 
    <|begin_of_text|><|start_header_id|>system<|end_header_id|>
    {{.System}}<|eot_id|><|start_header_id|>user<|end_header_id|>
    {{.Input}}<|eot_id|><|start_header_id|>assistant<|end_header_id|>
    {{.Response}}<|eot_id|>

保存すると、LocalAIは自動的に認識します。これで、アプリケーションから gpt-3.5-turbo を呼び出すのと全く同じ方法で、このモデルを呼び出すことができます。

運用とモニタリング

パフォーマンスのチェックも忘れないでください。優れたAIサーバーには、RAMの安定性とレスポンス時間(レイテンシ)の両方が求められます。

curl http://localhost:8080/v1/chat/completions -H "Content-Type: application/json" -d '{
     "model": "llama-3",
     "messages": [{"role": "user", "content": "Pythonのサンプルコードを書いてください"}],
     "temperature": 0.7
   }'

運用における実践的なアドバイス:

  • RAM管理: docker stats を使用して定期的に監視してください。RAMの使用率が90%を超えると、システムがスワップを使い始め、回答速度が著しく低下します。
  • 迅速なデバッグ: モデルが反応しない場合は、docker logs -f local-ai でログを確認してください。最も一般的なエラーは、YAMLの構文ミスやイメージ内のライブラリファイルの欠落です。
  • スレッドの最適化: THREADS 変数はCPUの物理コア数に設定してください。ハイパースレッディングを含む論理スレッドまで高く設定しすぎると、逆にボトルネックが発生し、遅延が増大することがあります。

初期設定には多少の技術的知識が必要ですが、LocalAIは長期的なプロジェクトにおいて素晴らしい柔軟性をもたらします。APIコストやデータ漏洩を心配することなく、プロフェッショナルなAIアプリケーションを構築するための完璧なソリューションです。

Share: