Share via


プロンプト フローと GitHub を使用する LLMOps

大規模な言語運用 (LLMOps) は、効率的なプロンプト エンジニアリングと LLM を取り入れたアプリケーションの開発とデプロイの基礎となっています。 LLM を取り入れたアプリケーションの需要が高まり続ける中、組織はエンド ツー エンドのライフサイクルを管理するためのまとまりのある合理化されたプロセスを必要としています。

Azure Machine Learning を使用すると、GitHub と統合して、LLM を取り入れたアプリケーションの開発ライフサイクルをプロンプト フローで自動化できます。

Azure Machine Learning Prompt Flow は、LLM を組み込んだアプリケーションを開発するための合理化され、構造化されたアプローチを提供します。 その明確に定義されたプロセスとライフサイクルは、フローの構築、テスト、最適化、デプロイのプロセスを案内し、完全に機能する LLM を融合したソリューションの作成に結び付けます。

LLMOps プロンプト フローの機能

プロンプト フロー付き LLMOps は、プロンプト フローを使用して LLM を取り入れたアプリをビルドするのに役立つ "LLMOps テンプレートとガイダンス" です。 また、以下のような特徴があります。

  • 一元化されたコード ホスティング: このリポジトリは、プロンプト フローに基づいて複数のフローのホスティング コードをサポートし、すべてのフローに 1 つのリポジトリを提供します。 このプラットフォームは、すべてのプロンプト フロー コードが存在する単一のリポジトリと見なされます。 フローのライブラリのようなもので、さまざまなプロジェクトで簡単に検索、アクセス、コラボレーションを行うことができます。

  • ライフサイクル管理: 各フローは独自のライフサイクルを利用し、ローカルの実験から運用環境へのデプロイへのスムーズな移行を可能にします。 Screenshot of pipeline.

  • バリアントとハイパーパラメーターの実験: 複数のバリアントとハイパーパラメーターで実験し、フロー バリアントを簡単に評価します。 バリアントとハイパーパラメーターは、レシピの成分のようなものです。 このプラットフォームを使用すると、フロー内の複数のノード間で異なるバリアントの組み合わせを実権することができます。

  • 複数のデプロイ ターゲット: リポジトリでは、構成によって実行される Azure App Services、Kubernetes、Azure マネージド コンピューティングへのフローのデプロイをサポートし、必要に応じてフローをスケーリングできるようにします。 また、Docker をサポートする任意のターゲット プラットフォームとオペレーティング システムにデプロイするためのフロー ランタイムおよびフローを取り入れた Docker イメージが生成されます。 Screenshot of endpoints.

  • A/B デプロイ: A/B デプロイをシームレスに実装し、さまざまなフロー バージョンを簡単に比較できます。 Web サイトの従来の A/B テストと同様に、このプラットフォームにより、プロンプト フローの A/B デプロイが容易になります。 つまり、実際の設定でフローのさまざまなバージョンを簡単に比較して、最適なパフォーマンスを判断できます。 Screenshot of deployments.

  • 多対多データセット/フロー リレーションシップ: 標準フローと評価フローのそれぞに対して複数のデータセットに対応し、フロー テストと評価の多様性を確保します。 プラットフォームは、フローごとに複数のデータセットに対応するように設計されています。

  • 条件付きデータとモデルの登録: プラットフォームでは、Azure Machine Learning データ資産のデータセットの新しいバージョンおよびモデル レジストリ内のフローを、変更がある場合にのみ作成します。それ以外の場合は作成されません。

  • 包括的なレポート: バリアント構成ごとに詳細なレポートを生成し、情報に基づいて意思決定できるようにします。 すべての実行と実験に関する詳細なメトリック収集、実験、およびバリアント一括実行を可能にし、CSV および HTML ファイルでデータドリブンの意思決定をできるようにします。 Screenshot of flow variants report.Screenshot of metrics report.

カスタマイズのその他の機能:

  • BYOF (bring-your-own-flows) を提供します。 LLM を取り入れたアプリケーションに関連する複数のユース ケースを開発するための完全なプラットフォーム

  • 構成ベースの開発を提供します。 広範なボイラープレート コードを記述する必要はありません。

  • プロンプトの実験と評価の両方をローカルとクラウド上で実行できます。

  • プロンプトのローカル評価用のノートブックを提供します。 ローカル実験用の関数のライブラリを提供します。

  • デプロイ後のパイプライン内でのエンドポイント テストで、その可用性と対応性を確認します。

  • デプロイ前にプロンプト メトリックを検証するオプションの Human-in-loop を提供します。

