AWS 上的生成式 AI - Lambda
AWS Lambda 是 AWS 提供的无服务器计算服务,允许您运行代码而无需管理服务器。它会根据传入的请求自动扩展您的应用程序,并确保仅在需要时使用资源。
对于生成式 AI,AWS Lambda 可用于执行实时推理、预处理数据或为 AI 模型编排工作流等任务。您还可以将其与其他 AWS 服务(如 SageMaker 或 EC2)集成,以构建用于训练、部署和运行 Gen AI 模型的完整解决方案。
用于生成式 AI 的 AWS Lambda 的功能
以下列出了 AWS Lambda 的一些主要功能,这些功能对于训练和部署生成式 AI 非常有用 −
- 无服务器执行
- 事件驱动架构
- 自动扩展
- 成本效益
使用 AWS Lambda 在生成式 AI 中进行实时推理
AWS Lambda 可与经过训练的生成式 AI 模型一起使用,以提供实时推理功能。
例如,一旦文本生成使用 SageMaker 部署模型后,Lambda 可用于在收到新输入时实时触发预测。它对聊天机器人和内容创建等应用程序很有用。
实施示例
以下示例将展示如何使用 AWS Lambda 和 SageMaker 进行实时文本生成。
步骤 1:先决条件
实施此示例的先决条件是 −
- 作为端点部署的 AWS SageMaker 模型。示例:GPT-2 模型
- 已安装 boto3 库,您可以使用它从 Lanbda 函数调用 AWS SageMaker 端点。
如果您没有安装 boto3,可以使用以下命令安装它 −
pip install boto3
第 2 步:AWS Lambda 函数
下面给出了 AWS Lambda 函数的 Python 代码,该函数调用 SageMaker 端点进行实时文本生成 −
import boto3 import json # 初始化 SageMaker 运行时客户端 sagemaker_runtime = boto3.client('sagemaker-runtime') # 指定您的 SageMaker 端点名称 # 该模型必须已部署 SAGEMAKER_ENDPOINT_NAME = 'your-sagemaker-endpoint-name' def lambda_handler(event, context): # 从 Lambda 事件中提取输入文本 # 例如,来自聊天机器人的用户输入 user_input = event.get('input_text', 'Hello!') # 为 SageMaker 模型创建有效负载 # 准备用于文本生成的输入 payload = json.dumps({'inputs': user_input}) # 调用 SageMaker 端点以生成文本 response = sagemaker_runtime.invoke_endpoint( EndpointName = SAGEMAKER_ENDPOINT_NAME, ContentType = 'application/json', Body = payload ) # 解析来自 SageMaker 的响应 result = json.loads(response['Body'].read().decode()) # 从响应中提取生成的文本 generated_text = result.get('generated_text', 'No response generated.') # 将生成的文本返回给用户(作为 Lambda 输出) return { 'statusCode': 200, 'body': json.dumps({ 'input_text': user_input, 'generated_text': generated_text }) }
步骤 3:部署 Lambda 函数
编写 Lambda 函数后,我们需要部署它。请按照下面给出的步骤 −
创建 Lambda 函数
- 首先,登录到您的 AWS Lambda
- 创建一个新的 Lambda 函数并选择 Python 3.x 作为运行时。
- 最后,将上述代码添加到您的 Lambda 函数中。
设置 IAM 权限
Lambda 函数的执行角色应具有调用 SageMaker 端点的权限。为此,请附加 AmazonSageMakerFullAccess 或具有 SageMaker 访问权限的自定义角色。
步骤 4:测试 Lambda 函数
现在,您可以通过传递带有 input_text 字段的示例事件来手动测试 Lambda 函数,如下所示 −
{ "input_text": "Once upon a time" }
输出将是一个 JSON 响应,其中包含用户的输入和模型生成的文本,如下所示 −
{ "input_text": "Once upon a time", "generated_text": "Once upon a time, there was a king who ruled a beautiful kingdom..." }