プロンプト フロー コンピューティング セッションでは、必要なすべての依存関係パッケージを含む Docker イメージを含め、アプリケーションの実行に必要なコンピューティング リソースが提供されます。 この信頼性の高いスケーラブルな環境により、プロンプト フローでタスクと機能を効率的に実行し、シームレスなユーザー エクスペリエンスを確保できます。
コンピューティング セッション管理のアクセス許可とロール
ロールを割り当てるには、リソースに対する owner または Microsoft.Authorization/roleAssignments/write アクセス許可が必要です。
コンピューティング セッションのユーザーに、ワークスペースで AzureML Data Scientist ロールを割り当てます。 詳しくは、「Azure Machine Learning ワークスペースへのアクセスの管理」をご覧ください。
ロールの割り当てが有効になるまでに数分かかる場合があります。
スタジオでコンピューティング セッションを開始する
Azure Machine Learning Studio を使用してコンピューティング セッションを開始する前に、次のことを確認します。
- ワークスペースでの
AzureML Data Scientistロールを持っている。 - ワークスペース内の既定のデータ ストア (通常は
workspaceblobstore) は BLOB の種類です。 - 作業ディレクトリ (
workspaceworkingdirectory) がワークスペースに存在する。 - プロンプト フローに仮想ネットワークを使う場合は、「プロンプト フローでのネットワークの分離」での考慮事項を理解している。
フロー ページでコンピューティング セッションを開始する
各フローは、1 つのコンピューティング セッションにバインドされます。 フロー ページでコンピューティング セッションを開始します。
開始を選択します。 フロー フォルダーの
flow.dag.yamlで定義されている環境を使用して、コンピューティング セッションを開始します。 ワークスペースに十分なクォータがある場合は、サーバーレス コンピューティングの仮想マシン (VM) サイズで実行されます。[詳細設定から始める] を選択します。 詳細設定では、次のことを実行できます。
- コンピューティングの種類を選択します。 サーバーレス コンピューティングとコンピューティング インスタンスのどちらかを選択できます。
サーバーレス コンピューティングを選択する場合は、次のように設定します。
- コンピューティング セッションで使用する VM サイズをカスタマイズします。 VM シリーズ D 以降を選択します。 詳細については、サポートされている VM シリーズとサイズに関するセクションを参照してください
- アイドル時間をカスタマイズします。この時間中、コンピューティング セッションがしばらく使用されないと、セッションは自動的に削除されます。
- ユーザー割り当てマネージド ID を設定する。 コンピューティング セッションではこの ID を使用して基本イメージをプルし、接続を使って認証し、パッケージをインストールします。 ユーザー割り当てマネージド ID に十分なアクセス許可があることを確認します。 この ID を設定しない場合、ユーザー ID は既定で使用されます。
- 次の CLI コマンドを使用して、ユーザー割り当てマネージド ID をワークスペースに割り当てることができます。 ワークスペースのユーザー割り当て ID を作成および更新する方法の詳細を確認してください。
az ml workspace update -f workspace_update_with_multiple_UAIs.yml --subscription <subscription ID> --resource-group <resource group name> --name <workspace name>workspace_update_with_multiple_UAIs.yml の内容は、次のようになります。
identity: type: system_assigned, user_assigned user_assigned_identities: '/subscriptions/<subscription_id>/resourcegroups/<resource_group_name>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/<uai_name>': {} '<UAI resource ID 2>': {}ヒント
Azure Machine Learning ワークスペースがワークスペースに関連するリソースのデータにアクセスするには、ユーザー割り当てマネージド ID に次の Azure RBAC のロールの割り当てが必要になります。
リソース 権限 Azure Machine Learning ワークスペース Contributor Azure Storage 共同作成者 (コントロール プレーン) + ストレージ BLOB データ共同作成者 + ストレージ ファイル データ特権共同作成者 (データ プレーン、ファイル共有のフロー ドラフトと BLOB 内のデータの使用) Azure Key Vault (アクセス ポリシーのアクセス許可モデルを使用する場合) 共同作成者 + 消去操作以外のすべてのアクセス ポリシーのアクセス許可。これはリンクされた Azure Key Vault の既定モードです。 Azure Key Vault (RBAC アクセス許可モデルを使用する場合) 共同作成者 (コントロール プレーン) + Key Vault 管理者 (データ プレーン) Azure Container Registry Contributor Azure Application Insights Contributor Note
ジョブの送信者には、ユーザー割り当てマネージド ID に対する
assignアクセス許可が必要です。Managed Identity Operatorロールを割り当てます。サーバーレス コンピューティング セッションが作成されるたびに、ユーザー割り当てマネージド ID がコンピューティングに割り当てられます。コンピューティングの種類としてコンピューティング インスタンスを選択する場合は、アイドル シャットダウン時間のみを設定できます。
既存のコンピューティング インスタンスで実行されるため、VM のサイズは固定され、セッション中に変更することはできません。
このセッションに使用される ID はコンピューティング インスタンスでも定義され、既定ではユーザー ID が使用されます。 コンピューティング インスタンスに ID を割り当てる方法の詳細
アイドル シャットダウン時間は、コンピューティング セッションのライフ サイクルを定義するために使用されます。設定した時間にセッションがアイドル状態の場合は、自動的に削除されます。 コンピューティング インスタンスでアイドル シャットダウンが有効になっている場合は、コンピューティング レベルで有効になります。
- コンピューティングの種類を選択します。 サーバーレス コンピューティングとコンピューティング インスタンスのどちらかを選択できます。
コンピューティング セッションを使用して CLI/SDK でフロー実行を送信する
Studio を使用するだけでなく、フロー実行を送信するときに CLI または SDK でコンピューティング セッションを指定します。
リソース セクションで、インスタンスの種類またはコンピューティング インスタンス名を指定します。 インスタンスの種類またはコンピューティング インスタンス名が指定されていない場合、Azure Machine Learning では、クォータ、コスト、パフォーマンス、ディスク サイズなどの要因に基づいてインスタンスの種類 (VM サイズ) が選択されます。 サーバーレス コンピューティングの詳細についてはこちらをご覧ください。
$schema: https://azuremlschemas.azureedge.net/promptflow/latest/Run.schema.json
flow: <path_to_flow>
data: <path_to_flow>/data.jsonl
# specify identity used by serverless compute.
# default value
# identity:
# type: user_identity
# use workspace first UAI
# identity:
# type: managed
# use specified client_id's UAI
# identity:
# type: managed
# client_id: xxx
column_mapping:
url: ${data.url}
# define cloud resource
resources:
instance_type: <instance_type> # serverless compute type
# compute: <compute_instance_name> # use compute instance as compute type
CLI を使用してこの実行を送信します。
pfazure run create --file run.yml
Note
CLI/SDK を使用してフロー実行を送信する場合、アイドル シャットダウンは 1 時間です。 コンピューティング ページに移動してコンピューティングをリリースできます。
フロー フォルダーの外部にあるファイルを参照する
場合によっては、フロー フォルダーの外部にある requirements.txt ファイルを参照する必要があります。 たとえば、複数のフローを含む複雑なプロジェクトがある場合に、同じ requirements.txt ファイルを共有するとします。 これを行うには、 additional_includes フィールドを flow.dag.yamlに追加します。 このフィールドの値は、フロー フォルダーへの相対ファイル/フォルダー パスの一覧です。 たとえば、requirements.txt がフロー フォルダーの親フォルダーにある場合は、../requirements.txt を additional_includes フィールドに追加できます。
inputs:
question:
type: string
outputs:
output:
type: string
reference: ${answer_the_question_with_context.output}
environment:
python_requirements_txt: requirements.txt
additional_includes:
- ../requirements.txt
...
requirements.txt ファイルはフロー フォルダーにコピーされ、コンピューティング セッションの開始に使用されます。
スタジオ フロー ページでコンピューティング セッションを更新する
フロー ページで、次のオプションを使用してコンピューティング セッションを管理します。
- コンピューティング セッションの設定を変更する: VM サイズや、サーバーレス コンピューティングのユーザー割り当てマネージド ID などの設定を変更します。 コンピューティング インスタンスを使用している場合は、別のインスタンスに切り替えます。
- VM サイズを変更すると、コンピューティング セッションは新しい VM サイズでリセットされます。
-
requirements.txtからパッケージをインストールする : プロンプト フロー UI で
requirements.txtを開き、パッケージを追加します。 -
インストールされているパッケージの表示: コンピューティング セッションにインストールされているパッケージ (基本イメージ内のパッケージを含む)、フロー フォルダー内の
requirements.txtファイルで指定されたパッケージが表示されます。 - コンピューティング セッションのリセット 現在のコンピューティング セッションが削除され、同じ環境で新しいコンピューティング セッションが作成されます。 パッケージの競合の問題が発生した場合は、このオプションを試すことができます。
- コンピューティング セッションの停止 現在のコンピューティング セッションが削除されます。 基になるコンピューティングにアクティブなコンピューティング セッションがない場合、サーバーレス コンピューティング リソースも削除されます。
また、フロー フォルダー内の requirements.txt ファイルにパッケージを追加することで、このフローの実行に使用する環境を簡単にカスタマイズできます。 このファイルにさらにパッケージを追加した後は、次のいずれかのオプションを選択できます。
-
[Save and install] (保存してインストール) を使用すると、フロー フォルダー内の
pip install -r requirements.txtがトリガーされます。 インストールするパッケージによって、このプロセスは数分かかる場合があります。 -
[Save only] (保存のみ) を使用すると、
requirements.txtファイルの保存だけが行われます。 後から自分でパッケージをインストールできます。
Note
requirements.txt の場所とファイル名を変更できますが、必ずフロー フォルダー内の flow.dag.yaml ファイル内でもそれらを変更してください。
promptflowとpromptflow-toolsのバージョンはセッション基本イメージに既に含まれているため、requirements.txtにピン留めしないでください。
requirements.txt では、ローカル ホイール ファイルはサポートされません。 イメージ内でそれらをビルドし、カスタマイズされた基本イメージを flow.dag.yaml で更新します。
カスタム基本イメージを構築する方法の詳細を確認してください。
Azure DevOps のプライベート フィードにパッケージを追加する
Azure DevOps でプライベート フィードを使用する場合は、次の手順に従います。
マネージド ID をワークスペースまたはコンピューティング インスタンスに割り当てます。
コンピューティング セッションとしてサーバーレス コンピューティングを使用する場合は、ユーザー割り当てマネージド ID をワークスペースに割り当てます。
ユーザー割り当てマネージド ID を作成し、Azure DevOps 組織に追加します。 詳細については、「サービス プリンシパルとマネージド ID を使用する」を参照してください。
Note
[ユーザーの追加] ボタンが表示されていない場合は、おそらくこのアクションを実行するために必要なアクセス許可がありません。
ユーザー割り当て ID をワークスペースに追加するか、更新します。
Note
ユーザー割り当てマネージド ID の、ワークスペースにリンクされた keyvault に
Microsoft.KeyVault/vaults/readがあることを確認してください。
コンピューティング セッションとしてコンピューティング インスタンスを使用する場合は、 ユーザー割り当てマネージド ID をコンピューティング インスタンスに割り当てます。
プライベート フィードの URL に
{private}を追加します。 たとえば、Azure DevOps のtest_packageからtest_feedをインストールする場合は、-i https://{private}@{test_feed_url_in_azure_devops}にrequirements.txtを追加します。-i https://{private}@{test_feed_url_in_azure_devops} test_packageコンピューティング セッション構成でユーザー割り当てマネージド ID を使用して指定します。
Note
このアプローチは、主にフロー開発フェーズでのクイック テストに焦点を当てています。エンドポイントとしてこのフローをデプロイする場合は、このプライベート フィードをイメージにビルドし、flow.dag.yaml の基本イメージを更新してください。
カスタム基本イメージをビルドする方法の詳細はこちらをご覧ください。
コンピューティング セッションの基本イメージを変更する
既定では、最新のプロンプト フローの基本イメージを使用します。 別の基本イメージを使う場合は、カスタムのものを作成できます。
- スタジオでは、コンピューティング セッション設定の基本イメージ設定で基本イメージを変更できます。
フロー フォルダー内の
environmentファイルのflow.dag.yamlの下で新しい基本イメージを指定することもできます。environment: image: <your-custom-image> python_requirements_txt: requirements.txt
新しい基本イメージを使用するには、コンピューティング セッションをリセットする必要があります。 このプロセスは、新しい基本イメージをプルしてパッケージを再インストールするので数分かかります。
コンピューティング セッションで使用されるサーバーレス インスタンスを管理する
サーバーレス インスタンスを管理するには、コンピューティング セッションとしてサーバーレス コンピューティングを使用します。 コンピューティング ページにあるコンピューティング セッションを一覧するタブで、サーバーレス インスタンスを表示します。
[アクティブなフローと実行] タブの下のコンピューティングで フローと実行 にアクセスします。インスタンスを削除すると、フローに影響し、その上で実行されます。
コンピューティング セッション、コンピューティング リソース、フロー、ユーザーの関係
- 1 人のユーザーが複数のコンピューティング リソース (サーバーレスまたはコンピューティング インスタンス) を持つことができます。 たとえば、ユーザーが VM サイズやユーザー割り当てマネージド ID が異なるコンピューティング リソースを持っている場合があります。
- コンピューティング リソースは、1 人のユーザーのみが使用できます。 これは、そのユーザーのプライベート開発ボックスとして機能します。 複数のユーザーが同じコンピューティング リソースを共有することはできません。
- コンピューティング リソースは、複数のコンピューティング セッションをホストできます。 コンピューティング セッションは、基になるコンピューティング リソースで実行されているコンテナーです。 たとえば、プロンプト フローの作成では多くのコンピューティング リソースが必要ないため、1 つのコンピューティング リソースで同じユーザーに対して複数のコンピューティング セッションをホストできます。
- コンピューティング セッションは、一度に 1 つのコンピューティング リソースにのみ属します。 コンピューティング セッションを削除または停止し、別のコンピューティング リソースに再割り当てできます。
- フローに含めることができるコンピューティング セッションは 1 つだけです。 各フローは自己完結型であり、コンピューティング セッションのフロー フォルダーに基本イメージと必要な Python パッケージを定義します。
ランタイムをコンピューティング セッションに切り替える
コンピューティング セッションは、コンピューティング インスタンス ランタイムよりも次の利点を提供します。
- セッションと基になるコンピューティングのライフサイクルを自動的に管理します。 手動で作成または管理する必要がなくなりました。
- カスタム環境を作成するのではなく、フロー フォルダー内の
requirements.txtファイルにパッケージを追加することで、パッケージを簡単にカスタマイズできます。
次の手順でコンピューティング インスタンス ランタイムをコンピューティング セッションに切り替えます。
- フロー フォルダーに
requirements.txtファイルを準備します。promptflowとpromptflow-toolsのバージョンは基本イメージに既に含まれているため、requirements.txtにピン留めしないでください。 コンピューティング セッションでは、起動時にrequirements.txtファイルにパッケージがインストールされます。 - コンピューティング インスタンス ランタイムのカスタム環境を作成する場合は、環境の詳細ページからイメージを取得し、フロー フォルダー内の
flow.dag.yamlファイルで指定します。 詳細については、「コンピューティング セッションの基本イメージを変更する」を参照してください。 ワークスペース上のユーザー割り当てマネージド ID または関連するユーザー割り当てマネージド ID に、イメージのacr pullアクセス許可があることを確認します。
- コンピューティング リソースの場合は、既存のコンピューティング インスタンスを引き続き使用してライフサイクルを手動で管理するか、システムによって管理されるサーバーレス コンピューティングを試してください。