⚽️

Google CloudでLLMアプリ監視ツールLangfuseをセルフホスティングする方法

2024/09/27に公開

はじめに

こんにちは、クラウドエースの SRE 部に所属している遠矢です。
最近、多くの企業が LLM(大規模言語モデル)を活用したアプリケーションの開発に取り組んでいます。

そこで今回は、LLM アプリケーションの監視とマネジメントを支援するオープンソースツール「Langfuse」を Google Cloud 上にセルフホスティングしてみました。

Langfuse の概要と主要機能

  • 概要
    • Langfuse は、LLM アプリケーションのパフォーマンス向上に役立つオープンソースの LLM エンジニアリングプラットフォームです。 このツールは、デバッグ、分析、評価をサポートし、プロンプト管理やデータセットの作成を可能にします。
  • 主要機能
    • トレース
      • LLM の各呼び出しと関連ロジックを詳細に記録し、システムの動作を追跡します。
    • プロンプト管理
      • プロンプトの変更を追跡し、バージョンを管理することで、プロンプトの進化を把握します。
    • 応答評価
      • モデルベース評価やユーザーフィードバックを用いてモデルの応答品質を評価します。
    • パフォーマンスモニタリング
      • レスポンスタイムやコスト等の重要な指標を収集し、視覚的に分かりやすいダッシュボードで表示します。
        alt text

Google Cloud でセルフホスティングする利点

  • データの主権と制御

    • すべてのデータを自社のインフラに保持できます。
    • 社内の機密情報に関するコンプライアンス要件を満たしやすくなります。
  • カスタマイズと柔軟性

    • 特定のニーズに合わせてインフラを最適化できます。
  • LangChain に依存しない点

    • 類似したサービスに LangSmith が挙げられますが、LangChain に依存してしまいます。Langfuse であれば、LangChain に依存することなく利用が可能です。
  • コスト最適化

    • 長期的には、特に大規模な利用の場合、自社インフラでの運用がコスト効率的になる可能性があります。
      LangSmith でもセルフホスティングは可能ですが、Enterprise プラン(最上位プラン)に加入しないと使用できないため、セルフホスティングを安価に利用できます。

Google Cloud 環境のセットアップ

この章から Google Cloud 環境で Langfuse をセルフホスティングする手順を記載します。
基本は公式ドキュメントに従い Google Cloud 上で Langfuse をデプロイするためにコンテナ化されたアプリケーションに Cloud Run を使用し、データベースに Cloud SQL を使用します。

1. ネットワーク設定

まずカスタムネットワークを作成します。

  • VPC ネットワークの作成
    デフォルトネットワークを利用するのはセキュリティ的に良くないため、カスタムネットワークを作成します。
    デフォルトネットワークを利用しない方が良い詳しい理由は弊社の記事をご覧ください。 以下のリンクから 「VPC ネットワークを作成」をクリックしてください。 alt text
    任意の VPC の名前を作成後、下にスクロールして作成をクリックしてください。
    alt text
  • サブネットの設定
    サブネットは任意の名前を入力し、VPC ネットワークで重複しないサブネットワークの IP 範囲を指定してください。
    必ず、限定公開の Google アクセスをオンに設定してください。
    alt text

2. Cloud SQL のセットアップ

次に Cloud SQL のインスタンスを作成していきます。

  • PostgreSQL インスタンスの作成

    • 以下のリンクから PostgreSQL を選択し、SQL インスタンスを作成する。
    • パラメータとしては以下のように設定をしてください。
      また、パスワードはこの後利用するため、メモ等をしておいてください。
      項目
      Cloud SQL のエディション Enterprise
      エディションのプリセット サンドボックス
      データベースのバージョン PostgreSQL 16
      インスタンス ID [任意の値]
      パスワード [任意の値]
      リージョン [任意の値]

    [インスタンス ID]、[パスワード]、[リージョン]の部分を「[任意の値]」としています。実際に使用する際は、これらの項目に具体的な値を入力・選択してください。

  • プライベート IP の設定
    以上の設定を入力後、下にスクロールし、インスタンスのカスタマイズ → 接続で以下の画面に遷移します。
    [プライベート IP] のみを選択し、作成したネットワークを選択します。
    alt text
    次にプライベートサービス接続を設定するために接続を設定のボタンをクリックし以下の画面に遷移します。[自動的に割り当てられた IP 範囲を使用する]を選択して、接続を作成します。
    alt text
    その後、最後に最下部までスクロールし [インスタンスを作成] をクリックします。

  • データベースの設定
    Cloud SQL インスタンスの作成後に表示されている詳細画面の、[ナビゲーションメニュー]から[データベース]を選択し postgres 以外のデータベースを新しく任意の名前を付け作成する。
    (db の名前はこの後利用します。)

