將 Amazon Aurora Machine Learning 與 Aurora PostgreSQL 搭配使用 - Amazon Aurora

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

將 Amazon Aurora Machine Learning 與 Aurora PostgreSQL 搭配使用

透過搭配 Aurora PostgreSQL 資料庫叢集使用 Amazon Aurora 機器學習,您可以根據自己的需求使用 Amazon SageMaker 或 Amazon 基岩。這些服務各支援特定的機器學習使用案例。

僅在特定版本的 Aurora PostgreSQL 中支援 Aurora 機器學習。 AWS 區域 在嘗試設定 Aurora Machine Learning 之前,請先檢查 Aurora PostgreSQL 版本和區域的可用性。如需詳細資訊,請參閱 將機器學習與 Aurora PostgreSQL 搭配使用

將 Aurora Machine Learning 與 Aurora PostgreSQL 搭配使用的建議

AWS 機器學習服務是在自己的生產環境中設定和執行的受管理服務。Aurora 機器學習支援與 Amazon Comprehend 和 Amazon 基岩整合。 SageMaker在嘗試設定 Aurora PostgreSQL 資料庫叢集以使用 Aurora Machine Learning 之前,請務必了解下列要求和先決條件。

  • Amazon Comprehend 岩和 Amazon 基岩服務必須在與您的 Aurora PostgreSQL 資料庫叢集中執行 AWS 區域 相同。 SageMaker您無法從不同區 Amazon Comprehend Aurora PostgreSQL 資料庫叢集使用 Amazon 基岩 SageMaker 或亞馬遜基岩服務。

  • 如果您的 Aurora PostgreSQL 資料庫叢集位於以 Amazon VPC 服務為基礎的虛擬公用雲端 (VPC) 中,則 VPC 的安全性群組需要允許對目標 Aurora 機器學習 SageMaker 服務的輸出連線。如需詳細資訊,請參閱 啟用從 Amazon Aurora MySQL 至其他 AWS 服務的網路通訊

  • 對於 SageMaker,您要用於推論的機器學習元件必須設定並準備好使用。在 Aurora PostgreSQL 資料庫叢集的組態程序期間,您需要讓端點的 Amazon 資源名稱 (ARN) 可用。 SageMaker您團隊中的數據科學家可能最能夠處理準備模型並處理其他此類任務的工作。 SageMaker 要開始使用 Amazon SageMaker,請參閱 Amazon 入門 SageMaker。如需推論和端點的詳細資訊,請參閱即時推論

  • 對於 Amazon 基岩,您需要擁有要用於推論的基岩模型的模型 ID,以便在 Aurora PostgreSQL 資料庫叢集的組態程序期間使用這些基岩模型。您團隊中的數據科學家可能最能與基岩合作來決定使用哪些模型,如果需要對其進行微調並處理其他此類任務。要開始使用 Amazon 基岩,請參閱如何設置基岩。

  • Amazon Bedrock 使用者必須先要求模型存取權,才能使用模型。如果您想要新增用於文字、聊天和影像產生的其他模型,則需要請求存取 Amazon Bedrock 中的模型。如需詳細資訊,請參閱模型存取

Aurora Machine Learning 搭配 Aurora PostgreSQL 支援的功能和限制

Aurora 機器學習支援任何可透過值讀取和寫入逗號分隔值 (CSV) 格式的 SageMaker ContentTypetext/csv端點。目前接受此格式的內建 SageMaker 演算法如下。

將 Amazon 基岩與 Aurora 機器學習搭配使用時,適用下列限制:

  • 使用者定義函數 (UDF) 提供與 Amazon 基岩互動的原生方式。UDF 沒有特定的要求或回應需求,因此它們可以使用任何模型。

  • 您可以使用 UDF 來建立任何所需的工作流程。例如,您可以結合基本原語,例如執行pg_cron查詢、擷取資料、產生推論,以及寫入資料表以直接提供查詢。

  • UDF 不支援批次或 parallel 呼叫。

  • Aurora Machine Learning 擴充功能不支援向量介面。作為擴展的一部分,函數可用於以float8[]格式輸出模型響應的嵌入,以將這些嵌入存儲在 Aurora 中。如需使用方式的詳細資訊float8[],請參閱將 Amazon 基岩與您的 Aurora PostgreSQL 資料庫叢集搭配使用

設定 Aurora PostgreSQL 資料庫叢集來使用 Aurora Machine Learning

若要讓 Aurora 機器學習能夠與 Aurora PostgreSQL 資料庫叢集搭配使用,您需要為每個要使用的服務建立 AWS Identity and Access Management (IAM) 角色。IAM 角色可讓您的 Aurora PostgreSQL 資料庫叢集代表叢集使用 Aurora Machine Learning 服務。您也需要安裝 Aurora Machine Learning 延伸模組。在下列主題中,您可以找到其中每個 Aurora Machine Learning 服務的設定程序。

設置 Aurora 使用 Amazon 基岩

在以下程序中,您首先建立 IAM 角色和政策,以授予 Aurora PostgreSQL 許可以代表叢集使用 Amazon 基岩。然後,您可以將該政策附加到您的 Aurora PostgreSQL 資料庫叢集用來與 Amazon 基岩搭配使用的 IAM 角色。為了簡單起見,此程序使用 AWS Management Console 來完成所有任務。

