Azure Databricks を使用した LLMOps の実装

Azure Databricks は、データの準備からモデルの提供と監視まで、AI ライフサイクルを合理化し、機械学習システムのパフォーマンスと効率を最適化する統合プラットフォームを提供します。 データ ガバナンス用の Unity カタログ、モデル追跡用の MLflow、LLM をデプロイするための Mosaic AI Model Serving などの機能を利用して、生成 AI アプリケーションの開発をサポートします。

このラボは完了するまで、約 20 分かかります。

開始する前に

管理レベルのアクセス権を持つ Azure サブスクリプションが必要です。

Azure OpenAI リソースをプロビジョニングする

まだ持っていない場合は、Azure サブスクリプションで Azure OpenAI リソースをプロビジョニングします。

  1. Azure portal (https://portal.azure.com) にサインインします。
  2. 次の設定で Azure OpenAI リソースを作成します。
    • [サブスクリプション]: “Azure OpenAI Service へのアクセスが承認されている Azure サブスクリプションを選びます”**
    • [リソース グループ]: リソース グループを作成または選択します
    • [リージョン]: 以下のいずれかのリージョンからランダムに選択する*
      • 米国東部 2
      • 米国中北部
      • スウェーデン中部
      • スイス西部
    • [名前]: “希望する一意の名前
    • 価格レベル: Standard S0

* Azure OpenAI リソースは、リージョンのクォータによって制限されます。 一覧表示されているリージョンには、この演習で使用されるモデル タイプの既定のクォータが含まれています。 リージョンをランダムに選択することで、サブスクリプションを他のユーザーと共有しているシナリオで、1 つのリージョンがクォータ制限に達するリスクが軽減されます。 演習の後半でクォータ制限に達した場合は、別のリージョンに別のリソースを作成する必要が生じる可能性があります。

  1. デプロイが完了するまで待ちます。 次に、Azure portal でデプロイされた Azure OpenAI リソースに移動します。

  2. 左側のペインで、[リソース管理] の下の [キーとエンドポイント] を選択します。

  3. エンドポイントと使用可能なキーの 1 つをコピーしておきます。この演習で、後でこれを使用します。

必要なモデルをデプロイする

Azure には、モデルのデプロイ、管理、調査に使用できる Azure AI Studio という名前の Web ベース ポータルが用意されています。 Azure AI Studio を使用してモデルをデプロイすることで、Azure OpenAI の調査を開始します。

: Azure AI Studio を使用すると、実行するタスクを提案するメッセージ ボックスが表示される場合があります。 これらを閉じて、この演習の手順に従うことができます。

  1. Azure portal にある Azure OpenAI リソースの [概要] ページで、[開始する] セクションまで下にスクロールし、ボタンを選択して Azure AI Studio に移動します。

  2. Azure AI Studio の左ペインで、[デプロイ] ページを選び、既存のモデル デプロイを表示します。 まだデプロイがない場合は、次の設定で gpt-35-turbo モデルの新しいデプロイを作成します。

    • デプロイ名: gpt-35-turbo
    • モデル: gpt-35-turbo
    • モデルのバージョン: 既定値
    • デプロイの種類:Standard
    • 1 分あたりのトークンのレート制限: 5K*
    • コンテンツ フィルター: 既定
    • 動的クォータを有効にする: 無効

* この演習は、1 分あたり 5,000 トークンのレート制限内で余裕を持って完了できます。またこの制限によって、同じサブスクリプションを使用する他のユーザーのために容量を残すこともできます。

Azure Databricks ワークスペースをプロビジョニングする

ヒント: 既に Azure Databricks ワークスペースがある場合は、この手順をスキップして、既存のワークスペースを使用できます。

  1. Azure portal (https://portal.azure.com) にサインインします。
  2. 次の設定で Azure Databricks リソースを作成します。
    • サブスクリプション: Azure OpenAI リソースの作成に使用したサブスクリプションと同じ Azure サブスクリプションを選択します
    • リソース グループ: Azure OpenAI リソースを作成したリソース グループと同じです
    • リージョン: Azure OpenAI リソースを作成したリージョンと同じです
    • [名前]: “希望する一意の名前
    • 価格レベル: Premium または試用版
  3. [確認および作成] を選択し、デプロイが完了するまで待ちます。 次にリソースに移動し、ワークスペースを起動します。

クラスターの作成

Azure Databricks は、Apache Spark “クラスター” を使用して複数のノードでデータを並列に処理する分散処理プラットフォームです。** 各クラスターは、作業を調整するドライバー ノードと、処理タスクを実行するワーカー ノードで構成されています。 この演習では、ラボ環境で使用されるコンピューティング リソース (リソースが制約される場合がある) を最小限に抑えるために、単一ノード クラスターを作成します。 運用環境では、通常、複数のワーカー ノードを含むクラスターを作成します。

ヒント: Azure Databricks ワークスペースに 13.3 LTS ML 以降のランタイム バージョンを備えたクラスターが既にある場合は、この手順をスキップし、そのクラスターを使用してこの演習を完了できます。

  1. Azure portal で、Azure Databricks ワークスペースが作成されたリソース グループを参照します。
  2. Azure Databricks サービス リソースを選択します。
  3. Azure Databricks ワークスペースの [概要] ページで、[ワークスペースの起動] ボタンを使用して、新しいブラウザー タブで Azure Databricks ワークスペースを開きます。サインインを求められた場合はサインインします。

ヒント: Databricks ワークスペース ポータルを使用すると、さまざまなヒントと通知が表示される場合があります。 これらは無視し、指示に従ってこの演習のタスクを完了してください。

  1. 左側のサイドバーで、[(+) 新規] タスクを選択し、[クラスター] を選択します。
  2. [新しいクラスター] ページで、次の設定を使用して新しいクラスターを作成します。
    • クラスター名: “ユーザー名の” クラスター (既定のクラスター名)**
    • ポリシー:Unrestricted
    • クラスター モード: 単一ノード
    • アクセス モード: 単一ユーザー (自分のユーザー アカウントを選択)
    • Databricks Runtime のバージョン: “以下に該当する最新の非ベータ版ランタイム (標準ランタイム バージョンではない*) の ML エディションを選択します。”
      • GPU を使用しない
      • Scala > 2.11 を含める
      • 3.4 以上の Spark を含む”**
    • Photon Acceleration を使用する: オフにする
    • ノード タイプ: Standard_D4ds_v5
    • 非アクティブ状態が ** 20 ** 分間続いた後終了する
  3. クラスターが作成されるまで待ちます。 これには 1、2 分かかることがあります。

: クラスターの起動に失敗した場合、Azure Databricks ワークスペースがプロビジョニングされているリージョンでサブスクリプションのクォータが不足していることがあります。 詳細については、「CPU コアの制限によってクラスターを作成できない」を参照してください。 その場合は、ワークスペースを削除し、別のリージョンに新しいワークスペースを作成してみてください。

必要なライブラリをインストールする

  1. Databricks ワークスペースで、Workspace セクションに移動します。

  2. [作成] を選択し、[ノートブック] を選択します。

  3. ノートブックに名前を付け、言語として [Python] を選択します。

  4. 最初のコード セルに、次のコードを入力して実行し、OpenAI ライブラリをインストールします。

     %pip install openai
    
  5. インストールが完了したら、新しいセルでカーネルを再起動します。

     %restart_python
    

MLflow を使用して LLM をログする

MLflow の LLM 追跡機能を使用すると、パラメーター、メトリック、予測、および成果物をログに記録できます。 パラメーターには入力構成の詳細を示すキーと値のペアが含まれるのに対して、メトリックはパフォーマンスの定量的な測定値を提供します。 予測には、入力プロンプトとモデルの応答の両方が含まれており、簡単に取得できるように成果物として格納されています。 この構造化ログは、各対話の詳細な記録を維持するのに役立ち、LLM の分析と最適化の向上を促進します。

  1. 新しいセルで、この演習の冒頭でコピーしたアクセス情報を含む次のコードを実行して、Azure OpenAI リソースを使用するときに認証用の永続的な環境変数を割り当てます。

     import os
    
     os.environ["AZURE_OPENAI_API_KEY"] = "your_openai_api_key"
     os.environ["AZURE_OPENAI_ENDPOINT"] = "your_openai_endpoint"
     os.environ["AZURE_OPENAI_API_VERSION"] = "2023-03-15-preview"
    
  2. 新しいセルで、次のコードを実行して、Azure OpenAI クライアントを初期化します。

     import os
     from openai import AzureOpenAI
    
     client = AzureOpenAI(
        azure_endpoint = os.getenv("AZURE_OPENAI_ENDPOINT"),
        api_key = os.getenv("AZURE_OPENAI_API_KEY"),
        api_version = os.getenv("AZURE_OPENAI_API_VERSION")
     )
    
  3. 新しいセルで、次のコードを実行して、MLflow 追跡を初期化しモデルをログに記録します。

     import mlflow
     from openai import AzureOpenAI
    
     system_prompt = "Assistant is a large language model trained by OpenAI."
    
     mlflow.openai.autolog()
    
     with mlflow.start_run():
    
         response = client.chat.completions.create(
             model="gpt-35-turbo",
             messages=[
                 {"role": "system", "content": system_prompt},
                 {"role": "user", "content": "Tell me a joke about animals."},
             ],
         )
    
         print(response.choices[0].message.content)
         mlflow.log_param("completion_tokens", response.usage.completion_tokens)
     mlflow.end_run()
    

上記のセルは、ワークスペースで実験を開始し、各チャット完了イテレーションのトレースを登録して、各実行の入力、出力、およびメタデータを追跡します。

モデルを監視する

  1. 左側のサイドバーで [実験] を選択し、この演習で使用したノートブックに関連付けられている実験を選択します。 最新の実行を選択し、ログに記録された 1 つのパラメーター completion_tokens があることを [概要] ページで確認します。 コマンド mlflow.openai.autolog() を実行すると、既定で各実行のトレースがログに記録されますが、モデルを監視するために後で使用できる mlflow.log_param() を使用すると、追加のパラメーターをログに記録することもできます。

  2. [トレース] タブを選択し、最後に作成されたものを選択します。 completion_tokens パラメーターがトレースの出力に含まれていることを確認します。

    MLFlow トレース UI

モデルの監視を開始したら、さまざまな実行のトレースを比較してデータ ドリフトを検出できます。 入力データ分布、モデル予測、またはパフォーマンス メトリックの大幅な時間的変化を探します。 統計テストまたは視覚化ツールを使用すると、この分析に役立ちます。

クリーンアップ

Azure OpenAI リソースでの作業が完了したら、Azure portal (https://portal.azure.com) でデプロイまたはリソース全体を忘れずに削除します。

Azure Databricks ポータルの [コンピューティング] ページでクラスターを選択し、[■ 終了] を選択してクラスターをシャットダウンします。

Azure Databricks を調べ終わったら、作成したリソースを削除できます。これにより、不要な Azure コストが生じないようになり、サブスクリプションの容量も解放されます。