0基础学会在亚马逊云科技AWS上搭建生成式AI云原生Serverless问答QA机器人(含代码和步骤)
小李哥今天带大家继续学习在国际主流云计算平台亚马逊云科技AWS上开发生成式AI软件应用方案。上一篇文章我们为大家介绍了,如何在亚马逊云科技上利用Amazon SageMaker搭建、部署和测试开源模型Llama 7B。下面我将会带大家探索如何搭建高扩展性、高可用的完全托管云原生基础设施,让终端用户通过云平台访问到部署的开源AI大语言模型。下面就是小李哥做的一个简单Meta Llama 7B问答聊天机器人界面。
这是小李哥的AWS生成式AI云计算架构介绍第二篇文章,在这个系列里我会带大家介绍所有的方案技术讲解、具体的操作细节和分享项目的代码,目的就是为了帮助大家0基础即可上手国际最热门的云计算平台亚马逊云科技AWS。也欢迎大家关注小李哥,以免错过本系列中其他的优质GenAI解决方案。
首先我们看架构图:
方案架构图:
涉及到的亚马逊云科技云计算服务:
本云原生方案包含了多个热门的云原生、全托管的亚马逊云科技服务,涉及网络、开发、计算和存储。全部的服务列表如下:
1. 网络CDN加速:Amazon CloudFront
Amazon CloudFront 是一种内容分发网络 (CDN) 服务,能够快速将数据、视频、应用程序和API安全地传递给全球客户。其优势在于通过分布在全球的边缘位置提供低延迟和高传输速度,同时具备与AWS服务的无缝集成,确保安全和高性能的内容交付。
2. 前端页面托管服务器: Amazon S3
Amazon S3(Simple Storage Service)是一个高度可扩展的对象存储服务,适用于存储和检索任何数量的数据。其优势在于提供11个9的数据持久性和冗余存储,确保前端页面的高可用性和快速访问,并且支持静态网站托管,简化了网站的部署和管理。
3. API对外网关节点:Amazon API Gateway
Amazon API Gateway 是一种完全托管的服务,使开发者能够轻松创建、发布、维护、监控和保护API。其优势在于可以处理成千上万的并发API调用,确保API的高可用性和低延迟,并且与AWS Lambda无缝集成,实现真正的无服务器架构。
4. 云原生Serverless代码托管服务: AWS Lambda
AWS Lambda 是一种无服务器计算服务,允许用户运行代码而无需预置或管理服务器。其优势在于自动扩展并仅在代码运行时计费,降低了运营成本。Lambda与其他AWS服务深度集成,简化了事件驱动架构的实现,提升了应用程序的灵活性和响应能力。
搭建云原生Serverless应用的具体步骤:
1. 首先我们打开AWS控制台,进入Lambda,点击我们的Lambda函数“endpoint_test_function”
2. 接着我们进入Lambda配置页面,配置Lambda函数
3. 点击“Edit”修改Lambda函数的基础配置
4.修改Timeout时间到1分钟。Lambda的timeout配置是函数处理请求的超时时间限额,Lamda可配置的最长超时时间为15分钟,默认时间是3秒,我们需要根据我们的代码运行时间进行对应修改。
5. 接下来,我们为lamda函数中的代码配置环境变量,点击“Edit”
6. 我们将前一篇文章中,最后一步获取的AI大语言模型API节点URL复制到Value部分。
7.接下来我们进入Lambda中查看调用AI大语言模型的Python代码。小李哥将代码分享给大家,方便大家动手实践。
# Import necessary libraries
import json
import boto3
import os
import re
import logging# Set up logging
logger = logging.getLogger()
logger.setLevel(logging.INFO)# Create a SageMaker client
sagemaker_client = boto3.client("sagemaker-runtime")# Define Lambda function
def lambda_handler(event, context):# Log the incoming event in JSON formatlogger.info('Event: %s', json.dumps(event))# Clean the body of the event: remove excess spaces and newline characterscleaned_body = re.sub(r'\s+', ' ', event['body']).replace('\n', '')# Log the cleaned bodylogger.info('Cleaned body: %s', cleaned_body)# Invoke the SageMaker endpoint with the cleaned body as payload and content type as JSONresponse = sagemaker_client.invoke_endpoint(EndpointName=os.environ["ENDPOINT_NAME"], ContentType="application/json", Body=cleaned_body)# Load the response body and decode itresult = json.loads(response["Body"].read().decode())# Return the result with status code 200 and the necessary headersreturn {'statusCode': 200,'headers': {'Access-Control-Allow-Headers': 'Content-Type','Access-Control-Allow-Origin': '*','Access-Control-Allow-Methods': 'OPTIONS,POST'},'body': json.dumps(result)}
代码解释:
第26行到第34行之间的代码
这段代码使用请求体调用SageMaker端点,然后保存响应。
第33行到第45行之间的代码
这段代码解码接收到的响应,并以结构化的JSON格式返回。
提供了状态码200以及必要的头信息(主要用于CORS)。
8. 接下来我们进入S3存储桶查看前端代码。
前端代码如下:
<!DOCTYPE html>
<html>
<head><title>Introduction to Generative AI</title><style>body {font-family: Amazon Ember, sans-serif;margin: 0;padding: 0;background: #f4f4f4;}.container {width: 80%;margin: auto;overflow: hidden;}#apiForm, #response {background: #fff;margin: 20px 0;padding: 20px;border: 1px solid #ddd;border-radius: 5px;}#apiForm label, #response label {display: block;margin-bottom: 5px;}#apiForm input[type="text"], #apiForm textarea, #response textarea {width: 100%;padding: 10px;margin-bottom: 20px;border-radius: 5px;border: 1px solid #ddd;box-sizing: border-box;}#apiForm button {padding: 10px 20px;background: #009578;color: #fff;border: none;border-radius: 5px;cursor: pointer;}h2, h5 {text-align: center;}</style>
</head>
<body><div class="container"><h2>Introduction to Generative AI</h2><div id="apiForm"><label for="apiGatewayUrl">API Gateway URL:</label><input type="text" id="apiGatewayUrl"><label for="content">Prompt:</label><textarea id="content" rows="10"></textarea><button onclick="callApi()">Generate</button></div><div id="response"><label for="output">Output:</label><textarea id="output" rows="10" readonly></textarea></div><h5><i>Please note: As with all AI-powered applications, outputs should be reviewed for accuracy and appropriateness.</i></h5></div><script>function callApi() {var apiGatewayUrl = document.getElementById('apiGatewayUrl').value;var content = document.getElementById('content').value;fetch(apiGatewayUrl, {method: 'POST',headers: {'Content-Type': 'application/json'},body: JSON.stringify({ inputs: content, parameters: { 'max_new_tokens': 400} })}).then(response => {if (!response.ok) {throw new Error(`HTTP error! status: ${response.status}`);}return response.json();}).then(data => {if(data && data[0] && data[0].generated_text){document.getElementById('output').value = data[0].generated_text;} else {throw new Error('Response is not in the expected format');}}).catch((error) => {console.error('Error:', error);alert('An error occurred: ' + error.message);});}</script>
</body>
</html>
9. 下面我们在AWS CDN Cloudfront中获取问答机器人UI的URL
10. 将URL复制到浏览器中,打开后出现问答机器人的UI。这里需要我们获取一个API Gateway的URL。
11. 我们进入到API Gateway中,获取Invoke URL
12. 最后如下图所示,填入Invoke URL和大家想问的问题,就可以得到Llama 7B的模型回复了。
相关文章:
0基础学会在亚马逊云科技AWS上搭建生成式AI云原生Serverless问答QA机器人(含代码和步骤)
小李哥今天带大家继续学习在国际主流云计算平台亚马逊云科技AWS上开发生成式AI软件应用方案。上一篇文章我们为大家介绍了,如何在亚马逊云科技上利用Amazon SageMaker搭建、部署和测试开源模型Llama 7B。下面我将会带大家探索如何搭建高扩展性、高可用的完全托管云原…...
[PaddlePaddle飞桨] PaddleOCR图像小模型部署
PaddleOCR的GitHub项目地址 推荐环境: PaddlePaddle > 2.1.2 Python > 3.7 CUDA > 10.1 CUDNN > 7.6pip下载指令: python -m pip install paddlepaddle-gpu2.5.1 -i https://pypi.tuna.tsinghua.edu.cn/simple pip install paddleocr2.7…...
C语言 | Leetcode C语言题解之第227题基本计算题II
题目: 题解: int calculate(char* s) {int n strlen(s);int stk[n], top 0;char preSign ;int num 0;for (int i 0; i < n; i) {if (isdigit(s[i])) {num num * 10 (int)(s[i] - 0);}if (!isdigit(s[i]) && s[i] ! || i n - 1) {s…...
kafka.common.KafkaException: Socket server failed to bind to xx:9092
部署分布式集群的时候遇到的错误。 解决方案: 修改config下的server.properties,添加 listenersPLAINTEXT://:9092 advertised.listenersPLAINTEXT://自己的服务器ip:9092 然后重新启动,检查进程是否存在ps -aux | grep kafka。 成功启动。...
【JS+H5+CSS实现烟花特效】
话不多说直接上代码 注意:背景图路径是picture/star.jpg,自己在同级目录先创键picture目录再下载一张图片命名为star.jpg HTML: <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"vi…...
uniapp小程序使用webview 嵌套 vue 项目
uniapp小程序使用webview 嵌套 vue 项目 小程序中发送 <web-view :src"urlSrc" message"handleMessage"></web-view>export default {data() {return {urlSrc: "",};},onLoad(options) {// 我需要的参数比较多 所以比较臃肿// 获取…...
命令模式在金融业务中的应用及其框架实现
引言 命令模式(Command Pattern)是一种行为设计模式,它将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化,并且支持请求的排队和撤销操作。在金融业务中,命令模式可以用于实现交易请求、撤销操作等功能。本文将介绍命令模式在金融业务中的使用,并探讨…...
WordPress的性能优化有哪些方法?
WordPress的性能优化方法主要包括以下几个方面: 1. 使用缓存插件:缓存插件可以降低服务器负载,提高网站加载速度。常用的缓存插件有WP Rocket、WP Fastest Cache和Cache Enabler等。 2. 代码压缩和整合:通过压缩JavaScript、CSS…...
【Python基础】代码如何打包成exe可执行文件
本文收录于 《一起学Python趣味编程》专栏,从零基础开始,分享一些Python编程知识,欢迎关注,谢谢! 文章目录 一、前言二、安装PyInstaller三、使用PyInstaller打包四、验证打包是否成功五、总结 一、前言 本文介绍如何…...
Golang | Leetcode Golang题解之第227题基本计算器II
题目: 题解: func calculate(s string) (ans int) {stack : []int{}preSign : num : 0for i, ch : range s {isDigit : 0 < ch && ch < 9if isDigit {num num*10 int(ch-0)}if !isDigit && ch ! || i len(s)-1 {switch preS…...
云端美味:iCloud中食谱与餐饮计划的智能存储方案
云端美味:iCloud中食谱与餐饮计划的智能存储方案 在数字化生活管理中,我们的食谱和餐饮计划是日常饮食健康与乐趣的重要部分。iCloud提供了一个无缝的解决方案,让我们可以在所有设备上存储、同步和访问这些珍贵的信息。本文将详细介绍如何在…...
leetcode:1332. 删除回文子序列(python3解法)
难度:简单 给你一个字符串 s,它仅由字母 a 和 b 组成。每一次删除操作都可以从 s 中删除一个回文 子序列。 返回删除给定字符串中所有字符(字符串为空)的最小删除次数。 「子序列」定义:如果一个字符串可以通过删除原字…...
智慧交通的神经中枢:Transformer模型在智能交通系统中的应用
智慧交通的神经中枢:Transformer模型在智能交通系统中的应用 随着城市化进程的加快,交通拥堵、事故频发、环境污染等问题日益严重。智能交通系统(ITS)作为解决这些问题的关键技术之一,受到了广泛关注。Transformer模型…...
PCIe驱动开发(1)— 开发环境搭建
PCIe驱动开发(1)— 开发环境搭建 一、前言 二、Ubuntu安装 参考: VMware下Ubuntu18.04虚拟机的安装 三、QEMU安装 参考文章:QEMU搭建X86_64 Ubuntu虚拟系统环境 四、安装Ubuntu 下载地址:https://old-releases.ubuntu.com…...
YOLOv10改进 | Conv篇 | CVPR2024最新DynamicConv替换下采样(解决低FLOPs陷阱)
一、本文介绍 本文给大家带来的改进机制是CVPR2024的最新改进机制DynamicConv其是CVPR2024的最新改进机制,这个论文中介绍了一个名为ParameterNet的新型设计原则,它旨在在大规模视觉预训练模型中增加参数数量,同时尽量不增加浮点运算&#x…...
变革设计领域:Transformer模型在智能辅助设计中的革命性应用
变革设计领域:Transformer模型在智能辅助设计中的革命性应用 在人工智能技术的推动下,智能辅助设计(Intelligent Assisted Design, IAD)正逐渐成为现实。Transformer模型,以其卓越的处理序列数据的能力,为…...
Spring——配置说明
1. 别名 别名:如果添加了别名,也可以使用别名获取这个对象 <alias name"user" alias"user2"/> 2. Bean的配置 id:bean 的唯一标识符,也就是相当于我们学的对象名class:bean 对象所对应的…...
禁用华为小米?微软中国免费送iPhone15
微软中国将禁用华为和小米手机,要求员工必须使用iPhone。如果还没有iPhone,公司直接免费送你全新的iPhone 15! 、 这几天在微软热度最高的话题就是这个免费发iPhone,很多员工,收到公司的通知。因为,登录公司…...
nginx初理解
没有ngix时,有两台服务器,供访问 1. 现在有两台服务器上同样的路径下都放了一个, 都能通过ip加端口访问到页面 后端项目 (查看tomcat中的配置中的 server.xml,能找到项目路径) tomacat 也都有 两个…...
FreeCAD源码分析:属性系统
按照面向对象设计(Object-Oriented Design, OOD)的信条,OOD大体上包括两方面的内涵:一方面,需要将业务数据抽象成(树状/层状)数据对象,这就是所谓的数据对象模型(Data Object Model);另一方面就是职责的分摊与聚合&…...
C++入门 模仿mysql控制台输出表格
一、 说明 控制台输出表格,自适应宽度 二、 源码 #include <iostream> #include <map> #include <string> #include <vector>using namespace std;void printTable(vector<vector<string>> *pTableData) {int row pTableDa…...
SpringBoot新手快速入门系列教程五:基于JPA的一个Mysql简单读写例子
现在我们来做一个简单的读写Mysql的项目 1,先新建一个项目,我们叫它“HelloJPA”并且添加依赖 2,引入以下依赖: Spring Boot DevTools (可选,但推荐,用于开发时热部署)Lombok(可选,…...
开源大势所趋
一、开源项目的发展趋势 技术栈多样化与专业化:随着技术的不断进步,开源项目涵盖了从云计算、大数据、人工智能到区块链、物联网等各个领域,技术栈日益丰富和专业化。这种趋势使得开发者能够根据自己的需求选择最适合的技术工具,促…...
智能无人机飞行控制系统:基于STM32的设计与实现(内附资料)
摘要 智能无人机的飞行控制系统是确保无人机安全、高效运行的核心。本文将探讨基于STM32微控制器的智能无人机飞行控制系统的设计与实现,包括系统架构、关键组件选择、控制算法开发以及代码实现。 1. 引言 智能无人机在军事侦察、物流配送、环境监测等多个领域展…...
centos磁盘空间满了-问题解决
报错问题解释: CentOS系统在运行过程中可能会出现磁盘空间不足的错误。这通常发生在以下几种情况: 系统日志文件或临时文件过大导致磁盘空间不足。 安装了大量软件或文件而没有清理无用文件。 有可能是某个进程占用了大量磁盘空间。 问题解决方法&a…...
宝塔:如何开启面板ssl并更新过期ssl
1、登录宝塔面板 > 前往面板设置 > 最上方的安全设置 > 面板SSL > 面板SSL配置 打开后先查看自签证书的时间,如果时间是已经过期的,就前往这个目录,将该目录下所有文件都删掉 重新回到面板SSL配置的位置,打开后会看到…...
大白话讲解AI大模型
大白话讲解大模型 大模型的发展重要大模型发展时间线 大模型的简单原理-训练⼤模型是如何训练并应⽤到场景中的?如果训练私有化模型 模型:model 语料库:用于训练模型的数据 大模型的发展 详细信息来源:DataLearner 2022年11月底…...
pandas+pywin32操作excel办公自动化
import pandas as pd import re import win32com.client as win32 from win32com.client import constants import os import os.path as osp #读取表格 pathos.getcwd() fposp.join(path,fuck_demo.xlsx) dfpd.read_excel(fp,header1,usecols[序号,光缆段落名(A端…...
防火墙(ensp USG6000v)---安全策略 + 用户认证综合实验
一. 题目 1) 拓扑 2)要求 1. DMZ区内的服务器,办公区仅能在办公时间内(9:00 -- 18: 00)可以访问,生产区的设备全天可以访问 2.生产区不允许访问互联网,办公区和游客区允许访问互联网 3.办公区设备10.0.2.10不充许…...
Java使用POI导出后数字类型为常规类型,不能计算
今日日常撸码,甲方提出来excel导出后,数字类型那一列是常规类型,并不是数字,无法进行计算,如下图: 这里和导出的字段类型有关,我用的是POI进行excel的导出,需要在实体类上标注出需要…...
商城网站开发报/seo营销网站
《计算机逻辑设计》是2015年人民邮电出版社出版的图书,作者是余立功。书 名计算机逻辑设计别 名foundation of computer logic design作 者余立功类 别高等教育规划教材出版社人民邮电出版社出版时间2015年8月1日页 数296 页定 价45.00开 本16…...
怎么把自己做的网站放到百度上/网络营销推广的方法有哪些
文章目录一、提出问题二、主线程与子线程三、线程池四、异常的捕获五、事务的回滚一、提出问题 最近有一位朋友问了我这样一个问题,问题的截图如下: 这个问题问的相对比较笼统,我来稍微详细的描述下:主线程向线程池提交了一个任务…...
深圳高端家具公司/上海专业seo排名优化
C初始化之超级大坑起因类中定义成员变量的初始化问题解决方法采用如下初始化方法栈区定义类的加括号与不加括号问题起因 平时很少用leetcode写题(一般都是用ACWing)今天看到个题用leetcode写了哈,结果遇到了两个语法大坑 类中定义成员变量的…...
淄博网站建设设计/小程序开发公司十大排名
编者按:原文作者乔纳森丹尼可(Jonathan Danylko)是一位自由职业的web架构师和程序员,编程经验已超过20年,涉足领域有电子商务、生物技术、房地产、医疗、保险和公用事业。正如乔纳森在文中所言,本文适合刚毕…...
营销型高端网站建设价格/百度竞价冷门产品
欢迎关注”生信修炼手册”!对于任意的表达量数据,定量加差异分析都是一套经典的组合拳。当我们想要展示特定基因的组间差异结果时,下面这种图表就派上了用场横坐标为基因,纵坐标是基因表达量,每一组的表达量采用了箱体图的形式来展…...
品牌网站建设解决/外贸网站模板
危险函数 mixed eval (string $code) 把字符串作为PHP代码执行bool assert (mixed $assertion [,string $description]) 替代eval函数。相同功能。mixed preg_replace(mixed $pattern,mixed $replacement,mixed $subject[,int $limit-1 [,int&$count]])/e修正符使preg_rep…...