搭配 Aurora Postgre 使用 Amazon Aurora 機器學習SQL - Amazon Aurora

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

搭配 Aurora Postgre 使用 Amazon Aurora 機器學習SQL

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

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

搭配 Aurora Postgre 使用 Aurora 機器學習的要求SQL

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

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

  • 如果您的 Aurora PostgreSQL 資料庫叢集位於與 Amazon VPC Amazon Comprehend 和 SageMaker AI 服務不同的虛擬公有雲端 (VPC) 中,則 VPC的安全群組需要允許與目標 Aurora Machine Learning 服務的傳出連線。如需詳細資訊,請參閱啟用從 Amazon Aurora 到其他服務的網路通訊 AWS

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

  • 對於 Amazon Bedrock,您需要擁有要用於 Aurora PostgreSQL 資料庫叢集組態程序期間可用推論的 Bedrock 模型模型 ID。您團隊中的資料科學家最有可能能夠與 Bedrock 合作,以決定要使用的模型,並視需要微調它們,並處理其他此類任務。若要開始使用 Amazon Bedrock,請參閱如何設定 Bedrock

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

Aurora Postgre 支援 Aurora 機器學習的功能和限制SQL

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

  • Linear Learner

  • Random Cut Forest

  • XGBoost

    若要進一步了解這些演算法,請參閱《Amazon SageMaker AI 開發人員指南》中的選擇演算法

搭配 Aurora Machine Learning 使用 Amazon Bedrock 時,適用下列限制:

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

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

  • UDFs 不支援批次或平行呼叫。

  • Aurora Machine Learning 延伸模組不支援向量界面。作為擴充功能的一部分, 函數可用來輸出模型回應的內嵌,float8[]格式為 ,將這些內嵌存放在 Aurora 中。如需使用 的詳細資訊float8[],請參閱 搭配 Aurora PostgreSQL 資料庫叢集使用 Amazon Bedrock

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

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

設定 Aurora PostgreSQL 以使用 Amazon Bedrock

在下列程序中,您首先會建立 IAM角色和政策,授予 Aurora PostgreSQL 代表叢集使用 Amazon Bedrock 的許可。然後,您將政策連接至 Aurora PostgreSQL 資料庫叢集用來使用 Amazon Bedrock IAM的角色。為了簡化起見,此程序使用 AWS Management Console 來完成所有任務。

設定 Aurora PostgreSQL 資料庫叢集以使用 Amazon Bedrock
  1. 登入 AWS Management Console 並在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 開啟位於 IAM 的 https://console.aws.amazon.com/iam/ 主控台。

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

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

    2. 選擇您想要透過政策授予讀取存取權的基礎/佈建模型。

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

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

  6. 在IAM主控台上選擇角色 (在存取管理下)。

  7. 選擇建立角色

  8. 在選取信任的實體頁面上,選擇AWS 服務圖磚,然後選擇RDS開啟選擇器。

  9. 選擇 RDS – 將角色新增至資料庫

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

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

  12. 在 開啟 Amazon RDS主控台https://console.aws.amazon.com/rds/

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

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

  15. 選擇連線與安全索引標籤,然後捲動以尋找頁面的管理IAM角色區段。從新增IAM角色到此叢集選取器中,選擇您在先前步驟中建立的角色。在功能選擇器中,選擇 Bedrock,然後選擇新增角色

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

Amazon Bedrock 的角色已新增至 Aurora PostgreSQL 資料庫叢集,且現在已啟用。

Amazon Bedrock 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 並在 開啟IAM主控台https://console.aws.amazon.com/iam/

  2. 開啟位於 IAM 的 https://console.aws.amazon.com/iam/ 主控台。

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

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

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

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

  7. 在IAM主控台上選擇角色 (在存取管理下)。

  8. 選擇建立角色

  9. 在選取信任的實體頁面上,選擇AWS 服務圖磚,然後選擇RDS開啟選擇器。

  10. 選擇 RDS – 將角色新增至資料庫

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

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

  13. 在 開啟 Amazon RDS主控台https://console.aws.amazon.com/rds/

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

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

  16. 選擇連線與安全索引標籤,然後捲動以尋找頁面的管理IAM角色區段。從新增IAM角色到此叢集選擇器中,選擇您在先前步驟中建立的角色。在功能選擇器中,選擇理解,然後選擇新增角色

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

Amazon Comprehend 的角色已新增至 Aurora PostgreSQL 資料庫叢集,且現已啟用。

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

設定 Aurora PostgreSQL 以使用 Amazon SageMaker AI