3. Secret Manager 作成

  • Secret Manager の作成と設定
    Secret Manager には、アプリケーションの安全な動作のために必要な機密情報を格納します。具体的には、以下の 3 つの値を Secret Manager に保存します。

    項目
    DATABASE_URL CloudSQL に接続可能な URL のスキーマ
    NEXTAUTH_SECRET openssl rand -base64 32 で作成した値
    SALT openssl rand -base64 32 で作成した値
  • DATABASE_URL の作成
    DATABASE_URL は、Cloud SQL データベースへの接続に必要な情報を記述した URL です。以下のテンプレートに従って作成します。

    postgresql://postgres:PASSWORD@localhost/DB_NAME?host=/cloudsql/PROJECT_ID:REGION:INSTANCE_ID&sslmode=none&pgbouncer=true
    

    それぞれの値は次のように設定します。

    項目
    PASSWORD db のパスワード
    DB_NAME 任意で設定したデータベース名
    PROJECT_ID Google Cloud プロジェクト ID
    REGION Cloud SQL のリージョンの値
    INSTANCE_ID Cloud SQL のインスタンス ID
  • NEXTAUTH_SECRET と SALT の作成
    NEXTAUTH_SECRET と SALT は、安全性を高めるためにランダムな文字列を使用します。ターミナルで以下のコマンドを実行し、それぞれ値を生成してください。

    openssl rand -base64 32
    
  • Secret Manager への格納
    以下のリンクを開き、上記で作成した 3 つの値を Secret Manager に格納します。

    alt text

    これで、Secret Manager の作成と必要な値の設定が完了しました。

Langfuse のデプロイ

1. サービスアカウントの作成と権限設定

  • Cloud Run で利用するカスタムのサービスアカウントを作成します。
    以下のロールを付与してください。

    付与するロール
    Compute ネットワーク ユーザー
    Cloud SQL クライアント
    Secret Manager のシークレット アクセサー

2. Cloud Run の設定・デプロイ

  • Cloud Run サービスの作成

    • アプリケーションとして Cloud Run を利用します。
      以下のリンクから Cloud Run の画面に遷移しコンテナをデプロイをクリック後サービスを選択します。

      alt text

    • [コンテナイメージ] は docker.io/langfuse/langfuse:latest を入力します。
      alt text

    • [コンテナ、ボリューム、ネットワーキング、セキュリティ] を展開して、[コンテナ ポート] を 3000 に変更します。

    • 環境変数の設定では NEXTAUTH_URL にエンドポイント URL(https://サービス名-プロジェクト番号.リージョン.run.app) をコピーしてください。
      その他の変数は Secret Manager から参照するようにしてください。(以下の画像のように設定)
      alt text

    • Cloud Run と Cloud SQL の接続設定
      今回は Cloud Run と Cloud SQL の接続は Direct VPC Egress を利用します。詳しい解説は弊社の記事をご覧ください。

      [コンテナ、ボリューム、ネットワーキング、セキュリティ]から[ネットワーキング]を選択し、アウトバウンドトラフィック用の VPC に接続するを有効にする。
      VPC に直接トラフィックを送信するを選択し、上記で作成したネットワークとサブネットを選択する。また、トラフィックルーティングではプライベート IP へのリクエストのみを VPC にルーティングするを選択する。
      alt text

      下にスクロールをして、 作成した Cloud SQL インスタンス名の接続を追加してください。
      alt text

デプロイ後の確認

  • Langfuse の管理画面へのアクセス確認
    デプロイが完了したら、Cloud Run の URL をクリックして以下の画面のようにログイン画面が出力されれば OK です。その後ログインして Langfuse を利用できます。
    alt text

まとめと今後の展望

  • まとめ
    本記事では、LLM アプリケーションの監視ツール Langfuse を Google Cloud 上でセルフホスティングする方法について詳しく解説しました。主なポイントは以下の通りです。

    • Langfuse は、LLM アプリケーションのトレース、プロンプト管理、応答評価、パフォーマンスモニタリングなどの重要な機能を提供する強力なツールです。
    • Google Cloud 上でのセルフホスティングには、データの主権確保、カスタマイズの柔軟性、LangChain への非依存、潜在的なコスト最適化など、多くの利点があります。
    • 各ステップを丁寧に実行することで、セキュアで効率的な Langfuse 環境を構築することができます。
    • このセルフホスティング方式により、企業は自社のインフラ内で LLM アプリケーションの監視と管理を行うことが可能になります。
  • 今後の展開
    今回は Langfuse をセルフホスティングする方法に焦点を当てましたが、今後はセルフホスティングした Langfuse の具体的な活用方法、特にプロンプト管理などの実践的な使用例について詳しく解説する予定です。

参考リンク

Discussion