ランタイムの環境をカスタマイズする
ランタイム用に Docker コンテキストを使用して環境をカスタマイズする
このセクションでは、Docker と Azure Machine Learning 環境に関連する知識があることを前提としています。
手順 1: Docker コンテキストを準備する
image_build
フォルダーを作成する
ローカル環境で、次のファイルを含むフォルダーを作成します。フォルダーの構造は次のようになります。
|--image_build
| |--requirements.txt
| |--Dockerfile
| |--environment.yaml
requirements.txt
に必要なパッケージを定義する
省略可能: プライベート pypi リポジトリにパッケージを追加します。
次のコマンドを使用して、パッケージをローカルにダウンロードします。pip wheel <package_name> --index-url=<private pypi> --wheel-dir <local path to save packages>
requirements.txt
ファイルを開き、追加のパッケージと特定のバージョンを追加します。 次に例を示します。
###### Requirements with Version Specifiers ######
langchain == 0.0.149 # Version Matching. Must be version 0.6.1
keyring >= 4.1.1 # Minimum version 4.1.1
coverage != 3.5 # Version Exclusion. Anything except version 3.5
Mopidy-Dirble ~= 1.1 # Compatible release. Same as >= 1.1, == 1.*
<path_to_local_package> # reference to local pip wheel package
ls > requirements.txt
を使用してローカル パッケージのパスを取得できます。
Dockerfile
を定義する
Dockerfile
を作成し、次のコンテンツを追加してから、ファイルを保存します。
FROM <Base_image>
COPY ./* ./
RUN pip install -r requirements.txt
注意
この Docker イメージは、プロンプト フローの基本イメージ (mcr.microsoft.com/azureml/promptflow/promptflow-runtime-stable:<newest_version>
) からビルドする必要があります。 できる限り最新バージョンの基本イメージを使用します。
手順 2: カスタム Azure Machine Learning 環境を作成する
environment.yaml
に環境を定義する
ローカル コンピューティングでは、CLI (v2) を使用して、Docker イメージに基づいてカスタマイズされた環境を作成できます。
注意
- 環境作成の前提条件を満たしていることを確認します。
- ワークスペースに接続していることを確認します。
重要
プロンプト フローはデータ分離が有効になっているワークスペースではサポートされていません。 enableDataIsolation フラグは、ワークスペース作成フェーズでのみ設定でき、更新することはできません。
プロンプト フローは、ワークスペース ハブで作成されたプロジェクト ワークスペースではサポートされていません。 ワークスペース ハブはプライベート プレビュー機能です。
az login(optional)
az account set --subscription <subscription ID>
az configure --defaults workspace=<Azure Machine Learning workspace name> group=<resource group>
environment.yaml
ファイルを開き、次のコンテンツを追加します。 <environment_name> プレースホルダーを、目的の環境名に置き換えます。
$schema: https://azuremlschemas.azureedge.net/latest/environment.schema.json
name: <environment_name>
build:
path: .
CLI コマンドを実行して環境を作成する
cd image_build
az login(optional)
az ml environment create -f environment.yaml --subscription <sub-id> -g <resource-group> -w <workspace>
注意
イメージのビルドには数分かかる場合があります。
ワークスペース UI ページに移動し、[環境] ページに移動して、作成したカスタム環境を見つけます。 これを使用して、プロンプト フローにランタイムを作成できるようになりました。 詳細については、「UI でコンピューティング インスタンス ランタイムを作成する」を参照してください。
環境 CLI の詳細については、「環境を管理する」を参照してください。
プロンプト フロー ランタイムとして使用できるカスタム アプリケーションをコンピューティング インスタンスに作成する
プロンプト フロー ランタイムは、コンピューティング インスタンスで実行されるカスタム アプリケーションです。 コンピューティング インスタンスにカスタム アプリケーションを作成し、それをプロンプト フロー ランタイムとして使用できます。 この目的でカスタム アプリケーションを作成するには、次のプロパティを指定する必要があります。
UI | SDK | 注意 |
---|---|---|
Docker イメージ | ImageSettings.reference | このカスタム アプリケーションのビルドに使用されるイメージ |
ターゲット ポート | EndpointsSettings.target | アプリケーションにアクセスするポート、コンテナー内のポート |
公開されたポート | EndpointsSettings.published | アプリケーションがイメージ内で実行されているポート、パブリックに公開されているポート |
SDK v2 を使用し、プロンプト フロー ランタイムとしてカスタム アプリケーションを作成する
# import required libraries
import os
from azure.ai.ml import MLClient
from azure.ai.ml.entities import WorkspaceConnection
# Import required libraries
from azure.identity import DefaultAzureCredential, InteractiveBrowserCredential
try:
credential = DefaultAzureCredential()
# Check if given credential can get token successfully.
credential.get_token("https://management.azure.com/.default")
except Exception as ex:
# Fall back to InteractiveBrowserCredential in case DefaultAzureCredential not work
credential = InteractiveBrowserCredential()
from azure.ai.ml.entities import ComputeInstance
from azure.ai.ml.entities import CustomApplications, ImageSettings, EndpointsSettings, VolumeSettings
ml_client = MLClient.from_config(credential=credential)
image = ImageSettings(reference='mcr.microsoft.com/azureml/promptflow/promptflow-runtime-stable:<newest_version>')
endpoints = [EndpointsSettings(published=8081, target=8080)]
app = CustomApplications(name='promptflow-runtime',endpoints=endpoints,bind_mounts=[],image=image,environment_variables={})
ci_basic_name = "<compute_instance_name>"
ci_basic = ComputeInstance(name=ci_basic_name, size="<instance_type>",custom_applications=[app])
ml_client.begin_create_or_update(ci_basic)
注意
newest_version
、compute_instance_name
、instance_type
を実際の値に変更してください。
Azure Resource Manager テンプレートを使用し、プロンプト フロー ランタイムとしてカスタム アプリケーションを作成する
この Azure Resource Manager テンプレートを使用して、カスタム アプリケーションを備えたコンピューティング インスタンスを作成できます。
詳しくは、「コンピューティング インスタンスのプロンプト フロー ランタイムとしてのカスタム アプリケーション用 Azure Resource Manager テンプレート」をご覧ください。
コンピューティング インスタンス UI を使用し、プロンプト フロー ランタイムとしてカスタム アプリケーションを作成する
このドキュメントに従って、カスタム アプリケーションを追加します。
フロー フォルダーの requirements.txt
を動的な環境に活用する - クイック テストのみ
promptflow flow.dag.yaml
では、フローをデプロイするときに使用される定義 requirements.txt
を指定することもできます。
プライベート pypi リポジトリにパッケージを追加します - 省略可能
次のコマンドを使用して、パッケージをローカルにダウンロードします。pip wheel <package_name> --index-url=<private pypi> --wheel-dir <local path to save packages>
requirements.txt
をランタイムにインストールする Python ツールを作成する
from promptflow import tool
import subprocess
import sys
# Run the pip install command
def add_custom_packages():
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"])
import os
# List the contents of the current directory
files = os.listdir()
# Print the list of files
# The inputs section will change based on the arguments of the tool function, after you save the code
# Adding type to arguments and return value will help the system show the types properly
# Please update the function name/signature per need
# In Python tool you can do things like calling external services or
# pre/post processing of data, pretty much anything you want
@tool
def echo(input: str) -> str:
add_custom_packages()
return files
イメージをビルドするときに、共通パッケージ (プライベート wheel を含む) を requirements.txt
に配置することをお勧めします。 フロー内でのみ使用されるパッケージ (プライベート wheel を含む) をフロー フォルダーに配置するか、フロー フォルダー内の requirements.txt
でより迅速に変更します。運用環境では、後者の方法はお勧めしません。