在建立 Aurora PostgreSQL 資料庫叢集的IAM政策和角色之前,您需要先讓 SageMaker AI 模型設定和端點可用。

設定 Aurora PostgreSQL 資料庫叢集以使用 SageMaker AI
  1. 登入 AWS Management Console 並在 開啟IAM主控台https://console.aws.amazon.com/iam/

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

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

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

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

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

  7. 在IAM主控台上,選擇角色

  8. 選擇建立角色

  9. 在選取信任的實體頁面上,選擇AWS 服務圖磚,然後選擇RDS開啟選擇器。

  10. 選擇 RDS – 將角色新增至資料庫

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

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

  13. 在 開啟 Amazon RDS主控台https://console.aws.amazon.com/rds/

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

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

  16. 選擇連線與安全索引標籤,然後捲動以尋找頁面的管理IAM角色區段。從將IAM角色新增至此叢集選取器中,選擇您在先前步驟中建立的角色。在功能選擇器中,選擇 SageMaker AI,然後選擇新增角色

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

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

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

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

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

  2. 在 Aurora PostgreSQL 資料庫叢集的連線與安全索引標籤上新增IAM角色和 Amazon S3 匯入或匯出功能。

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

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

安裝 Aurora Machine Learning 延伸模組

Aurora Machine Learning 擴充功能aws_ml 1.0提供兩種函數,可用於叫用 Amazon Comprehend、 SageMaker AI 服務,aws_ml 2.0並提供兩種額外的函數,可用於叫用 Amazon Bedrock 服務。在 Aurora PostgreSQL 資料庫叢集上安裝這些擴充功能也會為 功能建立管理角色。

注意

使用這些函數取決於是否完成 Aurora Machine Learning Service (Amazon Comprehend、 SageMaker AI、Amazon Bedrock) IAM的設定,如 中所述設定 Aurora PostgreSQL 資料庫叢集以使用 Aurora Machine Learning

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

  • aws_sagemaker.invoke_endpoint – 您可以在SQL程式碼中使用此函數與來自叢集的 SageMaker AI 端點通訊。

  • aws_bedrock.invoke_model – 您可以在SQL程式碼中使用此函數,從叢集與 Bedrock 模型通訊。此函數的回應格式為 TEXT,因此,如果模型以JSON內文格式回應,則此函數的輸出將以字串格式轉送給最終使用者。

  • aws_bedrock.invoke_model_get_embeddings – 您可以在SQL程式碼中使用此函數來叫用 Bedrock 模型,以傳回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 AI 服務和invoke_endpoint函數來源的結構描述 (aws_sagemaker.invoke_endpoint)。

  • aws_bedrock – Amazon Bedrock 服務和 invoke_model(aws_bedrock.invoke_model)invoke_model_get_embeddings(aws_bedrock.invoke_model_get_embeddings)函數來源的結構描述。

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

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

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

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

aws_bedrock.invoke_model

此函數會將 中的文字格式化JSON為輸入,並針對 Amazon Bedrock 上託管的各種模型進行處理,並從模型傳回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 – Bedrock 模型的請求類型。

  • accept_type – 從 Bedrock 模型預期的回應類型。通常適用於大多數模型的應用程式/JSON。

  • model_input – Prompts;以 content_type 指定的格式對模型輸入的特定集合。如需模型接受之請求格式/結構的詳細資訊,請參閱基礎模型的推論參數

  • model_output – Bedrock 模型的輸出為文字。

下列範例示範如何使用 invoke_model 叫用 Bedrock 的 Anthropic Claude 2 模型。

範例:使用 Amazon Bedrock 函數的簡單查詢
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":[]}' );
aws_bedrock.invoke_model_get_embeddings

在某些情況下,模型輸出可以指向向量內嵌。由於每個模型的回應各不相同,可以利用另一個函數 invoke_model_get_embeddings,其運作方式與 invoke_model 完全相同,但透過指定適當的 json-key 來輸出內嵌。

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 – Bedrock 模型的請求類型。在此, accept_type 設定為預設值 application/json

  • model_input – Prompts;以 content_type 指定的格式對模型輸入的特定集合。如需模型接受之請求格式/結構的詳細資訊,請參閱基礎模型的推論參數

  • json_key – 參考 欄位以擷取內嵌。如果內嵌模型變更,這可能會有所不同。

  • model_output – Bedrock 模型的輸出,做為具有 16 位元十進位的內嵌陣列。

下列範例示範如何使用 Titan Embeddings G1 – Text Embedded model 產生 PostgreSQL I/O 監控檢視片語的內嵌。

