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

开源大型语言模型(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.xdnf.cn/news/144418.html

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

相关文章

k8s部署gin-vue-admin框架、gitlab-ci、jenkins pipeline 、CICD

测试环境使用的jenkins 正式环境使用的gitlab-ci 测试环境 创建yaml文件 apiVersion: v1 kind: ConfigMap metadata:name: dtk-go-tiktok-admin-configlabels:app.kubernetes.io/name: dtk-go-tiktok-adminapp.kubernetes.io/business: infrastructureapp.kubernetes.io/run…

定时任务管理平台青龙 QingLong

一、关于 QingLong 1.1 QingLong 介绍 青龙面板是支持 Python3、JavaScript、Shell、Typescript 多语言的定时任务管理平台,支持在线管理脚本和日志等。其功能丰富,能够满足大部分需求场景,值得一试。 主要功能 支持多种脚本语言&#xf…

Python接口自动化之unittest单元测试

以下主要介绍unittest特性、运行流程及实际案例。 一、单元测试三连问 1、什么是单元测试? 按照阶段来分,一般就是单元测试,集成测试,系统测试,验收测试。单元测试是对单个模块、单个类或者单个函数进行测试。 将访…

【网络协议】TCP

TCP协议全称为传输控制协议(Transmission Control Protocol).要理解TCP就要从他的特性开始说,这些特性各自之间或多或少各有联结,需要以宏观视角来看待。 目录: 1.TCP报文格式 因为报文解释过于繁琐,具体内容请看这篇文章TCP报文…

大模型lora微调-chatglm2

通义千问大模型微调源码(chatglm2 微调失败,训练通义千问成功):GitHub - hiyouga/LLaMA-Efficient-Tuning: Easy-to-use LLM fine-tuning framework (LLaMA-2, BLOOM, Falcon, Baichuan, Qwen, ChatGLM2)Easy-to-use LLM fine-tun…

pytorch的pixel_shuffle转tflite文件

torch.pixel_shuffle()是pytorch里面上采样比较常用的方法,但是和tensoflow的depth_to_space不是完全一样的,虽然看起来功能很像,但是细微是有差异的 def tf_pixelshuffle(input, upscale_factor):temp []depth upscale_factor *upscale_f…

项目集成七牛云存储sdk

以PHP为例 第一步:下载sdk PHP SDK_SDK 下载_对象存储 - 七牛开发者中心 sdk下载成功之后,将sdk放入项目中,目录选择以自己项目实际情况而定。 注意:在examples目录中有各种上传文件的参考示例,这里我们主要参考的是…

朴素贝叶斯深度解码:从原理到深度学习应用

目录 一、简介贝叶斯定理的历史和重要性定义例子 朴素贝叶斯分类器的应用场景定义例子常见应用场景 二、贝叶斯定理基础条件概率定义例子 贝叶斯公式定义例子 三、朴素贝叶斯算法原理基本构成定义例子 分类过程定义例子 不同变体定义例子 四、朴素贝叶斯的种类高斯朴素贝叶斯&a…

[Framework] Android Binder 工作原理

Binder 是 Android 系统中主要的 IPC 通信方式,其性能非常优异。但是包括我在内的很多开发者都对它望而却步,确实比较难,每次都是看了忘,忘了看,但是随着工作的时间约来越长,每次看也都对 Binder 有新的认识…

Machine Learning(study notes)

There is no studying without going crazy Studying alwats drives us crazy 文章目录 DefineMachine LearningSupervised Learning(监督学习)Regression problemClassidication Unspervised LearningClustering StudyModel representation&#xff08…

IntelliJ IDEA 左侧Commit栏不见了

1.点击File->Settings->Version Control->Commit 2.勾选Use non-modal commit interface

Git 学习(2)

Git 学习(2) 版本号 Git 中文件的版本号是 40 位十六进制的数字字符串,采用 SHA-1 加密算法计算获得 这样一方面可避免在合并时的冲突问题 另一方面可以用于文件定位,其中前两位表示文件夹,后 38 位表示文件 指令介…

阿里云网络、数据中心和服务器技术创新优势说明

阿里云服务器技术创新、网络技术创新、数据中心技术创新和智能运维:云服务器方升架构、自研硬件、自研存储硬件AliFlash和异构计算加速平台,以及全自研网络系统技术创新和数据中心巴拿马电源、液冷技术等技术创新说明,阿里云百科aliyunbaike.…

游戏设计模式专栏(一):工厂方法模式

引言 大家好,我是亿元程序员,一位有着8年游戏行业经验的主程。 本系列是《和8年游戏主程一起学习设计模式》,让糟糕的代码在潜移默化中升华,欢迎大家关注分享收藏订阅。 在游戏开发中,代码的组织和结构对于项目的可…

maven找不到jar包

配置settings.xml文件之后出现报错找不到jar包 先改maven设置: 然后在重新清理构建项目: 可以通过执行以下命令清理本地 Maven 仓库 mvn dependency:purge-local-repository

Java 实现前端数据的导出操作

前端 <el-button class"export" type"primary" icon"el-icon-download" click"exportData()">导出</el-button>exportData() {//data 操作data 变成后端需要的格式let data {capacityVos: resultVo}this.$confirm("…

服务器补丁管理软件

随着漏洞的不断上升&#xff0c;服务器修补是增强企业网络安全的典型特征。作为业务关键型机器&#xff0c;计划服务器维护的停机时间无疑是一件麻烦事。但是&#xff0c;借助高效的服务器补丁管理软件&#xff08;如 Patch Manager Plus&#xff09;&#xff0c;管理员可以利用…

FileManager/本地文件增删改查, Cache/图像缓存处理 的操作

1. FileManager 本地文件管理器&#xff0c;增删改查文件 1.1 实现 // 本地文件管理器 class LocalFileManager{// 单例模式static let instance LocalFileManager()let folderName "MyApp_Images"init() {createFolderIfNeeded()}// 创建特定应用的文件夹func cr…

JavaScript Web APIs第一天笔记

复习&#xff1a; splice() 方法用于添加或删除数组中的元素。 **注意&#xff1a;**这种方法会改变原始数组。 删除数组&#xff1a; splice(起始位置&#xff0c; 删除的个数) 比如&#xff1a;1 let arr [red, green, blue] arr.splice(1,1) // 删除green元素 consol…

数字乡村包括哪些方面?数字乡村应用介绍

数字乡村是指利用物联网、数字化和智能化技术&#xff0c;借助现代数字智能产品、高效信息服务和物联网基础设施&#xff0c;以提高农村居民生活质量&#xff0c;助力拓展经济发展前景。 创建数字村庄有助于缩小城乡社区之间的差距&#xff0c;保障每个人都能平等地享受科技发展…