在亚马逊云科技Amazon SageMaker上部署构建聊天机器人的开源大语言模型

news2024/11/16 3:48:22

开源大型语言模型(LLM)已经变得流行起来,研究人员、开发人员和组织都可以使用这些模型来促进创新和实验。这促进了开源社区开展合作,从而为LLM的开发和改进做出贡献。开源LLM提供了模型架构、训练过程和训练数据的透明度,使研究人员能够了解模型的工作原理,识别潜在的偏见并解决伦理问题。这些开源LLM通过向广大用户提供先进的自然语言处理(NLP)技术来构建任务关键型业务应用程序,从而使生成式人工智能大众化。GPT-NeoX、LLaMA、Alpaca、GPT4All、Vicuna、Dolly和OpenAssistant是一些受欢迎的开源LLM。

 OpenChatKit是用于构建通用和专用聊天机器人应用程序的开源LLM,由Together Computer于2023年3月发布,采用Apache-2.0许可。这种模型允许开发人员对聊天机器人的行为进行更多控制,并根据聊天机器人的特定应用进行定制。OpenChatKit提供了一套工具、基础机器人和构建块,用于构建完全定制的、功能强大的聊天机器人。关键组件如下:

  • 经过指令调优的LLM,针对来自EleutherAI的GPT-NeX-20B的聊天进行了微调,有超过4300万条关于100%负碳计算的指令。GPT-NeoXT-Chat-Base-20B模型基于EleutherAI的GPT-NeoX模型,并根据对话式交互的数据进行了微调。

  • 自定义配方,可对模型进行微调以实现任务的高精度。

  • 可扩展的检索系统,使您能够在推理时使用来自文档存储库、API或其他实时更新信息源的信息来增强机器人响应。

  • 根据GPT-JT-6B微调的审核模型,旨在筛选机器人会回答哪些问题。

 深度学习模型的规模和大小不断扩大,给在生成式人工智能应用中成功部署这些模型带来了障碍。为了满足低延迟和高吞吐量的要求,采用模型并行化和量化等复杂方法变得至关重要。由于缺乏对这些方法的熟练应用,许多用户在为生成式人工智能使用案例启动大型模型托管时遇到了困难。

 在这篇文章中,亚马逊云科技将展示如何使用DJL Serving以及DeepSpeed和Hugging Face Accelerate等开源模型并行库,在亚马逊云科技Amazon SageMaker上部署OpenChatKit模型。使用DJL Serving,这是一种高性能的通用模型服务解决方案,由与编程语言无关的Deep Java Library(DJL)提供支持。我们将演示Hugging Face Accelerate库如何简化大型模型在多个GPU中的部署,从而减轻以分布式方式运行LLM的负担。

 可扩展的检索系统

 可扩展的检索系统是OpenChatKit的关键组件之一。该组件使您能够根据封闭的领域知识库定制机器人的响应。尽管LLM能够在模型参数中保留事实知识,并且在微调后可以在下游NLP任务中取得不俗的表现,但这种模型准确获取和预测封闭领域知识的能力仍然受到限制。因此,当遇到知识密集型任务时,这种模型的性能就会比任务特定架构的性能差。可以使用OpenChatKit检索系统,从外部知识来源(例如Wikipedia、文档存储库、API和其他信息源)中扩充回复中的知识。

 检索系统使聊天机器人能够通过获取与特定查询相关的详细信息来获取当前信息,从而为模型生成答案提供必要的上下文。为了说明该检索系统的功能,亚马逊云科技提供了对Wikipedia文章索引的支持,并提供了示例代码,演示如何调用Web搜索API进行信息检索。按照提供的文档,您可以在推理过程中将检索系统与任何数据集或API集成,这样聊天机器人就能在回复中纳入动态更新的数据。

 审核模型

 审核模型在聊天机器人应用中非常重要,可用于执行内容筛选、质量控制、用户安全以及法律和合规原因。审核是一项非常困难的主观任务,在很大程度上取决于聊天机器人应用的领域。OpenChatKit提供的工具可用于控制聊天机器人应用程序,并监控输入文本提示是否有任何不当内容。审核模型提供了一个很好的基准,可以根据各种需求进行调整和定制。

 OpenChatKit有一个60亿个参数的审核模型,即GPT-JT-Moderation-6B,可对聊天机器人进行控制,将输入限制在受控制的主题范围内。虽然模型本身内置了一些控制功能,但TogetherComputer还是使用Ontocord.ai的OIG-moderation数据集训练了一个GPT-JT-Moderation-6B模型。该模型与主聊天机器人同时运行,以检查用户输入和机器人回答是否包含不恰当的结果。您还可以使用该模型来检测向聊天机器人提出的任何域外问题,并在问题不属于聊天机器人的领域时进行覆盖。

 可扩展检索系统使用案例

 虽然可以在各行各业应用这种技术来构建生成式人工智能应用程序,但在本篇文章中,将讨论金融行业的使用案例。检索式增强生成功能可用于金融研究,自动生成有关特定公司、行业或金融产品的研究报告。通过从内部知识库、财务档案、新闻报道和研究论文中检索相关信息,您可以生成综合报告,总结重要洞察、财务指标、市场趋势和投资建议。您可以使用此解决方案来监控和分析财经新闻、市场情绪和趋势。

 解决方案概览

 使用OpenChatKit模型构建聊天机器人并将这种模型部署到SageMaker上的步骤如下:

  • 下载聊天基础模型GPT-NeoXT-Chat-Base-20B,并将模型构件打包上传到Amazon Simple Storage Service(Amazon S3)。

  • 使用SageMaker大型模型推理(LMI)容器,配置属性,并设置自定义推理代码来部署该模型。

  • 配置模型并行技术,并在DJL Serving属性中使用推理优化库。我们将使用Hugging Face Accelerate作为DJL Serving的引擎。此外,我们还定义了张量并行配置来对模型进行分区。

  • 创建SageMaker模型和端点配置,然后部署SageMaker端点。

 您可以通过在GitHub存储库中运行笔记本来继续操作。

 下载OpenChatKit模型

 首先,下载OpenChatKit基础模型。使用huggingface_hub,并使用snapshot_download下载模型,这将下载给定版本的整个存储库。同时进行下载,以便加快进度。

 DJL Serving属性

 可以使用SageMaker LMI容器托管带有自定义推理代码的大型生成式人工智能模型,而无需提供自己的推理代码。在没有对输入数据进行自定义预处理或对模型预测进行后处理的情况下,这种方法非常有用。您也可以使用自定义推理代码部署模型。在这篇文章中,亚马逊云科技将演示如何使用自定义推理代码部署OpenChatKit模型。

 SageMaker要求模型构件采用tar格式。使用以下文件创建每个OpenChatKit模型:serving.properties和model.py。

 serving.properties配置文件向DJL Serving指明了要使用哪些模型并行化和推理优化库。其中包含以下参数:

  • engine——DJL要使用的引擎。

  • option.entryPoint——Python文件或模块的入口点。这应该与使用的引擎一致。

  • option.s3url——将此参数设置为包含模型的S3存储桶的URI。

  • option.modelid——如果想从huggingface.co下载模型,可以将option.modelid设置为一个预训练模型的模型ID,该模型托管在huggingface.co上的模型存储库中。容器使用此模型ID在huggingface.co上下载相应的模型存储库。

  • option.tensor_parallel_degree——将此参数设置为DeepSpeed需要对模型进行分区的GPU设备数量。该参数还可以控制DJL Serving运行时每个模型启动的Worker数量。例如,如果我们有一台配备8个GPU的计算机,并创建八个分区,那么每个模型将有一个Worker来处理请求。有必要调整并行度,并确定给定模型架构和硬件平台的最佳值。亚马逊云科技将这种能力称为推理适应并行性。

 OpenChatKit模型

 OpenChatKit基础模型实现包含以下四个文件:

 model.py——此文件实现了OpenChatKit GPT-NeoX主模型的处理逻辑。此文件接收推理输入请求,加载模型,加载Wikipedia索引,并提供响应。model.py使用以下关键类:

  • OpenChatKitService——此类处理GPT-NeoX模型、Faiss搜索和对话对象之间的数据传递。WikipediaIndex和Conversation对象经过初始化,输入的聊天会话被发送到索引,以便从Wikipedia中搜索相关内容。如果没有提供用于在Amazon DynamoDB中存储提示信息的ID,此类还会为每次调用生成唯一ID。

  • ChatModel——此类加载模型和tokenizer并生成响应。此类使用tensor_parallel_degree处理多个GPU之间的模型分区,并配置dtypes和device_map。提示信息将传递给模型以生成响应。为生成操作配置了停止标准StopWordsCriteria,以便在推理时只生成机器人响应。

  • ModerationModel——在ModerationModel类中使用两种审核模型:输入模型,用于向聊天模型表明输入不适合覆盖推理结果;输出模型,用于覆盖推理结果。使用以下可能的标签对输入提示和输出响应进行分类:

  • 随意

  • 需要谨慎

  • 需要干预(这被标记为由模型控制)

  • 可能需要谨慎

  • 也许需要谨慎

 wikipedia_prepare.py——此文件用于下载和准备Wikipedia索引。在此案例中,亚马逊云科技使用Hugging Face数据集上提供的Wikipedia索引。要在Wikipedia文档中搜索相关文本,需要从Hugging Face下载索引,因为其他地方没有打包索引。wikipedia_prepare.py文件负责在导入时处理下载。在运行推理的多个进程中,只有一个进程可以克隆存储库。其余的则要等到文件出现在本地文件系统中。

 wikipedia.py——此文件用于在Wikipedia索引中搜索与上下文相关的文档。输入查询经过标记化处理,并使用mean_pooling创建嵌入内容。亚马逊云科技计算查询嵌入与Wikipedia索引之间的余弦相似度距离指标,以检索与上下文相关的Wikipedia句子。

 conversation.py——此文件用于在DynamoDB中存储和检索对话线程,以便传递给模型和用户。conversation.py改编自开源OpenChatKit存储库。此文件负责定义存储人类和模型之间对话轮次的对象。这样,模型就能为对话保留一个会话,让用户可以参考以前的信息。由于SageMaker端点调用是无状态的,因此需要将此对话存储在端点实例外部的位置。启动时,如果DynamoDB表不存在,实例会创建该表。然后,会根据端点生成的session_id键将对话的所有更新存储在DynamoDB中。任何带有会话ID的调用都将检索关联的对话字符串,并根据需要进行更新。

 使用自定义依赖项构建LMI推理容器

 索引搜索使用Facebook的Faiss库进行相似性搜索。由于基本LMI映像中不包含该库,因此需要调整容器以安装该库。以下代码定义了一个Dockerfile,用于从源代码中安装Faiss以及机器人端点所需的其他库。使用sm-docker实用程序从Amazon SageMaker Studio构建映像,并将映像推送到Amazon Elastic Container Registry(Amazon ECR)。

 DJL容器没有安装Conda,因此需要从源代码克隆和编译Faiss。要安装Faiss,需要安装使用BLAS API和Python支持的依赖项。安装这些软件包后,Faiss配置为使用AVX2和CUDA,然后再使用安装的Python扩展进行编译。

 之后会安装pandas、fastparquet、boto3和git-lfs,因为下载和读取索引文件时需要它们。

 创建模型

 现在在AmazonECR中有了Docker映像,可以继续为OpenChatKit模型创建SageMaker模型对象。使用GPT-JT-Moderation-6B部署GPT-NeoXT-Chat-Base-20B输入和输出审核模型。

 配置端点

 接下来,亚马逊云科技为OpenChatKit模型定义端点配置。使用ml.g5.12xlarge实例类型部署模型。

 部署端点

 最后,使用在前面步骤中定义的模型和端点配置创建端点。

 从OpenChatKit模型运行推理

 现在是向模型发送推理请求并获取响应的时候了。我们传递输入文本提示和模型参数,例如temperature、top_k和max_new_tokens。聊天机器人响应的质量取决于指定的参数,因此建议根据这些参数对模型性能进行基准测试,以找到适合您使用案例的最佳设置。输入提示首先发送到输入审核模型,然后将输出发送到ChatModel以生成响应。在这一步中,模型使用Wikipedia索引检索与模型上下文相关的部分,以此作为从模型获取特定领域响应的提示。最后,将模型响应发送到输出审核模型以检查分类情况,然后返回响应。

 清理

 按照清理部分中的说明删除作为本文一部分预置的资源,以避免不必要的费用。

 总结

 在这篇文章中,讨论了开源LLM的重要性,以及如何在SageMaker上部署OpenChatKit模型来构建新一代聊天机器人应用程序。亚马逊云科技讨论了OpenChatKit模型的各种组件、审核模型,以及如何使用Wikipedia等外部知识源进行检索式增强生成(RAG,Retrieval Augmented Generation)工作流程。可以在GitHub notebook中找到分步说明。

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

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

