Azure Databricks と Azure OpenAI を使用して大規模言語モデルを評価する
大規模言語モデル (LLM) の評価には、モデルのパフォーマンスが必要な標準を満たしていることを確認するための一連の手順が含まれます。 Azure Databricks 内の機能である MLflow LLM Evaluate は、環境の設定、評価メトリックの定義、結果の分析など、このプロセスに対する構造化されたアプローチを提供します。 LLM に比較のための単一のグランド トゥルースがないことが多く、従来の評価方法が不十分であるため、この評価はきわめて重要です。
このラボは完了するまで、約 20 分かかります。
開始する前に
管理レベルのアクセス権を持つ Azure サブスクリプションが必要です。
Azure OpenAI リソースをプロビジョニングする
まだ持っていない場合は、Azure サブスクリプションで Azure OpenAI リソースをプロビジョニングします。
- Azure portal (
https://portal.azure.com
) にサインインします。 - 次の設定で Azure OpenAI リソースを作成します。
- [サブスクリプション]: “Azure OpenAI Service へのアクセスが承認されている Azure サブスクリプションを選びます”**
- [リソース グループ]: リソース グループを作成または選択します
- [リージョン]: 以下のいずれかのリージョンからランダムに選択する*
- 米国東部 2
- 米国中北部
- スウェーデン中部
- スイス西部
- [名前]: “希望する一意の名前”
- 価格レベル: Standard S0
* Azure OpenAI リソースは、リージョンのクォータによって制限されます。 一覧表示されているリージョンには、この演習で使用されるモデル タイプの既定のクォータが含まれています。 リージョンをランダムに選択することで、サブスクリプションを他のユーザーと共有しているシナリオで、1 つのリージョンがクォータ制限に達するリスクが軽減されます。 演習の後半でクォータ制限に達した場合は、別のリージョンに別のリソースを作成する必要が生じる可能性があります。
-
デプロイが完了するまで待ちます。 次に、Azure portal でデプロイされた Azure OpenAI リソースに移動します。
-
左側のペインで、[リソース管理] の下の [キーとエンドポイント] を選択します。
-
エンドポイントと使用可能なキーの 1 つをコピーしておきます。この演習で、後でこれを使用します。
必要なモデルをデプロイする
Azure には、モデルのデプロイ、管理、調査に使用できる Azure AI Studio という名前の Web ベース ポータルが用意されています。 Azure AI Studio を使用してモデルをデプロイすることで、Azure OpenAI の調査を開始します。
注: Azure AI Studio を使用すると、実行するタスクを提案するメッセージ ボックスが表示される場合があります。 これらを閉じて、この演習の手順に従うことができます。
-
Azure portal にある Azure OpenAI リソースの [概要] ページで、[開始する] セクションまで下にスクロールし、ボタンを選択して Azure AI Studio に移動します。
-
Azure AI Studio の左ペインで、[デプロイ] ページを選び、既存のモデル デプロイを表示します。 まだデプロイがない場合は、次の設定で gpt-35-turbo モデルの新しいデプロイを作成します。
- デプロイ名: gpt-35-turbo
- モデル: gpt-35-turbo
- モデルのバージョン: 既定値
- デプロイの種類:Standard
- 1 分あたりのトークンのレート制限: 5K*
- コンテンツ フィルター: 既定
- 動的クォータを有効にする: 無効
* この演習は、1 分あたり 5,000 トークンのレート制限内で余裕を持って完了できます。またこの制限によって、同じサブスクリプションを使用する他のユーザーのために容量を残すこともできます。
Azure Databricks ワークスペースをプロビジョニングする
ヒント: 既に Azure Databricks ワークスペースがある場合は、この手順をスキップして、既存のワークスペースを使用できます。
- Azure portal (
https://portal.azure.com
) にサインインします。 - 次の設定で Azure Databricks リソースを作成します。
- サブスクリプション: Azure OpenAI リソースの作成に使用したサブスクリプションと同じ Azure サブスクリプションを選択します
- リソース グループ: Azure OpenAI リソースを作成したリソース グループと同じです
- リージョン: Azure OpenAI リソースを作成したリージョンと同じです
- [名前]: “希望する一意の名前”
- 価格レベル: Premium または試用版
- [確認および作成] を選択し、デプロイが完了するまで待ちます。 次にリソースに移動し、ワークスペースを起動します。
クラスターの作成
Azure Databricks は、Apache Spark “クラスター” を使用して複数のノードでデータを並列に処理する分散処理プラットフォームです。** 各クラスターは、作業を調整するドライバー ノードと、処理タスクを実行するワーカー ノードで構成されています。 この演習では、ラボ環境で使用されるコンピューティング リソース (リソースが制約される場合がある) を最小限に抑えるために、単一ノード クラスターを作成します。 運用環境では、通常、複数のワーカー ノードを含むクラスターを作成します。
ヒント: Azure Databricks ワークスペースに 13.3 LTS ML 以降のランタイム バージョンを備えたクラスターが既にある場合は、この手順をスキップし、そのクラスターを使用してこの演習を完了できます。
- Azure portal で、Azure Databricks ワークスペースが作成されたリソース グループを参照します。
- Azure Databricks サービス リソースを選択します。
- Azure Databricks ワークスペースの [概要] ページで、[ワークスペースの起動] ボタンを使用して、新しいブラウザー タブで Azure Databricks ワークスペースを開きます。サインインを求められた場合はサインインします。
ヒント: Databricks ワークスペース ポータルを使用すると、さまざまなヒントと通知が表示される場合があります。 これらは無視し、指示に従ってこの演習のタスクを完了してください。
- 左側のサイドバーで、[(+) 新規] タスクを選択し、[クラスター] を選択します。
- [新しいクラスター] ページで、次の設定を使用して新しいクラスターを作成します。
- クラスター名: “ユーザー名の” クラスター (既定のクラスター名)**
- ポリシー:Unrestricted
- クラスター モード: 単一ノード
- アクセス モード: 単一ユーザー (自分のユーザー アカウントを選択)
- Databricks Runtime のバージョン: “以下に該当する最新の非ベータ版ランタイム (標準ランタイム バージョンではない*) の ML エディションを選択します。”
- “GPU を使用しない”
- Scala > 2.11 を含める
- “3.4 以上の Spark を含む”**
- Photon Acceleration を使用する: オフにする
- ノード タイプ: Standard_D4ds_v5
- 非アクティブ状態が ** 20 ** 分間続いた後終了する
- クラスターが作成されるまで待ちます。 これには 1、2 分かかることがあります。
注: クラスターの起動に失敗した場合、Azure Databricks ワークスペースがプロビジョニングされているリージョンでサブスクリプションのクォータが不足していることがあります。 詳細については、「CPU コアの制限によってクラスターを作成できない」を参照してください。 その場合は、ワークスペースを削除し、別のリージョンに新しいワークスペースを作成してみてください。
必要なライブラリをインストールする
-
クラスターのページで、[ライブラリ] タブを選択します。
-
[新規インストール] を選択します。
-
ライブラリ ソースとして PyPI を選択し、
openai==1.42.0
をインストールします。
新しいNotebookを作成する
-
サイド バーで [(+) 新規] タスクを使用して、Notebook を作成します。
-
ノートブックに名前を付け、[接続] ドロップダウン リストで、まだ選択されていない場合はクラスターを選択します。 クラスターが実行されていない場合は、起動に 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"
カスタム関数を使用して LLM を評価する
MLflow 2.8.0 以上では、mlflow.evaluate()
はモデルを MLflow にログする必要のない Python 関数の評価をサポートしています。 このプロセスでは、評価するモデル、計算するメトリック、および評価データ (通常は Pandas DataFrame) を指定する必要があります。
-
新しいセルで、次のコードを実行して、サンプル評価データフレームを定義します。
import pandas as pd eval_data = pd.DataFrame( { "inputs": [ "What is MLflow?", "What is Spark?", ], "ground_truth": [ "MLflow is an open-source platform for managing the end-to-end machine learning (ML) lifecycle. It was developed by Databricks, a company that specializes in big data and machine learning solutions. MLflow is designed to address the challenges that data scientists and machine learning engineers face when developing, training, and deploying machine learning models.", "Apache Spark is an open-source, distributed computing system designed for big data processing and analytics. It was developed in response to limitations of the Hadoop MapReduce computing model, offering improvements in speed and ease of use. Spark provides libraries for various tasks such as data ingestion, processing, and analysis through its components like Spark SQL for structured data, Spark Streaming for real-time data processing, and MLlib for machine learning tasks", ], } )
-
新しいセルで、次のコードを実行して Azure OpenAI リソースのクライアントを初期化し、カスタマイズした関数を定義します。
import os import pandas as pd 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") ) def openai_qa(inputs): answers = [] system_prompt = "Please answer the following question in formal language." for index, row in inputs.iterrows(): completion = client.chat.completions.create( model="gpt-35-turbo", messages=[ {"role": "system", "content": system_prompt}, {"role": "user", "content": "{row}"}, ], ) answers.append(completion.choices[0].message.content) return answers
-
新しいセルで、次のコードを実行して実験を作成し、評価データを使用してカスタム関数を評価します。
import mlflow with mlflow.start_run() as run: results = mlflow.evaluate( openai_qa, eval_data, model_type="question-answering", )
ページ実行が成功すると、実験ページへのリンクが生成され、そのページでモデル メトリックを確認できます。
model_type="question-answering"
の場合、既定のメトリックは toxicity、ari_grade_level、および flesch_kincaid_grade_level です。
クリーンアップ
Azure OpenAI リソースでの作業が完了したら、Azure portal (https://portal.azure.com
) でデプロイまたはリソース全体を忘れずに削除します。
Azure Databricks ポータルの [コンピューティング] ページでクラスターを選択し、[■ 終了] を選択してクラスターをシャットダウンします。
Azure Databricks を調べ終わったら、作成したリソースを削除できます。これにより、不要な Azure コストが生じないようになり、サブスクリプションの容量も解放されます。