範例:使用 Amazon Bedrock 函數的簡單查詢
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、NEUTRAL、 NEGATIVE或 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 Postgre 使用 Aurora 機器學習的效能考量SQL

搭配 Aurora PostgreSQL 資料庫叢集使用 SageMaker AI

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

對 的呼叫aws_sagemaker.invoke_endpoint會使用您設定IAM的角色進行驗證,以將 Aurora PostgreSQL 資料庫叢集與 SageMaker AI 服務和您在設定程序期間提供的端點建立關聯。 SageMaker AI 模型端點的範圍是個別帳戶,而且不是公開的。endpoint_name URL 不包含帳戶 ID。 SageMaker AI 會從資料庫執行個體的 SageMaker AI IAM角色提供的身分驗證字符中決定帳戶 ID。

aws_sagemaker.invoke_endpoint

此函數會將 SageMaker AI 端點做為輸入,以及應作為批次處理的列數。它還需要輸入 SageMaker AI 模型端點預期的各種參數。此函數的參考文件如下。

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

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

  • endpoint_name – AWS 區域獨立URL端點。

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

  • model_input – 模型的一或多個輸入參數。這些可以是 SageMaker AI 模型所需的任何資料類型。PostgreSQL 可讓您為函數指定最多 100 個輸入參數。陣列資料類型必須是一維的,但可以包含 AI SageMaker 模型預期數量的元素。 SageMaker AI 模型的輸入數量僅受限於 SageMaker AI 6 MB 訊息大小限制。

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

建立使用者定義的函數以叫用 SageMaker AI 模型

建立個別的使用者定義函數,aws_sagemaker.invoke_endpoint以呼叫每個 SageMaker AI 模型。您的使用者定義函數代表託管模型的 SageMaker AI 端點。aws_sagemaker.invoke_endpoint 函數會在使用者定義函數內執行。使用者定義函數提供許多優點:

  • 您可以為 SageMaker AI 模型提供自己的名稱,而不是只aws_sagemaker.invoke_endpoint呼叫所有 SageMaker AI 模型。

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

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

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

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

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

  • 對模型的輸入參數。

  • 要叫用的特定 SageMaker AI 端點。

  • 傳回類型。

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

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 文件中的資料類型

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

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

將陣列做為輸入傳遞至 SageMaker AI 模型

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

下列範例定義 函數,將陣列做為輸入傳遞至 SageMaker AI 迴歸模型。輸出會轉換為 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 AI 模型時指定批次大小

下列範例會為 SageMaker AI 模型建立使用者定義的函數,將批次大小預設為 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 AI 之前轉換為空字串。針對此範例,輸入具有不同的類型。

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

叫用具有多個輸出的 SageMaker AI 模型

下列範例會為傳回多個輸出的 SageMaker AI 模型建立使用者定義的函數。您的函數需要將 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 AI 模型訓練 (進階)

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

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

注意

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

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

搭配 Aurora Postgre 使用 Aurora 機器學習的效能考量SQL

Amazon Comprehend 和 SageMaker AI 服務在被 Aurora 機器學習函數調用時,會執行大部分的工作。這表示您可以視需要獨立擴展這些資源。對於 Aurora PostgreSQL 資料庫叢集,您可以盡可能有效率地進行函數呼叫。接下來,您可以在使用 Aurora Postgre 的 Aurora 機器學習時,找到一些需要注意的效能考量事項SQL。

了解批次模式和 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 函數。它會將此函數從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_migrationGUC參數設定為何,都會執行此強制執行。如需詳細資訊,請參閱管理 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 服務中進行。資料庫執行個體類別中的核心數會限制執行查詢時所能使用的平行處理程度。資料庫伺服器可以建構平行查詢執行計劃,分割一組平行工作者中的任務。然後,這些工作者都可以各自建置批次請求,其中包含了成千上萬個資料列 (或是每個服務允許的最大數量)。

所有平行工作者的批次請求都會傳送至 SageMaker AI 端點。端點可支援的平行處理程度受制於支援它的執行個體數目和類型。對於 K 程度的平行處理,您需要至少具有 K 個核心的資料庫執行個體類別。您也需要為模型設定 SageMaker AI 端點,讓 K 初始執行個體具有足夠高效能的執行個體類別。

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

您可以搭配 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 文件中的平行計劃

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

當您從資料庫叫用 SageMaker AI 或 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 AI 操作效能的資訊,請參閱《Amazon SageMaker AI 開發人員指南》中的監控 Amazon SageMaker AI

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%';