相关文章

超大表格组件滚动渲染优化

引用自 摸鱼wiki 背景 业务中需要渲染一个最多有100列的表格,由于表格使用原生dom实现,因此会出现同屏有近1000个单元格同时绘制,在快速滑动时页面会产生卡顿,影响用户体验。 方案 如下图所示,由于用户显示屏区域有…

LeetCode算法二叉树—222. 完全二叉树的节点个数

目录 222. 完全二叉树的节点个数 - 力扣(LeetCode) 代码: 运行结果: 给你一棵 完全二叉树 的根节点 root ,求出该树的节点个数。 完全二叉树 的定义如下:在完全二叉树中,除了最底层节点可能…

opencv开发环境配置

一、下载安装 打开opencv官方网站,opencv管网地址,选择下载的版本 双击安装包,选择安装路径,进行安装 安装完毕后,打开 注意:环境变量配置的bin路径不是build/bin,而是build/x64/vc16/bin …

chrome扩展程序开发请求接口报错

解决HTTPS站点请求HTTP接口服务后报错&#xff1a;the content must be served over HTTPS Mixed Content: The page at <URL> was loaded over HTTPS, but requested an insecure XMLHttpRequest endpoint <URL>. This content should also be served over HTTPS…

网络知识:内网、外网、宽带、带宽、流量、网速之间的联系?

