写点什么

猜字谜|构建生成式 AI 应用实践(一)

  • 2024-02-23
    山东
  • 本文字数:3704 字

    阅读完需:约 12 分钟

在 2023 亚马逊云科技 re:Invent 之后,细心的开发者们也许已经发现有一个很有趣的动手实验:开发一款可部署的基于大语言模型的字谜游戏:

该款游戏使用了文生图模型为玩家提供一个未知的提示词,玩家需要根据模型生成的图像来猜测该提示词,来完成游戏。该动手实验完整地展示了如何在亚马逊云科技上完整构建生成式 AI 应用程序。

亚马逊云科技开发者社区为开发者们提供全球的开发技术资源。这里有技术文档、开发案例、技术专栏、培训视频、活动与竞赛等。帮助中国开发者对接世界最前沿技术,观点,和项目,并将中国优秀开发者或技术推荐给全球云社区。如果你还没有关注/收藏,看到这里请一定不要匆匆划过,点这里让它成为你的技术宝库!

构建生成式 AI 应用程序实践”系列内容中,我将通过三篇博客来介绍这个有趣的动手实验,并由此展示完整构建基于大模型的生成式 AI 应用的代码实践,以帮助生成式 AI 开发者们来完整了解构建生成式 AI 应用开发的整个流程,这些工作包括:

  • 构建和部署前端程序(包括使用亚马逊云科技 CDK 部署 Streamlit 应用等)

  • 构建和部署后端程序(包括部署实现不同场景功能的三个大模型等)

  • 面向生产环境的持续集成和持续部署(CI/CD)

本文是这个系列的第一篇,将概要介绍如何创建 Amazon SageMaker 笔记本实例,获取完整的前后端程序代码,实验涉及的组件和实现代码文件等内容。

创建 Amazon SageMaker 笔记本实例

你即将开始使用 Stable Diffusion 基础模型结合生成式 AI 和 Amazon SageMaker JumpStart 创建一个猜谜游戏。需要确认你的亚马逊云科技账号已准备就绪

亚马逊云科技账号准备就绪后,首先需要创建一个名为“stable-diffusion”的 Amazon SageMaker 笔记本实例(此处作者创建了一个名为“stable-diffusion”的实例)。实例创建后,需要等待大约 10 分钟,直到其变为“InService”状态。如下图所示:

此处示例显示创建的笔记本实例类型为 ml.m5.xlarge,作者在 ml.t3.medium 笔记本实例也成功完成过这个实验。创建实例时,注意为实例配置合适的 IAM 角色,使其具有访问 S3 和 SageMaker 的权限。如下图所示:

在 Amazon SageMaker 中获取完整程序代码

在上一节中,我们已经创建了 Amazon SageMaker 实例,现在将使用 JupyterLab 终端提取为该实验准备的完整程序代码。点击“Open JupyterLab”进入 JupyterLab Launcher 面板,如下图所示。

点击“Terminal”进入 Terminal 界面。由于代码位于:s3://aws-jam-challenge-resources/genai-charades/generative-charades.zip

因此,我们输入如下命令来获取程序代码包,并解压包获得完整程序代码:

$ cd /home/ec2-user/SageMaker$ aws s3 cp  s3://aws-jam-challenge-resources/genai-charades/generative-charades.zip .$ unzip generative-charades.zip
复制代码

如下图所示:

解压代码包后,在 JupyterLab 左侧会看到一个 generative-charades 的目录(如下截图所示),这个目录下就是我们这个实验的全部代码。从这篇开始的系列博客,我们将一起分析这套代码是如何实现一个生成式 AI 的完整应用的。

应用程序组件构成概述

该生成式 AI 驱动的猜谜游戏将由三个大模型,以及其它组件共同构成。

首先,我们需要一个文字生成图像的大模型来担当图像生成器的工作。在本例中,这个模型还应该能够部署成为一个独立的端点,这样任何想要玩游戏的人,不需要在他们的机器上安装 GPU 即可开展游戏。

其次,我们需要一个文本嵌入的大模型来做评分裁判的工作。在本例中,我们将使用这个文本嵌入模型,把用户提供的答案与实际正确答案进行比较,以反馈给用户最终结果;另外,这个模型也应该能够部署成为一个独立的端点,以响应来自大量游戏玩家的猜谜请求。

最后,我们还需要一个文本生成的大模型来做提示生成的工作。因为我们计划可以选择性地提供一个机制,向用户提供提示,但又不泄露精确的正确提示词本身。

综上所述,该生成式 AI 驱动的猜谜游戏各组件逻辑图,如下图所示:

除了三个大模型做主要功能担当之外,以上架构图还展示了我们为实现完整应用程序而需要的其它各组件,包括:

  • S3 做游戏所需的模型构件提供对象存储等

  • ECS 和 Fargate 封装了游戏所需的服务等

  • Cloudfront 为游戏提供内容缓存等

这些功能我们将通过下面两个 Notebook 和大家一起逐步完成部署。

应用程序部署代码概述

Notebook #1 – 部署三个基础大模型作为后端

