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

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

image.png

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

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

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

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

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

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

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

创建 Amazon SageMaker 笔记本实例

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

image.png

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

image.png

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

image.png

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

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

image.png

点击“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

如下图所示:

image.png

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

image.png

应用程序组件构成概述

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

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

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

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

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

image.png

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

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

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

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

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

应用程序部署代码概述

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

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

image.png

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

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

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

image.png

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

from sagemaker import image_uris, model_uris, script_uris, hyperparameters
from sagemaker.model import Model
from sagemaker.predictor import Predictor
from 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)

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

image.png

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

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

image.png

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) 的工作原理如下图所示:

image.png

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

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

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

  • 文本嵌入模型—MiniLM L6 v2

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

敬请期待。

文章来源:猜字谜|构建生成式 AI 应用实践(一)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/404627.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Covalent Network(CQT)与 Movement Labs 达成合作,重新定义 M2 系统区块链数据可用性与性能

Covalent Network(CQT)是行业领先的多链索引器,正在与 Movement Labs 的 M2 展开具有突破性意义的合作。M2 是以太坊上的首个 Move-EVM(MEVM)ZK rollup 。这一战略合作标志着先进的实时数据索引和部署工具,…

如何实现H5和小程序之间相互跳转

嗨,各位小伙伴们,我是你们的好朋友咕噜铁蛋!今天,我要和大家分享一下关于如何实现H5和小程序之间相互跳转的话题。随着移动互联网的发展,H5网页和小程序已经成为了我们日常生活中不可或缺的一部分。那么,如…

SD-WAN组网:打造跨国企业无缝网络连接体验

在数字化转型的时代,越来越多的企业迈向国际化,然而,由于自建网络架构的限制和跨域网络的复杂性,企业在不同地理位置的站点之间难以实现高效的数据互通和协作。这就是为什么SD-WAN成为跨国企业组网的理想选择的原因。 跨国企业常见…

vue中使用wangEditor富文本编辑器

jsd-2306-vue-01: 教学项目教学项目教学项目教学项目教学项目 2306-vue-baking-teacher: 教学项目教学项目教学项目教学项目 一、脚手架工程中使用富文本编辑器wangEditor 1.通过以下命令 安装wangEditor npm i wangeditor -S 2.在main.js文件中添加以下配置信息 //引入wa…

python 打包 apk

转换之前python代码需要使用指定的框架才能转换,列如:kivy from kivy.app import App from kivy.uix.boxlayout import BoxLayout from kivy.uix.button import Buttonimport time import pyautogui import threadingstatus False# 这是一个将被线程执…

[ 云计算 | AWS 实践 ] Java 应用中使用 Amazon S3 进行存储桶和对象操作完全指南

本文收录于【#云计算入门与实践 - AWS】专栏中,收录 AWS 入门与实践相关博文。 本文同步于个人公众号:【云计算洞察】 更多关于云计算技术内容敬请关注:CSDN【#云计算入门与实践 - AWS】专栏。 本系列已更新博文: [ 云计算 | …

HTML5技术实现的小钢琴

HTML5技术实现的小钢琴 用HTML5实现的小钢琴&#xff0c;按下钢琴键上的相应字母用或用鼠标点击钢琴键发声&#xff0c;源码如下&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"v…

idea如何在一个service窗口中显示多个服务教程

idea在service窗口中显示多个服务 展示效果如下: 找到.idea > workspace.xml 中找到 RunDashboard 替换成如下 <component name"RunDashboard"><option name"configurationTypes"><set><option value"SpringBootApplicatio…

DataDreamer:让创建自定义数据集轻松无比!还自带标注!

编辑&#xff1a;OAK中国 首发&#xff1a;oakchina.cn 喜欢的话&#xff0c;请多多&#x1f44d;⭐️✍ 内容可能会不定期更新&#xff0c;官网内容都是最新的&#xff0c;请查看首发地址链接。 ▌前言 Hello&#xff0c;大家好&#xff0c;这里是OAK中国&#xff0c;我是Ash…

易宝OA DownloadFile 任意文件读取漏洞复现