相信很多人都不知道内网、外网、宽带、带宽、流量、网速之间的区别与联系&#xff0c;今天小编给大家介绍一下&#xff0c;希望对大家能有所帮助&#xff01; 一.带宽与宽带的区别是什么&#xff1f; 带宽是量词&#xff0c;指的是网速的大小&#xff0c;比如1Mbps的意思是一兆…

数据库系统课设——基于python+pyqt5+mysql的酒店管理系统(可直接运行)--GUI编程(2)

几个月之前写的一个项目&#xff0c;通过这个项目&#xff0c;你能学到关于数据库的触发器知识&#xff0c;python的基本语法&#xff0c;python一些第三方库的使用&#xff0c;包括python如何将前后端连接起来&#xff08;界面和数据&#xff09;&#xff0c;还有界面的设计等…

Guava限流器原理浅析

文章目录 基本知识限流器的类图使用示例 原理解析限流整体流程问题驱动1、限流器创建的时候会初始化令牌吗&#xff1f;2、令牌是如何放到桶里的&#xff1f;3、如果要获取的令牌数大于桶里的令牌数会怎么样4、令牌数量的更新会有并发问题吗 总结 实际工作中难免有限流的场景。…

振弦采集仪结合无线中继扩展应用岩土工程监测的解决方案

