可観測性: OpenTelemetry と Elastic を使用した OpenAI API と GPT モデルの監視

デビッド・ホープ

ChatGPT は今ホットです。インターネットを破壊しています。ChatGPT の熱心なユーザーであり、ChatGPT アプリの開発者でもある私は、この技術の可能性にこれ以上ないほど興奮しています。私が見ているのは、ChatGPT ベースのソリューションが指数関数的に成長し、人々がこれらのソリューションを監視する必要があるということです。

これは非常に新しいテクノロジであるため、光沢のある新しいコードに独自のテクノロジを負担させたくありません。いいえ、そうではありません。そのため、このブログでは OpenTelemetry を使用して ChatGPT コードを監視しています。私は最近、Zoom 通話から会議メモを生成するサービスを作成したので、これは私にとって特に重要です。外に放すとしたらいくらかかりますか?利用可能であることを確認するにはどうすればよいですか?

OpenAI API による救助

OpenAI API が素晴らしいことは間違いありません。また、各 API 呼び出しに対する各応答で以下に示す情報が提供されるため、請求内容を理解するのに役立ちます。OpenAI が Web サイトで公開しているトークンの数量、モデル、および価格を使用して、コストを計算できます。問題は、この情報を監視ツールにどのようにフィードするかです。

{
  "choices": [
    {
      "finish_reason": "length",
      "index": 0,
      "logprobs": null,
      "text": "\n\nElastic is an amazing observability tool because it provides a comprehensive set of features for monitoring"
    }
  ],
  "created": 1680281710,
  "id": "cmpl-70CJq07gibupTcSM8xOWekOTV5FRF",
  "model": "text-davinci-003",
  "object": "text_completion",
  "usage": {
    "completion_tokens": 20,
    "prompt_tokens": 9,
    "total_tokens": 29
  }
}

OpenTelemetry による救助

OpenTelemetry は本当に素晴らしい仕事です。長年にわたって非常に多くの採用と専用の作業が行われてきたため、Linux はオブザーバビリティの Linux と呼べる段階に到達しているようです。これを使用して、ログ、メトリクス、およびトレースを取得し、それらをお気に入りのオブザーバビリティ ツール (この場合は Elastic Observability) にベンダー中立の方法でドロップできます。

Python の最新かつ最高の otel ライブラリを使用すると、外部呼び出しを自動的に検出できます。これは、OpenAI 呼び出しの実行を理解するのに役立ちます。Flask API と ChatGPT API を実装し、OpenTelemetry も備えているサンプル Python アプリケーションを見てみましょう。自分で試してみたい場合は、このブログの最後にあるGitHub リンクをチェックして、以下の手順に従ってください。

Elastic Cloud アカウントを設定します (まだ設定していない場合)。

  1. https://www.elastic.co/cloud/elasticsearch-service/signup2 週間の無料トライアルにサインアップしてください。
  2. 配置を作成します。

ログインしたら、Add integrationsをクリックします。

APM 統合をクリックします

次に、このブログに必要な詳細を下にスクロールします。

次の環境変数を必ず設定し、変数を上記の Elastic とここの OpenAI から取得したデータに置き換えてから、これらのエクスポート コマンドをコマンド ラインで実行します。

export OPEN_AI_KEY=sk-abcdefgh5ijk2l173mnop3qrstuvwxyzab2cde47fP2g9jij
export OTEL_EXPORTER_OTLP_AUTH_HEADER=abc9ldeofghij3klmn
export OTEL_EXPORTER_OTLP_ENDPOINT=https://123456abcdef.apm.us-west2.gcp.elastic-cloud.com:443

そして、次の Python ライブラリをインストールします。

pip3 install opentelemetry-api
pip3 install opentelemetry-sdk
pip3 install opentelemetry-exporter-otlp
pip3 install opentelemetry-instrumentation
pip3 install opentelemetry-instrumentation-requests
pip3 install openai
pip3 install flask

以下は、サンプル アプリケーションに使用するコードです。現実の世界では、これは独自のコードになります。これは、次のメッセージで OpenAI API を呼び出すだけです。

import openai
from flask import Flask
import monitor  # Import the module
from opentelemetry.exporter.otlp.proto.grpc.trace_exporter import OTLPSpanExporter
import urllib
import os
from opentelemetry import trace
from opentelemetry.sdk.resources import SERVICE_NAME, Resource
from opentelemetry.sdk.trace import TracerProvider
from opentelemetry.sdk.trace.export import BatchSpanProcessor
from opentelemetry.instrumentation.requests import RequestsInstrumentor

# OpenTelemetry setup up code here, feel free to replace the “your-service-name” attribute here.
resource = Resource(attributes={
    SERVICE_NAME: "your-service-name"
})
provider = TracerProvider(resource=resource)
processor = BatchSpanProcessor(OTLPSpanExporter(endpoint=os.getenv('OTEL_EXPORTER_OTLP_ENDPOINT'),
        headers="Authorization=Bearer%20"+os.getenv('OTEL_EXPORTER_OTLP_AUTH_HEADER')))
provider.add_span_processor(processor)
trace.set_tracer_provider(provider)
tracer = trace.get_tracer(__name__)
RequestsInstrumentor().instrument()



# Initialize Flask app and instrument it

app = Flask(__name__)
# Set OpenAI API key
openai.api_key = os.getenv('OPEN_AI_KEY')


@app.route("/completion")
@tracer.start_as_current_span("do_work")
def completion():
    response = openai.Completion.create(
        model="text-davinci-003",
        prompt="Why is Elastic an amazing observability tool?",
        max_tokens=20,
        temperature=0
    )
    return response.choices[0].text.strip()