若要設定您的 Aurora PostgreSQL 資料庫叢集以使用 Amazon 基岩
  1. 登入 AWS Management Console 並開啟身分與存取權管理主控台,網址為 https://console.aws.amazon.com/iam/

  2. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

  3. 在 (IAM) 主控台功能表上選擇政策 AWS Identity and Access Management (在「存取管理」下)。

    1. 選擇建立政策。在 [視覺化編輯器] 頁面中,選擇 [服務],然後在 [選取服務] 欄位中輸入基岩。展開讀取存取層級。InvokeModel從 Amazon 基岩讀取設置中進行選擇。

    2. 選擇您要透過原則授與讀取存取權限的「基礎/佈建」模型。

      建立用於 Amazon 基岩的 IAM 政策。
  4. 選擇 Next: Tags (下一步:標籤) 並定義任何標籤 (這是選用的)。選擇下一步:檢閱。輸入政策的名稱和描述,如圖所示。

    建立 IAM 角色以用於 Amazon 基岩的政策。
  5. 選擇建立政策。儲存策略後,主控台即會顯示警示。您可以在政策清單中找到它。

  6. 在 IAM 主控台功能表上選擇 Roles (角色) (在 Access management (存取管理) 之下)。

  7. 選擇建立角色

  8. 在 Select trusted entity (選取信任的實體) 頁面上,選擇 AWS service (AWS 服務) 磚,然後選擇 RDS 以開啟選擇器。

  9. 選擇 RDS – Add Role to Database (RDS - 將角色新增至資料庫)。

    為 Aurora PostgreSQL 建立與 Amazon 基岩搭配使用的角色。
  10. 選擇下一步。在 Add permissions (新增許可) 頁面上,尋找您已在先前步驟中建立的政策,並從列出的政策之中進行選擇。選擇下一步

  11. Next: Review (下一步:檢閱)。輸入 IAM 角色的名稱和描述。

  12. 前往 https://console.aws.amazon.com/rds/,開啟 Amazon RDS 主控台。

  13. 導覽至您的 Aurora PostgreSQL 資料庫叢集所 AWS 區域 在的位置。

  14. 在瀏覽窗格中,選擇 [資料庫],然後選擇您要與基岩搭配使用的 Aurora PostgreSQL 資料庫叢集。

  15. 選擇 Connectivity & security (連線和安全) 索引標籤,並捲動至頁面的 Manage IAM roles (管理 IAM 角色) 區段。從 Add IAM roles to this cluster (將 IAM 角色新增至此叢集) 選擇器中,選擇您已在先前步驟中建立的角色。在功能選取器中,選擇「基岩」,然後選擇「新增角色」。

角色 (及其政策) 即會與 Aurora PostgreSQL 資料庫叢集相關聯。程序完成時,角色會列示在此叢集清單的目前 AM 角色中,如下所示。

Amazon 基岩角色已新增至 Aurora PostgreSQL 資料庫叢集,現在處於作用中狀態。

Amazon 基岩的 IAM 設置已完成。透過安裝延伸模組,繼續設定 Aurora PostgreSQL 以使用 Aurora Machine Learning,如安裝 Aurora Machine Learning 延伸模組中所述

設定 Aurora PostgreSQL 來使用 Amazon Comprehend

在以下程序中,您首先建立 IAM 角色和政策,授與 Aurora PostgreSQL 許可來代表叢集使用 Amazon Comprehend。然後,您可以將該政策附加到 Aurora PostgreSQL 資料庫叢集用來使用 Amazon Comprehend 的 IAM 角色,為了簡單起見,此程序會使用 AWS Management Console 來完成所有任務。

設定您的 Aurora PostgreSQL 資料庫叢集來使用 Amazon Comprehend
  1. 登入 AWS Management Console 並開啟身分與存取權管理主控台,網址為 https://console.aws.amazon.com/iam/

  2. 前往 https://console.aws.amazon.com/iam/ 開啟 IAM 主控台。

  3. 在 (IAM) 主控台功能表上選擇政策 AWS Identity and Access Management (在「存取管理」下)。

    建立要用於 Amazon Comprehend 的 IAM 政策
  4. 選擇建立政策。在視覺化編輯器頁面中,選擇 Service (服務),然後在 Select a service (選取服務) 欄位中輸入 Comprehend。展開讀取存取層級。DetectSentiment從 Amazon Comprehend 讀取設置中進行選BatchDetectSentiment擇。

  5. 選擇 Next: Tags (下一步:標籤) 並定義任何標籤 (這是選用的)。選擇下一步:檢閱。輸入政策的名稱和描述,如圖所示。

    建立將 IAM 角色用於 Amazon Comprehend 的政策。
  6. 選擇建立政策。儲存策略後,主控台即會顯示警示。您可以在政策清單中找到它。

  7. 在 IAM 主控台功能表上選擇 Roles (角色) (在 Access management (存取管理) 之下)。

  8. 選擇建立角色

  9. 在 Select trusted entity (選取信任的實體) 頁面上,選擇 AWS service (AWS 服務) 磚,然後選擇 RDS 以開啟選擇器。

  10. 選擇 RDS – Add Role to Database (RDS - 將角色新增至資料庫)。

    為 Aurora PostgreSQL 建立角色來使用 Amazon Comprehend。
  11. 選擇下一步。在 Add permissions (新增許可) 頁面上,尋找您已在先前步驟中建立的政策,並從列出的政策之中進行選擇。選擇 Next (下一步)

  12. Next: Review (下一步:檢閱)。輸入 IAM 角色的名稱和描述。

  13. 前往 https://console.aws.amazon.com/rds/,開啟 Amazon RDS 主控台。

  14. 導覽至您的 Aurora PostgreSQL 資料庫叢集所 AWS 區域 在的位置。

  15. 在導覽窗格中選擇 Databases (資料庫),然後選擇您要與 Amazon Comprehend 搭配使用的 Aurora PostgreSQL 資料庫叢集。

  16. 選擇 Connectivity & security (連線和安全) 索引標籤,並捲動至頁面的 Manage IAM roles (管理 IAM 角色) 區段。從 Add IAM roles to this cluster (將 IAM 角色新增至此叢集) 選擇器中,選擇您已在先前步驟中建立的角色。在功能選取器中,選擇 Comprehend,然後選擇新增角色。

角色 (及其政策) 即會與 Aurora PostgreSQL 資料庫叢集相關聯。程序完成時,角色會列示在此叢集清單的目前 AM 角色中,如下所示。

Amazon Comprehend 的角色已新增至 Aurora PostgreSQL 資料庫叢集,而且現在處於作用中狀態。

Amazon Comprehend 的 IAM 設定已完成。透過安裝延伸模組,繼續設定 Aurora PostgreSQL 以使用 Aurora Machine Learning,如安裝 Aurora Machine Learning 延伸模組中所述

設置 Aurora 使用 Amazon SageMaker

在為 Aurora PostgreSQL 資料庫叢集建立 IAM 政策和角色之前,您必須先提供 SageMaker 模型設定和端點。

