猜字谜|构建生成式 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_idimage_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 应用实践(一)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

众安保险基于Apache SeaTunnel的生产应用实践

*> 文|曾力 众安保险大数据开发高级专家 编辑整理| 曾辉* 前言 众安保险从2023年4月就开始了数据集成服务的预研工作,意在通过该服务解决当前数据同步场景下的两大痛点,服务化能力薄弱和无分布式同步能力。我们对多种开源数据…

新鲜出炉:小巧优雅的 css-in-js库StyledFc

StyledFc 一个简单的运行时css-in-js库&#xff0c;用于封装react组件 零依赖非常小&#xff0c;< 3kb.运行时生成css支持css变量支持类似less的嵌套css样式支持props动态css支持typescript 在线演示 | Github 安装 pnpm add styledfc # or npm install styledfc # or …

matplotlib绘图初步

文章目录 绘制曲线图完整流程图像属性 绘制曲线图 matplotlib是python中最常用的可视化库&#xff0c;提供了不同坐标系下的二十余种常用图像&#xff0c;并且提供了动态图像绘制的方法&#xff0c;可以满足科学计算中的绝大多数可视化需求。而在matplotlib中&#xff0c;绝大…

HTML5和CSS3提高

一、HTML5的新特性 增加了一些新的标签&#xff0c;新的表单&#xff0c;新的表单属性&#xff0c;IE9以上版本的浏览器才支持 注意&#xff1a; 这些语义化标准主要针对搜索引擎的 新标签可以使用多次 在IE9中需要把这些元素转化为块级元素 新增的多媒体标签 主要包含两个…

iOS面试:3.Object-C相关

一、OC 是动态类型语言吗&#xff1f;OC 是强类型语言吗&#xff1f;为什么&#xff1f; Objective-C (OC) 是一种动态类型语言&#xff0c;同时也是一种强类型语言。 动态类型语言&#xff1a; 在动态类型语言中&#xff0c;变量的类型是在运行时确定的&#xff0c;而不是在编…

PPT复制粘贴后背景变没了怎么处理

目录 1.问题描述&#xff1a;2.解决方法&#xff1a;小结&#xff1a; 1.问题描述&#xff1a; 把一个ppt中的一张ppt粘贴到另一个ppt中&#xff0c;背景变没了&#xff0c;如下所示&#xff1a; 复制&#xff1a; 粘贴&#xff1a; 2.解决方法&#xff1a; 粘贴完后点击 保…

vscode 如何连接 WSL (不能通过 IP 地址连接)

来源&#xff1a;https://www.cnblogs.com/wxdblog/p/17234342.html vscode (remote-ssh) 连接 WSL 不能使用 IP地址 连接&#xff0c;需要安装 WSL 扩展才行

React18源码: task任务调度和时间分片

任务队列管理 调度的目的是为了消费任务&#xff0c;接下来就具体分析任务队列是如何管理与实现的 在 Scheduler.js 中&#xff0c;维护了一个 taskQueue, 任务队列管理就是围绕这个 taskQueue 展开 // Tasks are stored on a min heap var taskQueue - []; var timerQueue …

yolov9目标检测报错AttributeError: ‘list‘ object has no attribute ‘device‘

最近微智启软件工作室在运行yolov9目标检测的detect.py测试代码时&#xff0c;报错&#xff1a; File “G:\down\yolov9-main\yolov9-main\detect.py”, line 102, in run pred non_max_suppression(pred, conf_thres, iou_thres, classes, agnostic_nms, max_detmax_det) Fil…

Linux奇技淫巧之-使用setarch 禁止地址空间随机化

先来看这样一个代码&#xff1a; #include <stdio.h> #include <stdlib.h> #include <unistd.h>int main() {int *p (int*)malloc(sizeof(int));*p 0;while(1){printf("[%d]addr: %p, value: %d\n", getpid(), p, *p);*p *p 1;sleep(1);}retu…

猫头虎分享已解决Bug || ValueError: Data cardinality is ambiguous ‍