if __name__ == "__main__":
    app.run()

Python で OpenTelemetry を実装するここにいる人なら誰でも、このコードにかなり精通しているはずです。特別な魔法は必要ありません。魔法は「監視」コードで発生します。これは、独自の OpenAI アプリケーションを計測するために自由に使用できます。

猿いじり

monitor.py コードでは、"Monkey Patching" と呼ばれる処理を行っていることがわかります。モンキー パッチは、属性またはメソッドを変更することにより、実行時にクラスまたはモジュールの動作を動的に変更できるようにする Python の手法です。モンキー パッチを適用すると、ソース コードを変更せずにクラスまたはモジュールの機能を変更できます。これは、制御または直接変更していない既存のクラスまたはモジュールの動作を変更する必要がある場合に役立ちます。

ここで行うことは、" Completion " 呼び出しの動作を変更して、応答メトリックを盗んで OpenTelemetry スパンに追加できるようにすることです。以下でその方法を確認できます。

def count_completion_requests_and_tokens(func):
    @wraps(func)
    def wrapper(*args, **kwargs):
        counters['completion_count'] += 1
        response = func(*args, **kwargs)
        token_count = response.usage.total_tokens
        prompt_tokens = response.usage.prompt_tokens
        completion_tokens = response.usage.completion_tokens
        cost = calculate_cost(response)
        strResponse = json.dumps(response)
        # Set OpenTelemetry attributes
        span = trace.get_current_span()
        if span:
            span.set_attribute("completion_count", counters['completion_count'])
            span.set_attribute("token_count", token_count)
            span.set_attribute("prompt_tokens", prompt_tokens)
            span.set_attribute("completion_tokens", completion_tokens)
            span.set_attribute("model", response.model)
            span.set_attribute("cost", cost)
            span.set_attribute("response", strResponse)
        return response
    return wrapper
# Monkey-patch the openai.Completion.create function
openai.Completion.create = count_completion_requests_and_tokens(openai.Completion.create)

このすべてのデータを Span に追加することで、実際に OpenTelemetry OTLP エンドポイント (この場合は Elastic) に送信できます。これの利点は、データを簡単に使用して、ダッシュボードとビジュアライゼーションを検索または構築できることです。最後のステップでは、コストも計算します。これを行うには、OpenAI API への単一のリクエストのコストを計算する次の関数を実装します。

def calculate_cost(response):
    if response.model in ['gpt-4', 'gpt-4-0314']:
        cost = (response.usage.prompt_tokens * 0.03 + response.usage.completion_tokens * 0.06) / 1000
    elif response.model in ['gpt-4-32k', 'gpt-4-32k-0314']:
        cost = (response.usage.prompt_tokens * 0.06 + response.usage.completion_tokens * 0.12) / 1000
    elif 'gpt-3.5-turbo' in response.model:
        cost = response.usage.total_tokens * 0.002 / 1000
    elif 'davinci' in response.model:
        cost = response.usage.total_tokens * 0.02 / 1000
    elif 'curie' in response.model:
        cost = response.usage.total_tokens * 0.002 / 1000
    elif 'babbage' in response.model:
        cost = response.usage.total_tokens * 0.0005 / 1000
    elif 'ada' in response.model:
        cost = response.usage.total_tokens * 0.0004 / 1000
    else:
        cost = 0
    return cost

柔軟に対応

このすべてのデータを取得したら、Elastic で楽しみましょう。Discover では、OpenTelemetry ライブラリを使用して送信したすべてのデータ ポイントを確認できます。

これらのタグを使用すると、ダッシュボードの構築が非常に簡単になります。以前に作成したものをチェックしてください (これは私の GitHub リポジトリにもコミットされています)。

また、OpenAI サービス トランザクション、レイテンシ、ChatGPT サービス呼び出しに関連するすべてのスパンも確認できます。

トランザクション ビューでは、特定の OpenAI 呼び出しにかかった時間も確認できます。

 ここでの OpenAI への一部のリクエストは、3 秒以上かかっています。ChatGPT は非常に遅くなる可能性があるため、どれだけ遅いか、ユーザーが不満を感じているかどうかを理解することが重要でした。

要約する

OpenTelemetry と Elastic を使用して ChatGPT の監視を調査しました。ChatGPT は世界的な現象であり、成長を続け、すぐに誰もが使用するようになることは間違いありません。応答が遅くなる可能性があるため、このサービスを使用するコードのパフォーマンスを人々が理解することが重要です。

コストの問題もあります。サービスが利益を食いつぶしているかどうか、求めているものがビジネスに利益をもたらすかどうかを知ることが重要だからです。現在の経済環境では、収益性を注意深く見守る必要があります。

このソリューションのコードはこちらで確認してください。「モニター」ライブラリーを自由に使用して、独自の OpenAI コードを計測してください。

Elastic可観測性についてもっと知りたいですか?次のリソースを確認してください。

  • 弾性可観測性の紹介
  • 可観測性の基礎トレーニング
  • Elastic Observability のデモを見る
  • 可観測性の予測と 2023 年までの傾向

また、 AWS と Forrester をフィーチャーしたElastic Observability Trends Webinarにサインアップしてください。お見逃しなく!

翻訳:OpenTelemetry と Elastic を使用して OpenAI API と GPT モデルを監視する | エラスティック ブログ

Supongo que te gusta

Origin blog.csdn.net/UbuntuTouch/article/details/130191840
Recomendado
Clasificación