将 Amazon Aurora 机器学习与 Aurora MySQL 结合使用
通过将 Amazon Aurora 机器学习与 Aurora MySQL 数据库集群结合使用,您可以根据需要使用 Amazon Comprehend 和/或 Amazon SageMaker。Amazon Comprehend 和 SageMaker 分别支持不同的机器学习使用案例,如下所示。
- Amazon Comprehend
Amazon Comprehend 是一项托管式自然语言处理(NLP)服务,用于从文档中提取见解。使用 Amazon Comprehend,您可以通过分析实体、关键短语、语言和其他特征,根据文档内容推断情绪。要了解更多信息,请参阅《Amazon Comprehend 开发人员指南》https://docs.amazonaws.cn/comprehend/latest/dg/what-is.html中的什么是 Amazon Comprehend?
- SageMaker
Amazon SageMaker 是一项完全托管的机器学习服务。数据科学家和开发人员使用 Amazon SageMaker 构建、训练和测试机器学习模型,以完成各种推理任务,例如欺诈检测和产品推荐。当机器学习模型准备好在生产环境中使用时,可以将其部署到 Amazon SageMaker 托管环境中。有关更多信息,请参阅《Amazon SageMaker 开发人员指南》中的什么是 Amazon SageMaker?
与使用 SageMaker 相比,将 Amazon Comprehend 与 Aurora 数据库集群结合使用的初步设置更少。如果您不熟悉 Amazon 机器学习和 Aurora 机器学习,我们建议您先从探索 Amazon Comprehend 开始。
只有某些 Amazon Web Services 区域 和特定版本的 Aurora MySQL 才支持 Aurora 机器学习。在尝试设置 Aurora 机器学习之前,请检查您的 Aurora MySQL 版本和您的区域的可用性。有关详细信息,请参阅使用 Aurora MySQL 的 Aurora 机器学习。
主题
将 Aurora 机器学习与 Aurora MySQL 结合使用的要求
Amazon 机器学习服务是在其自己的生产环境中设置和运行的托管式服务。Aurora 机器学习支持与 Amazon Comprehend 和 SageMaker 相集成。在尝试将 Aurora MySQL 数据库集群设置为使用 Aurora 机器学习之前,请务必了解以下要求和先决条件。
Aurora 机器学习 的先决条件
如果您要将 Aurora 机器学习与该集群结合使用,您可以将运行较低版本 Aurora MySQL 的 Aurora 集群升级到支持的更高版本。有关更多信息,请参阅Amazon Aurora MySQL 的数据库引擎更新。
区域和版本可用性
功能可用性和支持因每个 Aurora 数据库引擎的特定版本以及 Amazon Web Services 区域而异。有关 Aurora MySQL 和 Aurora 机器学习的版本和区域可用性的更多信息,请参阅 使用 Aurora MySQL 的 Aurora 机器学习。
启用 Aurora 机器学习
启用 ML 功能包括以下步骤:
Amazon Comprehend 和 SageMaker 服务必须与您的 Aurora MySQL 数据库集群在相同的 Amazon Web Services 区域 中运行。您不能在不同区域的 Aurora MySQL 数据库集群中使用 Amazon Comprehend 或 SageMaker 服务。
如果 Aurora MySQL 数据库集群与 Amazon Comprehend 和 SageMaker 服务位于不同的基于 Amazon VPC 服务的虚拟公有云(VPC)中,则 VPC 的安全组需要允许与目标 Aurora 机器学习服务的出站连接。有关更多信息,请参阅启用从 Amazon Aurora MySQL 到其他Amazon服务的网络通信。
Aurora MySQL 数据库集群需要使用自定义数据库集群参数组。在您要使用的每个 Aurora 机器学习服务的设置过程结束时,添加为该服务创建的关联 IAM 角色的 Amazon 资源名称(ARN)。我们建议您事先为 Aurora MySQL 创建自定义数据库集群参数组,并将您的 Aurora MySQL 数据库集群配置为使用该参数组,以便在设置过程结束时做好修改准备。
对于 SageMaker,您要用于推理的机器学习组件必须设置好并准备就绪。在配置 Aurora MySQL 数据库集群的过程中,您需要具有 SageMaker 端点的 Amazon 资源名称(ARN)。您团队中的数据科学家可能最有能力与 SageMaker 合作,以准备模型并处理其他此类任务。要开始使用 Amazon SageMaker,请参阅 Amazon SageMaker 入门。有关推理和端点的更多信息,请参阅实时推理。
要将 SageMaker 用于您自己的训练数据,您需要设置 Amazon Simple Storage Service(Amazon S3)桶,作为对 Aurora 机器学习的 Aurora MySQL 配置的一部分。为此,您需要遵循与设置 SageMaker 集成相同的常规流程。有关此可选设置过程的摘要,请参阅设置 Aurora MySQL 数据库集群以将 Amazon S3 用于 SageMaker(可选)。
对于 Aurora 全局数据库,您可以设置要在构成 Aurora 全局数据库的所有 Amazon Web Services 区域中使用的 Aurora 机器学习服务。例如,如果您想将 Aurora 机器学习以及 SageMaker 一起用于 Aurora 全局数据库,则可以对每个 Amazon Web Services 区域中的每个 Aurora MySQL 数据库集群执行以下操作。
使用相同的 SageMaker 训练模型和端点设置 Amazon SageMaker 服务。它们也必须使用相同的名称。
创建 IAM 角色,详见设置 Aurora MySQL 数据库集群以使用 Aurora 机器学习。
将 IAM 角色的 ARN 添加到每个 Amazon Web Services 区域中每个 Aurora MySQL 数据库集群的自定义数据库集群参数组中。
这些任务要求在构成 Aurora 全局数据库的所有 Amazon Web Services 区域中,Aurora 机器学习均可用于您的 Aurora MySQL 版本。
Aurora 机器学习与 Aurora MySQL 结合使用时支持的功能和限制
将 Aurora MySQL 与 Aurora 机器学习结合使用时,以下限制适用。
支持的 SageMaker 算法格式 – Aurora MySQL 通过
ContentType
的text/csv
值支持任何可读取和写入逗号分隔值(CSV)格式的 SageMaker 端点。目前,这种格式已被以下内置的 SageMaker 算法所接受。线性学习器
随机森林砍伐
XGBoost
要了解有关这些算法的更多信息,请参阅《Amazon SageMaker 开发人员指南》中的选择算法。
Aurora MySQL 存储函数限制 – Aurora 机器学习函数与二进制日志(binlog)格式不兼容。这会影响 Aurora 机器学习集成,如下所示。
如果存储函数调用带有 generated-always 列的表,则不支持此类函数。这适用于任何 Aurora MySQL 存储函数。要了解有关此列类型的更多信息,请参阅 MySQL 文档中的 CREATE TABLE 和生成的列
。 调用 Aurora 机器学习函数时,设置
--binlog-format=STATEMENT
引发异常。Aurora 机器学习函数是不确定的,而不确定的存储函数与 binlog 格式不兼容。
有关 binlog 格式的更多信息,请参阅 MySQL 文档中的二进制日志记录格式
。
设置 Aurora MySQL 数据库集群以使用 Aurora 机器学习
如将 Amazon Aurora 机器学习与 Aurora MySQL 结合使用中所述,Amazon Comprehend 和 SageMaker 支持不同的机器学习使用案例。在以下主题中,您可以找到其中每个 Aurora 机器学习服务的单独设置过程。
主题
设置 Aurora MySQL 数据库集群以使用 Amazon Comprehend
Aurora 机器学习依赖于 Amazon Identity and Access Management 角色和策略来允许 Aurora MySQL 数据库集群访问和使用 Amazon Comprehend 服务。以下过程会自动为您的集群创建 IAM 角色和策略,以便它可以使用 Amazon Comprehend。
设置 Aurora MySQL 数据库集群以使用 Amazon Comprehend
登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
从 Amazon RDS 导航菜单中选择 Databases(数据库),然后选择要连接到 Amazon Comprehend 服务的 Aurora MySQL 数据库集群。
-
选择 Connectivity & security (连接和安全性) 选项卡。
-
滚动至 Manage IAM roles(管理 IAM 角色)部分,然后选择 Select a service to connect to this cluster(选择一个服务以连接到此集群)。从选择器中选择 Amazon Comprehend,然后选择 Connect service(连接服务)。
Connect cluster to Amazon Comprehend(将集群连接到 Amazon Comprehend)对话框不需要任何其他信息。但是,您可能会看到一条消息,通知您 Aurora 和 Amazon Comprehend 之间的集成目前处于预览阶段。请务必阅读该消息,然后再继续。如果您不想继续,可以选择 Cancel(取消)。
选择 Connect service(连接服务)以完成集成过程。
Aurora 创建 IAM 角色。它还创建允许 Aurora MySQL 使用 Amazon Comprehend 服务的策略,并将该策略附加到该角色。该过程完成后,您可以在 Current IAM roles for this cluster(此集群的当前 IAM 角色)列表中找到该角色,如下图所示。
您需要将此 IAM 角色的 ARN 添加到 Aurora MySQL 数据库集群的
aws_default_comprehend_role
参数中。如果 Aurora MySQL 数据库集群不使用自定义数据库集群参数组,则需要创建一个与 Aurora MySQL 数据库集群结合使用的此类参数组,以完成集成。有关更多信息,请参阅使用数据库集群参数组。创建自定义数据库集群参数组并将其与 Aurora MySQL 数据库集群关联后,您可以继续执行以下步骤。
如果集群使用自定义数据库集群参数组,请执行以下操作。
在 Amazon RDS 控制台中,打开 Aurora MySQL 数据库集群的 Configuration(配置)选项卡。
找到为集群配置的数据库集群参数组,然后选择链接以打开自定义数据库集群参数。选择编辑参数。
在自定义数据库集群参数组中找到
aws_default_comprehend_role
参数。在 Value (值)字段中,输入 IAM 角色的 ARN。
选择 Save changes(保存更改)以保存设置。在下图中,您可以找到一个示例。
重启 Aurora MySQL 数据库集群的主实例,以使此参数设置生效。
Amazon Comprehend 的 IAM 集成已完成。通过向相应的数据库用户授予访问权限,继续设置 Aurora MySQL 数据库集群以与 Amazon Comprehend 结合使用。
设置 Aurora MySQL 数据库集群以使用 SageMaker
以下过程会自动为 Aurora MySQL 数据库集群创建 IAM 角色和策略,以便它可以使用 SageMaker。在尝试执行此过程之前,请确保您有 SageMaker 端点可用,以便在需要时输入该端点。通常,团队中的数据科学家会努力生成一个可以从 Aurora MySQL 数据库集群使用的端点。您可以在 SageMaker 控制台

