微软与 Meta 联手在 Azure 上提供 Meta 的开源大型语言模型 (LLM) Llama 2,打开了闸门!信不信由你,这是一件大事。
亚马逊的 AWS 于去年年底发布了 Amazon SageMaker Jumpstart,它与 Azure 类似,支持部署开源模型供公共和私人使用。我将在未来几周内撰写一篇关于使用 AWS 基础模型开发 LLM 驱动的应用程序的文章!
人们可以在 Azure 上部署 Llama 2 LLM,并将其安全地公开给全世界,以便用户或应用程序可以使用它。这为组织将 LLM 集成到软件应用程序中打开了大量的商业机会——从而创建“加速应用程序 (Xapp)”。
在本文中,我将详细介绍如何创建一个与 LLM(Llama 2 70 亿参数模型)模型集成的简单 Xapp。
什么是基础模型?
基础模型是一种大型语言模型 (LLM),它是在庞大的公开数据集上训练的。它们可以针对各种重点和特定的应用程序用例进行微调,从而有助于开发专门的应用程序。我们可以利用它们的智能来完成各种任务,例如内容创意、总结、问答等等。我们甚至可以对它们进行微调以与我们的自定义数据集集成。OpenAI 的 GPT-4、Google 的 BERT 和 Meta 的 Llama 2 都属于这一类基础模型。
Meta 在 Llama 2 框架下发布了一组开源模型:Llama 2(70 亿)、Llama 2(130 亿)和 Llama 2(700 亿)参数。由于这些模型是开源的,因此它们可以用于商业用途,这为重新发明和创新软件应用程序打开了大门。LLM 时代之前的应用程序可能必须使用代码规则或基本的机器学习模型来推断智能(如果有的话)。
开发人员可以利用 Llama 2 的预训练和微调模型来加速开发功能更强大、更智能的应用程序。
合理的架构
我探索得越多,就越能发现许多围绕开发和部署 LLM 集成软件应用程序的合理架构。虽然我无法在此详细介绍这些架构,但我可以将它们完整地呈现出来:
嵌入式法学硕士服务
此设置促进了本地运行的 LLM 服务(作为正常应用程序部署的一部分部署的微服务)。部署中的其他微服务应用程序使用适当的输入(提示)调用 llm-servcie 并从 LLM 获取结果(完成)。LLM 预计将使用其预先训练的知识 - 这意味着其上下文不需要额外的增强数据。
如图所示,LLM 将根据其预训练回答:
LLM 被部署并嵌入到基础架构中,可能是微服务,将端点暴露给其他微服务。如果来自组织不同部门的另一个应用程序希望使用此设置,它们必须遵循相同的模式。
这种架构的潜在成本是模型的本地部署——基础设施成本、请求/响应时间、可扩展性和高可用性、模型完成的可靠性等等。
如果应用程序不是任务关键型的或者对延迟和 LLM 模型幻觉具有容忍度,那么也许这可能是架构。
精心策划的法学硕士服务
LLM 部署到云(例如 Azure),并有望通过预定义的 RESTful 端点公开模型。我们在此不运行嵌入式 LLM 服务,而是创建一个 llm-service 集群,其中包含在容器编排器(例如 Kubernetes)上运行的多个 pod。
组织中的任何应用程序都可以获取 llm-service 公开的合同并将其与其应用程序集成。
llm-service 仍然没有提供特定的数据集,但如果需要的话,没有理由不能为其提供私有数据集。
云托管法学硕士服务
与其创建一个庞大的 AKS 集群来部署我们的 llm 服务,云提供商为我们提供这种功能不是更好吗?我们可以选择一个模型,并要求云提供商简单地将其部署在他们预先构建的集群中。这样,我们可以减轻在我们自己的集群中保护、管理和维护模型服务的问题。
Azure 和 AWS 等云提供商通过其 ML 工作区提供的基础模型可以通过 RESTful 端点部署和公开。任何具有适当安全密钥的应用程序都可以调用基于云的 llm-service 端点以集成到其软件应用程序管道中。
其优势在于成本效益和快速上市。与在云端运行相比,在本地设置中基于 GPU 的机器上运行可能并不具有成本效益。
我设法使用了 AWS Sage Maker JumpStart(等待他们授予我访问 Jumpstart 的权限以部署 Llama 2 模型)和 Azure 的基础语言模型。
让我向你展示如何部署一个 Llama 2(70 亿)聊天模型供公众使用。
Azure 上的 Llama 2 服务
如果您还没有这样做,请前往 Azure 门户并创建一个机器学习工作区(在搜索栏中搜索机器学习)。
按照以下步骤为我们创建 ML 空间。工作区将作为此创建过程的一部分创建。
如果您需要详细参考该步骤,这里有详细的文档。
一旦创建了工作区,您需要打开 Studio - 当您位于 ML 工作区的概览页面时,将显示类似以下的消息。
![](https://i-blog.csdnimg.cn/direct/543c0217ac604fa391a389c258545c3d.png)
启动工作室后,第一步是访问模型目录。模型目录是机器学习领域的新成员,包含所有可用的基础模型 - 从 openAI 到 Llama 到 Anthropic 到 Falcon。请记住,模型目录处于“预览”模式 - 因此可以在正式发布之前修改和/或删除功能。
单击“介绍 Llama 2”按钮下的查看模型,可以找到 Azure 目前支持的所有 Llama 2 模型:
包含 Llama 2 型号的模型目录
正如您在图片中看到的,所有三种类型的模型(7b,13b 和 70b)都受支持——文本生成以及聊天类型。
选择要部署的模型 — 就我而言,我选择了 Llama-2–7b-chat 模型。下一步是将此模型部署到基于 GPU 的增强型虚拟机。
我们会询问我们是想要实时端点还是基于批处理的端点。因为我们想要一个基于聊天的应用程序 — 我选择了实时端点。批处理端点用于使用 LLM 执行批量操作,例如查看大量图像、数据集等。
Azure 具有内置机制来提供安全可靠的端点 - 禁止 LLM 提供与自残、性、暴力和仇恨相关类别的答案 - 我强烈建议您在将其部署用于公共用途时部署此受保护的端点。
该模型将与其他资源一起部署在虚拟机上 — 通常是启用 GPU 的机器。我选择了默认的“Standard_NC12s_v3”,它有 12 个虚拟核心、224GB RAM 和 2 个 GPU(一台相当强大的机器)。
这个虚拟机的成本高达每小时 6 美元(对于现货实例而言)——所以每天 150 美元——接近每月 5000 美元。事实上,我让我的虚拟机在 LLM 端点上运行了一整夜,这就是我产生的成本 :)
(不)预期的账单会在夜间运行 Llama 2 :)
无论如何,回到我们的部署,继续在所选虚拟机上部署 LLM。提供端点名称和其他详细信息。提交部署后,需要几分钟(我认为在我的情况下需要超过 15 分钟)才能成功部署并准备好端点。
在使用带 GPU 的虚拟机时,使用非美国区域虚拟机似乎有一些限制。我无法在伦敦地区部署虚拟机,因此不得不压缩我的工作区,并选择 us-east-2 区域,从头开始一切。
一旦端点准备就绪,您就可以开始了!您可以转到 ML Studio 页面的侧边栏,检查“端点”部分是否可用。例如,我的端点已成功部署,我可以在“端点”部分中检查:
Llama 服务的端点和 Swagger URI
请注意,只能使用 API 密钥访问该端点 - 密钥可在端点的“使用”部分下获得:
用于访问我们的 Llama 2 服务端点的 API 密钥
您可以使用主键或辅助键来调用端点。我们将了解如何使用 Postman 以及 Python 程序来使用它。
LLM 为您服务
您已经部署了 LLM(Llama-2–7b 模型)并为您服务!
让我们使用 Postman 来测试一下,因为端点肯定是公共的。我创建了一个 POST 请求并粘贴了我的端点:
![](https://i-blog.csdnimg.cn/direct/d7026dccac934464bac1b3469e717fb5.png)
Postman 测试调用我们在 Azure 2 上部署的 Llama 2 服务
我们需要以 JSON 格式提供请求正文——正如您所见,我已请求 LLM 为我提供有关 DOGE 币的问题的答案。
您需要通过“授权”选项卡提供 API 密钥 - 确保您使用“Bearer”令牌方法并粘贴身份验证密钥部分中的一个密钥。
![](https://i-blog.csdnimg.cn/direct/3d4ad9fd50914e818dc55512c87aa28c.png)
所有艰苦的工作都已完成——最后一步是调用端点并等待结果!
收到LLM的回复
耶!我们成功从本地邮递员调用了部署在 Azure 上的 LLM。
通过程序调用端点也可以完成相同的操作 — — 正如 Python 客户端在此处显示的那样:
server_url = "https://llama2.eastus2.inference.ml.azure.com/score"
# 初始化 OpenAI API 密钥
api_key = "vCWWzxvpxRUFGtGmS0U0xxxx"
# 向用户提问并获取答案的函数
def ask_user ():
headers = { 'Content-Type' : 'application/json' , 'Authorization' : ( 'Bearer ' + api_key), 'azureml-model-deployment' : 'llama-2-7b-chat-12' }
if user_question:
# 调用 Flask API 端点以获取答案
response = request.post(
server_url,
user_question,
headers=headers
)
answer = response.json()
st.write(answer)
如您所见,我们正在直接从 Python 代码调用端点!
本文就到此为止。在下一篇文章中,我们将介绍 AWS 的 SageMaker JumpStart,并针对专业和自定义用例微调这些基础模型
包起来
基础模型是云提供商为我们提供的预先训练的模型——我们的工作是将它们部署到云环境并获取一个端点,以便可以从我们的应用程序中调用它。
在我们自己的基础设施上部署它们可能会有点复杂和密集——我们需要保护、管理和维护它们,这会变得有点麻烦。
幸运的是,Azure 和 AWS 等云提供商创建了一种机制,可以将 LLM 部署和使用为 PaaS(和 IaaS)服务。我们当然可以利用它们提供的平台支持。
参考:https://mkonda007.medium.com/developing-llm-powered-applications-llama-2-on-azure-5-n-1bd71672fe4c