振弦采集仪结合无线中继扩展应用岩土工程监测的解决方案 岩土工程监测是现代工程建设不可或缺的一部分&#xff0c;其目的是确保工程安全和稳定。然而&#xff0c;在进行监测时常常面临许多挑战。传统的岩土工程监测方法需要大量的人力、物力和时间&#xff0c;而且往往难以采…

顽固污渍一键去除,还有紫外线除菌功能,希亦超声波清洗机体验

日常生活中&#xff0c; 眼镜、牙刷等小物件的清洗该怎么清洗呢&#xff1f;如果使用肥皂水或者专业清洁剂来处理&#xff0c;还需要使用一些小工具来帮助清洁&#xff0c;比如清洁布、棉签等&#xff0c;不仅会很麻烦&#xff0c;而且需要频繁擦拭&#xff0c;镜片等物品光滑的…

601-体育馆的人流量

文章目录 601-体育馆的人流量1. 题目2. 思路3. 解决4. 运行结果 601-体育馆的人流量 1. 题目 2. 思路 思路&#xff1a;查询Stadium表中人流量超过100的记录&#xff0c;将查询结果与自身的临时表连接&#xff0c;再使用where获得满足条件的记录 查询Stadium表中人流量超过10…

现代数据中心发明人Luiz André Barroso去世,享年59岁,Jeff Dean、劈柴发推悼念