若要設定要使用的 Aurora 資料庫叢集 SageMaker
  1. 登入 AWS Management Console 並開啟身分與存取權管理主控台,網址為 https://console.aws.amazon.com/iam/

  2. 在 (IAM) 主控台功能表上選擇 [政策] AWS Identity and Access Management (在 [存取管理] 下),然後選擇 [建立政策]。在可視化編輯器中,SageMaker選擇服務。對於 [動作],開啟 [讀取] 選取器 (在 [存取層級] 下方) 並選擇InvokeEndpoint。當執行此操作時,會顯示警告圖示。

  3. 開啟 [資源] 選取器,然後選擇 [新增 ARN] 以限制動作的 [指定端點資源 ARN] 下的存取連結。 InvokeEndpoint

  4. 輸入您 AWS 區域 的 SageMaker 資源和端點的名稱。您的 AWS 帳戶已預先填寫。

    為 IAM 政策的端點指定 ARN。
  5. 選擇 Add (新增) 以儲存。選擇 Next: Tags (下一步:標籤) 和 Next: Review (下一步:檢閱),以移至原則建立程序的最後一頁。

  6. 輸入此政策的名稱和描述,然後選擇 Create policy (建立政策)。即時會建立策略,並將其新增至政策清單。發生這種情況時,您會在主控台中看到警示。

  7. 在 IAM 主控台上,選擇 Roles (角色)。

  8. 選擇建立角色

  9. 在 Select trusted entity (選取信任的實體) 頁面上,選擇 AWS service (AWS 服務) 磚,然後選擇 RDS 以開啟選擇器。

  10. 選擇 RDS – Add Role to Database (RDS - 將角色新增至資料庫)。

  11. 選擇下一步。在 Add permissions (新增許可) 頁面上,尋找您已在先前步驟中建立的政策,並從列出的政策之中進行選擇。選擇 Next (下一步)

  12. Next: Review (下一步:檢閱)。輸入 IAM 角色的名稱和描述。

  13. 前往 https://console.aws.amazon.com/rds/,開啟 Amazon RDS 主控台。

  14. 導覽至您的 Aurora PostgreSQL 資料庫叢集所 AWS 區域 在的位置。

  15. 在瀏覽窗格中,選擇 [資料庫],然後選擇您要搭配使用的 Aurora PostgreSQL 資料庫叢集。 SageMaker

  16. 選擇 Connectivity & security (連線和安全) 索引標籤,並捲動至頁面的 Manage IAM roles (管理 IAM 角色) 區段。從 Add IAM roles to this cluster (將 IAM 角色新增至此叢集) 選擇器中,選擇您已在先前步驟中建立的角色。在功能選取器中,選擇 SageMaker,然後選擇 [新增角色]。

角色 (及其政策) 即會與 Aurora PostgreSQL 資料庫叢集相關聯。程序完成時,角色會列示在此叢集清單的目前 AM 角色中。

的 IAM 設定 SageMaker 已完成。透過安裝延伸模組,繼續設定 Aurora PostgreSQL 以使用 Aurora Machine Learning,如安裝 Aurora Machine Learning 延伸模組中所述。

設定 Aurora 以使用 Amazon S3 SageMaker (進階)

若要 SageMaker 搭配您自己的模型使用,而不是使用提供的預先建置元件 SageMaker,您需要為 Aurora PostgreSQL 資料庫叢集設定 Amazon 簡易儲存服務 (Amazon S3) 儲存貯體才能使用。這是進階主題,並未在此《Amazon Aurora 使用者指南》中完整記載。一般程序與整合支援的程序相同 SageMaker,如下所示。

  1. 為 Amazon S3 建立 IAM 政策和角色。

  2. 在 Aurora PostgreSQL 資料庫叢集的 Connectivity & security (連線和安全) 索引標籤上,新增 IAM 角色和 Amazon S3 匯入或匯出做為功能。

  3. 將角色的 ARN 新增至 Aurora 資料庫叢集的自訂資料庫叢集參數群組。

如需基本使用方式的資訊,請參閱 將資料匯出到 Amazon S3 進行 SageMaker 模型訓練 (進階)

安裝 Aurora Machine Learning 延伸模組

Aurora 機器學習延伸模組aws_ml 1.0提供兩個功能,您可以用來叫用 Amazon Comprehend SageMaker 服務,並aws_ml 2.0提供兩個額外的功能,讓您用來叫用 Amazon 基岩服務。在 Aurora PostgreSQL 資料庫叢集上安裝這些擴充功能也會建立該功能的管理角色。

注意

使用這些功能取決於 Aurora 機器學習服務 (Amazon Comprehend、Amazon 基岩) 的 IAM 設定完成 SageMaker,如中所述。設定 Aurora PostgreSQL 資料庫叢集來使用 Aurora Machine Learning

  • aws_comprehend.detect_sentiment – 您可以使用此函數,將情緒分析套用至存放在 Aurora PostgreSQL 資料庫叢集上資料庫中的文字。

  • aws_sagemaker.invoke 端點 — 您可以在 SQL 程式碼中使用此函數與叢集中的端點進行通訊。 SageMaker

  • aws_bedrock.invoke_model — 您可以在 SQL 程式碼中使用此函式,與叢集中的基岩模型進行通訊。這個函數的響應將是一個 TEXT 的格式,所以如果一個模型在 JSON 體的格式響應,那麼這個函數的輸出將在一個字符串的格式轉發給最終用戶。

  • 嵌入 — 您可以在 SQL 代碼中使用此函數來調用基岩模型,該模型返回 JSON 響應中的輸出嵌入。當您想要提取與 json-key 直接關聯的嵌入以簡化任何自我管理工作流程的響應時,可以使用此功能。

在 Aurora PostgreSQL 資料庫叢集中安裝 Aurora Machine Learning 延伸模組
  • 使用 psql 連線到 Aurora PostgreSQL 資料庫叢集的寫入器執行個體。連線到要在其中安裝 aws_ml 延伸模組的特定資料庫。

    psql --host=cluster-instance-1.111122223333.aws-region.rds.amazonaws.com --port=5432 --username=postgres --password --dbname=labdb
labdb=> CREATE EXTENSION IF NOT EXISTS aws_ml CASCADE; NOTICE: installing required extension "aws_commons" CREATE EXTENSION labdb=>