プロンプト フロー付き LLMOps には、単純なアプリと複雑な LLM を取り入れたアプリの両方の機能が用意されています。 アプリケーションのニーズに合わせて完全にカスタマイズできます。

LLMOps ステージ

ライフサイクルは、次の 4 つの異なるステージで構成されます:

  • 初期化: ビジネスの目標を明確に定義し、関連するデータ サンプルを収集し、基本的なプロンプト構造を確立し、その機能を強化するフローを作成します。

  • 実験: フローをサンプル データに適用し、プロンプトのパフォーマンスを評価し、必要に応じてフローを調整します。 結果に満足するまで、継続的に反復処理します。

  • 評価と改善: より大きなデータセットを使用するフローのパフォーマンスのベンチマークを測定し、プロンプトの有効性を評価し、それに応じた改善を行います。 結果が目的の基準を満たしている場合は、次のステージに進みます。

  • デプロイ: 効率と有効性のためにフローを最適化し、A/B デプロイを含む運用環境にデプロイし、パフォーマンスを監視し、ユーザーフィードバックを収集し、この情報を使用してフローをさらに強化します。

この構造化された手法に従うことで、プロンプト フローを使用すると、フローを自信を持って開発、厳密なテスト、微調整、デプロイを行い、堅牢で洗練された AI アプリケーションを作成できます。

LLMOps プロンプト フロー テンプレートは、コード優先アプローチを使用してこの構造化手法を形式化し、プロンプト フローに関連するツールとプロセスを使用して、プロンプト フローを使用して LLM を組み込んだアプリを構築するのに役立ちます。 一元化されたコード ホスティング、ライフサイクル管理、バリアントとハイパーパラメーターの実験、A/B 展開、すべての実行と実験のレポートなど、さまざまな機能が提供されます。

この記事のリポジトリは、プロンプト フロー テンプレートを使用した LLMOps で入手できます

LLMOps プロセス フロー

Screenshot of LLMOps prompt flow Process.

  1. これは初期化ステージです。 ここでは、フローが開発され、データが準備、キュレーションされ、LLMOps 関連の構成ファイルが更新されます。
  2. Visual Studio Code とプロンプト フロー拡張機能を使用したローカル開発の後、機能ブランチから開発ブランチにプル要求が発生します。 これにより、ビルド検証パイプラインが実行されます。 また、実験フローも実行します。
  3. PR は手動で承認され、コードは開発ブランチにマージされます
  4. PR が開発ブランチにマージされると、開発環境の CI パイプラインが実行されます。 実験フローと評価フローの両方を順番に実行し、パイプラインの他のステップとは別に、Azure Machine Learning レジストリにフローを登録します。
  5. CI パイプラインの実行が完了すると、CD トリガーによって、Azure Machine Learning レジストリからの標準フローを Azure Machine Learning オンライン エンドポイントとしてデプロイし、デプロイされたフローで統合とスモーク テストを実行する CD パイプラインの実行が保証されます。
  6. リリース ブランチが開発ブランチから作成されるか、開発ブランチからリリース ブランチに PR が発生します。
  7. PR は手動で承認され、コードはリリース ブランチにマージされます。 PR がリリース ブランチにマージされると、prod 環境の CI パイプラインが実行されます。 実験フローと評価フローの両方を順番に実行し、パイプラインの他のステップとは別に、Azure Machine Learning レジストリにフローを登録します。
  8. CI パイプラインの実行が完了すると、CD トリガーによって、Azure Machine Learning レジストリからの標準フローを Azure Machine Learning オンライン エンドポイントとしてデプロイし、デプロイされたフローで統合とスモーク テストを実行する CD パイプラインの実行が保証されます。

これ以降は、エンド ツー エンドのサンプルに従って、プロンプト フロー付き LLMOps について説明します。これにより、プロンプト フローと GitHub を使用して LLM を取り入れたアプリケーションをビルドできるようになります。 その主な目的は、プロンプト フローと LLMOps の機能を活用して、このようなアプリケーションの開発を支援することです。

ヒント

LLMOps とプロンプト フローの統合方法を理解しておくことをお勧めします。

重要

プロンプト フローは、現在パブリック プレビュー段階です。 このプレビュー版はサービス レベル アグリーメントなしで提供されています。運用環境のワークロードに使うことはお勧めできません。 特定の機能はサポート対象ではなく、機能が制限されることがあります。 詳しくは、Microsoft Azure プレビューの追加使用条件に関するページをご覧ください。

前提条件

  • Azure サブスクリプション。 Azure サブスクリプションをお持ちでない場合は、開始する前に無料アカウントを作成してください。 無料版または有料版の Azure Machine Learning をお試しください。
  • Azure Machine Learning ワークスペース。
  • ローカル コンピューターで実行されている Git。
  • ソース管理リポジトリとしての GitHub。

