开篇语 | 容器中的⼤模型 (LLM in Containers)

如果我们想搭建一个企业级的大模型应用,不管使用开源的基础模型自己来发布,还是使用类似于 ChatGPT 的闭源 API,我们都需要搭建一个大模型流水线来管理应用体系中除了基础模型之外的功能模块。

Replit 的一篇博客(https://blog.replit.com/llm-training)里列出了一个非常典型的使用私有数据来训练和伺服私有大模型的流水线:

在这里插入图片描述

当然,绝大部分企业或者机构都不会太需要自己去训练一个私有化的大模型,但是即使是做一个简单的 RAG(Retrieval-Augmented Generation)系统,我们也需要一个完整的文档处理流水线来持续转换文档,划分文档为合适的文本块,选择合适的 embedding model 和向量数据库,然后使用 prompt engineering 来构建合理的问题提交给大模型。在目前来说,类似于 LlamaIndex 或者 LangChain 的工具在使用集成的第三方 API 或者内嵌的数据库来实现快速原型是很方便的,但是如果我们想尝试独立的 embedding 模型,高速的分布式向量数据库,定制化的文档划分策略,或者是细分的权限管理,还是有很多额外的工作要处理。

在这里插入图片描述

除了基础大模型之外,大模型生态系统中用来建设一个模型流水线的工具组件可以分为两大类,第一类是作为第三方库被其它应用调用,从最底层的 CUDA,PyTorch,Pandas, 到中间的各种 tokenizer, quantization, 到上层的 Transformers, Adapters 等等。第二类一般是作为建设一个完整模型流水线时的一个应用组件,可以独立运行并完成特定的任务。当然,有些开源系统两种使用形式都存在,例如向量数据库,很多既可以独立运行,又可以作为一个内嵌的组件供应用使用。作为最终模型流水线的搭建者来讲,我们直接打交道的大部分是第二类应用组件类型的工具,它们又会去调用很多第一类的第三方库来完成自己的工作。下面列出了一些常用的应用组件类别以及其代表性开源组件。

1. Model Serving

模型服务工具,将训练好的模型部署为可供应用程序使用的服务。这些工具通常提供 API 接口,允许开发者轻松地将模型集成到现有的系统中,支持高并发请求,确保模型的响应速度和稳定性。

vLLM: 一个高吞吐量且内存效率高的推断和服务引擎,主要使用了 PagedAttention 和定制的 CUDA kernel 来提高性能。

GPT4All: 支持在日常硬件上(主要是 CPU 上)训练和部署 quantized LLM。

Ollama: 方便的在私有化环境下一键发布和运行各种开源大模型,提供通用命令行推理工具以及兼容 OpenAI API 的 API 接口。

LocalAI: 主要目标是 OpenAI API 生态体系的本地替代品,允许在本地运行大模型服务,与 OpenAI backend 无缝切换。

2. Training Framework

训练框架,提供了工具和 API 来简化大规模模型的训练过程。这些框架优化了数据处理、模型构建、训练循环和资源管理等过程,使得开发者可以更专注于模型的设计和实验。

Megatron: NVIDIA 提出的一种用于分布式训练大规模语言模型的架构,针对 Transformer 进行了专门的优化(也就是大矩阵乘法)。

Lightning: 支持在大规模分布式环境下使用 PyTorch 进行 AI 模型的预训练、微调和部署,而无需修改代码。

3. Scheduling and Orchestration

调度工具,将模型运行在云上或者分布式集群中。

SkyPilot: 主要支持在公有云服务上一键运行 LLM、AI 和批处理作业,而无需手动去购买资源以及配置服务器,它可以自动寻找最合适的配置,并在运行完成后自动释放资源,提供成本节约、提高 GPU 使用效率。

Ray: Ray 是一款基于 PyTorch 的框架,专为并行处理 AI 和 Python 应用程序设计。它提供了高级 API,可用于处理数据、模型、超参数和强化学习等任务,以及核心原语,可用于构建分布式应用或自定义平台。

4. Document Processing

文档处理工具,专注于从非结构化数据中提取信息和结构,如从 PDF、图片或文本文件中提取文本内容和元数据。

Unstructured: 提供了用于摄取和预处理图像和文本文档的开源组件,例如 PDF,HTML,Word 文档,和更多其他格式。它的模块化功能和连接器形成了一个统一的系统,简化了数据摄取和预处理,使其能适应不同的平台,并有效地将非结构化数据转化为结构化输出。

Apache Tika: Apache Tika 工具套件可以检测并提取来自一千多种不同文件类型(如 PPT、XLS 和 PDF)的元数据和文本。所有这些文件类型都可以通过单一接口进行解析,使 Tika 对于搜索引擎索引、内容分析、翻译等都非常有用。

5. VectorDB

向量数据库,专门用于存储和检索向量数据,主要用于实现基于相似性搜索和 RAG 系统中。

Milvus: 主要特点是支持分布式发布以及并行处理,底层使用 etcd, MinIO, Pulsar, RocketMQ 等分布式处理组件,在生产环境上可以快速支持弹性扩展。

Chroma: 主要特点是安装快速方便,资源开销小,依赖简单,适合用在嵌入式场景下,快速构数据搜索应用。

6. Application Framework

应用框架,提供了构建特定应用程序的基础设施和组件,如语言模型的索引和检索、聊天机器人的对话管理等。

LlamaIndex: 简化 LLM 和外部数据源(比如 API、PDF、SQL 等)之间进行交互的工作,可以快速实现基于数据的大模型应用。它提供了对结构化和非结构化数据的索引,有助于简化处理不同的数据源。它能够存储提示工程所需的上下文,处理上下文窗口过大时的限制,并在查询期间帮助平衡成本和性能的关系。

LangChain: 将各种大模型功能以 chain 的方式集成起来,帮助开发人员低代码快速开发端到端大模型应用。LangChain 提供了一整套的工具、组件和接口,能够方便地处理与语言模型的交互,连接多个组件,以及整合额外的资源,如 API 和数据库。

7. Finetune

微调工具,允许开发者在特定的数据集上调整预训练模型的参数,以提高模型在特定任务上的表现。

Llama Factory: 基于 PyTorch,用于微调和二次训练 LLM 的框架。支持多种微调方法和优化技术,如 LoRA、QLoRA、P-Tuning 等,可以在有限的算力和数据下,定制开发专属的领域大模型。还提供了一个名为 LLaMA Board 的网页界面,可以方便地调整模型参数和查看训练结果。

HuggingFace TRL: 一个基于 PyTorch 的框架,用于使用强化学习训练 Transformer 的模型。它提供了一整套工具,从监督微调(SFT)、奖励建模(RM)到近端策略优化(PPO)等步骤,可以方便地定制和优化语言模型的性能和品质。它还支持多种预训练模型、数据集、采样方法和训练辅助功能,涵盖了不同的任务需求。
8. RAG: RAG

(Retrieval-AugmentedGeneration)
是一种结合了检索和生成的技术,用于提高语言模型在特定任务上的表现,如问答和文本生成。

PrivateGPT: 私有发布的 RAG 平台,使用 LlamaIndex 搭建 RAG 流水线,在本地运行 Chat UI,提供大部分模型管理以及文档管理功能,同时提供 OpenAI API 兼容的接口,可以方便地与现有的应用集成。

LocalGPT: 使用 LangChain,llama-cpp 和 Streamlit 搭建的 RAG 平台,主要特点是支持各种 quantized LLM 和 CPU 运行,可以快速在单机上运行。
9. ChatBot

集成聊天机器人,专注于构建和部署交互式对话系统,一般提供对话管理、提示词工程管理、历史管理的功能。

NextChat: 用于快速创建和部署跨平台的 ChatGPT/Gemini 应用,可以快速地搭建自己的私人聊天机器人,支持 GPT3, GPT4 和 Gemini Pro 等多种语言模型以及提示词管理,历史管理等核心功能,提供 Linux / Windows / MacOS 客户端。

Jan: 提供了一个跨平台的本地 ChatBot 桌面应用,支持 Linux / Windows / MacOS,内嵌使用其自主开发的 Nitro 推理引擎来运行大模型,可以作为一个完全离线的 ChatGPT 替代产品。

然而,使用这个生态系统搭建模型流水线的一个主要挑战是管理和维护各种依赖项的兼容性,包括 Python 版本、第三方库版本、CUDA 版本以及硬件和操作系统的兼容性。这些因素共同构成了一个复杂的环境,经常导致版本冲突和不兼容的情况。此外,如何将各个组件的配置统一管理起来,不用重复配置,不用手动配置各种端口以避免冲突,动态管理依赖,也是常见需要解决的问题。除了应用运行之外,数据在这些组件之间的流动也需要完善的管理以保证数据的正确性以及数据任务的及时完成。这些问题听起来是不是有些熟悉呢?是的,这些问题其实还是属于传统数据流水线(Data Pipeline)和运维(DataOps)的范畴,只不过多了几个特定功能场景:使用 GPU 或者 CPU 来发布大模型,用 sequence 数据(大部分是文档)来 finetune, pretrain 大模型,或者用大模型来进行 inference 服务或者以 agent 形式提供自动操作。在 A16Z 的“Emerging Architectures for LLM Applications”博客中列出的大模型应用技术栈中,除了 Data Pipelines 本身就属于这个技术栈的一部分之外,类似 Embedding Model, Vector DB, Logging/Observability, Orchestration 这些组件,其实和 DataOps 中相应的组件的管理运营方式差别不大,特别是在云原生和容器化这个方向上,基本是一致的。

在这里插入图片描述

所以,我们认为,将这些组件以容器的形式实现标准化发布(上面的组件中很多都已经提供 Docker 发布方式),使用类似于 Kubernetes 这样的资源调度平台来管理这些组件的运行,可以大大降低大模型流水线的使用门槛,提高大模型应用发布和运行的效率。而且,不管后端的基础大模型如何变化,这样建设流水线的工作都是需要的甚至我们可以说,为了适应快速迭代的基础大模型,我们应该以云原生,容器化,服务化,标准化的方式建设我们的大模型流水线,允许我们在不同的私有发布,公有发布的大模型之间随意切换,选择最适合我们应用场景和和价格最合适的大模型使用模式。我们将会在”容器中的大模型”系列博客中,以不同的大模型应用场景(例如 RAG,Text2SQL 等等)为例,展示如何以容器化的方式发布这些开源大模型应用组件并合理地将它们组织起来来完成具体场景的工作。希望这些博客能为准备建设大模型流水线的读者提供一些参考,也非常期待大家的反馈和建议。

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙ArkTS语言快速入门-TS(一)

ArkTS与TS的学习 ArkTS与TS的关系简述TypeScript(TS)简述基础类型1,let2,const3,布尔类型4,数字number5,字符串string6,数组Array7,元组 Tuple8,枚举 enum9&a…

腾讯云服务器和阿里云服务器哪家更优惠?2024价格对比

2024年阿里云服务器和腾讯云服务器价格战已经打响,阿里云服务器优惠61元一年起,腾讯云服务器61元一年,2核2G3M、2核4G、4核8G、4核16G、8核16G、16核32G、16核64G等配置价格对比,阿腾云atengyun.com整理阿里云和腾讯云服务器详细配…

【Web前端入门学习】—CSS

目录 CSS简介CSS语法CSS三种导入方式CSS选择器元素选择器(标签选择器)类选择器ID选择器通用选择器子元素选择器后代选择器(包含选择器)并集选择器(兄弟选择器)伪类选择器伪元素选择器 CSS常用属性盒子模型网…

练习 6 Web [极客大挑战 2019]HardSQL

[极客大挑战 2019]HardSQL 先尝试登录,查看报错信息 admin 111 password 1111 登录失败admin 111 password 1’or’1 登录成功 这里直接试了万能密码成功,复习一下,第一个 ’ 是为了闭合前面的sql语句,最后的1后面没有 ’ 是因为…

【鸿蒙 HarmonyOS 4.0】解决:搜索无效问题

一、背景 页面包含搜索框和列表,列表默认展示所有数据并具有分页功能。然而,在输入关键字到搜索框时,列表未正确展示搜索结果。 二、功能实现 2.1、原代码及实现效果 import ChargeType from ../../viewModel/ChargeType import ChargeMo…

手写分布式配置中心(三)增加实时刷新功能(短轮询)

要实现配置自动实时刷新,需要改造之前的代码。代码在https://gitee.com/summer-cat001/config-center​​​​​​​ 服务端改造 服务端增加一个版本号version,新增配置的时候为1,每次更新配置就加1。 Overridepublic long insertConfigDO(…

【Python刷题】环形链表

问题描述 给你一个链表的头节点 head ,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,评测系统内部使用整数 pos 来表示链表尾连接到链表中的位置&a…

[数据结构]OJ用队列实现栈

225. 用队列实现栈 - 力扣(LeetCode) 官方题解:https://leetcode.cn/problems/implement-stack-using-queues/solutions/432204/yong-dui-lie-shi-xian-zhan-by-leetcode-solution/ 首先我们要知道 栈是一种后进先出的数据结构&#xff0c…

【大模型】Hugging Face下载大模型的相关文件说明

Hugging Face下载大模型文件说明 1.前言 ​ 上图是毛毛张在HuggingFace的官网上的ChatGLM-6B大模型的所有文件,对于初学者来说,对于上面的文件是干什么的很多小伙伴是很迷糊的,根本不知道是干什么的,毛毛张接下来将简单讲述一下上面的每个文件的作用。 2.文件说明 在Hug…

开发利器——C语言必备实用第三方库

​ 对于广大C语言开发者来说,缺乏类似C STL和Boost的库会让开发受制于基础库的匮乏,也因此导致了开发效率的骤降。这也使得例如libevent这类事件库(基础组件库)一时间大红大紫。 今天,码哥给大家带来一款基础库&#…

Python Tkinter GUI 基本概念

归纳编程学习的感悟, 记录奋斗路上的点滴, 希望能帮到一样刻苦的你! 如有不足欢迎指正! 共同学习交流! 🌎欢迎各位→点赞 👍 收藏⭐ 留言​📝如果停止,就是低谷&#xf…

ACM题解Day10|总结篇|进制转化,GCD ,LCM ,二分答案

🔥博客介绍: 27dCnc [Cstring中find_first_not_of()函数和find_last_not_of()函数-CSDN博客] 方差,期望 概率 今日打卡: 算法周总结 ACM题解Day3| To Crash or not To Crash,Integer Prefix ,I don’t want to pay for the Late Jar-CSDN博客 第3题:…