安裝aws_ml擴充功能也會建立系aws_ml統管理角色和兩個新結構描述,如下所示。

  • aws_comprehend – Amazon Comprehend 服務的結構描述和 detect_sentiment 函數的來源 (aws_comprehend.detect_sentiment)。

  • aws_sagemaker— SageMaker 服務的結構描述和invoke_endpoint函數 (aws_sagemaker.invoke_endpoint) 的來源。

  • aws_bedrock— Amazon 基岩服務的架構以及和功能的invoke_model(aws_bedrock.invoke_model)來源。invoke_model_get_embeddings(aws_bedrock.invoke_model_get_embeddings)

rds_superuser 角色獲授與 aws_ml 管理角色,並由這兩個 Aurora Machine Learning 結構描述的 OWNER 組成。若要允許其他資料庫使用者存取 Aurora Machine Learning 函數,rds_superuser 需要授與 Aurora Machine Learning 函數的 EXECUTE 權限。根據預設,會在兩個 Aurora Machine Learning 結構描述中的函數上撤銷 PUBLICEXECUTE 權限。

在多租用戶資料庫組態中,您可以在要保護的特定 Aurora Machine Learning 結構描述上使用 REVOKE USAGE,防止租用戶存取 Aurora Machine Learning 函數。

將 Amazon 基岩與您的 Aurora PostgreSQL 資料庫叢集搭配使用

對於 Aurora PostgreSQL,Aurora 機器學習提供下列 Amazon 基岩功能,以處理您的文字資料。只有在您安裝 aws_ml 2.0 擴充功能並完成所有安裝程序之後,才能使用此功能。如需詳細資訊,請參閱 設定 Aurora PostgreSQL 資料庫叢集來使用 Aurora Machine Learning

aw_ 支持. 調用模型

此函數將 JSON 格式化的文本作為輸入,並為 Amazon 基岩上託管的各種模型進行處理,並從模型中獲取 JSON 文本響應。此回應可能包含文字、影像或嵌入。函數文件的摘要如下。

aws_bedrock.invoke_model( IN model_id varchar, IN content_type text, IN accept_type text, IN model_input text, OUT model_output varchar)

此函數的輸入和輸出如下。

  • model_id— 模型的識別碼。

  • content_type— 要求基岩模型的類型。

  • accept_type— 從基岩模型期望的響應類型. 通常適用於大多數模型的應用程序/JSON。

  • model_input— 提示;以 content_type 指定的格式輸入模型的一組特定輸入。有關模型接受的請求格式/結構的詳細資訊,請參閱基礎模型的推論參數

  • model_output— 基岩模型的輸出為文本。

下面的例子演示了如何調用人為基岩克勞德 2 模型使用調用 invoke 模型。

範例:使用 Amazon 基岩函數的簡單查詢
SELECT aws_bedrock.invoke_model ( model_id := 'anthropic.claude-v2', content_type:= 'application/json', accept_type := 'application/json', model_input := '{"prompt": "\n\nHuman: You are a helpful assistant that answers questions directly and only using the information provided in the context below.\nDescribe the answer in detail.\n\nContext: %s \n\nQuestion: %s \n\nAssistant:","max_tokens_to_sample":4096,"temperature":0.5,"top_k":250,"top_p":0.5,"stop_sequences":[]}' );
模型嵌入模型嵌入的 aw_ 基礎

在某些情況下,模型輸出可以指向向量嵌入。鑑於每個模型的響應各不相同,可以利用另一個函數調用 _model_get_嵌入功能與invoke ke_model 完全相似,但通過指定適當的 JSON 鍵來輸出嵌入。

aws_bedrock.invoke_model_get_embeddings( IN model_id varchar, IN content_type text, IN json_key text, IN model_input text, OUT model_output float8[])

此函數的輸入和輸出如下。

  • model_id— 模型的識別碼。

  • content_type— 要求基岩模型的類型。在這裡,接受類型被設置為默認值。application/json

  • model_input— 提示;以 content_type 指定的格式輸入至模型的一組特定輸入。有關模型接受的請求格式/結構的詳細資訊,請參閱基礎模型的推論參數

  • json_key— 參考要從中擷取嵌入的欄位。如果嵌入模型改變,這可能會有所不同。

  • model_output-基岩模型的輸出為具有 16 位小數的嵌入數組。

下列範例顯示如何使用 PostgreSQL I/O 監視檢視表的 Titan 嵌入 G1 — 文字嵌入模型來產生嵌入。

範例:使用 Amazon 基岩函數的簡單查詢
SELECT aws_bedrock.invoke_model_get_embeddings( model_id := 'amazon.titan-embed-text-v1', content_type := 'application/json', json_key := 'embedding', model_input := '{ "inputText": "PostgreSQL I/O monitoring views"}') AS embedding;

搭配 Aurora PostgreSQL 資料庫叢集使用 Amazon Comprehend

對於 Aurora PostgreSQL,Aurora Machine Learning 提供下列 Amazon Comprehend 函數,用於使用您的文字資料。只有在您安裝 aws_ml 延伸模組並完成所有設定程序之後,才能使用此函數。如需詳細資訊,請參閱 設定 Aurora PostgreSQL 資料庫叢集來使用 Aurora Machine Learning

aws_comprehend.detect_sentiment

此函數會以文字做為輸入,並評估文字是否具有正面、負面、中性或混合的情緒狀態。它會輸出此情緒以及評估的信賴等級。函數文件的摘要如下。

aws_comprehend.detect_sentiment( IN input_text varchar, IN language_code varchar, IN max_rows_per_batch int, OUT sentiment varchar, OUT confidence real)

此函數的輸入和輸出如下。

  • input_text – 要評估和指派情緒 (負面、正面、中性、混合) 的文字。

  • language_code – 使用 2 字母的 ISO 639-1 識別碼搭配地區子標籤 (視需要) 或 ISO 639-2 三字母代碼 (視情況而定) 所識別之 input_text 的語言。例如,en 是英文代碼,而 zh 是簡體中文的代碼。如需詳細資訊,請參閱《Amazon 開發人員指南》中的支援的語言

  • max_rows_per_batch – 批次模式處理中每個批次的資料列數量上限。如需詳細資訊,請參閱 了解批次模式和 Aurora Machine Learning 函數

  • sentiment – 輸入文字的情緒,識別為 POSITIVE、NEGATIVE、NEUTRAL 或 MIXED。

  • confidence – 所在指定 sentiment 之準確性中的信賴程度。值的範圍從 0.0 到 1.0。