Note

Git バージョン 2.27 以降が必要です。 Git コマンドのインストールについて詳しくは、https://git-scm.com/downloads でお使いのオペレーティング システムを選んでください

重要

この記事の CLI コマンドは、Bash を使ってテストされました。 異なるシェルを使うと、エラーが発生する可能性があります。

プロンプト フローを設定する

プロンプト フローでは、接続リソースを使用して Azure OpenAI、OpenAI、Azure AI Search などのエンドポイントに接続し、フローの実行にランタイムを使用します。 これらのリソースは、プロンプト フローでフローを実行する前に作成する必要があります。

プロンプト フローの接続を設定する

接続は、プロンプト フロー ポータル UI または REST API を使用して作成できます。 プロンプト フロー用の接続を作成するには、ガイドラインに従ってください。

接続の詳細については、リンクをクリックしてください。

Note

サンプル フローでは "aoai" 接続が使用され、"aoai" という名前の接続を作成して実行されるはずです。

プロンプト フローのコンピューティングとランタイムを設定する

ランタイムは、プロンプト フロー ポータル UI または REST API を使用して作成できます。 プロンプト フロー用のコンピューティングとランタイムを設定するには、ガイドラインに従ってください。

ランタイムの詳細については、リンクをクリックしてください。

Note

後で説明する LLMOps_config.json ファイルでも、同じランタイム名を使用する必要があります。

GitHub リポジトリを設定する

GitHub リポジトリを使用して LLMOps プロセスを設定するために、複数の手順を実行する必要があります。

リポジトリをフォークして構成する

フォークしたリポジトリを GitHub 組織で作成するには、ガイドラインに従ってください。 このリポジトリでは、2 つのブランチ (maindevelopment) を使用します。また、コードの昇格とパイプラインの実行には、コードに対する変更の代わりに使用されます。

GitHub と Azure の間で認証を設定する

前に作成したサービス プリンシパルを使用し、GitHub リポジトリと Azure サービスの間で認証を設定するには、ガイドラインに従ってください。

この手順では、サービス プリンシパル情報を格納する GitHub シークレットを構成します。 リポジトリのワークフローでは、シークレット名を利用して接続情報を読み取ることができます。 これは、Azure に自動的に接続するように GitHub ワークフロー ステップを構成するのに役立ちます。

リポジトリを複製する

新しいローカル リポジトリを作成するには、ガイドラインに従ってください。

これは、開発ブランチから新しい機能ブランチを作成し、変更を組み込むのに役立ちます。

パイプラインをテストする

パイプラインをテストするには、ガイドラインに従ってください。 以下の手順を実行します。

  1. 機能ブランチから開発ブランチに PR (pull request) を出します。
  2. PR パイプラインは、ブランチ ポリシー構成の結果として自動的に実行されます。
  3. その後、PR が開発ブランチにマージされます。
  4. 関連付けられている 'dev' パイプラインが実行されます。 これにより、完全な CI と CD が実行され、既存の Azure Machine Learning エンドポイントがプロビジョニングされるか、更新されます。

テスト出力は、こちらに示されているものと同様になるはずです。

ローカル実行

ローカル実行の機能を利用するには、次のインストール手順に従ってください:

  1. リポジトリを複製する: 最初に、その GitHub リポジトリからテンプレートのリポジトリを複製します。
git clone https://github.com/microsoft/llmops-promptflow-template.git
  1. env ファイルを設定する: 最上位のフォルダー レベルで .env ファイルを作成し、記載されている項目の情報を提供します。 接続名を必要な数だけ追加します。 このリポジトリのフロー例ではすべて、aoai という名前の AzureOpenAI 接続が使用されています。 api_key と api_base に対して、値を更新した行 aoai={"api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"} を追加します。 名前が異なる追加の接続がフローで使用される場合、適宜追加してください。 現在のところ、プロバイダーとしての AzureOpenAI によるフローがサポートされています。

experiment_name=
connection_name_1={ "api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}
connection_name_2={ "api_key": "","api_base": "","api_type": "azure","api_version": "2023-03-15-preview"}
  1. 依存関係をインストールするために、ローカルの conda または仮想環境を準備します。

python -m pip install promptflow promptflow-tools promptflow-sdk jinja2 promptflow[azure] openai promptflow-sdk[builtins] python-dotenv

  1. こちらのドキュメントに基づいて、フローをテンプレートに取り込みます (書き込みます)。

  2. local_execution フォルダーで提供されている例に似た python スクリプトを記述してください。

次のステップ