開始使用 Amazon RedShift ML - Amazon Redshift

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

開始使用 Amazon RedShift ML

Amazon Redshift ML 可讓 SQL 使用者使用熟悉的 SQL 命令輕鬆建立、訓練和部署機器學習模型。使用 Amazon Redshift ML,您可以使用 Redshift 叢集中的資料,透過 Amazon SageMaker AI 訓練模型。之後,這些模型會經過本地化,並且可以在 Amazon Redshift 資料庫中進行預測。Amazon Redshift ML 目前支援機器學習演算法:XGBoost (AUTO ON 和 OFF) 和多層感知器 (AUTO ON)、K 平均值 (AUTO OFF) 和線性學習器。

針對 Amazon Redshift ML 管理進行叢集和組態設定

在您使用 Amazon Redshift ML 之前,請先完成叢集設定並設定使用 Amazon Redshift ML 的許可。

使用 Amazon Redshift ML 的叢集設定

使用 Amazon Redshift ML 之前,請先完成以下先決條件。

身為 Amazon Redshift 管理員,請針對使用 Amazon Redshift 佈建叢集執行下列一次性設定。如需將 Amazon Redshift ML 與 Amazon Redshift Serverless 搭配使用,請參閱 Amazon Redshift Serverless 入門

若要為 Amazon Redshift ML 執行一次性叢集設定

  1. 使用 AWS Management Console 或 AWS Command Line Interface () 建立 Redshift 叢集AWS CLI。請務必在建立叢集時連接 AWS Identity and Access Management (IAM) 政策。如需將 Amazon Redshift ML 與 Amazon SageMaker AI 搭配使用所需的許可的詳細資訊,請參閱使用 Amazon Redshift Machine Learning (ML) 所需的許可

  2. 使用下列其中一個方法,建立使用 Amazon Redshift ML 所需的 IAM 角色:

    • 若要搭配 Amazon Redshift ML 使用 SageMaker AI,請使用 AmazonS3FullAccessAmazonSageMakerFullAccess政策建立 IAM 角色。如果您打算同時建立預測模型,也可以將 AmazonForecastFullAccess 政策附加至您的角色。

    • 若要搭配 Amazon Redshift ML 使用 Amazon Bedrock,請使用 AmazonS3FullAccessAmazonBedrockFullAccess政策建立 IAM 角色。

    • 我們建議您透過 Amazon Redshift 主控台建立 IAM 角色,其具有有權執行 SQL 命令 (例如 CREATE MODEL) 的 AmazonRedshiftAllCommandsFullAccess 政策。Amazon Redshift 使用無縫 API 型機制,以程式設計方式 AWS 帳戶 代表您在 中建立 IAM 角色。Amazon Redshift 會自動將現有的 AWS 受管政策連接至 IAM 角色。此方法意味著您可以保留在 Amazon Redshift 主控台內,而不必切換到 IAM 主控台來建立角色。如需詳細資訊,請參閱建立 IAM 角色做為 Amazon Redshift 的預設值

      當 IAM 角色建立為叢集的預設值時,請加入 redshift 做為資源名稱的一部分,或使用 RedShift 專屬標籤來標記這些資源。

      如果您的叢集已開啟增強型 Amazon VPC 路由,您可以使用透過 Amazon Redshift 主控台建立的 IAM 角色。此 IAM 角色已附加 AmazonRedshiftAllCommandsFullAccess 政策,並將以下許可新增到政策中。這些額外許可會允許 Amazon Redshift 建立和刪除您帳戶中的彈性網絡介面 (ENI),並將其附加到 Amazon EC2 或 Amazon ECS 上執行的編譯工作。如此一來,Amazon S3 儲存貯體中的物件只能從虛擬私有雲端 (VPC) 內存取,而網際網路存取會遭到封鎖。

      { "Effect": "Allow", "Action": [ "ec2:DescribeVpcEndpoints", "ec2:DescribeDhcpOptions", "ec2:DescribeVpcs", "ec2:DescribeSubnets", "ec2:DescribeSecurityGroups", "ec2:DescribeNetworkInterfaces", "ec2:DeleteNetworkInterfacePermission", "ec2:DeleteNetworkInterface", "ec2:CreateNetworkInterfacePermission", "ec2:CreateNetworkInterface", "ec2:ModifyNetworkInterfaceAttribute" ], "Resource": "*" }

      若要使用 Amazon Bedrock 基礎模型,請新增下列區段:

      // Required section if you use Bedrock models. { "Effect": "Allow", "Action": "bedrock:InvokeModel", "Resource": [ "arn:aws:bedrock:<region>::foundation-model/*" ] }
    • 如果您想要建立具有更嚴格政策的 IAM 角色,您可以使用以下政策。您也可以修改此政策以因應您的需求。

      Amazon S3 儲存貯體 redshift-downloads/redshift-ml/ 是用於其他步驟和範例之範例資料的儲存所在位置。如果您不需要從 Amazon S3 載入資料,則可以將其移除。或者,也可以將其取代為您用來將資料載入 Amazon Redshift 的其他 Amazon S3 儲存貯體。

      your-account-idyour-roleamzn-s3-demo-bucket 值是您在 CREATE MODEL 命令中指定的值。

      (選用) 如果您在使用 Amazon Redshift ML 時指定 AWS KMS 金鑰,請使用範例政策的 AWS KMS 金鑰區段。your-kms-key 值是您用來作為 CREATE MODEL 命令一部分的金鑰。

      { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "cloudwatch:PutMetricData", "ecr:BatchCheckLayerAvailability", "ecr:BatchGetImage", "ecr:GetAuthorizationToken", "ecr:GetDownloadUrlForLayer", "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents", "sagemaker:*Job*", "sagemaker:AddTags", "sagemaker:CreateModel", "sagemaker:CreateEndpoint", "sagemaker:CreateEndpointConfig", "sagemaker:DeleteEndpoint", "sagemaker:DeleteEndpointConfig, "sagemaker:DeleteModel" ], "Resource": "*" }, { "Effect": "Allow", "Action": [ "iam:PassRole", "s3:AbortMultipartUpload", "s3:GetObject", "s3:DeleteObject", "s3:PutObject" ], "Resource": [ "arn:aws:iam::<your-account-id>:role/<your-role>", "arn:aws:s3:::amzn-s3-demo-bucket/*", "arn:aws:s3:::redshift-downloads/*" ] }, { "Effect": "Allow", "Action": [ "s3:GetBucketLocation", "s3:ListBucket" ], "Resource": [ "arn:aws:s3:::amzn-s3-demo-bucket, "arn:aws:s3:::redshift-downloads" ] } // Optional section needed if you use AWS KMS keys. ,{ "Effect": "Allow", "Action": [ "kms:CreateGrant", "kms:Decrypt", "kms:DescribeKey", "kms:Encrypt", "kms:GenerateDataKey*" ], "Resource": [ "arn:aws:kms:<your-region>:<your-account-id>:key/<your-kms-key>" ] } ] }
  3. 若要允許 Amazon Redshift 和 SageMaker AI 擔任角色以與其他 服務互動,請將下列信任政策新增至 IAM 角色。

    { "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Principal": { "Service": [ "redshift.amazonaws.com", "sagemaker.amazonaws.com", "forecast.amazonaws.com" ] }, "Action": "sts:AssumeRole" } ] }
  4. (選用) 建立 Amazon S3 儲存貯體和 AWS KMS 金鑰。這些可讓 Amazon Redshift 用來存放傳送至 Amazon SageMaker AI 的訓練資料,並從 Amazon SageMaker AI 接收訓練模型。

  5. (選擇性) 建立 IAM 角色和 Amazon S3 儲存貯體的不同組合,以控制對不同使用者群組的存取。

  6. (選用) 當您開啟 Redshift 叢集的 VPC 路由時,請為 Redshift 叢集所在的 VPC 建立 Amazon S3 端點和 SageMaker AI 端點。這樣做可在 CREATE MODEL 期間,讓服務之間的流量通過您的 VPC。如需 VPC 路由的相關資訊,請參閱 Amazon Redshift 中的增強型 VPC 路由

    如需為超參數調校任務指定私有 VPC 所需許可的詳細資訊,請參閱搭配使用 Amazon Redshift ML 與 Amazon SageMaker AI 所需的許可

如需有關如何使用 CREATE MODEL 陳述式開始針對不同使用案例建立模型的資訊,請參閱 CREATE MODEL

管理許可和擁有權

就像其他資料庫物件 (例如資料表或函數) 一樣,Amazon Redshift 會繫結建立和使用機器學習模型來存取控制機制。建立執行預測函數的模型有不同的許可。

下列範例使用兩個使用者群組 retention_analyst_grp (模型建立者) 和 marketing_analyst_grp (模型使用者) 來說明 Amazon Redshift 如何管理存取控制。保留分析師會建立機器學習模型,讓其他一組使用者可透過取得的許可使用這些模型。

超級使用者可以使用下列陳述式 GRANT (授予) USER 或 GROUP 許可,以建立機器學習模型。

GRANT CREATE MODEL TO GROUP retention_analyst_grp;

如果使用者擁有 SCHEMA 的一般 CREATE 許可,則具有此許可的使用者或群組可以在叢集中的任何結構描述中建立模型。機器學習模型是結構描述階層的一部分,與資料表、檢視表、程序和使用者定義函數類似。

假設結構描述 demo_ml 已存在,請依照下列方式授予兩個使用者群組結構描述上的許可。

GRANT CREATE, USAGE ON SCHEMA demo_ml TO GROUP retention_analyst_grp;
GRANT USAGE ON SCHEMA demo_ml TO GROUP marketing_analyst_grp;

若要讓其他使用者使用您的機器學習推論功能,請授予 EXECUTE 權限。下列範例會使用 EXECUTE 權限,將使用模型的許可授予 marketing_analyst_grp GROUP。

GRANT EXECUTE ON MODEL demo_ml.customer_churn_auto_model TO GROUP marketing_analyst_grp;

搭配 CREATE MODEL 和 EXECUTE 使用 REVERSE 陳述式,可撤銷使用者或群組的這些許可。如需許可控制命令的相關資訊,請參閱 GRANTREVOKE

使用模型可解釋性與 Amazon Redshift ML

透過 Amazon Redshift ML 中的模型可解釋性,您可以使用特徵重要性值,協助您了解訓練資料中的每個屬性如何影響預測結果。

模型可解釋性可以解釋模型進行的預測,以協助改善您的機器學習 (ML) 模型。模型可解釋性可幫助解釋這些模型如何使用特徵歸因方法進行預測。

Amazon Redshift ML 整合了模型可解釋性,為 Amazon Redshift ML 使用者提供模型解釋功能。如需模型可解釋性的詳細資訊,請參閱《Amazon SageMaker AI 開發人員指南》中的Machine Learning預測的公平性和模型可解釋性是什麼?

模型解釋性還可監控模型在生產環境中為特徵屬性漂移所做的推論。它還提供了一些工具來幫助您生成模型治理報告,您可以使用這些報告告知風險和合規團隊以及外部監管機構。

當您在使用 CREATE MODEL 陳述式時指定 AUTO ON 或 AUTO OFF 選項時,在模型訓練任務完成後,SageMaker AI 會建立解釋輸出。您可以使用 EXPLAIIN_MODEL 函數來查詢 JSON 格式的解釋性報告。如需詳細資訊,請參閱機器學習函數

Amazon Redshift ML 概率指標

在監督式學習問題中,類別標籤是使用輸入資料的預測結果。例如,如果您使用模型來預測客戶是否會重新訂閱串流服務,則可能的標籤是很可能和不太可能。Redshift ML 會提供概率指標的功能,可為每個標籤指派概率以指出其可能性。這可以幫助您根據預測的結果做出更明智的決策。在 Amazon Redshift ML 中,建立具有二進制分類或多類別分類問題類型的 AUTO ON 模型時,都可以使用概率指標。如果您省略 AUTO ON 參數,Redshift ML 會假設模型應具有 AUTO ON。

建立模型

建立模型時,Amazon Redshift 會自動偵測模型類型和問題類型。如果是分類問題,Redshift 會自動建立第二個推論函數,您可以使用該函數輸出相對於每個標籤的機率。第二個推論函數的名稱是您指定的推論函數名稱接著字串 _probabilities。例如,如果您將推論函數命名為 customer_churn_predict,則第二個推論函數的名稱為 customer_churn_predict_probabilities。然後,您可以查詢此函數以獲取每個標籤的概率。

CREATE MODEL customer_churn_model FROM customer_activity PROBLEM_TYPE BINARY_CLASSIFICATION TARGET churn FUNCTION customer_churn_predict IAM_ROLE {default} AUTO ON SETTINGS ( S3_BUCKET 'amzn-s3-demo-bucket'

獲取概率

一旦概率函數準備就緒,執行命令會傳回一個 SUPER 類型,其中包含傳回的概率陣列及其相關標籤。例如,結果 "probabilities" : [0.7, 0.3], "labels" : ["False.", "True."] 表示 False 標籤的概率為 0.7,而 True 標籤的概率為 0.3。

SELECT customer_churn_predict_probabilities(Account_length, Area_code, VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, Intl_charge, Cust_serv_calls) FROM customer_activity; customer_churn_predict_probabilities -------------------- {"probabilities" : [0.7, 0.3], "labels" : ["False.", "True."]} {"probabilities" : [0.8, 0.2], "labels" : ["False.", "True."]} {"probabilities" : [0.75, 0.25], "labels" : ["True.", "False"]}

概率和標籤陣列一律會按其概率降序排序。您可以撰寫查詢,只傳回具有最高概率的預測標籤,方法是將 SUPER 傳回概率函數結果解除巢狀結構。

SELECT prediction.labels[0], prediction.probabilities[0] FROM (SELECT customer_churn_predict_probabilities(Account_length, Area_code, VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, Intl_charge, Cust_serv_calls) AS prediction FROM customer_activity); labels | probabilities -----------+-------------- "False." | 0.7 "False." | 0.8 "True." | 0.75

為了使查詢更簡單,您可以將預測函數的結果儲存在資料表中。

CREATE TABLE churn_auto_predict_probabilities AS (SELECT customer_churn_predict_probabilities(Account_length, Area_code, VMail_message, Day_mins, Day_calls, Day_charge,Eve_mins, Eve_calls, Eve_charge, Night_mins, Night_calls, Night_charge,Intl_mins, Intl_calls, Intl_charge, Cust_serv_calls) AS prediction FROM customer_activity);

您可以查詢含有結果的資料表,以僅傳回概率高於 0.7 的預測。

SELECT prediction.labels[0], prediction.probabilities[0] FROM churn_auto_predict_probabilities WHERE prediction.probabilities[0] > 0.7; labels | probabilities -----------+-------------- "False." | 0.8 "True." | 0.75

使用索引符號,你可以得到特定標籤的概率。下列範例會傳回所有 True. 標籤的概率。

SELECT label, index, p.prediction.probabilities[index] FROM churn_auto_predict_probabilities p, p.prediction.labels AS label AT index WHERE label='True.'; label | index | probabilities ---------+-------+--------------- "True." | 0 | 0.3 "True." | 0 | 0.2 "True." | 0 | 0.75

下列範例會傳回所有具有 True. 標籤且概率大於 0.7 的資料列,這表示客戶可能流失。

SELECT prediction.labels[0], prediction.probabilities[0] FROM churn_auto_predict_probabilities WHERE prediction.probabilities[0] > 0.7 AND prediction.labels[0] = "True."; labels | probabilities -----------+-------------- "True." | 0.75