在下列內容中,您可以找到如何使用此函數的範例。

範例:使用 Amazon Comprehend 的簡單查詢

以下是簡單查詢的範例,該查詢會叫用此函數,以評估客戶對支援團隊的滿意度。假設您有一個資料庫資料表 (support),其會在每次請求協助之後存放客戶意見回饋。此範例查詢會將 aws_comprehend.detect_sentiment 函數套用至資料表的 feedback 資料欄中的文字,並輸出情緒以及該情緒的信賴等級。此查詢也會以遞減順序輸出結果。

SELECT feedback, s.sentiment,s.confidence FROM support,aws_comprehend.detect_sentiment(feedback, 'en') s ORDER BY s.confidence DESC; feedback | sentiment | confidence ----------------------------------------------------------+-----------+------------ Thank you for the excellent customer support! | POSITIVE | 0.999771 The latest version of this product stinks! | NEGATIVE | 0.999184 Your support team is just awesome! I am blown away. | POSITIVE | 0.997774 Your product is too complex, but your support is great. | MIXED | 0.957958 Your support tech helped me in fifteen minutes. | POSITIVE | 0.949491 My problem was never resolved! | NEGATIVE | 0.920644 When will the new version of this product be released? | NEUTRAL | 0.902706 I cannot stand that chatbot. | NEGATIVE | 0.895219 Your support tech talked down to me. | NEGATIVE | 0.868598 It took me way too long to get a real person. | NEGATIVE | 0.481805 (10 rows)

為了避免針對每個資料表資料列的情緒分析產生費用超過一次,您可以將結果具體化。請在您感興趣的資料列上執行此作業。例如,臨床醫師的筆記正在更新,以便只有法文 (fr) 的筆記使用情緒偵測函數。

UPDATE clinician_notes SET sentiment = (aws_comprehend.detect_sentiment (french_notes, 'fr')).sentiment, confidence = (aws_comprehend.detect_sentiment (french_notes, 'fr')).confidence WHERE clinician_notes.french_notes IS NOT NULL AND LENGTH(TRIM(clinician_notes.french_notes)) > 0 AND clinician_notes.sentiment IS NULL;

如需最佳化您函數呼叫的詳細資訊,請參閱 搭配 Aurora PostgreSQL 使用 Aurora Machine Learning 的效能考量

SageMaker 與您的 Aurora 資料庫叢集 PostgreSQL 配使用

如所述設定 SageMaker 環境並與 Aurora PostgreSQL 整合之後設置 Aurora 使用 Amazon SageMaker ,您可以使用函數叫用作業。aws_sagemaker.invoke_endpointaws_sagemaker.invoke_endpoint 函數只會連線到相同 AWS 區域中的模型端點。如果您的資料庫執行個體有多個複本,請務 AWS 區域 必將每個模型設定並部署到每 AWS 區域個 SageMaker 模型。

對的呼叫aws_sagemaker.invoke_endpoint會使用您設定為將 Aurora PostgreSQL 資料庫叢集與 SageMaker 服務和您在安裝程序期間提供的端點相關聯的 IAM 角色進行驗證。 SageMaker 模型端點的範圍限制為個別帳戶,且不是公開的。該endpoint_name網址不包含帳戶 ID。 SageMaker 從資料庫執行個體的 SageMaker IAM 角色提供的身份驗證令牌中確定帳戶 ID。

aws_sagemaker.invoke_endpoint

這個函數需要 SageMaker 端點作為輸入和應該作為一個批處理的行數。它還需要輸入 SageMaker 模型端點預期的各種參數。此函數的參考文件如下。

aws_sagemaker.invoke_endpoint( IN endpoint_name varchar, IN max_rows_per_batch int, VARIADIC model_input "any", OUT model_output varchar )

此函數的輸入和輸出如下。

  • endpoint_name— 端點 URL 是 AWS 區域獨立的。

  • max_rows_per_batch – 批次模式處理中每個批次的資料列數量上限。如需詳細資訊,請參閱 了解批次模式和 Aurora Machine Learning 函數

  • model_input – 模型的一或多個輸入參數。這些可以是模型所需的任何數據類 SageMaker 型。PostgreSQL 允許您為函數指定最多 100 個輸入參數。數組數據類型必須是一維的,但可以包含由 SageMaker 模型預期的盡可能多的元素。 SageMaker 模型的輸入數目僅受 SageMaker 6 MB 郵件大小限制的限制。

  • model_output— SageMaker 模型的輸出為文字。

創建一個用戶定義的函數來調用 SageMaker 模型

創建一個單獨的用戶定義函數aws_sagemaker.invoke_endpoint來調用每個 SageMaker 模型。您的使用者定義函數代表主控模型的 SageMaker 端點。aws_sagemaker.invoke_endpoint 函數會在使用者定義函數內執行。使用者定義函數提供許多優點:

  • 您可以為 SageMaker 模型指定自己的名稱,而不是aws_sagemaker.invoke_endpoint僅呼叫所有模 SageMaker 型。

  • 您可以在您 SQL 應用程式程式碼中的同一個位置指定模型端點 URL。

  • 您可以單獨控制每個 Aurora Machine Learning 函數的 EXECUTE 權限。

  • 您可以使用 SQL 類型宣告模型輸入和輸出類型。SQL 強制傳遞給 SageMaker 模型的參數數量和類型,並在必要時執行類型轉換。使用 SQL 類型也會轉SQL NULL換為 SageMaker 模型預期的適當預設值。

  • 如果您希望更快地傳回前幾個資料列,您可以減少批次大小上限。

如要指定使用者定義函數,請使用 SQL 資料定義語言 (DDL) 陳述式 CREATE FUNCTION。在您定義函數時,您可以指定以下內容:

  • 對模型的輸入參數。

  • 要叫用的特定 SageMaker 端點。

  • 傳回類型。

使用者定義函數會傳回 SageMaker 端點在輸入參數上執行模型之後所計算的推論。下列範例會針對具有兩個輸入參數的 SageMaker 模型建立使用者定義函數。