设置 Aurora MySQL 数据库集群以使用 SageMaker
登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
从 Amazon RDS 导航菜单中选择 Databases(数据库),然后选择要连接到 SageMaker 服务的 Aurora MySQL 数据库集群。
-
选择 Connectivity & security(连接和安全性)选项卡
-
滚动至 Manage IAM roles(管理 IAM 角色)部分,然后选择 Select a service to connect to this cluster(选择一个服务以连接到此集群)。从选择器中选择 SageMaker。
选择连接服务。
在 Connect cluster to SageMaker(将集群连接到 SageMaker)对话框中,输入 SageMaker 端点的 Amazon 资源名称(ARN)。
-
Aurora 创建 IAM 角色。它还创建允许 Aurora MySQL 使用 SageMaker 服务的策略,并将该策略附加到角色。该过程完成后,您可以在 Current IAM roles for this cluster(此集群的当前 IAM 角色)列表中找到该角色。
通过以下网址打开 IAM 控制台:https://console.aws.amazon.com/iam/
。 从 Amazon Identity and Access Management 导航菜单的 Access management(访问管理)部分中选择 Roles(角色)。
从列出的角色中找到该角色。其名称使用以下模式。
rds-sagemaker-
your-cluster-name
-role-auto-generated-digits
打开角色的 Summary(摘要)页面并找到 ARN。记下 ARN 或使用复制小组件复制它。
通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 选择您的 Aurora MySQL 数据库集群,然后选择其 Configuration(配置)选项卡。
找到数据库集群参数组,然后选择链接以打开自定义数据库集群参数组。找到
aws_default_sagemaker_role
参数并在 Value(值)字段中输入 IAM 角色的 ARN,然后保存设置。重启 Aurora MySQL 数据库集群的主实例,以使此参数设置生效。
IAM 设置现已完成。通过向相应的数据库用户授予访问权限,继续设置 Aurora MySQL 数据库集群以与 SageMaker 结合使用。
如果您想使用您的 SageMaker 模型进行训练,而不是使用预构建的 SageMaker 组件,则还需要将 Amazon S3 桶添加到您的 Aurora MySQL 数据库集群中,如下文的 设置 Aurora MySQL 数据库集群以将 Amazon S3 用于 SageMaker(可选) 中所述。
设置 Aurora MySQL 数据库集群以将 Amazon S3 用于 SageMaker(可选)
要将 SageMaker 用于自己的模型,而不是使用 SageMaker 提供的预构建组件,您需要为 Aurora MySQL 数据库集群设置一个 Amazon Simple Storage Service(Amazon S3)桶以供使用。有关创建 Amazon S3 存储桶的更多信息,请参阅 Amazon Simple Storage Service 用户指南中的创建存储桶。
设置 Aurora MySQL 数据库集群以将 Amazon S3 桶用于 SageMaker
登录Amazon Web Services Management Console并通过以下网址打开 Amazon RDS 控制台:https://console.aws.amazon.com/rds/
。 -
从 Amazon RDS 导航菜单中选择 Databases(数据库),然后选择要连接到 SageMaker 服务的 Aurora MySQL 数据库集群。
-
选择 Connectivity & security (连接和安全性) 选项卡。
-
滚动至 Manage IAM roles(管理 IAM 角色)部分,然后选择 Select a service to connect to this cluster(选择一个服务以连接到此集群)。从选择器中选择 Amazon S3。
选择连接服务。
在 Connect cluster to Amazon S3(将集群连接到 Amazon S3)对话框中,输入 Amazon S3 桶的 Amazon 资源名称(ARN),如下图所示。
选择 Connect service(连接服务)以完成此过程。
有关将 Amazon S3 桶与 SageMaker 结合使用的更多信息,请参阅《Amazon SageMaker 开发人员指南》中的指定 S3 存储桶以上载训练数据集和存储输出数据。要了解有关使用 SageMaker 的更多信息,请参阅《Amazon SageMaker 开发人员指南》中的 Amazon SageMaker 笔记本实例入门。
授予数据库用户访问 Aurora 机器学习的权限
Aurora 机器学习包括用于与 Amazon Comprehend 和 SageMaker 结合使用的内置函数。必须向数据库用户授予调用这些内置函数的权限。授予权限的方式取决于您用于 Aurora MySQL 数据库集群的 MySQL 版本,如下所述。如何操作取决于您的 Aurora MySQL 数据库集群使用的 MySQL 版本。
在下表中,您可以找到数据库用户使用 Amazon Comprehend 和 SageMaker 函数所需的角色或权限。
Aurora MySQL 3(MySQL 8.0)(角色) | Aurora MySQL 2(MySQL 5.7)(权限) |
---|---|
Amazon_COMPREHEND_ACCESS |
INVOKE COMPREHEND |
Amazon_SAGEMAKER_ACCESS |
INVOKE SAGEMAKER |
授予对 Amazon Comprehend 函数的访问权限
要向数据库用户授予对 Amazon Comprehend 函数的访问权限,请使用适用于您的 Aurora MySQL 版本的相应语句。
Aurora MySQL 版本 3(与 MySQL 8.0 兼容)
GRANT Amazon_COMPREHEND_ACCESS TO
user
@domain-or-ip-address
Aurora MySQL 版本 2(与 MySQL 5.7 兼容)
GRANT INVOKE COMPREHEND ON *.* TO
user
@domain-or-ip-address
Amazon Comprehend 函数现已可供使用。有关使用示例,请参阅 将 Amazon Comprehend 与 Aurora MySQL 数据库集群结合使用。
授予对 SageMaker 函数的访问权限
要向数据库用户授予对 SageMaker 函数的访问权限,请使用适用于您的 Aurora MySQL 版本的相应语句。
Aurora MySQL 版本 3(与 MySQL 8.0 兼容)
GRANT Amazon_SAGEMAKER_ACCESS TO
user
@domain-or-ip-address
Aurora MySQL 版本 2(与 MySQL 5.7 兼容)
GRANT INVOKE SAGEMAKER ON *.* TO
user
@domain-or-ip-address
对于您为使用 SageMaker 而创建的函数,数据库用户还需要获得 EXECUTE
权限。假设您创建了两个函数 db1.anomoly_score
和 db2.company_forecasts
以调用 SageMaker 端点的服务。您应授予执行权限,如下所示。
GRANT EXECUTE ON FUNCTION db1.anomaly_score TO
user1
@domain-or-ip-address1
GRANT EXECUTE ON FUNCTION db2.company_forecasts TOuser2
@domain-or-ip-address2
SageMaker 函数现已可供使用。有关使用示例,请参阅 将 SageMaker 与 Aurora MySQL 数据库集群结合使用。
将 Amazon Comprehend 与 Aurora MySQL 数据库集群结合使用
对于 Aurora MySQL,Aurora 机器学习提供了以下两个内置函数,用于处理 Amazon Comprehend 和您的文本数据。您提供要分析的文本(input_data
)并指定语言(language_code
)。
- aws_comprehend_detect_sentiment
-
此函数将文本识别为具有积极、消极、中立或混合的情绪姿态。此函数的参考文档如下所示。
aws_comprehend_detect_sentiment( input_text, language_code [,max_batch_size] )
要了解更多信息,请参阅《Amazon Comprehend 开发人员指南》中的情绪。
- aws_comprehend_detect_sentiment_confidence
-
此函数衡量针对给定文本检测到的情绪的置信度。它返回一个值(类型为
double
),该值表示 aws_comprehend_detect_sentiment 函数分配给文本的情绪的置信度。置信度是介于 0 和 1 之间的统计指标。置信度越高,可给予结果的权重越大。该函数的文档摘要如下所示。aws_comprehend_detect_sentiment_confidence( input_text, language_code [,max_batch_size] )
在两个函数(aws_comprehend_detect_sentiment_confidence、aws_comprehend_detect_sentiment)中,如果未指定值,则 max_batch_size
使用原定设置值 25。批处理大小应始终大于 0。您可以使用 max_batch_size
优化 Amazon Comprehend 函数调用的性能。较大的批处理大小为了提高 Aurora MySQL 数据库集群上的内存使用率而牺牲更快的性能。有关更多信息,请参阅将 Aurora 机器学习与 Aurora MySQL 结合使用的性能注意事项。
有关 Amazon Comprehend 中情绪检测函数的参数和返回类型的更多信息,请参阅 DetectSentiment
例 示例:使用 Amazon Comprehend 函数的简单查询
以下是一个简单查询的示例,它调用了这两个函数,以查看您的客户对您的支持团队的满意程度。假设您有一个数据库表(support
),该表存储每次请求帮助后的客户反馈。此示例查询将这两个内置函数应用于表的 feedback
列中的文本,并输出结果。函数返回的置信度值是介于 0.0 和 1.0 之间的双精度(double)值。为了获得更具可读性的输出,此查询将结果四舍五入到 6 个小数点。为了便于比较,此查询还按降序对结果进行排序,首先从置信度最高的结果开始。
SELECT feedback AS 'Customer feedback', aws_comprehend_detect_sentiment(feedback, 'en') AS Sentiment, ROUND(aws_comprehend_detect_sentiment_confidence(feedback, 'en'), 6) AS Confidence FROM support ORDER BY Confidence DESC;
+----------------------------------------------------------+-----------+------------+ | Customer 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 in set (0.1898 sec)
例 示例:确定高于特定置信度的文本的平均情绪
典型的 Amazon Comprehend 查询会查找情绪为特定值且置信度大于特定数字的行。例如,以下查询显示了如何确定数据库中文档的平均情绪。该查询只考虑评估的置信度至少为 80% 的文档。
SELECT AVG(CASE aws_comprehend_detect_sentiment(productTable.document, 'en') WHEN 'POSITIVE' THEN 1.0 WHEN 'NEGATIVE' THEN -1.0 ELSE 0.0 END) AS avg_sentiment, COUNT(*) AS total FROM productTable WHERE productTable.productCode = 1302 AND aws_comprehend_detect_sentiment_confidence(productTable.document, 'en') >= 0.80;
将 SageMaker 与 Aurora MySQL 数据库集群结合使用
要从 Aurora MySQL 数据库集群中使用 SageMaker 功能,您需要创建存储函数,以嵌入对 SageMaker 端点的调用及其推理功能。为此,您可以使用 MySQL 的 CREATE FUNCTION
,其方式与您在 Aurora MySQL 数据库集群上执行其他处理任务的方式大致相同。也就是说,您可以为存储函数使用熟悉的 MySQL 数据定义语言(DDL)语句来创建用户定义的函数。
要使用 SageMaker 中部署的模型进行推理,请使用熟悉的 MySQL 数据定义语言 (DDL) 语句为存储函数创建用户定义的函数。每个存储函数表示托管模型的 SageMaker 终端节点。定义此类函数时,请指定模型的输入参数、要调用的特定 SageMaker 终端节点以及返回类型。该函数在对输入参数应用模型后,将返回由 SageMaker 终端节点计算的推理。
所有 Aurora 机器学习存储函数均返回数字类型或 VARCHAR
。您可以使用除 BIT
以外的任何数字类型。不允许使用其他类型,例如 JSON
、BLOB
、TEXT
和 DATE
。
在以下示例中,您可以找到用于处理 SageMaker 的 CREATE FUNCTION
的语法模式。
CREATE FUNCTION function_name
(
arg1
type1
,
arg2
type2
, ...)
[DEFINER = user]
RETURNS mysql_type
[SQL SECURITY { DEFINER | INVOKER } ]
ALIAS Amazon_SAGEMAKER_INVOKE_ENDPOINT
ENDPOINT NAME 'endpoint_name
'
[MAX_BATCH_SIZE max_batch_size
];
这是常规 CREATE FUNCTION
DDL 语句的扩展。在定义 SageMaker 函数的 CREATE FUNCTION
语句中,不要指定函数体;而是要指定函数体通常所在的关键字 ALIAS
。目前,Aurora 机器学习只支持 aws_sagemaker_invoke_endpoint
使用这种扩展语法。您还必须指定 endpoint_name
参数。每个模型的 SageMaker 终端节点可以具有不同的特性。
有关 CREATE FUNCTION
的更多信息,请参阅《MySQL 8.0 参考手册》中的 CREATE PROCEDURE 和 CREATE FUNCTION 语句
max_batch_size
参数是可选的。原定设置情况下,最大批处理大小为 10000。您可以在函数中使用此参数来限制针对 SageMaker 的批处理请求中处理的最大输入数。max_batch_size
参数可以帮助避免因输入过大而导致的错误,或者使 SageMaker 更快地返回响应。此参数影响用于 SageMaker 请求处理的内部缓冲区的大小。为 max_batch_size
指定太大的值可能会导致数据库实例产生大量内存开销。
建议您将 MANIFEST
设置保留为其原定设置值 OFF
。尽管可以使用 MANIFEST ON
选项,但某些 SageMaker 功能无法直接使用通过此选项导出的 CSV。清单格式与 SageMaker 预期的清单格式不兼容。
您为每个 SageMaker 模型创建一个单独的存储函数。需要将函数映射到模型,因为终端节点与特定的模型关联,并且每个模型接受的参数不同。将 SQL 类型用于模型输入和模型输出类型有助于避免在 Amazon 服务之间来回传递数据时出现类型转换错误。您可以控制谁可以应用模型。也可以通过指定表示最大批处理大小的参数来控制运行时特性。
目前,所有 Aurora 机器学习函数都具有 NOT DETERMINISTIC
属性。如果您未明确指定该属性,Aurora 会自动设置 NOT DETERMINISTIC
。提出这一要求是因为可以在不向数据库发出任何通知的情况下更改 SageMaker 模型。如果发生这种情况,则调用 Aurora 机器学习函数可能会在单个事务中针对同一输入返回不同的结果。
不能在 CONTAINS SQL
语句中使用特性 NO SQL
、READS SQL DATA
、MODIFIES SQL DATA
或 CREATE
FUNCTION
。
下面是调用 SageMaker 终端节点来检测异常的示例用法。这里有一个 SageMaker 终端节点 random-cut-forest-model
。random-cut-forest
算法已对相应的模型进行了训练。对于每个输入,模型都会返回一个异常分数。本例显示了分数比平均分数大 3 个标准偏差(大约为 99.9%)的数据点。
CREATE FUNCTION anomaly_score(value real) returns real
alias aws_sagemaker_invoke_endpoint endpoint name 'random-cut-forest-model-demo';
set @score_cutoff = (select avg(anomaly_score(value)) + 3 * std(anomaly_score(value)) from nyc_taxi);
select *, anomaly_detection(value) score from nyc_taxi
where anomaly_detection(value) > @score_cutoff;
返回字符串的 SageMaker 函数的字符集要求
建议为返回字符串值的 SageMaker 函数指定一个字符集 utf8mb4
作为返回类型。如果这不切实际,则为返回类型使用足够大的字符串长度,以容纳以 utf8mb4
字符集表示的值。下面的示例展示了如何为您的函数声明 utf8mb4
字符集。
CREATE FUNCTION my_ml_func(...) RETURNS VARCHAR(5) CHARSET utf8mb4 ALIAS ...
目前,每个返回字符串的 SageMaker 函数都使用字符集 utf8mb4
作为返回值。返回值仍使用此字符集,即使您的 SageMaker 函数为其返回类型隐式或显式声明了不同的字符集,也是如此。如果 SageMaker 函数为返回值声明了不同的字符集,那么如果将返回的数据存储在不够长的表列中,则该数据可能会被无提示截断。例如,带有 DISTINCT
子句的查询将创建一个临时表。因此,由于查询期间在内部处理字符串的方式,SageMaker 函数结果可能会被截断。
将数据导出到 Amazon S3 以进行 SageMaker 模型训练(高级)
我们建议您使用提供的一些算法开始使用 Aurora 机器学习和 SageMaker,并建议您团队中的数据科学家为您提供可与 SQL 代码结合使用的 SageMaker 端点。在下文中,您可以找到有关将自己的 Amazon S3 桶与自己的 SageMaker 模型和 Aurora MySQL 数据库集群结合使用的极少量信息。
机器学习包括两个主要步骤:训练和推理。要训练 SageMaker 模型,请将数据导出到 Amazon S3 存储桶。Jupyter SageMaker 笔记本实例使用 Amazon S3 存储桶在部署模型之前对其进行训练。您可以使用 SELECT INTO OUTFILE S3
语句从 Aurora MySQL 数据库集群中查询数据,并将数据直接保存到 Amazon S3 存储桶中存储的文本文件。然后,笔记本实例将使用 Amazon S3 存储桶中的数据进行训练。
Aurora 机器学习将扩展 Aurora MySQL 中现有的 SELECT INTO OUTFILE
语法,以将数据导出为 CSV 格式。需要此格式的模型可以直接使用生成的 CSV 文件进行训练。
SELECT * INTO OUTFILE S3 's3_uri
' [FORMAT {CSV|TEXT} [HEADER]] FROM table_name
;
该扩展支持标准 CSV 格式。
-
格式
TEXT
与现有的 MySQL 导出格式相同。这是默认格式。 -
格式
CSV
是一种新引入的格式,遵循 RFC-4180中的规范。 -
如果指定可选关键字
HEADER
,则输出文件包含一个标题行。标题行中的标签与SELECT
语句中的列名称相对应。 -
您仍可使用关键字
CSV
和HEADER
作为标识符。
现在,SELECT INTO
的扩展句法和语法如下:
INTO OUTFILE S3 's3_uri
'
[CHARACTER SET charset_name
]
[FORMAT {CSV|TEXT} [HEADER]]
[{FIELDS | COLUMNS}
[TERMINATED BY 'string
']
[[OPTIONALLY] ENCLOSED BY 'char
']
[ESCAPED BY 'char
']
]
[LINES
[STARTING BY 'string
']
[TERMINATED BY 'string
']
]
将 Aurora 机器学习与 Aurora MySQL 结合使用的性能注意事项
Amazon Comprehend 和 SageMaker 服务在由 Aurora 机器学习函数调用时会完成大部分工作。这意味着您可以根据需要独立扩缩这些资源。对于您的 Aurora MySQL 数据库集群,您可以使函数调用尽可能高效。接下来,您可以找到使用 Aurora 机器学习时需要注意的一些性能注意事项。
查询缓存
Aurora MySQL 查询缓存对 Aurora 机器学习函数无效。对于任何调用 Aurora 机器学习函数的 SQL 语句,Aurora MySQL 不会将查询结果存储到查询缓存中。
Aurora 机器学习函数调用的批处理优化
您可以从 Aurora 集群影响 Aurora 机器学习性能的主要方面是针对 Aurora 机器学习存储函数调用的批处理模式设置。机器学习函数通常需要大量开销,因此,分别为每行内容调用外部服务是不切实际的。Aurora 机器学习可以通过将为多行内容进行的外部 Aurora 机器学习服务调用合并为同一批次,来尽可能减少此类开销。Aurora 机器学习将接收对输入行的所有响应,同时在查询运行时以一次一行的形式将响应传回给查询。这种优化可提高 Aurora 查询的吞吐量并减少延迟,而不会改变结果。
创建连接到 SageMaker 终端节点的 Aurora 存储函数时,需要定义批处理大小参数。该参数影响每个对 SageMaker 的基础调用所传输的行数。对于处理大量行的查询,为每一行单独进行 SageMaker 调用的开销可能很大。存储过程处理的数据集越大,批处理大小就可以越大。
如果批处理模式优化可以应用于 SageMaker 函数,您可以通过查看 EXPLAIN PLAN
语句生成的查询计划来确定。在本例中,执行计划中的 extra
列包括 Batched machine learning
。以下示例显示了对使用批处理模式的 SageMaker 函数的调用。
mysql> CREATE FUNCTION anomaly_score(val real) returns real alias aws_sagemaker_invoke_endpoint endpoint name 'my-rcf-model-20191126';
Query OK, 0 rows affected (0.01 sec)
mysql> explain select timestamp, value, anomaly_score(value) from nyc_taxi;
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+--------------------------+
| id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+--------------------------+
| 1 | SIMPLE | nyc_taxi | NULL | ALL | NULL | NULL | NULL | NULL | 48 | 100.00 | Batched machine learning |
+----+-------------+----------+------------+------+---------------+------+---------+------+------+----------+--------------------------+
1 row in set, 1 warning (0.01 sec)
调用内置 Amazon Comprehend 函数之一时,可通过指定可选的 max_batch_size
参数来控制批处理大小。该参数限制每个批次中处理的 input_text
值的最大数。通过一次发送多个项目,减少了 Aurora 和 Amazon Comprehend 之间的往返次数。在使用 LIMIT
子句的查询等情况下,限制批处理大小非常有用。通过使用一个较小的 max_batch_size
值,可以避免调用 Amazon Comprehend 的次数超过输入文本的次数。
用于评估 Aurora 机器学习函数的批处理优化适用于以下情况:
-
选择列表或
WHERE
语句的SELECT
子句中的函数调用。有一些例外,如下所述。 -
VALUES
的INSERT
列表以及REPLACE
语句中的函数调用。 -
UPDATE
语句的SET
值中的 SageMaker 函数。INSERT INTO MY_TABLE (col1, col2, col3) VALUES (ML_FUNC(1), ML_FUNC(2), ML_FUNC(3)), (ML_FUNC(4), ML_FUNC(5), ML_FUNC(6)); UPDATE MY_TABLE SET col1 = ML_FUNC(col2), SET col3 = ML_FUNC(col4) WHERE ...;
监控 Aurora 机器学习
您可以通过查询多个全局变量来监控 Aurora 机器学习批处理操作,如下所示。
show status like 'Aurora_ml%';
可以使用 FLUSH STATUS
语句重置状态变量。因此,自上次重置变量以来,所有数字均表示总计、平均值等。
Aurora_ml_logical_response_cnt
-
在数据库实例用户运行的所有查询中,Aurora MySQL 从 Aurora 机器学习服务接收的响应次数总计。
Aurora_ml_actual_request_cnt
-
在数据库实例用户运行的所有查询中,Aurora MySQL 从 Aurora 机器学习服务接收的请求次数总计。
Aurora_ml_actual_response_cnt
-
在数据库实例用户运行的所有查询中,Aurora MySQL 从 Aurora 机器学习服务接收的响应次数总计。
Aurora_ml_cache_hit_cnt
-
在数据库实例用户运行的所有查询中,Aurora MySQL 从 Aurora 机器学习服务接收的内部缓存命中次数总计。
Aurora_ml_single_request_cnt
-
在数据库实例用户运行的所有查询中,非批处理模式评估的 Aurora 机器学习函数总计。
有关监控从 Aurora 机器学习函数调用的 SageMaker 操作的性能的信息,请参阅监控 Amazon SageMaker。