第一个 notebook 是 deploy_charades_endpoints.ipynb,如下图所示:

这个 notebook 将逐步实现如何部署三个大模型作为后端支撑。

以部署文本生成图像的大模型为例,我们将使用 Stable Diffusion 1.5(或 2.1)基础版的大模型。以下代码将通过 SageMaker Jumpstart 将 SD 1.5(或 2.1)基础版模型部署为 Amazon SageMaker 端点。

由于 Amazon SageMaker 托管基于 Docker 容器,因此为了将我们的模型部署为端点,我们需要一个 Docker 容器以及用于调用模型进行推理的脚本。Amazon SageMaker 端点的架构如下所示:

幸运的是,Amazon SageMaker Jumpstart 提供了所有这些功能。当我们运行以下代码单元段时,它将打印出我们使用的 Docker 容器、源代码的位置以及我们将要部署的模型 URI:

from sagemaker import image_uris, model_uris, script_uris, hyperparametersfrom sagemaker.model import Modelfrom sagemaker.predictor import Predictorfrom sagemaker.utils import name_from_base
# deploy # model_id = "huggingface-txt2img-runwayml-stable-diffusion-v1-5" model_id = "model-txt2img-stabilityai-stable-diffusion-v2-1-base"
# sd_endpoint_name = name_from_base(f"jumpstart-example-infer-{model_id}")sd_endpoint_name = f"jumpstart-{model_id}"
# Please use ml.g5.xlarge instance type if it is available in your region. ml.g5.xlarge has 24GB GPU compared to 16GB in ml.p3.2xlarge and supports generation of larger and better quality images.inference_instance_type = "ml.g4dn.2xlarge"model_version = '1.1.0'
# Retrieve the inference docker container uri. This is the base HuggingFace container image for the default model above.deploy_image_uri = image_uris.retrieve( region=None, framework=None, # automatically inferred from model_id image_scope="inference", model_id=model_id, model_version=model_version, instance_type=inference_instance_type,)
# Retrieve the inference script uri. This includes all dependencies and scripts for model loading, inference handling etc.deploy_source_uri = script_uris.retrieve( model_id=model_id, model_version=model_version, script_scope="inference")
# Retrieve the model uri. This includes the pre-trained nvidia-ssd model and parameters.model_uri = model_uris.retrieve( model_id=model_id, model_version=model_version, model_scope="inference")
# To increase the maximum response size from the endpoint.env = { "MMS_MAX_RESPONSE_SIZE": "20000000",}
print("deploying image uri:", deploy_image_uri)print("deploying source uri:", deploy_source_uri)print("deploying model uri:", model_uri)
复制代码

以上代码段的作者实际运行输出如下所示,供参考:

Notebook #2 – 部署前端和实现 CI/CD

第二个 notebook 是 CDK-notebook.ipynb,如下图所示:

Amazon SageMaker 端点为三个基础大模型创建完成后,我们还需要使用 亚马逊云科技云开发工具包 (CDK) 来 部署 Streamlit 应用。

亚马逊云科技云开发工具包 (CDK) 是一款开源软件开发框架,可使用代码定义云基础设施并通过 CloudFormation 进行配置。它由两大主要部分组成:

1. CDK Construct 库:包含一系列预先编写、模块化且可重复使用的代码片段,称为构造 (construct)。开发者可以使用、修改和集成这些构造块,快速开发基础设施。该库旨在简化使用服务构建应用程序时,定义和集成各个服务所需的复杂性。

2. CDK 工具包:用于与 CDK 应用交互的命令行工具。您可以使用它来创建、管理和部署 CDK 项目。CDK 支持 TypeScript、JavaScript、Python、Java、C#/.Net 和 Go 等编程语言。开发者可以使用任何一种支持的语言来定义可重复使用的云组件 (construct),然后将它们组合成栈 (stack) 和应用 (app);最后将 CDK 应用部署到 CloudFormation,以配置或更新资源。

亚马逊云科技云开发工具包 (CDK) 的工作原理如下图所示:

在这个 notebook 中,我们将学习 CDK 的基本概念,并构建一个模板,用于部署一个基于我们刚刚生成的模型和 UI 的整体解决方案,从而打包我们的猜谜游戏。

在下一篇文章中,我们将详细介绍如何使用 Amazon SageMaker 来部署这个游戏需要的三个大模型:

  • 文本生成图像模型—Stable Diffusion 1.5(或 2.1)

  • 文本嵌入模型—MiniLM L6 v2

  • 文本生成模型—Falcon 7B Instruct

敬请期待。

文章来源:https://dev.amazoncloud.cn/column/article/65d88f59e3b3f210762c8eed?sc_medium=regulartraffic&sc_campaign=crossplatform&sc_channel=InfoQ

用户头像

还未添加个人签名 2019-09-17 加入

进入亚马逊云科技开发者网站,请锁定 https://dev.amazoncloud.cn 帮助开发者学习成长、交流,链接全球资源,助力开发者成功。

评论

发布
暂无评论
猜字谜|构建生成式 AI 应用实践(一)_亚马逊云科技 (Amazon Web Services)_InfoQ写作社区