CREATE FUNCTION classify_event (IN arg1 INT, IN arg2 DATE, OUT category INT) AS $$ SELECT aws_sagemaker.invoke_endpoint ( 'sagemaker_model_endpoint_name', NULL, arg1, arg2 -- model inputs are separate arguments )::INT -- cast the output to INT $$ LANGUAGE SQL PARALLEL SAFE COST 5000;

注意下列事項:

  • aws_sagemaker.invoke_endpoint 函數輸入可以是任何資料類型的一或多個參數。

  • 此範例使用 INT 輸出類型。如果您將 varchar 類型的輸出轉換成不同類型,則必須將其轉換成 PostgreSQL 內建的純量類型,例如 INTEGERREALFLOATNUMERIC。如需這些類型的詳細資訊,請參閱 PostgreSQL 文件的 Data Types

  • 指定 PARALLEL SAFE 來啟用平行查詢處理。如需更多詳細資訊,請參閱 使用平行查詢處理改善回應時間

  • 指定 COST 5000 來可預估執行函數的成本。使用正數來表示函數的預估執行成本 (單位為 cpu_operator_cost)。

將數組作為輸入傳遞給 SageMaker 模型

aws_sagemaker.invoke_endpoint 函數可以擁有最多 100 個輸入參數。這項限制是 PostgreSQL 函數的限制。如果 SageMaker 模型需要超過 100 個相同類型的參數,請將模型參數作為陣列傳遞。

下列範例會定義傳遞陣列做為輸入至 SageMaker 迴歸模型的函數。輸出會轉換為 REAL 值。

CREATE FUNCTION regression_model (params REAL[], OUT estimate REAL) AS $$ SELECT aws_sagemaker.invoke_endpoint ( 'sagemaker_model_endpoint_name', NULL, params )::REAL $$ LANGUAGE SQL PARALLEL SAFE COST 5000;

調用模型時指定批次大小 SageMaker

下列範例會為 SageMaker 模型建立使用者定義函數,將批次大小預設值設定為 NULL。該函數也允許您在呼叫時提供不同的批次大小。

CREATE FUNCTION classify_event ( IN event_type INT, IN event_day DATE, IN amount REAL, -- model inputs max_rows_per_batch INT DEFAULT NULL, -- optional batch size limit OUT category INT) -- model output AS $$ SELECT aws_sagemaker.invoke_endpoint ( 'sagemaker_model_endpoint_name', max_rows_per_batch, event_type, event_day, COALESCE(amount, 0.0) )::INT -- casts output to type INT $$ LANGUAGE SQL PARALLEL SAFE COST 5000;

注意下列事項:

  • 使用選用的 max_rows_per_batch 參數來控制批次模式函數呼叫的資料列數。如果您使用 NULL 值,則查詢最佳化工具會自動選擇最大的批次大小。如需詳細資訊,請參閱 了解批次模式和 Aurora Machine Learning 函數

  • 默認情況下,傳遞 NULL 作為參數的值被轉換為空字符串傳遞給之前 SageMaker。針對此範例,輸入具有不同的類型。

  • 如果您有非文字的輸入,或是需要預設為空白字串以外值的文字輸入,請使用 COALESCE 陳述式。在對 COALESCE 的呼叫中,使用 aws_sagemaker.invoke_endpoint 將 NULL 轉換成所需的 null 取代值。針對此範例中的 amount 參數,NULL 值會轉換成 0.0。

調用具有多個 SageMaker 輸出的模型

下列範例會針對傳回多個輸出的 SageMaker 模型建立使用者定義函數。您的函數需要將 aws_sagemaker.invoke_endpoint 函數的輸出轉換成對應的資料類型。例如,您可以針對 (x,y) 對使用內建的 PostgreSQL 點類型,或是使用者定義的複合類型。

這個使用者定義函數會針對輸出,使用複合類型從傳回多個輸出的模型傳回值。

CREATE TYPE company_forecasts AS ( six_month_estimated_return real, one_year_bankruptcy_probability float); CREATE FUNCTION analyze_company ( IN free_cash_flow NUMERIC(18, 6), IN debt NUMERIC(18,6), IN max_rows_per_batch INT DEFAULT NULL, OUT prediction company_forecasts) AS $$ SELECT (aws_sagemaker.invoke_endpoint('endpt_name', max_rows_per_batch,free_cash_flow, debt))::company_forecasts; $$ LANGUAGE SQL PARALLEL SAFE COST 5000;

針對複合類型,請根據欄位在模型中的順序,以相同順序使用欄位,並將 aws_sagemaker.invoke_endpoint 的輸出轉換成您的複合類型。發起人可以透過名稱或 PostgreSQL ".*" 表示法擷取個別欄位。

將資料匯出到 Amazon S3 進行 SageMaker 模型訓練 (進階)

我們建議您熟悉 Aurora 機器學習,並使用 SageMaker 提供的演算法和範例,而不是嘗試訓練自己的模型。如需詳細資訊,請參閱 Amazon 開始使用 SageMaker

若要訓練 SageMaker 模型,請將資料匯出到 Amazon S3 儲存貯體。Amazon S3 儲存貯體用於在部署模型之前 SageMaker對其進行訓練。您可以從 Aurora PostgreSQL 資料庫叢集查詢資料,並直接將這些資料儲存到存放在 Amazon S3 儲存貯體中的文字檔案。然後 SageMaker 使用 Amazon S3 儲存貯體中的資料進行訓練。如需 SageMaker 模型訓練的詳細資訊,請參閱使用 Amazon 訓練模型 SageMaker

注意

當您建立用於 SageMaker 模型訓練或批次評分的 Amazon S3 儲存貯體時,請使用 sagemaker Amazon S3 儲存貯體名稱。如需詳細資訊,請參閱 Amazon SageMaker 開發人員指南中的指定 Amazon S3 儲存貯體以上傳訓練資料集和存放輸出資料。

如需匯出您資料的詳細資訊,請參閱 將資料從 Aurora PostgreSQL 資料庫叢集匯出至 Amazon S3

搭配 Aurora PostgreSQL 使用 Aurora Machine Learning 的效能考量

