{ "cells": [ { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "# Fraud Detection for Automobile Claims: Create an End to End Pipeline" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "This notebook's CI test result for us-west-2 is as follows. CI test results in other regions can be found at the end of the notebook. \n", "\n", "\n", "\n", "---" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Background\n", "\n", "In this notebook, we will build a SageMaker Pipeline that automates the entire end-to-end process of preparing, training, and deploying a model that detects automobile claim fraud. For a more detailed explanation of each step of the pipeline, you can look the series of notebooks (listed below) that implements this same process using a manual approach. Please see the [README.md](README.md) for more information about this use case implemented by this series of notebooks. \n", "\n", "\n", "1. [Fraud Detection for Automobile Claims: Data Exploration](./0-AutoClaimFraudDetection.ipynb)\n", "1. [Fraud Detection for Automobile Claims: Data Preparation, Process, and Store Features](./1-data-prep-e2e.ipynb)\n", "1. [Fraud Detection for Automobile Claims: Train, Check Bias, Tune, Record Lineage, and Register a Model](./2-lineage-train-assess-bias-tune-registry-e2e.ipynb)\n", "1. [Fraud Detection for Automobile Claims: Mitigate Bias, Train, Register, and Deploy Unbiased Model](./3-mitigate-bias-train-model2-registry-e2e.ipynb)\n", "\n", "\n", "## Contents\n", "1. [Prerequisites](#Prerequisites)\n", "1. [Architecture: Create a SageMaker Pipeline to Automate All the Steps from Data Prep to Model Deployment](#Architecture:-Create-a-SageMaker-Pipeline-to-Automate-All-the-Steps-from-Data-Prep-to-Model-Deployment)\n", "1. [Creating an Automated Pipeline using SageMaker Pipeline](#Creating-an-Automated-Pipeline-using-SageMaker-Pipeline)\n", "1. [Clean-Up](#Clean-Up)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Prerequisites\n", "----" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Install required and/or update third-party libraries" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "!python -m pip install -Uq pip\n", "!python -m pip install -q awswrangler==2.14.0 imbalanced-learn==0.7.0 sagemaker==2.41.0" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Import libraries" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import json\n", "import boto3\n", "import pathlib\n", "import sagemaker\n", "import numpy as np\n", "import pandas as pd\n", "import awswrangler as wr\n", "import string\n", "\n", "import demo_helpers\n", "\n", "from sagemaker.xgboost.estimator import XGBoost\n", "from sagemaker.workflow.pipeline import Pipeline\n", "from sagemaker.workflow.steps import CreateModelStep\n", "from sagemaker.sklearn.processing import SKLearnProcessor\n", "from sagemaker.workflow.step_collections import RegisterModel\n", "from sagemaker.workflow.steps import ProcessingStep, TrainingStep\n", "from sagemaker.workflow.parameters import ParameterInteger, ParameterFloat, ParameterString" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Set region and boto3 config" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# You can change this to a region of your choice\n", "import sagemaker\n", "\n", "region = sagemaker.Session().boto_region_name\n", "print(\"Using AWS Region: {}\".format(region))\n", "\n", "boto3.setup_default_session(region_name=region)\n", "boto_session = boto3.Session(region_name=region)\n", "\n", "s3_client = boto3.client(\"s3\", region_name=region)\n", "\n", "sagemaker_boto_client = boto_session.client(\"sagemaker\")\n", "sagemaker_session = sagemaker.session.Session(\n", " boto_session=boto_session, sagemaker_client=sagemaker_boto_client\n", ")\n", "sagemaker_role = sagemaker.get_execution_role()\n", "\n", "account_id = boto3.client(\"sts\").get_caller_identity()[\"Account\"]\n", "\n", "bucket = sagemaker_session.default_bucket()\n", "prefix = \"fraud-detect-demo\"\n", "\n", "claims_fg_name = f\"{prefix}-claims\"\n", "customers_fg_name = f\"{prefix}-customers\"" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# ======> Tons of output_paths\n", "\n", "training_job_output_path = f\"s3://{bucket}/{prefix}/training_jobs\"\n", "bias_report_output_path = f\"s3://{bucket}/{prefix}/clarify-bias\"\n", "explainability_output_path = f\"s3://{bucket}/{prefix}/clarify-explainability\"\n", "\n", "train_data_uri = f\"s3://{bucket}/{prefix}/data/train/train.csv\"\n", "test_data_uri = f\"s3://{bucket}/{prefix}/data/test/test.csv\"\n", "train_data_upsampled_s3_path = f\"s3://{bucket}/{prefix}/data/train/upsampled/train.csv\"\n", "processing_dir = \"/opt/ml/processing\"\n", "create_dataset_script_uri = f\"s3://{bucket}/{prefix}/code/create_dataset.py\"\n", "pipeline_bias_output_path = f\"s3://{bucket}/{prefix}/clarify-output/pipeline/bias\"\n", "deploy_model_script_uri = f\"s3://{bucket}/{prefix}/code/deploy_model.py\"\n", "\n", "# ======> variables used for parameterizing the notebook run\n", "flow_instance_count = 1\n", "flow_instance_type = \"ml.m5.4xlarge\"\n", "\n", "train_instance_count = 1\n", "train_instance_type = \"ml.m4.xlarge\"\n", "\n", "deploy_model_instance_type = \"ml.m4.xlarge\"" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Architecture: Create a SageMaker Pipeline to Automate All the Steps from Data Prep to Model Deployment\n", "----\n", "\n", "" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Creating an Automated Pipeline using SageMaker Pipeline\n", "\n", "- [Step 1: Claims Data Wrangler Preprocessing Step](#Step-1:-Claims-Data-Wrangler-Preprocessing-Step)\n", "- [Step 2: Customers Data Wrangler Preprocessing Step](#Step-2:-Customers-Data-Wrangler-Preprocessing-Step)\n", "- [Step 3: Create Dataset and Train/Test Split](#Step-3:-Create-Dataset-and-Train/Test-Split)\n", "- [Step 4: Train XGBoost Model](#Step-4:-Train-XGBoost-Model)\n", "- [Step 5: Model Pre-Deployment Step](#Step-5:-Model-Pre-Deployment-Step)\n", "- [Step 6: Run Bias Metrics with Clarify](#Step-6:-Run-Bias-Metrics-with-Clarify)\n", "- [Step 7: Register Model](#Step-7:-Register-Model)\n", "- [Step 8: Deploy Model](#Step-8:-Deploy-Model)\n", "- [Step 9: Combine and Run the Pipeline Steps](#Step-9:-Combine-and-Run-the-Pipeline-Steps)\n", "\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "\n", "----\n", "Now that youve manually done each step in our machine learning workflow, you can certain steps to allow for faster model experimentation without sacrificing transparncy and model tracking. In this section you will create a pipeline which trains a new model, persists the model in SageMaker and then adds the model to the registry." ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Pipeline parameters\n", "An important feature of SageMaker Pipelines is the ability to define the steps ahead of time, but be able to change the parameters to those steps at execution without having to re-define the pipeline. This can be achieved by using ParameterInteger, ParameterFloat or ParameterString to define a value upfront which can be modified when you call `pipeline.start(parameters=parameters)` later. Only certain parameters can be defined this way." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "train_instance_param = ParameterString(\n", " name=\"TrainingInstance\",\n", " default_value=\"ml.m4.xlarge\",\n", ")\n", "\n", "model_approval_status = ParameterString(\n", " name=\"ModelApprovalStatus\", default_value=\"PendingManualApproval\"\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Step 1: Claims Data Wrangler Preprocessing Step" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Upload raw data to S3\n", "Before you can preprocess the raw data with Data Wrangler, it must exist in S3." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "s3_client.upload_file(\n", " Filename=\"data/claims.csv\", Bucket=bucket, Key=f\"{prefix}/data/raw/claims.csv\"\n", ")\n", "s3_client.upload_file(\n", " Filename=\"data/customers.csv\", Bucket=bucket, Key=f\"{prefix}/data/raw/customers.csv\"\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Update attributes within the `.flow` file \n", "Data Wrangler will generate a .flow file. It contains a reference to an S3 bucket used during the Wrangling. This may be different from the one you have as a default in this notebook eg if the Wrangling was done by someone else, you will probably not have access to their bucket and you now need to point to your own S3 bucket so you can actually load the .flow file into Data Wrangler or access the data.\n", "\n", "After running the cell below you can open the `claims.flow` and `customers.flow` files and export the data to S3 or you can continue the guide using the provided `data/claims_preprocessed.csv` and `data/customers_preprocessed.csv` files." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "claims_flow_template_file = \"claims_flow_template\"\n", "\n", "with open(claims_flow_template_file, \"r\") as f:\n", " variables = {\"bucket\": bucket, \"prefix\": prefix}\n", " template = string.Template(f.read())\n", " claims_flow = template.substitute(variables)\n", " claims_flow = json.loads(claims_flow)\n", "\n", "with open(\"claims.flow\", \"w\") as f:\n", " json.dump(claims_flow, f)\n", "\n", "customers_flow_template_file = \"customers_flow_template\"\n", "\n", "with open(customers_flow_template_file, \"r\") as f:\n", " variables = {\"bucket\": bucket, \"prefix\": prefix}\n", " template = string.Template(f.read())\n", " customers_flow = template.substitute(variables)\n", " customers_flow = json.loads(customers_flow)\n", "\n", "with open(\"customers.flow\", \"w\") as f:\n", " json.dump(customers_flow, f)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "#### Upload flow to S3\n", "This will become an input to the first step and, as such, needs to be in S3." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "s3_client.upload_file(\n", " Filename=\"claims.flow\", Bucket=bucket, Key=f\"{prefix}/dataprep-notebooks/claims.flow\"\n", ")\n", "claims_flow_uri = f\"s3://{bucket}/{prefix}/dataprep-notebooks/claims.flow\"\n", "print(f\"Claims flow file uploaded to S3\")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "#### Define the first Data Wrangler step's inputs" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "with open(\"claims.flow\", \"r\") as f:\n", " claims_flow = json.load(f)\n", "\n", "flow_step_inputs = []\n", "\n", "# flow file contains the code for each transformation\n", "flow_file_input = sagemaker.processing.ProcessingInput(\n", " source=claims_flow_uri, destination=f\"{processing_dir}/flow\", input_name=\"flow\"\n", ")\n", "\n", "flow_step_inputs.append(flow_file_input)\n", "\n", "# parse the flow file for S3 inputs to Data Wranger job\n", "for node in claims_flow[\"nodes\"]:\n", " if \"dataset_definition\" in node[\"parameters\"]:\n", " data_def = node[\"parameters\"][\"dataset_definition\"]\n", " name = data_def[\"name\"]\n", " s3_input = sagemaker.processing.ProcessingInput(\n", " source=data_def[\"s3ExecutionContext\"][\"s3Uri\"],\n", " destination=f\"{processing_dir}/{name}\",\n", " input_name=name,\n", " )\n", " flow_step_inputs.append(s3_input)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "#### Define outputs for first Data Wranger step" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "claims_output_name = (\n", " f\"{claims_flow['nodes'][-1]['node_id']}.{claims_flow['nodes'][-1]['outputs'][0]['name']}\"\n", ")\n", "\n", "flow_step_outputs = []\n", "\n", "flow_output = sagemaker.processing.ProcessingOutput(\n", " output_name=claims_output_name,\n", " feature_store_output=sagemaker.processing.FeatureStoreOutput(feature_group_name=claims_fg_name),\n", " app_managed=True,\n", ")\n", "\n", "flow_step_outputs.append(flow_output)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "#### Define processor and processing step" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# You can find the proper image uri by exporting your Data Wrangler flow to a pipeline notebook\n", "# =================================\n", "from sagemaker import image_uris\n", "\n", "# Pulls the latest data-wrangler container tag, i.e. \"1.x\"\n", "# The latest tested container version was \"1.11.0\"\n", "image_uri = image_uris.retrieve(framework=\"data-wrangler\", region=region)\n", "\n", "print(\"image_uri: {}\".format(image_uri))\n", "\n", "flow_processor = sagemaker.processing.Processor(\n", " role=sagemaker_role,\n", " image_uri=image_uri,\n", " instance_count=flow_instance_count,\n", " instance_type=flow_instance_type,\n", " max_runtime_in_seconds=86400,\n", ")\n", "\n", "output_content_type = \"CSV\"\n", "\n", "# Output configuration used as processing job container arguments\n", "claims_output_config = {claims_output_name: {\"content_type\": output_content_type}}\n", "\n", "claims_flow_step = ProcessingStep(\n", " name=\"ClaimsDataWranglerProcessingStep\",\n", " processor=flow_processor,\n", " inputs=flow_step_inputs,\n", " outputs=flow_step_outputs,\n", " job_arguments=[f\"--output-config '{json.dumps(claims_output_config)}'\"],\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Step 2: Customers Data Wrangler Preprocessing Step" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "s3_client.upload_file(\n", " Filename=\"customers.flow\", Bucket=bucket, Key=f\"{prefix}/dataprep-notebooks/customers.flow\"\n", ")\n", "claims_flow_uri = f\"s3://{bucket}/{prefix}/dataprep-notebooks/customers.flow\"\n", "print(f\"Customers flow file uploaded to S3\")" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "with open(\"customers.flow\", \"r\") as f:\n", " customers_flow = json.load(f)\n", "\n", "flow_step_inputs = []\n", "\n", "# flow file contains the code for each transformation\n", "flow_file_input = sagemaker.processing.ProcessingInput(\n", " source=claims_flow_uri, destination=f\"{processing_dir}/flow\", input_name=\"flow\"\n", ")\n", "\n", "flow_step_inputs.append(flow_file_input)\n", "\n", "# parse the flow file for S3 inputs to Data Wranger job\n", "for node in customers_flow[\"nodes\"]:\n", " if \"dataset_definition\" in node[\"parameters\"]:\n", " data_def = node[\"parameters\"][\"dataset_definition\"]\n", " name = data_def[\"name\"]\n", " s3_input = sagemaker.processing.ProcessingInput(\n", " source=data_def[\"s3ExecutionContext\"][\"s3Uri\"],\n", " destination=f\"{processing_dir}/{name}\",\n", " input_name=name,\n", " )\n", " flow_step_inputs.append(s3_input)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "customers_output_name = (\n", " f\"{customers_flow['nodes'][-1]['node_id']}.{customers_flow['nodes'][-1]['outputs'][0]['name']}\"\n", ")\n", "\n", "flow_step_outputs = []\n", "\n", "flow_output = sagemaker.processing.ProcessingOutput(\n", " output_name=customers_output_name,\n", " feature_store_output=sagemaker.processing.FeatureStoreOutput(\n", " feature_group_name=customers_fg_name\n", " ),\n", " app_managed=True,\n", ")\n", "\n", "flow_step_outputs.append(flow_output)\n", "\n", "output_content_type = \"CSV\"\n", "\n", "# Output configuration used as processing job container arguments\n", "customers_output_config = {customers_output_name: {\"content_type\": output_content_type}}\n", "\n", "customers_flow_step = ProcessingStep(\n", " name=\"CustomersDataWranglerProcessingStep\",\n", " processor=flow_processor,\n", " inputs=flow_step_inputs,\n", " outputs=flow_step_outputs,\n", " job_arguments=[f\"--output-config '{json.dumps(customers_output_config)}'\"],\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Step 3: Create Dataset and Train/Test Split" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "s3_client.upload_file(\n", " Filename=\"create_dataset.py\", Bucket=bucket, Key=f\"{prefix}/code/create_dataset.py\"\n", ")\n", "\n", "create_dataset_processor = SKLearnProcessor(\n", " framework_version=\"0.23-1\",\n", " role=sagemaker_role,\n", " instance_type=\"ml.m5.xlarge\",\n", " instance_count=1,\n", " base_job_name=\"fraud-detection-demo-create-dataset\",\n", " sagemaker_session=sagemaker_session,\n", ")\n", "\n", "create_dataset_step = ProcessingStep(\n", " name=\"CreateDataset\",\n", " processor=create_dataset_processor,\n", " outputs=[\n", " sagemaker.processing.ProcessingOutput(\n", " output_name=\"train_data\", source=\"/opt/ml/processing/output/train\"\n", " ),\n", " sagemaker.processing.ProcessingOutput(\n", " output_name=\"test_data\", source=\"/opt/ml/processing/output/test\"\n", " ),\n", " ],\n", " job_arguments=[\n", " \"--claims-feature-group-name\",\n", " claims_fg_name,\n", " \"--customers-feature-group-name\",\n", " customers_fg_name,\n", " \"--bucket-name\",\n", " bucket,\n", " \"--bucket-prefix\",\n", " prefix,\n", " \"--region\",\n", " region,\n", " ],\n", " code=create_dataset_script_uri,\n", " depends_on=[claims_flow_step.name, customers_flow_step.name],\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Step 4: Train XGBoost Model\n", "In this step we use the ParameterString `train_instance_param` defined at the beginning of the pipeline.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "hyperparameters = {\n", " \"max_depth\": \"3\",\n", " \"eta\": \"0.2\",\n", " \"objective\": \"binary:logistic\",\n", " \"num_round\": \"100\",\n", "}\n", "\n", "xgb_estimator = XGBoost(\n", " entry_point=\"xgboost_starter_script.py\",\n", " output_path=training_job_output_path,\n", " code_location=training_job_output_path,\n", " hyperparameters=hyperparameters,\n", " role=sagemaker_role,\n", " instance_count=train_instance_count,\n", " instance_type=train_instance_param,\n", " framework_version=\"1.0-1\",\n", ")\n", "\n", "train_step = TrainingStep(\n", " name=\"XgboostTrain\",\n", " estimator=xgb_estimator,\n", " inputs={\n", " \"train\": sagemaker.inputs.TrainingInput(\n", " s3_data=create_dataset_step.properties.ProcessingOutputConfig.Outputs[\n", " \"train_data\"\n", " ].S3Output.S3Uri\n", " )\n", " },\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Step 5: Model Pre-Deployment Step\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "model = sagemaker.model.Model(\n", " name=\"fraud-detection-demo-pipeline-xgboost\",\n", " image_uri=train_step.properties.AlgorithmSpecification.TrainingImage,\n", " model_data=train_step.properties.ModelArtifacts.S3ModelArtifacts,\n", " sagemaker_session=sagemaker_session,\n", " role=sagemaker_role,\n", ")\n", "\n", "inputs = sagemaker.inputs.CreateModelInput(instance_type=\"ml.m4.xlarge\")\n", "\n", "create_model_step = CreateModelStep(name=\"ModelPreDeployment\", model=model, inputs=inputs)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Step 6: Run Bias Metrics with Clarify\n" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "#### Clarify configuration" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "bias_data_config = sagemaker.clarify.DataConfig(\n", " s3_data_input_path=create_dataset_step.properties.ProcessingOutputConfig.Outputs[\n", " \"train_data\"\n", " ].S3Output.S3Uri,\n", " s3_output_path=pipeline_bias_output_path,\n", " label=\"fraud\",\n", " dataset_type=\"text/csv\",\n", ")\n", "\n", "bias_config = sagemaker.clarify.BiasConfig(\n", " label_values_or_threshold=[0],\n", " facet_name=\"customer_gender_female\",\n", " facet_values_or_threshold=[1],\n", ")\n", "\n", "analysis_config = bias_data_config.get_config()\n", "analysis_config.update(bias_config.get_config())\n", "analysis_config[\"methods\"] = {\"pre_training_bias\": {\"methods\": \"all\"}}\n", "\n", "clarify_config_dir = pathlib.Path(\"config\")\n", "clarify_config_dir.mkdir(exist_ok=True)\n", "with open(clarify_config_dir / \"analysis_config.json\", \"w\") as f:\n", " json.dump(analysis_config, f)\n", "\n", "s3_client.upload_file(\n", " Filename=\"config/analysis_config.json\",\n", " Bucket=bucket,\n", " Key=f\"{prefix}/clarify-config/analysis_config.json\",\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "#### Clarify processing step" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "clarify_processor = sagemaker.processing.Processor(\n", " base_job_name=\"fraud-detection-demo-clarify-processor\",\n", " image_uri=sagemaker.clarify.image_uris.retrieve(framework=\"clarify\", region=region),\n", " role=sagemaker.get_execution_role(),\n", " instance_count=1,\n", " instance_type=\"ml.c5.xlarge\",\n", ")\n", "\n", "clarify_step = ProcessingStep(\n", " name=\"ClarifyProcessor\",\n", " processor=clarify_processor,\n", " inputs=[\n", " sagemaker.processing.ProcessingInput(\n", " input_name=\"analysis_config\",\n", " source=f\"s3://{bucket}/{prefix}/clarify-config/analysis_config.json\",\n", " destination=\"/opt/ml/processing/input/config\",\n", " ),\n", " sagemaker.processing.ProcessingInput(\n", " input_name=\"dataset\",\n", " source=create_dataset_step.properties.ProcessingOutputConfig.Outputs[\n", " \"train_data\"\n", " ].S3Output.S3Uri,\n", " destination=\"/opt/ml/processing/input/data\",\n", " ),\n", " ],\n", " outputs=[\n", " sagemaker.processing.ProcessingOutput(\n", " source=\"/opt/ml/processing/output/analysis.json\",\n", " destination=pipeline_bias_output_path,\n", " output_name=\"analysis_result\",\n", " )\n", " ],\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Step 7: Register Model\n", "In this step you will use the ParameterString `model_approval_status` defined at the outset of the pipeline code.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "mpg_name = prefix\n", "\n", "model_metrics = demo_helpers.ModelMetrics(\n", " bias=sagemaker.model_metrics.MetricsSource(\n", " s3_uri=clarify_step.properties.ProcessingOutputConfig.Outputs[\n", " \"analysis_result\"\n", " ].S3Output.S3Uri,\n", " content_type=\"application/json\",\n", " )\n", ")\n", "\n", "register_step = RegisterModel(\n", " name=\"XgboostRegisterModel\",\n", " estimator=xgb_estimator,\n", " model_data=train_step.properties.ModelArtifacts.S3ModelArtifacts,\n", " content_types=[\"text/csv\"],\n", " response_types=[\"text/csv\"],\n", " inference_instances=[\"ml.t2.medium\", \"ml.m5.xlarge\"],\n", " transform_instances=[\"ml.m5.xlarge\"],\n", " model_package_group_name=mpg_name,\n", " approval_status=model_approval_status,\n", " model_metrics=model_metrics,\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Step 8: Deploy Model" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "s3_client.upload_file(\n", " Filename=\"deploy_model.py\", Bucket=bucket, Key=f\"{prefix}/code/deploy_model.py\"\n", ")\n", "\n", "deploy_model_processor = SKLearnProcessor(\n", " framework_version=\"0.23-1\",\n", " role=sagemaker_role,\n", " instance_type=\"ml.t3.medium\",\n", " instance_count=1,\n", " base_job_name=\"fraud-detection-demo-deploy-model\",\n", " sagemaker_session=sagemaker_session,\n", ")\n", "\n", "deploy_step = ProcessingStep(\n", " name=\"DeployModel\",\n", " processor=deploy_model_processor,\n", " job_arguments=[\n", " \"--model-name\",\n", " create_model_step.properties.ModelName,\n", " \"--region\",\n", " region,\n", " \"--endpoint-instance-type\",\n", " deploy_model_instance_type,\n", " \"--endpoint-name\",\n", " \"xgboost-model-pipeline-0120\",\n", " ],\n", " code=deploy_model_script_uri,\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Step 9: Combine and Run the Pipeline Steps\n", "\n", "Though easier to reason with, the parameters and steps don't need to be in order. The pipeline DAG will parse it out properly." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pipeline_name = f\"FraudDetectDemo\"\n", "%store pipeline_name\n", "\n", "pipeline = Pipeline(\n", " name=pipeline_name,\n", " parameters=[train_instance_param, model_approval_status],\n", " steps=[\n", " claims_flow_step,\n", " customers_flow_step,\n", " create_dataset_step,\n", " train_step,\n", " create_model_step,\n", " clarify_step,\n", " register_step,\n", " deploy_step,\n", " ],\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Submit the pipeline definition to the SageMaker Pipeline service\n", "Note: If an existing pipeline has the same name it will be overwritten." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "pipeline.upsert(role_arn=sagemaker_role)" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### View the entire pipeline definition\n", "Viewing the pipeline definition will all the string variables interpolated may help debug pipeline bugs. It is commented out here due to length." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "scrolled": true }, "outputs": [], "source": [ "json.loads(pipeline.describe()[\"PipelineDefinition\"])" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "### Run the pipeline\n", "Note this will take about 23 minutes to complete. You can watch the progress of the Pipeline Job on your SageMaker Studio Components panel" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "# Special pipeline parameters can be defined or changed here\n", "parameters = {\"TrainingInstance\": \"ml.m5.xlarge\"}" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "start_response = pipeline.start(parameters=parameters)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "start_response.wait(delay=60, max_attempts=500)\n", "start_response.describe()" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "
\n", "" ] }, { "attachments": { "image.png": { "image/png": "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" } }, "cell_type": "markdown", "metadata": {}, "source": [ "###after completion it will look something like this\n", "" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Clean Up\n", "----\n", "After running the demo, you should remove the resources which were created. You can also delete all the objects in the project's S3 directory by passing the keyword argument `delete_s3_objects=True`." ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "from demo_helpers import delete_project_resources" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "delete_project_resources(\n", " sagemaker_boto_client=sagemaker_boto_client,\n", " pipeline_name=pipeline_name,\n", " mpg_name=mpg_name,\n", " prefix=prefix,\n", " delete_s3_objects=False,\n", " bucket_name=bucket,\n", ")" ] }, { "attachments": {}, "cell_type": "markdown", "metadata": {}, "source": [ "## Notebook CI Test Results\n", "\n", "This notebook was tested in multiple regions. The test results are as follows, except for us-west-2 which is shown at the top of the notebook.\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n", "\n" ] } ], "metadata": { "availableInstances": [ { "_defaultOrder": 0, "_isFastLaunch": true, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 4, "name": "ml.t3.medium", "vcpuNum": 2 }, { "_defaultOrder": 1, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 8, "name": "ml.t3.large", "vcpuNum": 2 }, { "_defaultOrder": 2, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.t3.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 3, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.t3.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 4, "_isFastLaunch": true, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 8, "name": "ml.m5.large", "vcpuNum": 2 }, { "_defaultOrder": 5, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.m5.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 6, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.m5.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 7, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.m5.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 8, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.m5.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 9, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.m5.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 10, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.m5.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 11, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 384, "name": "ml.m5.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 12, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 8, "name": "ml.m5d.large", "vcpuNum": 2 }, { "_defaultOrder": 13, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.m5d.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 14, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.m5d.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 15, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.m5d.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 16, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.m5d.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 17, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.m5d.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 18, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.m5d.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 19, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 384, "name": "ml.m5d.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 20, "_isFastLaunch": false, "category": "General purpose", "gpuNum": 0, "hideHardwareSpecs": true, "memoryGiB": 0, "name": "ml.geospatial.interactive", "supportedImageNames": [ "sagemaker-geospatial-v1-0" ], "vcpuNum": 0 }, { "_defaultOrder": 21, "_isFastLaunch": true, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 4, "name": "ml.c5.large", "vcpuNum": 2 }, { "_defaultOrder": 22, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 8, "name": "ml.c5.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 23, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.c5.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 24, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.c5.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 25, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 72, "name": "ml.c5.9xlarge", "vcpuNum": 36 }, { "_defaultOrder": 26, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 96, "name": "ml.c5.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 27, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 144, "name": "ml.c5.18xlarge", "vcpuNum": 72 }, { "_defaultOrder": 28, "_isFastLaunch": false, "category": "Compute optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.c5.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 29, "_isFastLaunch": true, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.g4dn.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 30, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.g4dn.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 31, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.g4dn.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 32, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.g4dn.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 33, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 4, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.g4dn.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 34, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.g4dn.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 35, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 61, "name": "ml.p3.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 36, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 4, "hideHardwareSpecs": false, "memoryGiB": 244, "name": "ml.p3.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 37, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 488, "name": "ml.p3.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 38, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 768, "name": "ml.p3dn.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 39, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.r5.large", "vcpuNum": 2 }, { "_defaultOrder": 40, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.r5.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 41, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.r5.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 42, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.r5.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 43, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.r5.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 44, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 384, "name": "ml.r5.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 45, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 512, "name": "ml.r5.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 46, "_isFastLaunch": false, "category": "Memory Optimized", "gpuNum": 0, "hideHardwareSpecs": false, "memoryGiB": 768, "name": "ml.r5.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 47, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 16, "name": "ml.g5.xlarge", "vcpuNum": 4 }, { "_defaultOrder": 48, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 32, "name": "ml.g5.2xlarge", "vcpuNum": 8 }, { "_defaultOrder": 49, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 64, "name": "ml.g5.4xlarge", "vcpuNum": 16 }, { "_defaultOrder": 50, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 128, "name": "ml.g5.8xlarge", "vcpuNum": 32 }, { "_defaultOrder": 51, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 1, "hideHardwareSpecs": false, "memoryGiB": 256, "name": "ml.g5.16xlarge", "vcpuNum": 64 }, { "_defaultOrder": 52, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 4, "hideHardwareSpecs": false, "memoryGiB": 192, "name": "ml.g5.12xlarge", "vcpuNum": 48 }, { "_defaultOrder": 53, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 4, "hideHardwareSpecs": false, "memoryGiB": 384, "name": "ml.g5.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 54, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 768, "name": "ml.g5.48xlarge", "vcpuNum": 192 }, { "_defaultOrder": 55, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 1152, "name": "ml.p4d.24xlarge", "vcpuNum": 96 }, { "_defaultOrder": 56, "_isFastLaunch": false, "category": "Accelerated computing", "gpuNum": 8, "hideHardwareSpecs": false, "memoryGiB": 1152, "name": "ml.p4de.24xlarge", "vcpuNum": 96 } ], "kernelspec": { "display_name": "Python 3 (Data Science 3.0)", "language": "python", "name": "python3__SAGEMAKER_INTERNAL__arn:aws:sagemaker:us-west-2:236514542706:image/sagemaker-data-science-310-v1" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.6" } }, "nbformat": 4, "nbformat_minor": 4 }