Luiz Andr Barroso因故去世&#xff0c;享年59岁。他作为现代云计算行业的奠基人&#xff0c;为谷歌的发展做出了不可磨灭的贡献。 数据中心发明人&#xff0c;云计算的奠基人&#xff0c;谷歌22年老兵Luiz Andr Barroso于9月16日意外去世&#xff0c;享年59岁。 谷歌CEO 劈柴…

NVM的下载安装和使用

node包管理工具NVM让我们更加方便在各个node版本之间切换来适配不同的项目 一、下载安装 下载地址&#xff1a;github下载地址 https://github.com/coreybutler/nvm-windows/releases安装一直点下一步就行&#xff0c;可以安装在D、E盘都行&#xff0c;安装后检查是否安装成功…

“身份验证失败” authentication failed报错的原因

问题描述 问题出在target “send_emai” 的password属性&#xff0c;我们认为输入的是邮箱的密码&#xff0c;即使是给出正确的密码仍报错的情况下&#xff0c;还是让大家输入正确的密码。结果呢&#xff1f; 这里的“password”输入的并不是密码&#xff0c;而是一种授权码&…

Servlet开发-session和cookie理解案例-登录页面

项目展示 进入登录页面&#xff0c;输入正确的用户名和密码以后会自动跳到主页 登录成功以后打印用户名以及上次登录的时间&#xff0c;如果浏览器和客户端都保存有上次登录的信息&#xff0c;则不需要登录就可以进入主页 编码思路 1.首先提供一个登录的前端页面&…

使用MySQL聚合函数来聚合数据,结果发现有刺客...

问题&#xff1a; 使用MySQL聚合函数 group_concat 的坑&#xff01; 现象&#xff1a; 我有个业务&#xff0c;需要将表中符合条件的数据行的id聚合成一个字符串&#xff0c;以供另外一张表的查询过滤。 SELECTx FROMt_A WHEREFIND_IN_SET(guan_lian,(SELECTgroup_concat( i…

毫米波V2I网络的链路层仿真研究(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

工时管理系统,一款灵活性强、轻量级工时记录和管理工具

一、开源项目简介 无鱼工时管理系统&#xff0c;是一款轻量级工时记录和管理工具&#xff0c;包括项目管理&#xff0c;工时上报&#xff0c;工时日报&#xff0c;工时统计等功能。 无鱼工时管理系统可通过员工工时上报的方式&#xff0c;来记录项目所花费的工时&#xff0c;…

分享74个Java源代码总有一个是你想要的

分享74个Java源代码总有一个是你想要的 链接&#xff1a;https://pan.baidu.com/s/1DfGiAF7Ipde-SKeHZJ7-jQ?pwd8888 提取码&#xff1a;8888 项目名称 Akaxin v0.5.4 B2C网站管理系统购物网 v1.5 B3LOG Solo v1.0.0 for MySQL belog博客程序 v1.1 CKFinder 文件管理器…

创建视图权限问题ora1031,ora1720

Ora-1031 使用sql查询无问题&#xff0c;创建视图告警ora-1031 根据文档Document 271587.1 递归对象权限中角色收回时&#xff0c;会造成权限断档 解决方法&#xff1a; 对该对象进行授权&#xff08;尽量属主用户&#xff09; Grant select on interface.Material_view_pa…

字符检测专题第二期:通用、简单、快速,见证AI字符识别的超能力!

随着科技的不断进步&#xff0c;OCR&#xff08;光学字符识别&#xff09;技术在工业应用中扮演着越来越重要的角色。 在实际生产中&#xff0c;OCR技术可在生产流程监控、自动化设备控制、品质控制和物流控制等方面发挥作用&#xff0c;提高生产流水线的产量和质量&#xff0c…