Meta 刚刚发布了 Llama 2 大模型。如果你和我们一样,你一定会迫不及待地想要亲自动手并用它来构建。
推荐:用 NSDT设计器 快速搭建可编程3D场景。
使用任何类型的 LLM 进行构建的第一步是将其托管在某处并通过 API 使用它。 然后你的开发人员可以轻松地将其集成到你的应用程序中。本指南将介绍如何在Amazon SageMaker 上托管 Llama 2 模型,以及如何利用 AWS Lambda 和 AWS API Gateway 通过 API 使用模型。
在开始之前,请前往amazon aws 登录或注册帐户。新帐户将自动获得免费套餐访问权限,这确实提供了一些 Sagemaker 积分,但请留意它们,因为根据你的服务器选择,账单可能会高得离谱。
1、为什么使用Llama2?
当我可以使用 Open AI API 时,为什么要使用 llama 2?
3个原因:
- 安全性------让敏感数据远离第三方供应商
- 可靠性------确保您的应用程序有正常运行时间
- 一致性------每次提出问题都会得到相同的结果
2、托管Llama2模型
进入 AWS 仪表板后,在搜索栏中搜索 AWS Sagemaker,然后单击它以转到 AWS Sagemaker
AWS Sagemaker 是 AWS 用于部署和托管机器学习模型的解决方案。
2.1 在 AWS Sagemaker 上设置域
单击左侧边栏上的域
单击"创建域"
确保选中"快速设置"框
使用你选择的域填写下面的表格,并填写其余选项,如屏幕截图中所示。
如果你对此不熟悉,请在执行角色类别中选择创建新角色。 否则,请选择之前可能创建过的角色。
单击表单上的"提交"以创建你的域
域创建完成后,你将看到此屏幕
记下在此处看到的用户名,因为下一步部署我们的模型需要它
如果你的域创建时出现错误,可能是由于用户权限或 VPC 配置造成的。
2.2 启动 Sagemaker Studio 会话
域创建完成后,单击左侧边栏中的 Studio 链接
选择你之前创建的域和用户配置文件,然后单击"Open Studio"
这将带你进入 Jupyter 实验室工作室会话,如下所示:
2.3 选择 Llama-2--7b-chat 模型
我们将部署 llama 2 模型的聊天优化版和 7b版本。
有一个更强大的 70b 型号,它更加稳定,出于演示目的,它的成本太高,所以我们将使用较小的型号
单击 SageMaker Jumpstart 选项卡下左侧栏中的模型、笔记本、解决方案
在搜索栏中搜索 Llama 2 模型。 我们正在寻找 7b 聊天模型。 点击模型
如果没有看到此模型,那么可能需要关闭并重新启动工作室会话
这将带你进入模型页面。 你可以更改最适合你的用例的部署设置,但我们将继续使用默认的 Sagemaker 设置并按原样部署模型
70B 版本需要强大的服务器,因此如果你的帐户无权访问它,你的部署可能会出错。 在这种情况下,请向 AWS 服务配额提交请求。
等待 5-10 分钟以完成部署并确认屏幕显示
记下模型的端点名称,因为你需要它来通过 API 使用模型。
至此,你现在已经完成了托管模型的第一部分。
2、通过 API 使用Llama 2模型
首先进入AWS Lambda创建Lambda函数,lambda 函数将用于调用 LLM 模型的端点。
在AWS控制台搜索栏中搜索Lambda服务,然后单击Lambda服务
单击"Create Function":
输入正确的函数名称(无论什么),选择Python 3.10作为运行时和x86_64架构。 然后点击创建函数
3.1 指定模型的端点
输入前面最后一步中的 LLM 模型的端点名称作为环境变量
单击新创建的模型中的"配置"选项卡
单击环境变量,然后单击编辑
单击下一个屏幕上的"Add environment variable":
输入 ENDPOINT_NAME 作为键,输入模型的端点名称作为值。 单击"保存"
你可以为想要的键添加任何内容,但它需要与我们在代码中编写的内容相匹配以便稍后调用该函数
3.2 编写调用 Llama 模型的代码
返回"代码"选项卡,然后复制并粘贴以下代码
import os
import io
import boto3
import json
# grab environment variables
ENDPOINT_NAME = os.environ['ENDPOINT_NAME']
runtime= boto3.client('runtime.sagemaker')
def lambda_handler(event, context):
response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
ContentType='application/json',
Body=event['body'],
CustomAttributes="accept_eula=true")
result = json.loads(response['Body'].read().decode())
return {
"statusCode": 200,
"body": json.dumps(result)
}
代码插入成功后点击"Deploy"进行部署:
4、将Lambda 函数接入 AWS API Gateway
转到 Lambda 函数的主屏幕并单击添加触发器
在"添加触发器"对话框中选择"API 网关"菜单项
填写 API Gateway 对话框,如下所示,然后单击"添加"
成功创建 API 端点后,你可以在"配置"选项卡和"触发器"侧栏下查看 API URL
5、测试Llama2 API
使用以下 JSON 正文向你的 API URL 发出 POST 或 GET 请求
{
"inputs": [
[
{"role": "system", "content": "You are chat bot who writes songs"},
{"role": "user", "content": "Write a rap about Barbie"}
]
],
"parameters": {"max_new_tokens":256, "top_p":0.9, "temperature":0.6}
}
input 键存储一个数组,每个元素是你和聊天机器人之间的 1 次对话。
对话由嵌套的 JSON 对象表示,其中包含表示对话中"人"的角色和作为提示的内容
检查API 的响应状态码和响应JSON。 状态代码应为 200,响应 JSON 将如下所示
[{"generation": {"role": "assistant",
"content": " Yo, listen up, I got a story to tell
'Bout a doll that's fly, and she's doin' well
Barbie, Barbie, she's the queen of the scene
From Malibu to Kenya, she's always lookin' supreme
She's got the style, she's got the grace
She's got the swag, she's got the pace
She's got the cars, she's got the cash
She's livin' large, she's got the flash
She's got the perfect body, she's got the perfect face
She's got the perfect hair, she's got the perfect pace
She's got the perfect life, she's got the perfect vibe
She's got it all, she's got the perfect ride
She's got Ken by her side, he's her main man
He's got the skills, he's got the plan
They're livin' large, they're got the fame
They're the perfect couple, they're got the game
So listen up,"}}]
可以使用以下Python代码来测试API。 将 api_url 的值替换为您在上一步 4 中创建的 API Url
import requests
api_url = 'https://spip03jtgd.execute-api.us-east-1.amazonaws.com/default/call-bloom-llm'
json_body = {
"inputs": [
[
{"role": "system", "content": "You are chat bot who writes songs"},
{"role": "user", "content": "Write a rap about Barbie"}
]
],
"parameters": {"max_new_tokens":256, "top_p":0.9, "temperature":0.6}
}
r = requests.post(api_url, json=json_body)
print(r.json())
6、可能的错误
在这种情况下你可能会收到一些错误:
- 权限:如果你的角色没有使用 Sagemaker 调用端点策略的权限,那么你将无法调用端点。
- 超时:根据你的提示和变量,可能会收到超时错误。 与权限不同,这是一个简单的修复。 单击"配置"、"常规"和"编辑超时",然后将超时值设置为更多秒数