博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &#x1f517; 精选专栏&#xff1a; 《面试题大全》 — 面试准备的宝典&#xff01;《IDEA开发秘籍》 — 提升你的IDEA技能&#xff01;《100天精通鸿蒙》 …

gem5学习(25):用于异构SoC的片上网络模型——Garnet2.0

目录 一、Invocation 二、Configuration 三、Topology 四、Routing 五、Flow Control 六、Router Microarchitecture 七、Buffer Management 八、Lifecycle of a Network Traversal 九、Running Garnet2.0 with Synthetic Traffic 官网教程&#xff1a;gem5: Garnet 2…

使用Python制作进度条有多少种方法?看这一篇文章就够了!

前言 偶然间刷到一个视频&#xff0c;说到&#xff1a;当程序正在运算时&#xff0c;会有一个较长时间的空白期&#xff0c;谁也不知道程序运行的进度如何&#xff0c;不如给他加个进度条。 于是我今个就搜寻一下&#xff0c;Python版的进度条都可以怎么写&#xff01; 送书…

多线程和并发

线程 进程&#xff1a;在操作系统中运行的程序&#xff0c;一个进程可以包含多个线程 程序就是指令和数据的有序集合&#xff0c;静态概念 进程就是执行程序的一次执行过程&#xff0c;动态概念系统资源分配的单元 一个进程中包含多个线程&#xff0c;一个进程至少包含一个线…

大蟒蛇(Python)笔记(总结,摘要,概括)——第9章 类

目录 9.1 创建和使用类 9.1.1 创建Dog类 9.1.2 根据类创建实例 9.2 使用类和实例 9.2.1 Car类 9.2.2 给属性指定默认值 9.2.3 修改属性的值 9.3 继承 9.3.1 子类的_init_()方法 9.3.2 给子类定义属性和方法 9.3.3 重写父类中的方法 9.3.4 将实例用作属性 9.3.5 模拟实物 9.…

现货黄金中短线投资该怎么做?

要明确什么是现货黄金的中短线投资&#xff0c;中短线投资是指在短期内&#xff08;一般为几天至几周&#xff09;对现货黄金进行买卖操作&#xff0c;以期获得收益的投资方式。相较于长线投资&#xff0c;中短线投资的风险相对较大&#xff0c;但同时收益也更为可观。那么&…

深入探究 JVM 频繁 Full GC 的排查过程

1. 引言 在当今软件开发领域&#xff0c;Java语言以其跨平台性、面向对象、高性能等特点成为了广泛应用的首选之一。而Java应用程序的核心执行环境就是Java虚拟机&#xff08;JVM&#xff09;&#xff0c;它负责将Java字节码翻译成机器码并执行&#xff0c;是Java程序运行的基…

二手货wordpress企业网站主题模板

二手车wordpress主题模板 简洁的二手车wordpress主题模板&#xff0c;适合做二手车业务的公司官方网站使用。 https://www.jianzhanpress.com/?p3473 wordpress二手物资回收主题 绿色wordpress二手物资回收主题&#xff0c;用于二手物资回收公司WP建站使用。 https://www.…

自动化行业文件数据\资料防泄密软件——天锐绿盾|@德人合科技

天锐绿盾是一款自动化行业文件数据防泄密软件&#xff0c;由德人合科技提供。该软件采用动态加解密技术&#xff0c;能够有效防止公司内部数据泄密&#xff0c;同时支持各种文件格式加密&#xff0c;如CAD、OFFICE、PDF、图纸等。 PC端&#xff1a;https://isite.baidu.com/sit…

git如何保留提交记录的情况下迁移

Git仓库迁移方案 在日常的工作场景中&#xff0c;我们有时候会遇到需要更换Git仓库地址的需求。或者是从一个git仓库托管工具换到另一个git仓库托管工具。这个时候有两种方案&#xff1a; 方案一&#xff1a;不保留历史提交记录 如果你不需要保留原有的历史提交记录&#xf…