

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Amazon SageMaker Inference Recommender を使用するための前提条件
<a name="inference-recommender-prerequisites"></a>

Amazon SageMaker Inference Recommender を使用する前に、前提条件ステップを完了させる必要があります。例として、両方のタイプの Amazon SageMaker Inference Recommender レコメンデーションジョブに対して、PyTorch (v1.7.1) ResNet-18 の事前学習済みモデルを使用する方法を示します。ここに示す例では AWS SDK for Python (Boto3)を使用しています。

**注記**  
次のコード例では Python を使用しています。ターミナルまたは AWS CLIで次のコードサンプルのいずれかを実行する場合は、`!` プレフィックスを削除します。
Amazon SageMaker Studio ノートブックで Python 3 (TensorFlow 2.6 Python 3.8 CPU 最適化) カーネルを使用して、次の例を実行できます。Studio の詳細については、「[Amazon SageMaker Studio](studio-updated.md)」を参照してください。

1. **Amazon SageMaker AI 用の IAM ロールを作成する。**

   `AmazonSageMakerFullAccess` IAM マネージドポリシーがアタッチされている Amazon SageMaker AI の IAM ロールを作成します。

1. **環境をセットアップします。**

   依存関係をインポートし AWS リージョン、 、SageMaker AI IAM ロール (ステップ 1 から）、および SageMaker AI クライアントの変数を作成します。

   ```
   !pip install --upgrade pip awscli botocore boto3  --quiet
   from sagemaker import get_execution_role, Session, image_uris
   import boto3
   
   region = boto3.Session().region_name
   role = get_execution_role()
   sagemaker_client = boto3.client("sagemaker", region_name=region)
   sagemaker_session = Session()
   ```

1. **(オプション) Inference Recommender によってベンチマークされた既存のモデルを確認します。**

   Inference Recommender は、人気のあるモデルズーのモデルをベンチマークします。Inference Recommender は、まだベンチマークされていないモデルもサポートします。

   `ListModelMetaData` を使用して、一般的なモデルズーで見つかった機械学習モデルのドメイン、フレームワーク、タスク、モデル名を一覧表示するレスポンスオブジェクトを取得します。

   後のステップでドメイン、フレームワーク、フレームワークのバージョン、タスク、モデル名を使用して、推論 Docker イメージを選択し、モデルを SageMaker Model Registry に登録します。以下は、SDK for Python (Boto3) を使用してモデルメタデータを一覧表示する方法を示しています。

   ```
   list_model_metadata_response=sagemaker_client.list_model_metadata()
   ```

   出力には、以下の例のようなモデルのサマリー (`ModelMetadataSummaries`) とレスポンスメタデータ (`ResponseMetadata`) が含まれます。

   ```
   {
       'ModelMetadataSummaries': [{
               'Domain': 'NATURAL_LANGUAGE_PROCESSING',
               'Framework': 'PYTORCH:1.6.0',
                'Model': 'bert-base-cased',
                'Task': 'FILL_MASK'
                },
               {
                'Domain': 'NATURAL_LANGUAGE_PROCESSING',
                'Framework': 'PYTORCH:1.6.0',
                'Model': 'bert-base-uncased',
                'Task': 'FILL_MASK'
                },
               {
               'Domain': 'COMPUTER_VISION',
                'Framework': 'MXNET:1.8.0',
                'Model': 'resnet18v2-gluon',
                'Task': 'IMAGE_CLASSIFICATION'
                },
                {
                'Domain': 'COMPUTER_VISION',
                'Framework': 'PYTORCH:1.6.0',
                'Model': 'resnet152',
                'Task': 'IMAGE_CLASSIFICATION'
                }],
       'ResponseMetadata': {
                               'HTTPHeaders': {
                               'content-length': '2345',
                               'content-type': 'application/x-amz-json-1.1',
                               'date': 'Tue, 19 Oct 2021 20:52:03 GMT',
                               'x-amzn-requestid': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
                             },
       'HTTPStatusCode': 200,
       'RequestId': 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx',
       'RetryAttempts': 0
       }
   }
   ```

   このデモでは、PyTorch (v1.7.1) ResNet-18 モデルを使用してイメージ分類を実行します。次の Python コードサンプルでは、フレームワーク、フレームワークのバージョン、ドメイン、タスクを変数に格納して、後で使用できるようにします。

   ```
   # ML framework details
   framework = 'pytorch'
   framework_version = '1.7.1'
   
   # ML model details
   ml_domain = 'COMPUTER_VISION'
   ml_task = 'IMAGE_CLASSIFICATION'
   ```

1. **Amazon S3 に機械学習モデルをアップロードします。**

   事前トレーニング済みの機械学習モデルがない場合は、この PyTorch (v1.7.1) ResNet-18 モデルを使用してください。

   ```
   # Optional: Download a sample PyTorch model
   import torch
   from torchvision import models, transforms, datasets
   
   # Create an example input for tracing
   image = torch.zeros([1, 3, 256, 256], dtype=torch.float32)
   
   # Load a pretrained resnet18 model from TorchHub
   model = models.resnet18(pretrained=True)
   
   # Tell the model we are using it for evaluation (not training). Note this is required for Inferentia compilation.
   model.eval()
   model_trace = torch.jit.trace(model, image)
   
   # Save your traced model
   model_trace.save('model.pth')
   ```

   サンプル推論スクリプト `inference.py` をダウンロードします。`code` ディレクトリを作成して、推論スクリプトを `code` ディレクトリに移動します。

   ```
   # Download the inference script
   !wget https://aws-ml-blog-artifacts.s3.us-east-2.amazonaws.com/inference.py
   
   # move it into a code/ directory
   !mkdir code
   !mv inference.py code/
   ```

   Amazon SageMaker AI では、事前学習済みの機械学習モデルを圧縮 TAR ファイル (`*.tar.gz`) としてパッケージ化する必要があります。この要件を満たすようにモデルと推論スクリプトを圧縮します。

   ```
   !tar -czf test.tar.gz model.pth code/inference.py
   ```

   エンドポイントがプロビジョニングされると、アーカイブ内のファイルが抽出され、エンドポイントの `/opt/ml/model/` に抽出されます。

   モデルとモデルのアーティファクトを`.tar.gz` ファイルとして圧縮したら、それらを Amazon S3 バケットにアップロードします。以下の例は、 AWS CLIを使用して Amazon S3 にモデルをアップロードする方法を示しています。

   ```
   !aws s3 cp test.tar.gz s3://{your-bucket}/models/
   ```

1. **構築済みの Docker 推論イメージを選択するか、独自の推論 Docker イメージを作成する。**

   SageMaker AI は、Apache MXNet、TensorFlow、PyTorch、Chainer など、いくつかの最も一般的な機械学習フレームワーク用に、組み込みアルゴリズムおよび構築済みの Docker イメージのコンテナを提供しています。使用可能な SageMaker AI イメージの完全なリストについては、「[Available Deep Learning Containers Images](https://github.com/aws/deep-learning-containers/blob/master/available_images.md)」を参照してください。

   既存の SageMaker AI コンテナがニーズを満たしておらず、独自の既存のコンテナがない場合は、新しい Docker イメージを作成します。Docker イメージを作成する方法については、「[カスタム推論コードを持つコンテナ](your-algorithms-inference-main.md)」を参照してください。

   以下に、SageMaker Python SDK を使用して PyTorch バージョン 1.7.1 推論イメージを取得する方法を示します。

   ```
   from sagemaker import image_uris
   
   ## Uncomment and replace with your own values if you did not define  
   ## these variables a previous step.
   #framework = 'pytorch'
   #framework_version = '1.7.1'
   
   # Note: you can use any CPU-based instance here, 
   # this is just to set the arch as CPU for the Docker image
   instance_type = 'ml.m5.2xlarge' 
   
   image_uri = image_uris.retrieve(framework, 
                                   region, 
                                   version=framework_version, 
                                   py_version='py3', 
                                   instance_type=instance_type, 
                                   image_scope='inference')
   ```

   使用可能な SageMaker AI インスタンスのリストについては、「[Amazon SageMaker AI Pricing](https://aws.amazon.com/sagemaker/pricing/)」を参照してください。

1. **サンプルペイロードアーカイブを作成します。**

   ロードテストツールが SageMaker AI エンドポイントに送信できる個別のファイルを含むアーカイブを作成します。推論コードは、サンプルペイロードからファイル形式を読み取り可能である必要がります。

   次の例では、この例の後のステップで ResNet-18 モデルに使用する.jpg イメージをダウンロードします。

   ```
   !wget https://cdn.pixabay.com/photo/2020/12/18/05/56/flowers-5841251_1280.jpg
   ```

   サンプルペイロードを tarball として圧縮します。

   ```
   !tar -cvzf payload.tar.gz flowers-5841251_1280.jpg
   ```

   サンプルペイロードを Amazon S3 にアップロードし、Amazon S3 URI を書き留めます。

   ```
   !aws s3 cp payload.tar.gz s3://{bucket}/models/
   ```

   Amazon S3 URI は後のステップで必要になるため、変数に格納します。

   ```
   bucket_prefix='models'
   bucket = '<your-bucket-name>' # Provide the name of your S3 bucket
   payload_s3_key = f"{bucket_prefix}/payload.tar.gz"
   sample_payload_url= f"s3://{bucket}/{payload_s3_key}"
   ```

1. **レコメンデーションジョブ向けにモデルの入力を準備します。**

   最後の前提条件として、モデルの入力を準備するための 2 つのオプションがあります。モデルを SageMaker Model Registry に登録し、これを使用して本番稼働用にモデルをカタログ化するか、SageMaker AI モデルを作成して、レコメンデーションジョブの作成時に `ContainerConfig` フィールドに指定できます。最初のオプションは、モデルバージョンの管理やモデルのデプロイの自動化など、[Model Registry](https://docs.aws.amazon.com/sagemaker/latest/dg/model-registry.html) が備えている機能を利用する場合に最適です。2 番目のオプションは、すぐに使い始める必要がある場合に最適です。1 つ目のオプションを選択する場合は、ステップ 7 に進みます。2 つ目のオプションを選択する場合は、ステップ 7 をスキップしてステップ 8 に進みます。

1. **オプション 1: モデルをモデルレジストリに登録します**

   SageMaker Model Registry を使用すると、本番用のモデルのカタログ化、モデルバージョンの管理、メタデータ (トレーニング指標など) のモデルへの関連付け、モデルの承認ステータスの管理、モデルの本番環境へのデプロイ、CI/CD を使用したモデル展開の自動化を行えます。

   SageMaker モデルレジストリを使用してモデルを追跡および管理する場合は、モデルパッケージグループ内のバージョン管理されたモデルパッケージとして表されます。バージョン管理されていないモデルパッケージは、モデルグループの一部ではありません。モデルパッケージグループは、モデルの複数のバージョンまたはイテレーションを保持します。レジストリ内のすべてのモデルに対してそれらを作成する必要はありませんが、それらはすべて同じ目的を持つさまざまなモデルを整理し、自動バージョニングを提供するのに役立ちます。

   Amazon SageMaker Inference Recommender を使用するには、バージョン管理されたモデルパッケージが必要です。バージョン管理されたモデルパッケージは、 AWS SDK for Python (Boto3) または Amazon SageMaker Studio Classic を使用してプログラムで作成できます。バージョン管理されたモデルパッケージをプログラムで作成するには、まずモデルパッケージグループを `CreateModelPackageGroup` API で作成します。次に、`CreateModelPackage` API を使用してモデルパッケージを作成します。このメソッドを呼び出すと、バージョン管理されたモデルパッケージが作成されます。

   [モデルグループを作成する](model-registry-model-group.md) および Amazon SageMaker Studio Classic を使用して、プログラムおよびインタラクティブにモデルパッケージグループを作成する方法と、それぞれバージョニングされたモデルパッケージを作成する方法[モデルバージョンを登録する](model-registry-version.md)の詳細については、 AWS SDK for Python (Boto3) 「」および「」を参照してください。

   次のコードサンプルは、 AWS SDK for Python (Boto3)を使用して、バージョン管理されたモデルパッケージを作成する方法を示します。
**注記**  
Inference Recommender ジョブを作成するために、モデルパッケージを承認する必要はありません。

   1. **モデルパッケージグループを作成する**

      `CreateModelPackageGroup` API を使用して、モデルパッケージグループを作成します。モデルパッケージグループの `ModelPackageGroupName` に名前を付け、必要に応じてモデルパッケージの説明を `ModelPackageGroupDescription` フィールドに指定します。

      ```
      model_package_group_name = '<INSERT>'
      model_package_group_description = '<INSERT>' 
      
      model_package_group_input_dict = {
       "ModelPackageGroupName" : model_package_group_name,
       "ModelPackageGroupDescription" : model_package_group_description,
      }
      
      model_package_group_response = sagemaker_client.create_model_package_group(**model_package_group_input_dict)
      ```

      [https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackageGroup.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackageGroup.html) に渡すことができるオプションの引数と必須の引数の完全なリストについては、[Amazon SageMaker API リファレンスガイド](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html)を参照してください。

      推論コードを実行する Docker イメージとモデルアーティファクトの Amazon S3 の場所を指定して、モデルパッケージを作成し、`InferenceSpecification` の値を指定します。`InferenceSpecification` には、このモデルパッケージに基づいてモデルで実行できる推論ジョブに関する情報が含まれている必要があります。その内容は次のとおりです。
      + 推論コードを実行するイメージの Amazon ECR パス。
      + (オプション) モデルパッケージが推論に使用される変換ジョブとリアルタイムエンドポイントでサポートするインスタンスタイプ。
      + モデルパッケージが推論でサポートする入力および出力コンテンツ形式。

      モデルパッケージを作成するときは、次のパラメータも指定する必要があります。
      + [Domain](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-Domain): モデルパッケージとそのコンポーネントの機械学習ドメイン。一般的な機械学習ドメインは、コンピュータビジョンと自然言語処理が含まれます。
      + [Task](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-Task): モデルパッケージが実行する機械学習タスク。一般的な機械学習タスクには、物体検出とイメージ分類が含まれます。[API リファレンスガイド](https://docs.aws.amazon.com/sagemaker/latest/APIReference/Welcome.html)に記載されているどのタスクもユースケースを満たさない場合は、「OTHER」を指定してください。[サポートされている機械学習タスクのリストについては、Task](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-Task) API フィールドの説明を参照してください。
      + [SamplePayloadUrl](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html#sagemaker-CreateModelPackage-request-SamplePayloadUrl): サンプルペイロードが保存される Amazon Simple Storage Service (Amazon S3) パス。このパスは GZIP で圧縮された単一の TAR アーカイブ (サフィックスは .tar.gz) を指す必要があります。
      + [Framework](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelPackageContainerDefinition.html#sagemaker-Type-ModelPackageContainerDefinition-Framework): モデルパッケージコンテナイメージの機械学習フレームワーク。
      + [FrameworkVersion](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_ModelPackageContainerDefinition.html#sagemaker-Type-ModelPackageContainerDefinition-FrameworkVersion): モデルパッケージコンテナイメージのフレームワークバージョン。

      [SupportedRealtimeInferenceInstanceTypes](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_InferenceSpecification.html#sagemaker-Type-InferenceSpecification-SupportedRealtimeInferenceInstanceTypes) の推論をリアルタイムで生成するために使用するインスタンスタイプの許可リストを指定すると、Inference Recommender は `Default` ジョブ中、インスタンスタイプの探索空間を制限します。予算に制約がある場合、またはモデルとコンテナイメージをサポートできる特定のインスタンスタイプのセットが存在することがわかっている場合は、このパラメータを使用します。

      前のステップでは、トレーニング済みの ResNet18 モデルをダウンロードし、`models` というディレクトリの Amazon S3 バケットに保存しました。PyTorch (v1.7.1) Deep Learning Containers 推論イメージを取得し、その URI を `image_uri` という変数に格納しました。これらの変数を次のコードサンプルで使用して、[https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModelPackage.html) API への入力として使用するディクショナリを定義します。

      ```
      # Provide the Amazon S3 URI of your compressed tarfile
      # so that Model Registry knows where to find your model artifacts
      bucket_prefix='models'
      bucket = '<your-bucket-name>' # Provide the name of your S3 bucket
      model_s3_key = f"{bucket_prefix}/test.tar.gz"
      model_url= f"s3://{bucket}/{model_s3_key}"
      
      # Similar open source model to the packaged model
      # The name of the ML model as standardized by common model zoos
      nearest_model_name = 'resnet18'
      
      # The supported MIME types for input and output data. In this example, 
      # we are using images as input.
      input_content_type='image/jpeg'
      
      
      # Optional - provide a description of your model.
      model_package_description = '<INSERT>'
      
      ## Uncomment if you did not store the domain and task in an earlier
      ## step 
      #ml_domain = 'COMPUTER_VISION'
      #ml_task = 'IMAGE_CLASSIFICATION'
      
      ## Uncomment if you did not store the framework and framework version
      ## in a previous step.
      #framework = 'PYTORCH'
      #framework_version = '1.7.1'
      
      # Optional: Used for optimizing your model using SageMaker Neo
      # PyTorch uses NCHW format for images
      data_input_configuration = "[[1,3,256,256]]"
      
      # Create a dictionary to use as input for creating a model pacakge group
      model_package_input_dict = {
              "ModelPackageGroupName" : model_package_group_name,
              "ModelPackageDescription" : model_package_description,
              "Domain": ml_domain,
              "Task": ml_task,
              "SamplePayloadUrl": sample_payload_url,
              "InferenceSpecification": {
                      "Containers": [
                          {
                              "Image": image_uri,
                              "ModelDataUrl": model_url,
                              "Framework": framework.upper(), 
                              "FrameworkVersion": framework_version,
                              "NearestModelName": nearest_model_name,
                              "ModelInput": {"DataInputConfig": data_input_configuration}
                          }
                          ],
                      "SupportedContentTypes": [input_content_type]
              }
          }
      ```

   1. **モデルパッケージを作成する**

      `CreateModelPackage` API を使用してモデルパッケージを作成します。前のステップで定義した入力ディクショナリを渡します。

      ```
      model_package_response = sagemaker_client.create_model_package(**model_package_input_dict)
      ```

      Amazon SageMaker Inference Recommender を使用するには、モデルパッケージ ARN が必要です。モデルパッケージの ARN を書き留めるか、変数に格納します。

      ```
      model_package_arn = model_package_response["ModelPackageArn"]
      
      print('ModelPackage Version ARN : {}'.format(model_package_arn))
      ```

1. **オプション 2: モデルを作成して `ContainerConfig` フィールドを設定します**

   推論レコメンデーションジョブを開始する際、モデルをモデルレジストリに登録する必要がない場合は、このオプションを使用します。次のステップでは、SageMaker AI でモデルを作成し、`ContainerConfig` フィールドをレコメンデーションジョブの入力として設定します。

   1. **モデルを作成する**

      `CreateModel` API を使用してモデルを作成します。SageMaker AI Hosting にモデルをデプロイする際にこのメソッドを呼び出す例については、「[Create a Model (AWS SDK for Python (Boto3))](https://docs.aws.amazon.com/sagemaker/latest/dg/realtime-endpoints-deployment.html#realtime-endpoints-deployment-create-model)」を参照してください。

      前のステップでは、トレーニング済みの ResNet18 モデルをダウンロードし、`models` というディレクトリの Amazon S3 バケットに保存しました。PyTorch (v1.7.1) Deep Learning Containers 推論イメージを取得し、その URI を `image_uri` という変数に格納しました。これらの変数を次のコードサンプルで使用します。ここでは、`[CreateModel](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateModel.html#sagemaker-CreateModel-request-ModelName)` API への入力として使用するディクショナリを定義します。

      ```
      model_name = '<name_of_the_model>'
      # Role to give SageMaker permission to access AWS services.
      sagemaker_role= "arn:aws:iam::<region>:<account>:role/*"
      
      # Provide the Amazon S3 URI of your compressed tarfile
      # so that Model Registry knows where to find your model artifacts
      bucket_prefix='models'
      bucket = '<your-bucket-name>' # Provide the name of your S3 bucket
      model_s3_key = f"{bucket_prefix}/test.tar.gz"
      model_url= f"s3://{bucket}/{model_s3_key}"
      
      #Create model
      create_model_response = sagemaker_client.create_model(
          ModelName = model_name,
          ExecutionRoleArn = sagemaker_role, 
          PrimaryContainer = {
              'Image': image_uri,
              'ModelDataUrl': model_url,
          })
      ```

   1. **`ContainerConfig` フィールドを設定する**

      次に、作成したモデルで [ContainerConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_RecommendationJobInputConfig.html#sagemaker-Type-RecommendationJobInputConfig-ContainerConfig) フィールドを設定し、そのフィールドに次のパラメータを指定する必要があります。
      + `Domain`: モデルとそのコンポーネント (コンピュータビジョンや自然言語処理など) の機械学習ドメイン。
      + `Task`: イメージ分類やオブジェクトの検出など、モデルが実行する機械学習タスク。
      + `PayloadConfig`: レコメンデーションジョブのペイロードの構成。サブフィールドの詳細については、「`[RecommendationJobPayloadConfig](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_RecommendationJobPayloadConfig.html#sagemaker-Type-RecommendationJobPayloadConfig-SamplePayloadUrl)`」を参照してください。
      + `Framework`: PyTorch などのコンテナイメージの機械学習フレームワーク。
      + `FrameworkVersion`: コンテナイメージのフレームワークバージョン。
      + (オプション) `SupportedInstanceTypes`: 推論をリアルタイムで生成するために使用されるインスタンスタイプのリスト。

      `SupportedInstanceTypes` パラメータを使用すると、Inference Recommender は `Default` ジョブ中にインスタンスタイプの探索空間を制限します。予算に制約がある場合、またはモデルとコンテナイメージをサポートできる特定のインスタンスタイプのセットが存在することがわかっている場合は、このパラメータを使用します。

      次のコードサンプルでは、以前に定義したパラメータを `NearestModelName` と共に使用して、`[CreateInferenceRecommendationsJob](https://docs.aws.amazon.com/sagemaker/latest/APIReference/API_CreateInferenceRecommendationsJob.html)` API への入力として使用するディクショナリを定義します。

      ```
      ## Uncomment if you did not store the domain and task in a previous step
      #ml_domain = 'COMPUTER_VISION'
      #ml_task = 'IMAGE_CLASSIFICATION'
      
      ## Uncomment if you did not store the framework and framework version in a previous step
      #framework = 'PYTORCH'
      #framework_version = '1.7.1'
      
      # The name of the ML model as standardized by common model zoos
      nearest_model_name = 'resnet18'
      
      # The supported MIME types for input and output data. In this example, 
      # we are using images as input
      input_content_type='image/jpeg'
      
      # Optional: Used for optimizing your model using SageMaker Neo
      # PyTorch uses NCHW format for images
      data_input_configuration = "[[1,3,256,256]]"
      
      # Create a dictionary to use as input for creating an inference recommendation job
      container_config = {
              "Domain": ml_domain,
              "Framework": framework.upper(), 
              "FrameworkVersion": framework_version,
              "NearestModelName": nearest_model_name,
              "PayloadConfig": { 
                  "SamplePayloadUrl": sample_payload_url,
                  "SupportedContentTypes": [ input_content_type ]
               },
              "DataInputConfig": data_input_configuration
              "Task": ml_task,
              }
      ```