0x01 产品简介 易宝OA系统是一种专门为企业和机构的日常办公工作提供服务的综合性软件平台,具有信息管理、 流程管理 、知识管理(档案和业务管理)、协同办公等多种功能。 0x02 漏洞概述 易宝OA系统DownloadFile接口处存在任意文件读取漏洞,未授权的攻击者可以利用此漏洞…

【力扣 - 搜索插入位置】

题目描述 给定一个排序数组和一个目标值&#xff0c;在数组中找到目标值&#xff0c;并返回其索引。如果目标值不存在于数组中&#xff0c;返回它将会被按顺序插入的位置。 请必须使用时间复杂度为 O(log n) 的算法。 题解1 int searchInsert(int* nums, int numsSize, in…

69.x的平方根

目录 一、题目 二、暴力求解 三、二分查找&#xff08;改进&#xff09; 一、题目 https://leetcode.cn/problems/sqrtx/description/ 二、暴力求解 1.溢出问题 2.x为1 class Solution { public:int mySqrt(int x) {if(x 1)return 1;long long i0;for(i;i<x/2;i){if(…

C#中的关键字params的用法

C#中有一个关键字params&#xff0c;它相对于一些主要关键字来说&#xff0c;还算是较为低频的&#xff0c;但也会用到。我们可以了解和学习下。 一、定义及约束 params关键字的作用在于可以让方法参数的数目可变。 params的参数类型必须是一维数组。 一旦在方法加入了para…

qt-动画圆圈等待-LED数字

qt-动画圆圈等待-LED数字 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "LedNumber.h" #include <QLabel>LEDNumber::LEDNumber(QWidget *parent) : QWidget(parent) {//设置默认宽高比setScale((float)0.6);//设置默认背景色se…

发布6-JRT摄像头调用

截止这之前&#xff0c;JRT已经拥有Web、打印、导出Excel、监听程序、Linux命令、连设备这些功能&#xff0c;还缺摄像头调用功能。本次补全摄像头调用支持&#xff0c;同时支持把摄像头内嵌到浏览器来供业务做功能。 演示视频 内嵌效果 弹出效果 demo代码 <!DOCTYPE…

镜像的使用条件

Q&#xff1a;老师&#xff0c;我怎么才能把做了一半的脸直接复制呢&#xff1f; A&#xff1a;镜像&#xff0c;但是镜像是有条件的 Q&#xff1a;镜像的使用条件有哪些呢&#xff1f; A&#xff1a; 1.对称面不能存在&#xff0c;必须是镂空的&#xff08;以哪个面做对称…

如何解决服务器之间大量数据文件传输交换慢的问题?

在信息化时代&#xff0c;企业运营的核心之一便是服务器间的数据交换效率。数据流通的速度直接关系到业务的响应速度和企业的整体表现。然而&#xff0c;数据传输速度缓慢的问题时常成为企业发展的绊脚石&#xff0c;可能导致严重的业务损失。本文将深入探讨造成服务器数据传输…

漫漫数学之旅031

文章目录 经典格言数学习题古今评注名人小传 - 经典格言 如果没有数学知识&#xff0c;这个世界的事物是无法搞清楚的。——罗杰培根&#xff08;Roger Bacon&#xff09; 好的&#xff0c;各位看官&#xff0c;让我们来听听罗杰培根这位中世纪的“科学老顽童”是怎么说的&…

招聘不能停!达坦科技2024实习岗位等你来~

01、我们是谁 达坦科技始终致力于打造高性能Al Cloud 基础设施平台DatenLord&#xff0c;积极推动AI应用的落地。DatenLord通过软硬件深度融合的方式&#xff0c;提供高性能存储和高性能网络。为AI 应用提供弹性、便利、经济的基础设施服务&#xff0c;以此满足不同行业客户对…

2024开年,手机厂商革了自己的命

文&#xff5c;刘俊宏 编&#xff5c;王一粟 2024开年&#xff0c;AI终端的号角已经由手机行业吹响。 OPPO春节期间就没闲着&#xff0c;首席产品官刘作虎在大年三十就迫不及待地宣布&#xff0c;OPPO正式进入AI手机时代。随后在开年后就紧急召开了AI战略发布会&#xff0c;…