當 Aurora 機器學習功能叫用時,Amazon Comprehend 和 SageMaker 服務會完成大部分工作。這表示您可以視需要獨立擴展這些資源。對於您的 Aurora PostgreSQL 資料庫叢集,您可以盡可能有效地進行函數呼叫。接下來,您可以找到從 Aurora PostgreSQL 使用 Aurora Machine Learning 時需要注意的一些效能考量。

了解批次模式和 Aurora Machine Learning 函數

通常,PostgreSQL 會一次針對單一資料列執行函數。Aurora Machine Learning 可以採用稱為「批次模式執行」的方法,透過將許多資料列對外部 Aurora Machine Learning 服務的呼叫合併成批次,來減少這項額外負荷。在批次模式中,Aurora Machine Learning 會收到輸入資料列批次的回應,然後一次針對單一資料列將回應交付回正在執行的查詢。這項最佳化可以改善您 Aurora 查詢的輸送量,而無須限制 PostgreSQL 查詢最佳化工具。

如果函數是從 SELECT 清單、WHERE 子句或 HAVING 子句進行推論,Aurora 會自動使用批次模式。請注意,最上層的簡易 CASE 表達式適用批次模式執行。如果第一個 CASE 子句是包含批次模式函數呼叫的簡易述詞,則最上層的搜尋 WHEN 表達式也適用批次模式執行。

您的使用者定義函數必須是 LANGUAGE SQL 函數,且應指定 PARALLEL SAFECOST 5000

從 SELECT 陳述式到 FROM 子句的函數遷移

通常,Aurora 會自動將適用批次模式執行的 aws_ml 函數遷移至 FROM 子句。

您可以透過每個查詢層級,手動檢查適用批次模式函數遷移至 FROM 子句的過程。若要執行此作業,您可以使用 EXPLAIN 陳述式 (以及 ANALYZE 和 VERBOSE) 來在每個批次模式 Function Scan 的下方尋找「批次處理」資訊。您也可以使用 EXPLAIN (搭配 VERBOSE),而無須執行查詢。您接著可以觀察對函數的呼叫在並未於原始陳述式中指定的巢狀迴圈聯結下方,是否顯示為 Function Scan

在以下範例中,計劃中的巢狀迴圈聯結運算子會顯示 Aurora 遷移了 anomaly_score 函數。Aurora 會在函數適用批次模式執行時,將此函數從 SELECT 清單遷移至 FROM 子句。

EXPLAIN (VERBOSE, COSTS false) SELECT anomaly_score(ts.R.description) from ts.R; QUERY PLAN ------------------------------------------------------------- Nested Loop Output: anomaly_score((r.description)::text) -> Seq Scan on ts.r Output: r.id, r.description, r.score -> Function Scan on public.anomaly_score Output: anomaly_score.anomaly_score Function Call: anomaly_score((r.description)::text)

如要停止批次模式執行,請將 apg_enable_function_migration 參數設為 false。這可以防止將 aws_ml 函數從 SELECT 遷移至 FROM 子句。以下顯示作法。

SET apg_enable_function_migration = false;

apg_enable_function_migration 參數是 Grand Unified Configuration (GUC) 參數。Aurora PostgreSQL apg_plan_mgmt 延伸會針對查詢計劃管理識別此參數。如要停用工作階段中的函數遷移,請使用查詢計劃管理來將結果計劃儲存為 approved 計劃。在執行時間,查詢計劃管理會透過其 approved 設定,強制實行 apg_enable_function_migration 計劃。這項強制實行無論 apg_enable_function_migration GUC 參數設定為何都會發生。如需更多詳細資訊,請參閱 管理 Aurora PostgreSQL 的查詢執行計劃

使用 max_rows_per_batch 參數

aws_comprehend.detect_sentimentaws_sagemaker.invoke_endpoint 函數都有一個 max_rows_per_batch 參數。此參數會指定可傳送至 Aurora Machine Learning 服務的資料列數目。您的函數處理的資料集越大,您的批次大小就越大。

批次模式函數會透過建置資料列批次,將 Aurora Machine Learning 函數呼叫的成本分散到大量的資料列,來改善效率。但是,如果 SELECT 陳述式因為 LIMIT 子句而提前完成,則可以針對比查詢所使用資料列數更多的資料列建構批次。這種方法可能會對您的 AWS 帳戶產生額外費用。如要利用批次模式執行的優點,同時避免建置過大的批次,請在您的函數呼叫中針對 max_rows_per_batch 參數使用較小的值。

如果您執行的查詢 EXPLAIN (VERBOSEANALYZE) 使用批次模式執行,您會看到位於巢狀迴圈聯結下方的 FunctionScan 運算子。EXPLAIN 報告的迴圈數等於您從 FunctionScan 運算子擷取資料列的次數。如果陳述式使用 LIMIT 子句,則擷取數將會是一致的。如要最佳化批次大小,請將 max_rows_per_batch 參數設為這個值。但是,如果在 WHERE 子句或 HAVING 子劇中的述詞內參考批次模式函數,您便可能無法事先得知擷取數。在此情況下,請使用迴圈做為準則並針對 max_rows_per_batch 進行實驗,尋找最佳化效能的設定。

驗證批次模式執行

要查看函數是否以批次處理模式執行,請使用 EXPLAIN ANALYZE。如果使用了批次模式執行,則查詢計劃會在「批次處理」區段包含資訊。

EXPLAIN ANALYZE SELECT user-defined-function(); Batch Processing: num batches=1 avg/min/max batch size=3333.000/3333.000/3333.000 avg/min/max batch call time=146.273/146.273/146.273

在此範例中,有 1 個包含了 3,333 個資料列的批次,其處理的時間為 146.273 毫秒。「批次處理」區段會顯示以下內容:

  • 此函數掃描操作有多少批次

  • 批次的平均大小、最小值和最大值

  • 批次的平均執行時間、最小值和最大值

通常最後一個批次會比其餘批次小,並且通常會導致比平均小許多的批次大小下限。

如要更快地傳回前幾個資料列,請將 max_rows_per_batch 參數設為較小的值。

如要在您於使用者定義函數中使用 LIMIT 時減少對 ML 服務的批次模式呼叫數,請將 max_rows_per_batch 參數設為較小的值。

使用平行查詢處理改善回應時間

若要從大量資料列中盡快取得結果,您可以將平行查詢處理與批次模式處理結合。您可以針對 SELECTCREATE TABLE AS SELECTCREATE MATERIALIZED VIEW 陳述式使用平行查詢處理。

注意

PostgreSQL 尚未支援資料處理語言 (DML) 陳述式的平行查詢。

平行查詢處理會在資料庫和 ML 服務中進行。資料庫執行個體類別中的核心數會限制執行查詢時所能使用的平行處理程度。資料庫伺服器可以建構平行查詢執行計劃,分割一組平行工作者中的任務。然後,這些工作者都可以各自建置批次請求,其中包含了成千上萬個資料列 (或是每個服務允許的最大數量)。

來自所有 parallel Worker 的批次處理要求會傳送至 SageMaker 端點。端點可支援的平行處理程度受制於支援它的執行個體數目和類型。對於 K 程度的平行處理,您需要至少具有 K 個核心的資料庫執行個體類別。您還需要為模型配置 SageMaker 端點,使其具有足夠高性能的實例類的 K 初始實例。

若要使用平行查詢處理,您可以設定包含您計劃傳遞資料資料表的 parallel_workers 儲存參數。您可以將 parallel_workers 設為批次模式函數,例如 aws_comprehend.detect_sentiment。如果最佳化工具選擇 parallel 查詢計畫,則可以同時以批次和 parallel 方式呼叫 AWS ML 服務。

您可以搭配 aws_comprehend.detect_sentiment 函數使用下列參數,取得具備四向平行處理的計劃。如果變更下列兩個參數之一,您必須重新啟動資料庫執行個體,變更才會生效

-- SET max_worker_processes to 8; -- default value is 8 -- SET max_parallel_workers to 8; -- not greater than max_worker_processes SET max_parallel_workers_per_gather to 4; -- not greater than max_parallel_workers -- You can set the parallel_workers storage parameter on the table that the data -- for the Aurora machine learning function is coming from in order to manually override the degree of -- parallelism that would otherwise be chosen by the query optimizer -- ALTER TABLE yourTable SET (parallel_workers = 4); -- Example query to exploit both batch-mode execution and parallel query EXPLAIN (verbose, analyze, buffers, hashes) SELECT aws_comprehend.detect_sentiment(description, 'en')).* FROM yourTable WHERE id < 100;

如需控制平行查詢的詳細資訊,請參閱 PostgreSQL 文件中的 Parallel Plans

使用具體化檢視和具體化資料行

當您從資料庫叫用 SageMaker 或 Amazon Comprehend 等 AWS 服務時,系統會根據該服務的定價政策向您的帳戶收費。若要將帳戶的費用降到最低,您可以將呼叫 AWS 服務的結果實現為具體化資料行,如此一來,每個輸入資料列就不會呼叫 AWS 服務超過一次。如果需要,您可以新增 materializedAt 時間戳記資料行,記錄具體化資料行的時間。

一般單一資料列 INSERT 陳述式的延遲通常會比呼叫批次模式函數的延遲要小得多。因此,如果您針對您應用程式執行 INSERT 的每個單一資料列呼叫批次模式函數,您便可以無法滿足應用程式的延遲需求。若要將呼叫 AWS 服務的結果具體化成具體化資料行,高效能應用程式通常需要填入具體化資料欄。為了執行此作業,這些應用程式通常會發出 UPDATE 陳述式,同時在大型的資料列批次上運作。

UPDATE 會採用資料列層級鎖定,可能影響正在執行的應用程式。因此,您可能需要使用 SELECT ... FOR UPDATE SKIP LOCKED,或是使用 MATERIALIZED VIEW

在大量資料列上即時運作的分析查詢可以將批次模式具體化與即時處理合併。為了執行此作業,這些查詢會將預先具體化結果的 UNION ALL 與尚未包含具體化結果的資料列查詢結合。在某些情況下,許多位置都需要該 UNION ALL,或是由第三方應用程式產生查詢。若是這種情況,您可以建立 VIEW 來封裝 UNION ALL 操作,避免向 SQL 應用程式的其餘部分公開這項詳細資訊。

您可以使用具體化檢視來及時具體化快照中任意 SELECT 陳述式的結果。您也可以使用具體化檢視來在未來隨時重新整理具體化檢視。目前 PostgreSQL 不支援增量重新整理,因此每次重新整理具體化檢視時,都會重新運算具體化檢視。

您可以使用 CONCURRENTLY 選項重新整理具體化檢視,更新具體化檢視的內容,而無須採取獨佔鎖定。這樣做可以讓 SQL 應用程式在重新整理具體化檢視時讀取具體化檢視。

監控 Aurora Machine Learning

您可以將自訂資料庫叢集參數群組中的 track_functions 參數設定為 all 來監控 aws_ml 函數。根據預設,此參數會設定為 pl,表示只會追蹤程序語言函數。藉由將其變更為 all,也會追蹤 aws_ml 函數。如需詳細資訊,請參閱 PostgreSQL 文件中的執行時間統計資料

如需監控從 Aurora 機器學習功能呼叫之 SageMaker 作業效能的相關資訊,請參閱 Amazon SageMaker 開發人員指南 SageMaker中的監控 Amazon

track_functions 設為 all 後,您可以查詢 pg_stat_user_functions 檢視,以取得有關您定義並用來叫用 Aurora Machine Learning 服務之函數的統計資料。對於每個函數,檢視會提供 callstotal_timeself_time 的數目。

若要檢視 aws_sagemaker.invoke_endpointaws_comprehend.detect_sentiment 函數的統計資料,您可以使用下列查詢依結構描述名稱篩選結果。

SELECT * FROM pg_stat_user_functions WHERE schemaname LIKE 'aws_%';

若要清除統計資料,請執行以下操作。

SELECT pg_stat_reset();

您可以查詢 PostgreSQL pg_proc 系統目錄,取得呼叫 aws_sagemaker.invoke_endpoint 函數的 SQL 函數名稱。此目錄存放函數、程序等的相關資訊。如需詳細資訊,請參閱 PostgreSQL 文件中的 pg_proc。以下是查詢資料表以取得函數 (proname) 的名稱,這些名稱的來源 (prosrc) 包括文字 invoke_endpoint

SELECT proname FROM pg_proc WHERE prosrc LIKE '%invoke_endpoint%';