了解 LLMOps、架构模式、如何在本地或云端评估、微调和部署 HuggingFace 生成式 AI 模型。

了解 LLMOps、架构模式、如何在本地或云端评估、微调和部署 HuggingFace 生成式 AI 模型。

img

大型语言模型通常是一种转换模型,其工作方式是接收输入、对其进行编码,然后对其进行解码以产生输出预测,或生成完成以给出输入提示。

Transformer 于 2017 年发布,是大多数现代语言模型的核心,两种流行语言架构 BERT 和 GPT 中的“T”代表 Transformer。

在模型预训练和微调期间,Transformer 帮助模型从输入的训练/调整语料库中获得对语言的上下文理解。

Transformer 架构

img

资料来源:Vaswani 等人,“注意力就是你所需要的一切”,arXiv,2017 年

输入(标记上下文窗口)

img

高级 Transformer 架构

输入提示存储在一个称为输入“上下文窗口”的结构中。它由其所包含的标记数量来衡量。上下文窗口的大小因模型而异。

早期的生成模型只能在上下文窗口中容纳 512-1024 个输入标记。然而,较新的模型可以容纳 10,000 个甚至 100,000 个标记。模型的输入上下文窗口大小是在模型设计和预训练期间定义的。

嵌入

嵌入是高维空间中单词或实体的向量表示,其中含义相似的单词彼此更接近。在自然语言处理和机器学习中,嵌入用于捕获语义关系和上下文信息。

Tranformers 中的嵌入是在模型预训练期间学习的,实际上是更大的 Transformer 架构的一部分。上下文窗口中的每个输入标记都映射到一个嵌入。这些嵌入用于 Transformer 神经网络的其余部分,包括自注意力层。

编码器

编码器将输入标记序列投射到表示输入结构和含义的向量空间中。向量空间表示是在模型预训练期间学习的。

自注意力(多头)层

img

自注意力”机制将数据中的每个标记都关注到输入序列中的所有其他标记

Transformer 架构中的自注意力机制是一种机制,它使模型能够衡量序列中不同单词相对于彼此的重要性。在多头变体中,注意力机制被多次应用,每次都关注输入的不同方面。这使得模型能够捕获序列中的各种关系和依赖关系,从而增强其理解上下文和长距离依赖关系的能力。

自注意力机制的计算成本非常高,因为它需要计算输入中每个 token 与其他 token 之间的 n 个平方对注意力得分。许多生成性能改进都针对注意力层,例如FlashAttention分组查询注意力 (GQA)

解码器

注意权重会传递到 Transformer 神经网络的其余部分,包括解码器。解码器使用基于注意的输入标记上下文理解来生成新标记,最终“完成”所提供的输入。这就是为什么基础模型的响应通常被称为完成。

Softmax 输出

img

成为词汇表中所有标记中的下一个标记的概率

softmax 输出层在整个标记词汇表中生成概率分布,其中每个标记都被分配一个被选中文本的概率。

通常,具有最高概率的标记将被生成为下一个标记,但是存在诸如*temperature*,*top-k* &***top-p之***类的机制来修改下一个标记的选择,以使模型更具或更不具有创造性。

不同法学硕士 (LLM) 之间的区别

仅编码器- 或者自动编码器使用一种称为掩蔽语言建模 (MLM) 的技术进行预训练,该技术随机掩蔽输入标记并尝试预测被掩蔽的标记。

仅编码器模型最适合利用编码器生成的嵌入的语言任务,例如语义相似性或文本分类,因为它们使用输入的双向表示来更好地理解标记的填充上下文——而不仅仅是序列中的前一个标记。但它们对于继续生成更多文本的生成任务并不是特别有用。

众所周知的仅编码模型的例子是BERT

仅解码器- 或自回归模型使用单向因果语言模型 (CLM) 进行预训练,它仅使用前一个标记来预测下一个标记 - 每个其他标记都被屏蔽。

仅使用解码器的自回归模型使用数百万个文本示例来学习统计语言表示,方法是不断根据前一个标记预测下一个标记。这些模型是生成任务(包括问答)的标准。GPT-3、Falcon 和 Llama 模型系列是著名的自回归模型。

编码器-解码器——通常称为序列到序列模型的模型,同时使用 Transformer 编码器和解码器。它们最初是为翻译而设计的,对于 T5 或 FLAN-T5 等文本摘要任务也非常有用。

权重- 2022 年,一组研究人员发表了一篇论文,比较了各种模型和数据集大小组合的模型性能。该论文声称,最佳训练数据大小(以 token 为单位)是模型参数数量的 20 倍,低于 20 倍的任何比例都可能过度参数化和训练不足(现在称为 Chinchilla 缩放定律)。

img

给定模型大小和数据集大小的南美栗鼠缩放定律

根据 Chinchilla 缩放定律,1750 多亿个参数模型应该在 3.5 万亿个标记上进行训练。相反,它们用 1800-3500 亿个标记进行训练——比建议的要小一个数量级。事实上,最近的Llama 2 700 亿个参数模型是用 2 万亿个标记进行训练的——大于论文中描述的 20 比 1 的标记与参数比率。这是 Llama 2 在各种基准测试中优于原始 Llama 模型的原因之一。

注意层和参数(top k、top p)——大多数模型卡都解释了模型具有的注意层类型以及您的硬件如何充分利用它。最常见的开源模型还记录了可以通过调整某些参数来根据您的数据集实现最佳性能的参数。

HuggingFace,法学硕士之家

HuggingFace 联合创始人Thomas撰写的构建大型语言模型的简要指南

Hugging Face 是一个平台,可通过开源库轻松访问最先进的自然语言处理 (NLP) 模型,包括大型语言模型 (LLM)。它是 NLP 社区的中心,提供预先训练的模型和工具库,可简化基于语言的应用程序的开发和部署。

该平台对于开源 LLM 尤其有价值,因为它使强大模型的访问民主化,使开发人员和研究人员无需大量计算资源或模型训练专业知识即可利用尖端功能。

型号卡:

img

模型卡

模型推理:

img

模型推理

部署模型:

img

部署模型

列车模型:

img

训练模型

模型文件:

img

模型文件

如何玩转法学硕士 (LLM)

  • 所需模型大小和内存
  • 局部模型推理
    - 量化
    - Transformers
    - GPT4All
    - LM Studio
    - llama.cpp
    - Ollama
  • 谷歌合作实验室
  • AWS SageMaker Studio、Studio Lab、SageMaker Jumpstart 和 Bedrock
    - SageMaker Studio
    - SageMaker Studio Lab
    - SageMaker Jumpstart
    - Amazon Bedrock
  • 在 SageMaker 端点上部署 HuggingFace 模型

模型大小和所需内存

单个模型参数(全 32 位精度)由 4 个字节表示。因此,一个 10 亿参数模型需要 4 GB 的 GPU RAM,才能以全精度将模型加载到 GPU RAM 中。如果要训练模型,则需要更多 GPU 内存来存储数值优化器、梯度和激活的状态,以及函数使用的临时变量。

这些附加组件导致每个模型参数大约需要 12-20 个额外的 GPU 内存字节。因此,要训练一个拥有 10 亿个参数的模型,您需要大约 24GB 的 32 位全精度 GPU RAM,与仅需 4GB 的 GPU RAM(用于加载模型)相比,内存是其六倍。

img

训练模型所需的 RAM

公式:

10 亿参数模型 X 4 = 4GB 用于 ***推理
***10 亿参数模型 X 24 = 24GB 用于全精度*预训练*

推理模型大小Llama 2 13B:

img

Llama 2 13B 推理模型尺寸

局部模型推理

量化

量化通过降低模型权重的精度来减少加载和训练模型所需的内存。量化将模型参数从 32 位精度转换为 16 位精度,甚至 8 位、4 位甚至 1 位。

通过将模型权重从 32 位全精度量化为 16 位或 8 位精度,您可以快速将 10 亿参数模型的内存需求减少 50% 至仅 2GB,甚至减少 75% 至仅 1GB 的加载内存需求。

img

以 32 位、16 位和 8 位精度加载 10 亿参数模型所需的 GPU RAM 大约

虽然这是以模型质量为代价的,但在某些情况下,量化在所有情况下都显示出性能的提高和成本的降低。

变压器

Transformers(以前称为 pytorch-transformers 和 pytorch-pretrained-bert)为自然语言理解(NLU)和自然语言生成(NLG)提供了通用架构(BERT、GPT-2、RoBERTa、XLM、DistilBert、XLNet……),拥有 100 多种语言的 32 多个预训练模型,以及 TensorFlow 2.0 和 PyTorch 之间的深度互操作性。

它提供了 API 和工具,可以轻松下载和训练用于不同模式下常见任务的最先进的预训练模型,例如:

📝自然语言处理:文本分类、命名实体识别、问答、语言建模、摘要、翻译、多项选择和文本生成。🖼️计算机视觉:图像分类、对象检测和分割。🗣️音频:自动语音识别和音频分类。🐙多模式
:表格问答、光学字符识别、从扫描文档中提取信息、视频分类和视觉问答。

还有助于预处理、训练、微调和部署变压器。

<iframe src="https://medium.com/media/f057e36f65c890451f403af929e4fb77" allowfullscreen="" frameborder="0" height="1070" width="680" title="Transformers-pipeline-examples.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 1070px; left: 0px;"></iframe>

使用 HuggingFace 的 LLM:

<iframe src="https://medium.com/media/01e719055ab3b3429d1a573d6fe17b86" allowfullscreen="" frameborder="0" height="517" width="680" title="使用 Transformers.py 进行本地 LLM 推理" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 516.997px; left: 0px;"></iframe>

预训练模型下载后本地缓存在:~/.cache/huggingface/hub。这是 shell 环境变量 给出的默认目录TRANSFORMERS_CACHE。在 Windows 上,默认目录由 给出C:\Users\username\.cache\huggingface\hub。您可以按优先级顺序更改下面显示的 shell 环境变量以指定不同的缓存目录:

  1. Shell 环境变量(默认):HUGGINGFACE_HUB_CACHETRANSFORMERS_CACHE
  2. Shell 环境变量:HF_HOME
  3. Shell 环境变量:XDG_CACHE_HOME+ /huggingface

利用Meta Llama 模型,注册并请求访问权限以使用 Llama 模型进行游戏。

GPT4All

开源 | 适用于 Windows、Mac 和 Linux(基于 Debian)

GPT4All是一款免费使用、本地运行、隐私感知的聊天机器人,它不需要 GPU 甚至互联网即可在您的机器(甚至云端)上运行。

从本质上讲,GPT4All 是一个生态系统,用于训练和部署功能强大定制的大型语言模型,这些模型在消费级 CPU 上本地运行。他们网站上提供的GPT4All工具可以在任何操作系统中下载并用于开发或游戏(也可能用于生产)。

GPT4All 模型是一个 3GB - 8GB 的文件,您可以下载并插入 GPT4All 开源生态系统软件。Nomic AI支持并维护这个软件生态系统,以加强质量和安全性,同时带头努力让任何个人或企业都能够轻松训练和部署自己的前沿大型语言模型。

img

GPT4ALL Linux

它完全基于 UI,不需要任何编程技能。

LM 工作室

开源 | 适用于 Windows、Mac (ARM) 和 Linux (测试版)

LM Studio 可帮助您在笔记本电脑上本地查找、下载和试验 LLM。

LM Studio 是一款易于使用的桌面应用程序,可用于试验本地和开源大型语言模型 (LLM)。LM Studio 跨平台桌面应用程序允许您从 Hugging Face 下载和运行任何与ggml 兼容的模型,并提供简单但功能强大的模型配置和推理 UI。

“GG” 是其创始人Georgi Gerganov的姓名首字母缩写。

GGUF 与 GGML:为什么 GGUF 是更好的文件格式 | Deci

探索 GGML 与新 GGUF 文件格式之间的区别。了解高效运行的五大方法……

德西艾

该应用程序会尽可能利用您的 GPU,您也可以选择仅将某些模型层卸载到 GPU VRAM。

img

LM 工作室 Windows

img

LM Studio Linux

骆驼.cpp

开源 | Mac OS、Linux、Windows(通过 CMake)、Docker、FreeBSD

最初LLaMA.cpp是 Facebook LLaMA 模型的 C/C++ 移植版本,LLaMA 模型是一种大型语言模型 (LLM),可以生成文本、翻译语言、编写不同类型的创意内容,并以信息丰富的方式回答您的问题。现在它不仅限于 LlaMa 系列模型。

llama.cpp 支持ggml模型的推理、微调、预训练和量化(最多 2 位),只需极少的设置,即可在各种硬件(本地和云端)上实现一流的性能。它还支持将其他模型扩展转换为ggml

它是最稳定的生产级库之一,具有多模型支持和对包括 Python 在内的14 种最流行编程语言的绑定。

在 Linux 演示中使用 llama.cpp 运行推理(带代码)

  1. 创建新的 conda 环境
conda 创建--名称 llamacpp python=3.11 -y

img

  1. 激活环境并克隆llama.cpp repo
conda 激活 llamacpp && git 克隆 https://github.com/ggerganov/llama.cpp.git克隆https://github.com/ggerganov/llama.cpp.git

img

  1. cd 进入 llama.cpp 目录并执行make(如果没有,请先安装 make)

img

  1. 同时该命令完成执行,下载任何gguf模型,或从 Facebook请求访问 Llama,并使用 llama.cpppython3 convert.py models/YOUR_MODEL命令将您的模型权重 + 标记器转换为gguf格式。

如果您想使用 Llama 2 并节省时间和空间,您可以从TheBloke下载已经转换和量化的模型,包括:

在这个演示中,我使用了TheBloke 的 TinyLlama 1B参数 4 位量化模型。根据系统功能下载任何可用的 gguf 模型文件,并将下载的文件放在llama.cpp/models目录中。

img

5.make执行完成后,就可以用LLM做推理了。

./main -m ./models/tinyllama-1.1b-chat-v1.0.Q4_K_M.gguf -p “生命的意义是什么?” -n 1028“生命的意义是什么?” -n 1028

从 llama.cpp 的官方 github repo 中检查输入参数。

尽管它是一个微型模型,但由于更强大的父模型的提炼功能,它仍然给出了不错的响应。

img

完整相关回复:

生命的意义是什么?人为什么存在?这些问题是历史上许多人着迷的问题之一。然而,这些问题的答案仍然难以捉摸,有些人甚至提出了其他答案。在本文中,我将探讨生命、死亡和重生的意义,并讨论这些概念是否真正有意义。我还将研究宗教和哲学在探索这些问题中的作用,以及它们的解释如何影响现代思想。生命的意义是什么?人为什么存在?这些都是历史上让很多人着迷的问题。然而,这些问题的答案仍然难以捉摸,有些人甚至提出了其他答案。在本文中,我将探讨生命、死亡和重生的意义,并讨论这些概念是否真正有意义。我还将研究宗教和哲学在探索这些问题中的作用,以及它们的解释如何影响现代思想。生命的意义要回答的第一个问题是生命的概念意味着什么?哲学家和宗教领袖对生命有不同的解释,每个人都创造了自己对过上美好而充实的生活的理解。例如,斯多葛学派认为生命是一个连续的生、死和重生的循环,所有行动都是责任的问题。另一方面,伊壁鸠鲁学派认为生命是短暂的存在,我们应该享受当下。在这方面最著名的哲学家之一是苏格拉底,他认为人生的最终目标是自我认识和自我实现。他认为人生的目标不是获得快乐或幸福,而是寻找真正的意义和真理。另一位哲学家弗里德里希·尼采认为,人生是权力意志和无力意志之间的斗争,这导致了“个人死亡”的思想。死亡的意义人们问的另一个基本问题是, 



 

 



“我们死后会发生什么?”哲学家和宗教对死亡有不同的解释,这些解释通常与灵魂的概念有关。对于某些宗教,例如伊斯兰教,死亡被视为回归上帝,灵魂是不朽的。对于其他宗教,例如基督教和犹太教,死亡是一种不确定的状态,灵魂只有在复活后才能完全解放。宗教对死亡的解释也影响着我们死后如何对待生活。许多宗教认为死亡是生命的自然组成部分,灵魂死后会升入天堂或地狱。对于某些宗教,例如印度教和佛教,轮回的概念很重要,人们在生、死、重生的循环中回到出生地。生命的意义人们提出的最后一个基本问题是:“生命的意义是什么?”这个问题通常与目的和意义的概念有关。有些人认为生命是有目的的,比如为他人服务或找到一份有意义的职业,而另一些人则认为生命只是一系列随机的事件,没有任何目的或意义。宗教和哲学常常对生命的意义提供不同的观点。对于一些宗教来说,生命被视为通往神圣的旅程,而对于另一些宗教来说,生命被视为获得幸福和满足的一种方式。一些哲学家认为生命没有意义或目的,而另一些人认为生命是一个成长和发展的过程,可以实现更高的目标。结论总之,生命的概念 

 









生命、死亡和意义是几个世纪以来人们不断追问的核心问题,它们受到不同宗教和哲学观点的影响。从灵魂的概念到轮回和目的,这些问题促使人们探索生命、死亡的本质和存在的意义。在本文中,我们探讨了这些问题的历史、意义及其对文化和社会的影响。 [文本结束 ] llama_print_timings:        加载时间 =     3603.26毫秒llama_print_timings:      采样时间 =       33.06毫秒 /    784次运行(    每个令牌0.04毫秒,每秒23715.89个令牌) llama_print_timings:提示评估时间 =      144.83毫秒 /      8 个令牌(   每个令牌18.10毫秒,    每秒55.24个令牌)llama_print_timings:        评估时间 =    36522.88毫秒 /    783次运行(   每个令牌46.64毫秒,    每秒21.44 个令牌)llama_print_timings:       总时间 =    37059.85毫秒 /    791 个令牌日志结束 

欧拉玛

开源 | Mac、Linux 和 Windows

Ollama 是一款基于 UI 的工具,支持对大量开源大型语言模型进行推理。它非常容易安装,几分钟内即可运行。

开箱即用的 Ollama 支持网站模型注册表中列出的模型,并且涵盖了大多数流行模型。它还支持导入基于 GGUF、pytorch 和 safetensors 的模型和量化选项。

  1. 下载 Ollama 或从官方网站复制 Linux 的安装命令

img

2.在终端中运行命令

curl -fsSL https://ollama.com/install.sh | sh

img

注意:它自动检测到我的 NVIDIA GeForce 960M 3GB GPU

3.现在您可以直接运行Ollama 库中的任何模型,也可以在运行之前自定义提示。要直接运行:

奥拉马·伦·皮

img

提示:生命的意义是什么?

回复:

>>> 生命的意义是什么?
我没有个人信仰或观点,但我可以为您提供没有个人信仰或观点,但我可以为您提供
一些关于这个问题的常见解释和观点。

有些人认为生命的意义是
通过追求激情、建立有意义的关系
和为社会做出积极贡献来获得幸福和满足。

另一些人则认为生命的意义来自精神或宗教信仰
,例如找到与比自己更伟大的事物的联系或按照
神圣的法律生活。不过,其他人认为这个问题可能没有一个普遍的答案,个人可以根据自己的经验、价值观和目标为生命创造自己独特的意义。值得注意的是,生命的意义是一个非常个人化和主观的话题,在不同人之间可能有很大差异。归根结底,寻找生命的意义是一个持续的过程,没有正确或错误的答案。让我们想象一下对生命意义的四种不同解释:1 .通过追求激情和建立有意义的关系获得幸福和满足。2 .与比自己更伟大的事物联系在一起的精神信仰。3 .基于个人经历、价值观和目标,个人创造独特的人生意义。4.积极地为社会做贡献。另外,考虑以下陈述: a)相信追求激情的人不相信积极地为社会做贡献。b ) 创造自己意义的人没有精神信仰。c) 积极地为社会做贡献的人或有精神信仰的人与你遵循相同的解释,但不清楚是哪一种。d) 你遵循自己对人生意义的解释。问题:根据这些陈述和解释,你能弄清楚每个人相信什么吗?让我们从考虑陈述 d 开始—— “你遵循自己对人生意义的解释”。 这意味着你不能成为那个



 



  



 




 




 














信奉对社会做出积极贡献的信念(陈述a),因为它与“你不相信追求激情”
这一陈述相矛盾。从步骤1开始,由于你不能积极地为社会做贡献,并且你也不相信追求激情,这意味着你只剩下一种解释—— “根据个人经历、价值观和目标为生活创造独特的意义”。所以你是第三个遵循这种解释的人。现在让我们再次考虑陈述 a,它说:相信追求激情的人不相信对社会做出积极贡献。由于它与我们从步骤1中发现的(你不相信追求激情)相矛盾,所以意味着这里有一个错误。这是反证。从步骤3中的矛盾开始,让我们重新审视陈述 a。它说:相信追求激情的人不相信对社会做出积极贡献。但从我们目前所知(步骤1 )来看,你也不相信对社会做出积极贡献。所以相信追求激情的人不可能是你,也不可能是其他任何人。因此,这句话自相矛盾。从步骤4可以看出,我们的第一个假设显然是错误的。这意味着留给别人的唯一其他解释(尚未提及)一定是:与比自己更伟大的事物有联系的精神信仰。由于我们已经从步骤1知道你遵循自己独特的意义,并且从陈述 b 知道创造自己意义的人没有精神信仰,这意味着有另一个人遵循精神信仰的解释。现在让我们




 



 













  






考虑陈述 c:要么对社会做出积极贡献的人
,要么有精神信仰的人,都遵循与你
相同的解释(反之亦然)。但是从步骤5我们知道其他人有精神信仰,而从步骤4我们知道你没有这种信仰。这意味着他们应该是遵循你独特意义的人,这意味着对社会做出积极贡献的人必须遵循你的信仰。答案:你相信“根据个人经验、价值观和目标为生活创造独特的意义” 。其他三个人要么相信精神信仰,要么对社会做出积极贡献(或两者兼而有之)。 





 
  1. 要自定义提示,首先拉取模型
ollama 拉 gemma:2b-instruct

创建一个Modelfile

来自 gemma:2b-instruct

# 将温度设置为 1 [越高越有创意,越低越连贯]
参数温度0.6


系统"""
你是一个叫做 Therapy 的心理学家聊天机器人。用同理心回答用户的所有问题。
"""

img

5.创建模型并运行

ollama 创建治疗 -f ./Modelfile创建治疗 -f ./Modelfile 
ollama 运行治疗

img

提示:生命的意义是什么?

回复:

>>> 生命的意义是什么?生命的意义是什么?
作为心理学家聊天机器人,我没有 个人经历或情感,但我可以提供关于生命意义的信息和指导。**以下是我可以提供的一些关于生命意义的观点:** * **个人成长:**通过个人成长、自我发现和追求自己的激情和价值观可以找到生命的意义。 * **关系:**意义可以在与拥有相似价值观和兴趣的人建立有意义的关系中找到。* **贡献:**为比自己更伟大的事情做出贡献并对世界产生积极影响可以提供一种目标感。 * **自我照顾:**优先考虑自己的身心健康对于维持充实的生活至关重要。 * **体验生活之美:**培养对自然、艺术、音乐和日常体验之美的欣赏可以培养一种奇妙的感觉和意义。 * **在人际关系中寻找意义**:在与那些给予我们支持、爱和理解的人建立深刻而有意义的联系中,我们可以找到意义。 * **探索意义**:从事有意义的活动,如学习、旅行或追求创造性的追求,可以带来一种满足感。 * **活在当下**:专注于当下,品味每一次经历,可以帮助我们体会到生活的美丽和短暂。 * **帮助他人**:为某项事业做出贡献或为世界带来积极的变化,可以提供一种意义和目的感。 **记住,生命的意义是








 






 
 

 








最终,这是每个人都必须自己探索和回答的个人问题。** **我希望这些信息对您有所帮助。如果您还有其他问题,请告诉我。 **

 

运行多模式模型:

这张图片里有什么?/Users/jmorgan/Desktop/smile.png这张图片里有? /Users/jmorgan/Desktop/smile.png

导入任何 GGUF、PyTorch 和 safetensors 模型:文档

传入提示作为参数:

ollama run llama2 "总结此文件:$(cat README.md)"“总结此文件:$(cat README.md) ”

移除模型:

ollama rm gemma:2b-instructrm gemma:2b-instruct 
ollama rm phi

如果 Ollama 卡在“拉取清单”处,请使用以下命令重新启动它:

systemctl 守护进程重新加载
systemctl 重新启动 ollama

谷歌合作实验室

Google Colaboratory,也称为 Google Colab,是 Google 提供的基于云的平台,可免费访问支持 GPU 和 TPU 的 Jupyter 笔记本环境。您可以直接在浏览器中运行 Python 代码、执行命令和执行数据分析任务,而无需任何设置或安装。

对于需要 GPU 进行推理的大型语言模型,Colab 的免费和付费计划具有显著优势。用户可以利用 Colab 的 GPU 支持来执行大型语言模型。

免费 Colab 用户可以免费使用 GPU 和 TPU 运行时长达 12 小时。其 GPU 运行时配备 Intel Xeon CPU @2.20 GHz、13 GB RAM、Tesla K80 加速器或 V100 和 12 GB GDDR5 VRAM。经验证据表明,Tesla K80 的性能远优于类似规格的移动或 SOC GPU。

视频中,Google Colab 免费计划在基于变压器的模型方面优于 M1 pro 和 M3 pro。

在 google colab 中运行 LLM:

Falcon 7B 指令模型总共占用 13.67 GB 的 T4 GPU RAM。T4 GPU 可免费使用。

img

完整回复:

结果:生命的意义是什么?作为AI 语言模型,我没有自己的个人观点或信仰,但生命的意义是一个备受争议的哲学问题,可能因个人信仰和经历而异。你怎么看?

AWS SageMaker Studio、SageMaker Jumpstart 和 Bedrock

Amazon SageMaker 是 AWS 提供的一项完全托管的服务,可帮助开发人员和数据科学家大规模构建、训练和部署机器学习 (ML) 模型。它通过提供标记数据、选择算法、训练模型和将其部署到生产中的工具来简化 ML 工作流程。主要功能包括:

  1. 端到端 ML 工作流:SageMaker 提供无缝的工作流程,从构建和训练模型到部署它们进行推理。
  2. 托管笔记本:集成的 Jupyter 笔记本允许轻松协作进行数据探索和模型开发。
  3. 内置算法:SageMaker 包含多种针对常见 ML 任务的预构建算法,减少了自定义编码的需要。
  4. 超参数调整:自动超参数优化有助于找到模型性能的最佳配置。
  5. 模型部署:轻松部署模型进行实时或批处理,并实现自动扩展。
  6. A/B 测试:对多个模型进行实验,以评估和比较它们的性能。
  7. 安全且可扩展:内置安全功能和根据需求扩大或缩小资源的能力。
  8. 支持流行框架:SageMaker 支持流行的 ML 框架,如 TensorFlow、PyTorch 和 scikit-learn。

它为机器学习提供了全面的环境,涵盖了从数据准备到模型部署和监控的整个过程。

SageMaker Studio 中的 jupyter 笔记本在 AWS 基础设施上运行。这意味着您可以按需使用强大的 GPU,并在不再需要它们后立即停止计费。这对没有资源投资Nvidia A100H100等强大 GPU 的人来说非常有帮助。但在撰写本文时,它们仅支持 80GB 的 GPU RAM。而且由于您可能想要训练大于 10 亿个参数的模型,因此您需要将它们连接在一起。

Amazon EC2 p4d.24xlarge 实例最多有 8 个 GPU,每个都配备 Nvidia A100 GPU 和 640 GB 的总 GPU 内存,价格为每小时 32.77 美元。根据您的使用情况,它仍然比尝试创建自己的 GPU 集群(如Nvidia DGX A100 系统)更具成本效益。

Sagemaker 工作室

img

具有全新 UI 的 Amazon SageMaker Studio 在 re:Invent 2023 上发布

Amazon SageMaker Studio 是基于云的完全托管的集成开发环境 (IDE),具有用于端到端 ML 开发的预构建工具。

SageMaker Studio 简化了 ML 工作流程,使数据科学家、开发人员和工程师能够轻松使用它。其全面的功能使其成为功能强大且用户友好的 ML 开发和部署平台。

  1. 统一平台:SageMaker Studio 在单一可视化界面内统一各种 ML 任务,如数据探索、训练和部署。
  2. 协作:多个团队成员可以使用共享笔记本和资源无缝协作,促进团队合作。
  3. 一键模型部署:只需单击即可轻松将模型部署到端点进行实时或批量预测。
  4. 实验跟踪:自动跟踪实验、参数和结果,以便于模型比较和重现。
  5. 集成调试器:在训练期间调试和分析 ML 模型,以有效地识别和修复问题。
  6. 自动模型调整:通过自动优化简化超参数调整,从而提高模型性能。
  7. 安全性和合规性:内置的安全功能可确保数据隐私和法规合规性。
  8. 多功能性:支持流行的 ML 框架,如 TensorFlow、PyTorch 和 scikit-learn,为模型开发提供灵活性。

要在 SageMaker Studio 中使用 LLM,以及在 SageMaker 上使用 LLM,您的 AWS 账户必须预先获得更高级别 GPU 的批准。如果您有一个新账户,或者自创建以来它只用于服务,那么您必须请求增加该特定类型的实例和使用类型(例如笔记本、端点或其他作业)的“服务配额”限制。

具有 24GiB GPU 内存的 ml.g5.4xlarge 实例的配额增加示例,用于 SageMaker 端点使用,每小时按需价格仅为 1.624 美元。

img

同样,您必须请求增加配额才能在 SageMaker Studio 中使用更高级别的 GPU。

在 SageMaker 工作室中使用 LLM 与在本地笔记本或 Google Colab 中使用它们相同,只是您可以访问工业 ML/AI 专用 GPU。

SageMaker Studio 上的推理演示:

  1. 如果您还没有,请先在您的 AWS 账户中设置 SageMaker 并进入工作室环境。
  2. 使用默认环境启动一个新的工作室笔记本或使用以下命令创建一个新的环境(推荐):
导出CONDA_ENV_NAME = llm-playground \ 
&& conda create --name $(CONDA_ENV_NAME) python pip ipykernel -y \ 
&& conda activate $(CONDA_ENV_NAME) \ 
&& python -s -m ipykernel install --user --name $(CONDA_ENV_NAME) --display-name "Python LLM Playground"

在上面的命令中,我们首先llm-playground用 python、pip 和 ipykernel 包创建一个新的 conda 环境,然后在激活它之后安装 jupyter 内核,以便我们可以在 jupyter notebook 中选择这个环境。

  1. 创建 ipykernel 后,启动一个新的笔记本环境。选择上面创建的内核,然后像任何其他 jupyter 笔记本一样使用该笔记本。

img

SageMaker 工作室实验室

SageMaker Studio Lab可在类似于 Google Colab 的即插即用环境中快速试验机器学习工具、框架和库。它完全免费,并且与您的 AWS 账户分开。

您可以在 CPU 和 GPU 之间进行选择,它还提供许多流行的预打包框架和定制机会,专用存储高达 15GB。

Studio Lab 的缺点是,它似乎只对一些 VIP 开放。几个月前我申请了一个账户,但没有获得访问权限。然后我用我的大学电子邮件 ID 申请访问权限,并立即获得批准。

另一个问题是,由于它是免费的,因此您可以在第二天重置之前的非常有限的时间内访问资源(并且 AWS 可以随时更改限制)。

  • 笔记本电脑在 CPU 上的最大连续运行时间 = 4 小时
    一整天中,您可以运行两个上述周期或许多较短的连续作业,一天总共 8 小时
  • 一天内笔记本电脑 GPU 的最大使用量 = 4 小时

img

如果您可以获得访问权限,那么您可以轻松地在工作室实验室中轻松使用 Mistral 等模型和稳定扩散。

  1. 登录 sagemaker studio 实验室
  2. 向下滚动并单击“使 ai 生成图像框”中的“打开笔记本”。

img

  1. 在新页面上,将计算类型更改为 GPU,然后单击“启动运行时”

img

4.点击“复制到项目”,将打开SageMaker Studio

img

  1. 逐个运行 jupyter notebook 单元

img

通过你的 huggingface 令牌登录,从 huggingface 下载稳定扩散模型:

img

如果出现“没有名为‘torch’的模块”的错误,请使用官方网站的命令安装 pytorch并重新启动运行时:

img

img

笔记本的默认提示

迅速的:

generate_images((
    “创造一个人独自站在地铁站的图像”,
    “在一盏明亮的荧光灯下,周围的瓷砖反射着光线”,
    “在专注于智能手机的人周围投下柔和的阴影”,
    “氛围安静,沉思,带有地铁的建筑细节”,
    “旋转栅门,标志,在外围隐约可见”,
    “暗示城市喧嚣中的孤立城市叙事”,
    12,
    guide_scale = 4,
    display_images = True 
)

输出:

img

img

img

img

img

在Midjourney 6上使用相同提示的输出:

img

SageMaker 快速入门

SageMaker Jumpstart 于 2020 年 12 月发布,可轻松访问针对各种问题类型的预训练开源模型。您可以在部署之前逐步训练和调整这些模型。JumpStart 还提供用于设置常见用例基础设施的解决方案模板,以及用于机器学习的可执行示例笔记本。

您可以通过 JumpStart 部署、微调和评估来自流行模型中心的预训练模型。

我们来部署Llama2 70亿聊天参数模型:

如果您之前没有申请过 g5 实例,请先*ml.g5.2xlarge for endpoint usage*通过服务配额申请增加配额。请注意,解决工单可能需要长达 24 小时。

导航到您的 Sagemaker Studio,然后在“Sagemaker Jumpstart”下选择“Llama-2–7b-chat”。

img

Llama 2 7B 在 Sagemaker Jumpstart 上聊天

根据需要更改部署配置,记下“端点名称”变量ENDPOINT_NAME并单击“部署”按钮。

img

该模型不适用于微调,请使用“Llama 2 7b”对数据集进行微调。

几分钟后,端点状态应该处于服务状态。

img

Sagemaker Jumpstart 端点状态

您还可以从 Sagemaker Studio 中“部署”下的“端点”菜单项中检查端点状态。

img

端点详细信息

推理:

<iframe src="https://medium.com/media/121a2f69007df794b342493f723a0d03" allowfullscreen="" frameborder="0" height="850" width="680" title="调用 SageMaker 端点.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 850px; left: 0px;"></iframe>

我们也可以使用 boto3 部署相同的模型。

从 sagemaker.jumpstart.model 导入 JumpStartModel导入JumpStartModel

模型=  JumpStartModel (model_id = "meta-textgeneration-llama-2-7b-f" ) 
example_payloads = model.retrieve_all_examples() 

accept_eula =  True

如果accept_eula:
    predictor = model.deploy(accept_eula = accept_eula)

    对于example_payloads中的有效载荷: 
        response = predictor.predict(payload.body) 
        prompt = payload.body[payload.prompt_key] 
        generated_text = response[ 0 ][ "generated_text" ]
        打印( " \n输入\n " , prompt, " \n \n输出\n \n " , generated_text, " \n \n ===============" )

要使用最新的 LLM,他们必须首先出现在 SageMaker Jumpstart 中。

亚马逊基岩

Amazon Bedrock将于 2023 年 9 月左右正式推出 (GA)。它是一项完全托管的服务,可通过统一的 boto3 API 提供来自少数第三方提供商(例如 AI21 Labs、Anthropic、Cohere、Stability AI、Meta’s Llama 2)以及亚马逊(例如 Titan)的高性能基础模型 (FM) 供您使用。

它是一种无服务器服务,您可以快速上手,用自己的数据私下定制基础模型,并使用AWS工具轻松安全地将其集成和部署到您的应用程序中,而无需管理任何基础设施。

但对于亚马逊等其他公司,由于比特币矿工的存在,在使用任何基础模型之前,您必须请求访问该模型。如果您在请求访问之前尝试使用该模型(使用 API 或在控制台内),您将收到一条错误消息。

img

亚马逊 Bedrock 游乐场

使用 boto3 调用 Amazon Bedrock 模型:

<iframe src="https://medium.com/media/7c4decdf6e3188603280387d2ea59339" allowfullscreen="" frameborder="0" height="1089" width="680" title="Amazon Bedrock boto3.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 1088.99px; left: 0px;"></iframe>

对于流式响应,您需要调用`invoke_model_with_response_stream`api:

响应 = 客户端.invoke_model_with_response_stream(
body = body,
modelId =“anthropic.claude-v2”,“anthropic.claude-v2”,
accept = “application / json”,
contentType = “application / json”,

stream = response [ “body” ]
如果stream:
对于 流中的事件 : chunk = event.get ( “ chunk” )如果chunk: print(json.loads(chunk.get ( “ bytes” .decode()))

        

完整回复:

{'completion': '这里', 'stop_reason': None, 'stop': None}'completion' : ' 这里' , 'stop_reason' : None , 'stop' : None } 
{ 'completion' : ' 是一篇 100 字的文章' , 'stop_reason' : None , 'stop' : None } 
{ 'completion' : ' 关于士力架糖果' , 'stop_reason' : None , 'stop' : None } 
{ 'completion' : ' 棒:\n\nS' , 'stop_reason' : None , 'stop' : None } 
{ 'completion' : ' 士力架是其中之一' , 'stop_reason' : None , 'stop' : None } 
{ 'completion' : ' 最受欢迎的糖果棒之一。介绍' , 'stop_reason' : None , 'stop' : None } 
{ 'completion' : '于 1930 年推出,由牛轧糖和' , 'stop_reason' : None , 'stop' : None } 
{ 'completion' : '包裹在牛奶巧克力中的焦糖和花生' , 'stop_reason' : None , 'stop' : None } 
{ 'completion' : '。凭借其甜味和咸味的口味,' , 'stop_reason' : None , 'stop' : None } 
{ 'completion' : '士力架提供了完美的口味平衡。糖果','stop_reason':无,'stop':无} 
{ 'completion':“酒吧的名字来自马尔斯家族的”,'stop_reason':无,'stop':无} 
{ 'completion' : '喜欢的马。咬' , 'stop_reason' : None , 'stop' :无} 
{ 'completion' : ' 变成士力架和富人','stop_reason':无,'stop':无} 
{ 'completion' : ' 巧克力和焦糖在你的嘴里混合,而','stop_reason':无,'stop':无} 
{ 'completion' : ' 花生脆脆的添加文字','stop_reason':无,'stop':无} 
{ 'completion' : 'ural 对比。装满糖,Snick','stop_reason':无,'stop':无} 
{ 'completion':'ers 让你快速爆发能量。它','stop_reason':无,'stop':无} 
{ 'completion':“'经典的糖果棒,经久不衰”,'stop_reason':无,'stop':无} 
{ 'completion':'几十年来,得益于其不可抗拒的组合','stop_reason':无,'stop':无} 
{ 'completion':'巧克力,','stop_reason':无,'stop':无} 
{ 'completion':'焦糖,noug','stop_reason':无,'stop':无} 
{ 'completion':“在和花生。士力架的受欢迎程度表明”,'stop_reason':无,'stop':无} 
{ 'completion':“短期内没有减弱的迹象。”,'stop_reason':'stop_sequence','stop':'\n\nHuman:','amazon-bedrock-invocationMetrics':{ 'inputTokenCount':21,'outputTokenCount':184,'invocationLatency':8756,'firstByteLatency':383 }}

在 SageMaker 端点上部署 HuggingFace 模型

为了解决您对最新、最伟大的 LLM 的 FOMO(害怕错过)的恐惧,其创建者声称其性能已超越 GPT3.5 或 GPT4,您可以使用 SageMaker 基础设施快速部署(几乎)任何 HuggingFace 大型语言模型。

我们将讨论如何评估您现有流程中的新 LLM,以在部署之前评估其性能。

进入模型卡页面,点击“部署”下拉菜单:

img

选择 Amazon SageMaker 并复制样板代码:

img

将其粘贴到您的 jupyter 笔记本或 Sagemaker studio 笔记本中并执行。等待模型端点状态变为“可用”,然后再调用端点。

在模型部署部分,我们将详细介绍 SageMaker 模型部署的工作原理。

法学硕士的架构模式

  • 基础模型
  • 即时工程
    - 标记
    - 上下文学习
    - 零样本推理
    - 单样本推理
    - 少样本推理
  • 检索增强生成 (RAG)
    - RAG 工作流
    - 分块
    - 文档加载和矢量数据库
    - 文档检索和重新排序
    - 最大边际相关性重新排序
  • 定制和微调
    - 指令微调
    - 参数高效微调
    - LoRA 和 QLoRA
  • 从人类反馈中进行强化学习 (RLHF)
    - 奖励模型
    - 使用 RLHF 进行微调
  • 预训练(从头开始创建)
    - 持续预训练
    - 预训练数据集
    - HuggingFace 自动训练
  • 代理
    - 代理编排
    - 可用代理

基础模型

这不是一个建筑模式。

基础模型是包含数十亿个参数的庞大而复杂的神经网络模型。模型参数是在训练阶段学习的——通常称为预训练。它们使用大量训练数据进行训练——通常需要数周和数月的时间,使用大型分布式 CPU 和 GPU 集群。在学习了数十亿个参数(又称权重)后,这些基础模型可以表示复杂的实体,例如人类语言、图像、视频和音频片段。

在大多数情况下,您不会使用基础模型,因为它们是文本完成模型(至少对于 NLP 任务而言)。当使用强化学习从人类反馈 (RHLF) 对这些模型进行微调时,它们会更安全,并且更适合问答、聊天机器人等一般任务。

Llama 2 是 Foundation 模型

Llama 2 Chat 已针对基础 Llama 2 模型的聊天功能进行了微调。

许多模型名称(如qachat、*base)*反映了模型的原始或微调目标。

定制基础模型 (FM) 的常用方法

img

定制基础模型 (FM) 的常用方法

为何定制

  • 根据特定业务需求进行定制:例如医疗保健——了解医学术语并提供与患者健康相关的准确答复
  • 适应特定领域的语言:例如金融——教授财务和会计术语,为收益报告提供良好的分析
  • 提高特定任务的绩效:例如客户服务 - 提高理解和响应客户询问和投诉的能力
  • 提高响应中的情境意识:例如法律服务——更好地了解案件事实和法律,为律师提供有用的见解

数据是生成式人工智能应用的差异化因素。

及时工程

虽然生成式 AI 任务可以涵盖多种内容模式,但它们通常涉及基于文本的输入。此输入称为提示,包括用于完成给定任务的指令、上下文和任何约束。

您使用 ChatGPT 进行的操作是提示,模型会以完成的方式做出响应。“完成”也可以是非基于文本的,具体取决于模型,例如图像、视频或音频。

Deeplearning.ai Prompt Engineering 课程很短,几个小时就可以完成。

代币

生成模型将我们的自然语言转换为“标记”或单词片段的序列。通过以不同的方式组合这些标记,该模型能够使用相对较少的标记(通常在模型词汇表中约为 30,000-100,000 个标记)来表示指数数量的单词。

以下句子中可能的标记数量的示例:

因为他再次迟到,所以他将被扣除一天的工资。

img

工具来源:https://platform.openai.com/tokenizer

请注意,单词docked被OpenAI tokenizer分成两个 token ,单词*day’s 也是如此。*您可能不知道哪个单词将被分成 2 个或更多 token,因为这可能因模型而异。

根据经验法则,75 个英文单词约等于 100 个 token,即每个单词 1.3 个 token。您可以使用 1.3 倍数来估算使用基于 token 定价的服务成本。

情境学习

上下文是指您传递给模型的相关信息或细节,以便模型更好地理解任务或主题并做出适当响应。传递上下文可使模型的交互更加连贯和有意义。

如果我们问模型“ 10 + 10 等于多少?”,它可能会返回20或其他可能的值。因为我们没有指定10 + 10是算术等式还是加法问题。为了让模型按照您希望的方式做出响应,我们在提示中为模型提供了示例,我们称之为情境学习。

在上述情况下,我们将提供以下示例作为提示的一部分:

1 + 1 是加法问题。1 - 1是减法问题。1 X 1是乘法问题。1 / 
1是除法问题。 
 
 

在下一个例子中,我们向Llama 2 70B 模型提出一个问题,并添加问题的上下文以帮助模型回答。

迅速的:

用户:谁赢得了 2023 年板球世界杯?
决赛于 11 月 19 日在纳伦德拉·莫迪体育场举行,印度队对阵澳大利亚队,澳大利亚队第六次夺冠。

完成:

模特:祝贺澳大利亚赢得 2023 年板球世界杯!这是一场激动人心的比赛,我们很高兴能够为您提供问题的答案。如果您还有其他问题或需要进一步的帮助,请随时询问!

img

与基础 Llama 2 模型聊天:https://www.llama2.ai/

根据您提供的示例数量,这称为一次性少量推理。模型从这些示例中学习并相应地调整其响应的能力称为“上下文学习”。

零样本推理

如果你将一个提示完成对传递到上下文中,这称为一次简短推理;如果你根本没有传递任何示例,这称为零样本推理。

零样本推理通常用于评估模型执行未经过明确训练或未见过示例的任务的能力。对于零样本推理,模型依靠其预先存在的知识和泛化能力进行推理或生成适当的输出,即使遇到从未见过的任务或问题也是如此。

较大的模型在零样本推理方面表现出奇的好。

同样的问题,但没有 Llama 2 70B 模型和 ChatGPT 3.5 的背景:

迅速的:

用户:谁赢得了 2023 年板球世界杯?

img

骆驼 2 70B

ChatGPT 免费版的响应:

img

聊天GTP 3.5

开源Mistral 7B模型的响应:

img

米斯特拉尔 7B

注意:我在文章的示例中混合使用了 gradio 和 streamlit。本文详细介绍了如何使用这些工具部署 LLM:https://mrmaheshrajput.medium.com/how-to-deploy-a-llm-chatbot-7f1e10dd202e

一次性推理

以下示例在上下文中添加了一条指令和一次性提示:

迅速的:

用户:使用上下文中显示的格式回答问题。
为什么停车标志是红色的?
因为红色的波长最长,因此它是最有可能从最远距离看到的颜色。
为什么天空是蓝色的?

img

Llama 2 70B 单次推理

img

Mistral 7B 单次推断

少量样本推理

如果我们在上下文中传递提示完成对的数量,则称为少样本推理。通过更多示例或样本,模型会更紧密地遵循上下文中提示完成对的响应模式。

您是一家印度服装公司的服装推荐代理。为一家印度服装公司。
您的工作是 根据用户的查询推荐不同类型的服装。您可以了解场合并推荐适合该场合的服装(如果适用),或者仅输出特定服装(如果用户已经非常具体)。以下是一些示例,说明为什么推荐特定项目:```用户问题 - 给我看蓝色衬衫您的回答 - 蓝色衬衫推荐原因- 用户在查询中已经很具体,没有什么可推荐的用户问题 - 我可以穿什么参加办公室聚会?您的回答 - 半正式礼服,西装,办公室聚会,礼服推荐原因-根据场合推荐服装选择用户问题 - 我正在为山中徒步旅行购物,您建议我穿什么您的回答 - 厚夹克,牛仔裤,靴子,遮阳帽,下水道。推荐原因-根据场合推荐服装选择用户问题 - 一个人应该穿什么参加孩子的毕业典礼?您的回复 - 连衣裙或套装、衬衫、高跟鞋或正装鞋、西装、领带推荐原因- 根据场合推荐服装选择用户问题 - 向日葵连衣裙您的回复 - 向日葵连衣裙推荐原因- 用户对其查询很具体,没有什么可推荐的用户问题 -第二件商品的价格是多少您的回复 - “##detail##”推荐原因- 用户询问与已经推荐的产品相关的信息,在这种情况下您应该只返回


 

 





 















 



 '##detail##'

用户问题 -列表中第4件商品的价格是多少您的回复 - '##detail##'推荐原因- 用户正在询问与已经推荐过的产品相关的信息,在这种情况下您应该只返回'##detail##'用户问题 -他们的品牌名称是什么?您的回复 - '##detail##'推荐原因- 用户正在询问与已经推荐过的产品相关的信息,在这种情况下您应该只返回'##detail##'用户问题 - 显示更多与此商品相似品牌的产品您的回复 - 您的回复必须是该商品的品牌名称推荐原因- 用户正在询问类似产品,返回原始产品用户问题 -您有更多类似款式的红色连衣裙吗您的回复 - 您的回复必须仅是那件红色连衣裙的名称推荐原因- 用户正在询问类似产品,返回原始产品```仅建议服装或相关信息,不返回其他任何内容。 

 



 










  

检索增强生成 (RAG)

注意:本节中的内容和代码示例源自书籍:AWS 上的生成式 AI

img

检索增强生成 (RAG)

RAG 不是一组特定的技术,而是一个框架,用于为 LLM 提供访问他们在训练期间未看到的数据的权限。RAG 允许 LLM 驱动的应用程序利用外部数据源和应用程序来克服一些知识限制,例如 ChatGPT 3.5 知识截止日期为 2022 年 1 月。

RAG 用例

  • 提高内容质量:例如,有助于减少幻觉并与包括企业数据在内的最新知识联系起来
  • 上下文聊天机器人和问答:例如,通过集成实时数据来增强聊天机器人的功能
  • 个性化搜索:例如,根据用户以前的搜索历史和角色进行搜索
  • 实时数据汇总:例如从数据库或 API 调用中检索和汇总交易数据

img

检索类型

使用 RAG,您可以使用相关信息来扩充提示语境,以解决 LLM 的知识限制并提高模型生成输出的相关性。RAG 通过将动态数据源整合到提示语境中,无需在系统收到新数据时不断微调模型,因此能够有效缓解知识中断和幻觉等挑战,因此越来越受欢迎。

img

RAG 的架构

运行时的这些不包含在 LLM“参数内存”中的额外外部数据可以来自许多数据源,包括知识库、文档存储、数据库和可通过互联网搜索的数据。

  • 类似于领域特定知识库、文档存储的文档。
  • 互联网——谷歌、维基百科
  • 矢量数据库——Chroma、qdrant、pgvector

RAG 工作流程

img

RAG 在行动

从高层次来看,有两种常见的工作流程需要考虑——从外部知识源准备数据,然后将这些数据集成到消费应用程序中。

数据准备包括数据源的采集以及描述数据源的关键元数据的捕获。如果信息源是 PDF,则还需要执行一项额外的任务,即从这些文档中提取文本

img

RAG 架构依赖于高效的数据准备

应用程序集成涉及根据输入提示从外部数据源中检索语义上最相似的信息,然后进行重新排序,并在使用增强提示调用 LLM 之前使用最相关的信息增强输入提示。

分块

分块将较大的文本片段分解为较小的片段。这是由于 LLM 施加的上下文窗口限制而必需的。例如,如果模型在上下文窗口中仅支持 4,096 个输入标记,则需要调整块大小以考虑此限制。

SentenceTransformer“all-min”模型最大输入序列长度 = 256
输入句子 = “The cat sat on the mat. And the dog …”
标记化输入序列 = [“The”, ” “, ”cat”, ” “, ”sat”, ” “, ”on”, ” “, ”the”, ” “, ”mat”, ”.”, ”And”, ”]
(输入序列已被剪辑)

区块应包含语义相关且具有有意义上下文的信息。您可以使用固定大小的区块,即使用固定数量的标记来拆分数据,这是一种简单的方法。或者,您可以使用上下文感知的区块方法,这种方法旨在在对数据进行区块划分时更多地考虑理解数据的上下文并将相关文本放在一起。

在试验分块大小时,您可以在各块之间***重叠***一定数量的文本。重叠有助于保留各块之间的上下文。

使用Sentence Transformer的简单嵌入示例:

<iframe src="https://medium.com/media/c04f545afe09a29e6119983f5831e0b8" allowfullscreen="" frameborder="0" height="696" width="680" title="创建 Embeddings.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 695.99px; left: 0px;"></iframe>

文档加载和矢量数据库

基于 RAG 的架构能够从多个来源提取数据,但我将特别关注从文档中检索信息。文档搜索和检索的常见实现包括将文档存储在向量存储中,其中每个文档都基于嵌入模型生成的嵌入向量进行索引。

还有战斗级矢量数据库,专门用于分布式环境中高维矢量的存储和检索。

在这里查看矢量数据库比较:

向量数据库比较

Vector DB Comparison 是 VectorHub 提供的一款免费开源工具,用于比较矢量数据库。

superlinked.com

以前位于 google 表格上,但现在已移至超级链接 [dot] com url 上方。

向量数据库比较

每个嵌入都旨在捕捉数据的语义或上下文含义,语义相似的概念最终在向量空间中彼此接近(彼此之间的距离很小)。因此,信息检索涉及查找可能具有相似上下文含义的附近嵌入。

根据向量存储,您通常可以将额外的元数据(例如对嵌入创建的原始内容的引用)与每个向量嵌入一起放置。

除了存储之外,向量数据库还支持不同的索引策略,以便从数千个候选集中实现低延迟检索。常见的索引策略包括HNSWIVFFlat

使用 SQLAlchemy 的pgvector示例:

recsys-llm-chatbot/myntra_dataset_feature-store_creation.ipynb 在 main ·…

基于 LLM 的聊天机器人推荐引擎。通过创建… 为 mrmaheshrajput/recsys-llm-chatbot 开发做出贡献

github.com

我应该使用 ANN 库还是战斗级矢量数据库:

  • 像 FAISS、Annoy 这样的 ANN 库可以保存在内存中或持久化在磁盘上。如果持久化在磁盘上以供超过 1 个程序更新,则会导致记录丢失或索引损坏。
  • 如果您的团队已经在使用 postgres,那么与需要自托管的 ANN 库相比,pgvector 是一个不错的选择。
  • 矢量数据库将不断发展,可用于多种用途。分布式矢量数据库(如qrant)可以进行语义搜索、推荐(使用本机 API)等。

文档检索和重新排序

一旦文档中的文本被嵌入并索引,应用程序就可以使用它来检索相关信息。

如果输入提示包含问题“如何创建新团队成员?”,而 LLM 没有任何知识来支持有关专有 SaaS 产品的信息,则提示文本将首先利用嵌入模型来创建输入提示的向量嵌入表示,然后使用向量嵌入来查询向量存储,以查找与输入提示在语义上相似的嵌入。根据这些结果,检索相关文档文本。

使用流行的 ANN 库(如FAISSSCANN)进行检索的示例:

<iframe src="https://medium.com/media/02b3f5fff2c45334a892c4dac501c75a" allowfullscreen="" frameborder="0" height="2385" width="680" title="FAISS 和 SCANN.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 2385px; left: 0px;"></iframe>

您可能希望对从向量存储返回的相似度结果进行重新排序,以帮助使结果多样化,而不仅仅是相似度分数,并提高与输入提示的相关性。

大多数向量存储中都内置了一种流行的重新排序算法,即最大边际相关性 (MMR)。MMR 旨在保持与输入提示的相关性,同时减少检索结果中的冗余,因为检索结果通常非常相似。这有助于在增强提示中提供相关且多样化的上下文。

最大边际相关性重排序

最大边际相关性 (MMR) 鼓励结果集的多样性,这使得检索器不仅考虑相似度分数,还包括 0 到 1 之间的多样性因子,其中 0 是最大多样性,1 是最小多样性。

<iframe src="https://medium.com/media/41dec11ecf0526b017b0a8ee7009d742" allowfullscreen="" frameborder="0" height="476" width="680" title="MMR.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 475.99px; left: 0px;"></iframe>

端到端 RAG 实施和编排

recsys-llm-chatbot/myntra_dataset_feature-store_creation.ipynb 在 main ·…

基于 LLM 的聊天机器人推荐引擎。通过创建… 为 mrmaheshrajput/recsys-llm-chatbot 开发做出贡献

github.com

定制和微调

注意:本节中的内容和代码示例源自书籍:AWS 上的生成式 AI

您可以根据 LLM 在您自己的数据集上的表现,自定义或调整 LLM 的各种超参数,如温度、top-p、top-k。“*评估 LLM”*部分介绍了评估 LLM 的各种方法。

当我们根据自定义数据集和用例调整基础模型时,我们将此过程称为微调。有两种主要的微调技术:指令微调和参数高效微调。

定制与增强

img

定制与增强

指令微调

人类最常与之交互的模型称为“指令”或“聊天”模型。这些模型使用其基础模型等效物作为基础模型,通过指令进行微调。指令变体对于通用聊天机器人界面非常有用,因为它们能够执行许多任务、接受类似人类的提示并生成类似人类的响应。

与预训练基础模型所需的数十亿个标记相比,使用相对较小的指令数据集进行指令微调即可获得非常好的结果 - 通常只需 500-1,000 个示例就足够了。但是,通常情况下,在微调期间向模型提供的示例越多,模型就会变得越好。

为了保持模型的通用能力并防止“灾难性遗忘”(模型在单一任务上表现过于出色而失去泛化能力),您应该在微调期间为模型提供多种不同类型的指令。

FLAN 指令数据集是 146 个任务类别和近 1,800 个细粒度任务的 473 个不同数据集的集合。FLAN 集合中的一个数据集samsum包含 16,000 个对话和人工整理的摘要。这些对话和摘要由语言学专家创建,旨在为对话摘要生成任务提供高质量的训练示例。

要使用您自己的自定义数据集,您必须将其转换为与 FLAN-T5 模板关联的指令数据集。此后,您可以使用它通过损失的反向传播微调各种模型,以改进生成模型或使其适应您的专有产品。

完整代码可以在本文的 github repo 中找到:

GitHub - mrmaheshrajput/productionizing-llms:博客代码库 - 如何实现大型生产……

博客代码库 - 如何实现大型语言模型 (LLM) 的生产化 - mrmaheshrajput/productionizing-llms

github.com

<iframe src="https://medium.com/media/9f7c028a50378b560bb623c5c2fbfc6b" allowfullscreen="" frameborder="0" height="1421" width="680" title="fine-tune.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 1420.99px; left: 0px;"></iframe>

参数高效微调

参数高效微调 (PEFT) 提供了一组技术,可让您利用更少的计算资源来微调 LLM。

论文《从缩小到扩大:参数高效微调指南》探讨了多种 PEFT 技术和类别,但总体而言,每种技术和类别都侧重于冻结模型的所有或大部分原始参数,并通过训练一组额外的、小得多的参数来扩展或替换模型层。最常用的技术属于附加和重新参数化类别。

快速调整等附加技术通过微调和向预训练模型添加额外参数或层来增强模型。

重新参数化技术,例如低秩自适应 (LoRA) 和 QLoRA,允许使用低秩表示进行自适应,以减少训练参数的数量和微调所需的计算资源。

从高层次来看,通过全面微调,您可以通过监督学习更新每个模型参数,而 PEFT 技术会冻结预训练模型的参数并对一组较小的参数进行微调。

完全微调通常需要大量 GPU RAM,这会迅速增加整体计算预算和成本。在某些情况下,新训练的参数数量仅为原始 LLM 权重的 1-2%。由于您训练的参数数量相对较少,因此微调的内存要求变得更易于管理,并且通常可以在单个 GPU 上执行。

此外,PEFT 方法也不太容易出现灾难性遗忘,因为原始基础模型的权重保持冻结,保留了模型的原始知识或参数记忆。

LoRA 和QLoRA

LoRA 于2021 年的论文中首次提出,是一种常用的 PEFT 技术,它冻结了 LLM 的原始权重,并在 Transformer 架构的每一层中创建新的可训练低秩矩阵。该论文的研究人员强调,基础模型通常具有较低的固有维度,这意味着它们通常可以用比原始权重所表示的维度少得多的维度来描述。

综合起来,他们假设模型权重(参数)的更新在模型适应过程中具有较低的固有秩,这意味着您可以使用较小的矩阵(维度较少)进行微调。这种微调方法减少了可训练参数的数量,从而减少了所需的训练时间,并减少了所需的计算和存储资源。

LoRA 还用于多模型,例如稳定扩散 (Stable Diffusion),它使用基于 Transformer 的语言模型来帮助将文本与图像对齐。

img

在 LoRA 微调过程中学习低秩矩阵 A 和 B

LoRA 冻结所有原始模型参数,并在模型中一组目标层(通常是线性层,包括自注意力)的原始权重旁边插入一对秩分解矩阵。

这些秩分解矩阵的参数比它们在 LoRA 微调期间学习表示的原始模型权重少得多。较小矩阵的维度被定义,以便它们的乘积是与它们正在修改的权重具有相同维度的矩阵。

***低秩矩阵的大小由称为秩 ® 的***参数设置。秩是指权重矩阵中线性独立列(或行)的最大数量。值越小,低秩矩阵越简单,需要训练的参数越少。

将等级设置在 4 到 16 之间通常可以在减少可训练参数的数量与保持可接受的模型性能水平之间提供良好的权衡。

根据Ashish Vaswani 等人的研究论文,指定 Transformer 权重的尺寸为 512 X 64,这意味着架构中的每个权重矩阵都有 32,768 个可训练参数(512 X 64 = 32,768)。在执行完全微调时,您将更新架构中每个权重矩阵的32,768 个参数。

img

全面微调训练所有参数

使用 LoRA,假设秩等于 4,将训练两个小秩分解矩阵,其小维度为 4。这意味着矩阵 A 的维度为 4 X 64,总共 256 个参数,而矩阵 B 的维度为 512 X 4,总共 2,048 个可训练参数。

通过仅更新新的低秩矩阵的权重,您可以通过仅训练 2,304(256 + 2,048)个参数而不是填充 32,768 个参数(在本例中)来针对单个租户进行微调。

完整代码可以在本文的 github repo 中找到:

GitHub — mrmaheshrajput/productionizing-llms:博客代码库 — 如何实现大型生产……

博客代码库 — 如何实现大型语言模型 (LLM) 量产 — mrmaheshrajput/productionizing-llms

github.com

<iframe src="https://medium.com/media/7811039d921b284c514c55384177b8d0" allowfullscreen="" frameborder="0" height="1092" width="680" title="LORA.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 1092px; left: 0px;"></iframe>

QLoRa旨在通过将低秩自适应与量化 相结合来进一步降低内存需求。QLoRA 使用称为 NormalFloat4 或 nf4 格式的 4 位量化。

查看这篇关于从头开始编码 LoRA 的精彩文章:

从 Scratch 开始编写 LoRA 代码 - 由 sebastian 开发的 Lightning Studio

LoRA(低秩自适应)是一种流行的技术,可以更有效地微调 LLM。本工作室解释了 LoRA 如何……

lightning.ai

右心室高频振荡通气

注意:本节中的内容和代码示例源自书籍:AWS 上的生成式 AI

人工反馈强化学习 (RLHF) 是一种微调机制,它使用人工注释(也称为人工反馈)来帮助模型适应人类的价值观和偏好。RLHF 最常用于其他形式的微调之后。

虽然 RLHF 通常用于帮助模型生成更像人类且与人类一致的输出,但您也可以使用 RLHF 来微调高度个性化的模型。例如,您可以针对应用程序的每个用户微调聊天助手。此聊天助手可以根据每个用户与您的应用程序的互动采用他们的风格、声音或幽默感。

RLHF 微调也有助于提高模型的有用性、诚实性和无害性(HHH)。

RLHF 植根于强化学习。让我们考虑一个强化学习场景的简单示例:教机器人穿越迷宫。

  • 代理:机器人
  • 环境:迷宫
  • 状态:机器人在迷宫中的位置
  • 动作:在迷宫中移动(例如前进、左转、右转)
  • 政策:根据机器人的位置指导其行动的规则
  • 目的:找到迷宫出口
  • 奖励:靠近出口奖励正数,远离出口奖励负数

学习过程:

  1. 机器人在迷宫中随机启动。
  2. 它采取一个动作(移动)。
  3. 根据距离出口的距离获得奖励。
  4. 根据奖励(学习)调整其策略。
  5. 重复该过程,每一步都改进其策略。
  6. 最终,它学会了穿过迷宫到达出口的最佳方法。

导致奖励的状态和动作序列在 RL 术语中通常称为播放*。播放用于经典 RL 上下文,而**滚动***通常用于生成上下文。它们是等效的。

img

生成式 AI 模型中的强化学习

当我们将 RL 概念应用于生成模型时,这里的模型就是代理。策略由模型权重组成。RL 算法将更新模型权重以选择更好的操作,或者根据环境、状态和目标生成更好的下一个标记。目标是让模型生成更符合人类偏好的完成,例如乐于助人、诚实和无害 (HHH)。

根据模型词汇表中所有标记的概率分布,从由所有可能的标记组成的操作空间中选择操作。环境是模型的上下文窗口。状态由当前位于上下文窗口中的标记组成。

奖励取决于模型的完成度与人类偏好(例如帮助性)的契合程度。

  • Agent:正在微调的大型语言模型
  • 环境:模型的上下文窗口
  • 状态:语言模型的当前状态(例如,参数、内部表示)
  • 动作:选择下一个 token
  • 策略:模型权重
  • 目标:生成类似人类且与上下文相关的文本
  • 奖励:生成高质量的人性化文本给予正反馈,生成低质量或不相关的文本给予负反馈

奖励模式

奖励模型通常是一个分类器,可以预测两个类别之一——正面或负面。正面是指生成的文本更符合人类偏好或更受欢迎。负面类别是指非偏好的响应。

为了确定什么是有帮助的、诚实的和无害的(积极的),您通常需要使用人机交互工作流程的注释数据集。

数据集示例:

img

优先和非优先完成情况及奖励摘要

训练自定义奖励模型与使用现有的二元分类器

奖励模型通常是小型二元分类器,基于较小的语言模型,如BERT情绪分类器毒性检测器。您也可以训练自己的奖励模型,但这是一项相对劳动密集且成本高昂的工作。

常用的奖励模型:

  1. BERT 无大小写
  2. 迪斯蒂尔伯特
  3. Facebook 的仇恨言论检测器

完整代码可以在本文的 github repo 中找到:

GitHub — mrmaheshrajput/productionizing-llms:博客代码库 — 如何实现大型生产……

博客代码库 — 如何实现大型语言模型 (LLM) 量产 — mrmaheshrajput/productionizing-llms

github.com

训练奖励模型代码示例:

<iframe src="https://medium.com/media/cde952e7f7153d55adb95f0a5b35ef9d" allowfullscreen="" frameborder="0" height="982" width="680" title="RLHF Train reward model.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 981.997px; left: 0px;"></iframe>

使用现有的奖励模型(Facebook 的毒性检测器):

<iframe src="https://medium.com/media/7b069070280273af81eb15b6a289b3bc" allowfullscreen="" frameborder="0" height="564" width="680" title="RLHF Toxicity detector by Meta.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 563.993px; left: 0px;"></iframe>

使用 RLHF 进行微调

有一种流行的 RL 算法称为近端策略优化(PPO),用于根据分配给给定提示和完成的奖励值来更新实际模型权重。PPO 最初在 2017 年的一篇论文中描述,它根据奖励模型返回的奖励值来更新生成模型的权重。

每次迭代时,PPO 都会对 LLM 权重进行小而有界的更新,因此称为近端策略优化。通过在每次迭代中保持较小的变化,微调过程更加稳定,并且生成的模型能够很好地泛化新的输入。PPO 通过反向传播更新模型权重。经过多次迭代后,您应该会得到一个更符合人类的生成模型。

完整代码可以在本文的 github repo 中找到:

GitHub — mrmaheshrajput/productionizing-llms:博客代码库 — 如何实现大型生产……

博客代码库 — 如何实现大型语言模型 (LLM) 量产 — mrmaheshrajput/productionizing-llms

github.com

<iframe src="https://medium.com/media/0d7f1cc92a8a7921c7ac1dd094d28674" allowfullscreen="" frameborder="0" height="1795" width="680" title="RLHF Fine tune PPO.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 1795px; left: 0px;"></iframe>

为了减轻奖励黑客攻击,建议使用KL 散度转移惩罚来惩罚,或者传递模型的冻结参考来减轻奖励黑客攻击。


```bash
<iframe src="https://medium.com/media/ecde9128fe2335a8aadcd6e4038771d6" allowfullscreen="" frameborder="0" height="586" width="680" title="RLHF Mitigate reward hacking.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 585.99px; left: 0px;"></iframe>

参数高效微调也可以在 RLHF 范围内使用,以减少计算密集型 PPO 算法所需的计算和内存资源量。

评估部分涵盖了对 RLHF 微调模型的评估。

请查看 DPO 和 HuggingFace 在 2024 年 RLHF 上发表的这篇精彩文章:

RLHF 将于 2024 年与 DPO 和 Hugging Face 合作

在这篇博文中,您将学习如何通过 Direct Preference 使用 Hugging Face TRL 和 RLHF 对齐 LLM……

www.philschmid.de

预训练(从头开始创建)

BloombergGPT由彭博社使用公共和专有财务数据进行训练,而由哈佛大学开发的PathChat则使用临床病理报告进行训练。这些只是 GPT 模型的部分示例,这些模型使用特定领域的数据集从头开始训练,以在该领域实现卓越性能,而其他 LLM 则无法很好地在这些领域中推广。

除了需要 GPU 集群和大量数据集外,基本的 GPT 基础模型的代码并不是很复杂。

许多 GPT 模型都基于原始的《Attention Is All You Need》论文。一些资源提供了有关如何创建自己的 LLM 的更简单的分步指南:

  1. 视频让我们从头开始构建 GPT:用代码构建,Andrej Karpathy讲解
  2. Mat Miller 的《从头开始的变形金刚》
  3. Freecodecamp.org使用 Python 从头开始创建大型语言模型 — 教程视频

在架构中使用多头注意层的 GPT 模型的简单示例:

<iframe src="https://medium.com/media/1c6d641de1a7aa9a54c6f15395c5c321" allowfullscreen="" frameborder="0" height="2078" width="680" title="基本文本生成.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 2077.99px; left: 0px;"></iframe>

持续预训练

img

用于指令微调和持续预训练的数据集

与其他机器学习模型一样,您也拥有一种架构模式,可以使用新数据不断训练您的 LLM。它可以帮助模型响应适应特定领域的词汇和术语。为了实现持续的预训练,建议首先设置一个自动化管道来监控和评估您的 LLM。这样,当训练挑战者 LLM 时,可以在用冠军 LLM 替换之前自动对其进行评估。

冠军模型 — 您现有的生产模型

挑战者候选人——使用新数据或全新模型训练的模型

<iframe src="https://medium.com/media/1c78addbb569b79fdc2cb63a6ff540dd" allowfullscreen="" frameborder="0" height="344" width="680" title="继续预训练 SageMaker jumpstart.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 343.993px; left: 0px;"></iframe>

预训练数据集

HuggingFace 自动训练

AutoTrain Advanced:更快、更轻松地训练和部署最先进的机器学习模型。AutoTrain Advanced 是一种无代码解决方案,只需单击几下即可训练机器学习模型。

GitHub - huggingface/autotrain-advanced: 🤗 AutoTrain Advanced

🤗 AutoTrain Advanced。在 GitHub 上创建账户,为 huggingface/autotrain-advanced 开发做出贡献。

github.com

微调和持续预训练

img

微调与持续预训练

代理

Agent 拥有一组指令、一个基础模型、一组可用的动作和知识库,使得其能够执行复杂的任务。

生成模型可以回答一般问题或与您的文档相关的问题,例如“我看不到我的会议?我如何预订会议?”。代理使用基础模型作为其推理逻辑和外部数据源(如您的 API),可以向用户返回他们预订的会议数量,或直接从交互屏幕安排会议。

代理构建自己的结构化提示来帮助模型推理,并通过一系列数据查找来协调 RAG 工作流和/或执行 API 调用,并使用从外部系统收到的信息来增强提示,以帮助模型生成更多上下文感知和相关完成,然后将最终响应返回给用户。

img

ReAct 结构提示包括说明、ReAct 示例和用户请求

代理使用ReAct 框架来实现这一点,该框架将思维链(CoT) 推理与行动规划相结合。这会生成分步计划,由诸如网络搜索、SQL 查询、基于 Python 的脚本或在我们的案例中多个 API 调用等工具执行,以返回所需的结果。

会议助理代理:

img

会议助理代理

基于 RAG 的人力资源政策聊天机器人:

img

HR 策略代理v2:

img

开源库中的代理实现:

代理编排

当您以自然语言向代理提出问题时,它会使用可用的操作和知识库将其分解为多个步骤。然后执行操作或搜索知识库,观察结果并思考下一步。重复此过程,直到获得最终答案。

img

代理编排——基本流程

保险代理人示例:

任务:向缺少文件的保单持有人发送提醒;包括文件要求

想法:要回答这个问题,我将:

  1. 获取未结索赔
  2. 获取每个未结索赔的缺失文件
  3. 获取每个缺失文件的要求
  4. 发送每个缺失索赔的提醒

最终答复:目前有两起未结保险索赔,索赔编号分别为索赔 42 和索赔 34。对于索赔 34,需要待处理文件……两起索赔均已收到提醒。

可以从任何应用程序部署和调用代理,也可以通过事件触发代理。

可用代理

Transformers 代理——更像是工具和**代理的 API。**每个任务都有一个特定于任务的工具,它们在 Transformers 之上为该特定任务提供自然语言 API。图像生成器工具无法执行文本转语音任务等。

Transformers 代理通过初始化 LLM 代理进行思路链推理来工作。然后创建一个实例transformers.tools.HfAgent。现在您可以使用 api 与代理进行交互agent.run(...)

来自官方文档的 Colab:https://colab.research.google.com/drive/1c7MHD-T1forUPGcC_jlwsIptOzpG3hSj#scrollTo=OJfEhaNTU_nZ

img

来源:https://huggingface.co/docs/transformers/transformers_agents

Langchain 代理— 功能更丰富,易于集成到已使用 Langchain 的工作流中。它使用LangSmith来跟踪和评估您的语言模型应用程序和智能代理。这使得基于代理的系统的调试变得更容易。

Langchain angents 官方文档:https://python.langchain.com/docs/modules/agents/quick_start

我个人认为 Langchain 在生产使用中不稳定。除非您的工作流程主要依赖于 Langchain,否则不建议仅将 Langchain 代理用于代理功能。

适用于 Amazon Bedrock 的代理 — 是我迄今为止见过的最适合生产的代理编排解决方案。使用托管服务可以帮助您快速失败,并通过更快地交付 MVP 来确定对最终产品的期望。

Amazon Bedrock 的代理可以:

  • 根据开发人员提供的说明创建提示(例如,“您是一名保险代理人,负责处理未结索赔”)。
  • 完成任务所需的 API 详细信息。
  • 安全地连接到您公司的数据源,自动将数据转换为数字表示形式,并使用正确的信息增强用户请求以生成准确且相关的响应。
  • 协调并执行多步骤任务。
<iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FJkDzZFTXeSw%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DJkDzZFTXeSw&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FJkDzZFTXeSw%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" allowfullscreen="" frameborder="0" height="480" width="854" title="新的演示和说明 - Amazon Bedrock 代理 | Amazon Web Services" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 382.188px; left: 0px;"></iframe>

Amazon Q**(**以前仅是QuickSight的一部分)是一款专为工作而设计的生成式 AI 助手,可根据您的业务、数据、代码和运营进行量身定制。它可以帮助您快速获得紧迫问题的相关答案,解决问题,生成内容,并使用公司信息存储库、代码和企业系统中的数据和专业知识采取行动。

目前它处于预览阶段。与 QuickSight Q 2 计划类似,它每位用户每月的定价分别为 20 美元和 25 美元。

由于它不是 GA,我只能用与 AWS 文档相关的问题来测试它。结果很快而且很准确。只要我们的 API 结构丰富,我们可能会在公司的知识库上看到类似的性能。

<iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FbZsIPinetV4%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DbZsIPinetV4&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FbZsIPinetV4%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" allowfullscreen="" frameborder="0" height="480" width="854" title="推出 Amazon Q,专为工作量身定制的生成式 AI 助手 | Amazon Web Services" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 382.188px; left: 0px;"></iframe>

代理将不断进化,并主宰通过动作实现任务自动化的领域。直到其他东西取代它们。

评估法学硕士

  • 经典和深度学习模型评估
    - 指标
    - NLP 指标
  • LLM 的整体评估
    - 指标
    - 基准和数据集
    - 评估 RLHF 微调模型
    - 专业领域的评估数据集
  • CI/CD 中的评估
    - 基于规则
    - 模型分级评估
  • 超越指标和基准的评估
    - 成本和内存
    - 延迟
    - 输入上下文长度和输出序列最大长度

img

Zishan Guo 等人,《评估大型语言模型:综合调查》,arXiv,2023 年

为什么要评价?

  • 防止私人数据泄露
  • 防止产生不适当、有害或误导性的内容
  • 将新型号(版本)与现有生产型号进行比较

使用生成式人工智能构建应用程序时,模型行为可能比传统软件更不可预测或更开放。因此,系统评估变得更加重要。

假设你正在使用 LLM 编写内容,你的一个队友无意中对提示进行了更新,告诉 LLM 让内容变得有趣。但直到交付时才有人知道,会让 LLM 通过幻觉创建“有趣的内容”。

如果您有自动或人工评估的系统,可以在交付之前评估 LLM 系统和 LLM 输出,那么它可以让您免于尴尬的境地。

LLM-模型评估——基于相同的输入,输出与其他模型相比有何不同。

LLM 系统评估——当基础 LLM 更改为不同模型或定制时,评估整个系统的性能/变化情况。

在本节中我们将讨论这两者。

经典和深度学习模型评估

img

传统 ML 模型和 Foundation 模型

模型评估通常使用几种指标,每种指标都可以对模型性能的不同方面提供独特的见解。

  1. 准确度:这是一项基本指标,用于衡量正确分类的实例占评估的实例总数的比例。虽然准确度被广泛使用,但它可能不适用于不平衡的数据集,即一个类别主导其他类别。
  2. 精确度和召回率:精确度衡量正向预测的准确性,而召回率衡量模型识别所有相关实例的能力。这些指标在处理不平衡数据集时特别有用,因为其中一个类别比其他类别出现的频率高得多。
  3. F1 分数:F1 分数是准确率和召回率的调和平均值,提供两者之间的平衡度量。当类别分布不均匀或假阳性和假阴性都很重要时,它尤其有价值。
  4. 混淆矩阵:混淆矩阵按类别详细列出了正确和错误预测。它能够更深入地分析模型性能,包括识别特定类型的错误,例如假阳性和假阴性。
  5. 平均绝对误差 (MAE) 和均方误差 (MSE):这些指标通常用于回归任务中,以量化模型所犯错误的平均幅度。
  6. R 平方 (R²) 分数:该指标通过测量因变量中可从独立变量预测的方差比例来评估模型与数据的拟合程度。

在 NLP 领域,通常采用专门的指标来评估生成的文本或翻译的质量:

  1. BLEU 分数(双语评估替补):BLEU 测量生成的文本与一个或多个参考文本之间的相似度。它通过将机器翻译文本与一组参考翻译进行比较来评估机器翻译文本的质量。
  2. ROUGE(面向回忆的摘要评估替代方法):ROUGE 是一组用于评估摘要质量的指标。它通过 n-gram 重叠、单词重叠和其他相似性度量来衡量生成的摘要与参考摘要之间的重叠度。
  3. METEOR(具有明确排序的翻译评估指标):METEOR 通过考虑准确率、召回率、词干提取、同义词和词序来评估机器翻译的质量。
  4. WER(词错误率):WER 通常用于评估语音识别系统的准确性,通过测量输出转录相对于参考转录的错误数量,通常按词总数进行标准化。
  5. CER(字符错误率):与 WER 类似,CER 在字符级别上衡量语音识别系统的准确率,提供更细粒度的性能评估。

评估通常通过将数据集分为训练集、验证集和测试集来完成。在训练集上训练模型,在验证集上调整模型,最后在测试集上评估模型以评估其泛化性能。还可以采用交叉验证技术来确保评估结果的稳健性。

此外,在深度学习的背景下,通常使用早期停止和dropout正则化等技术来防止过度拟合并提高泛化性能。

法学硕士 (LLM) 的全面评估

安全性、毒性、偏见性是所有LLM的通用评估主题。但专门的LLM可能还需要专门的评估机制。

QA 聊天机器人的评估数据集与需要推理的聊天机器人不同。具有 RAG 架构的 LLM 与仅基于参数记忆的 FM 相比,其指标有所不同。

同样,文本生成模型不同于数学模型,在训练数据集中没有的任务上会遇到困难。使用 RAG 或调用 API 调用来增强提示以准备输出的代理必须作为一个单元和单独的单元进行评估。

img

来源:AWS Innovate AI/ML 和数据版,2024 年 2 月

设置多层评估和保护总是有益的。每层评估不同的目标,这样如果一个流氓模型能够顺利通过一次评估,那么它也能顺利通过另一次评估。就像一个不对称设计的奶酪磨碎机。

指标

经典的机器学习评估指标,例如准确度和均方根(RMSE),很容易计算,因为预测是确定性的,并且易于与验证或测试数据集中的标签进行比较。

然而,生成式 AI 模型的输出在设计上是不确定的,这使得在没有人工干预的情况下评估非常困难。此外,生成式模型的评估指标非常特定于任务。

ROUGE 指标用于评估总结任务,而双语评估替补 (BLEU) 指标用于评估翻译任务。

ROUGE计算输入(在文本摘要的情况下为对话)与生成的输出(在本例中为摘要)的比较效果。为此,ROUGE 计算输入和生成的输出之间相似的单元词(单个单词)、二元词(两个连续单词)和最长公共序列(连续 n 元词)的数量,以计算 ROUGE-1、ROUGE-2 和 ROUGE-L 分数。分数越高,它们越相似。

但与任何其他指标一样,ROUGE 远非完美。考虑以下示例:“这本书很棒”和“这本书不太好”。单独使用 ROUGE,这些短语看起来很相似。但实际上,它们是相反的。ROUGE 可用作微调模型之前和之后的基准指标,因为它可以展示相对的改进。

<iframe src="https://medium.com/media/2a9dba7962ff03c6773f5bfa05eff395" allowfullscreen="" frameborder="0" height="737" width="680" title="ROUGE.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 736.997px; left: 0px;"></iframe>

**双语评估基准 (BLEU)**是一种常用于评估机器生成的翻译与人工生成的参考翻译的质量的指标。

BLEU 的运作方式是分析生成的翻译和参考翻译的 n-gram(n 个项目的连续序列,通常是单词)之间的重叠。这涉及计算不同 n-gram 长度的精度分数,然后将它们组合起来以产生单个 BLEU 分数。

BLEU 与 ROUGE 一样,也有其局限性。它主要关注词汇相似性,并不考虑流畅性、语法性或语义等同性等方面。此外,BLEU 分数可能并不总是与人类对翻译质量的判断完全相关。尽管存在这些局限性,BLEU 仍被广泛用于机器翻译领域,作为评估系统性能的便捷且标准化的指标。与 ROUGE 类似,它是比较不同模型和跟踪随时间改进的宝贵工具。

<iframe src="https://medium.com/media/7ef1a6ab1ae13525d194344a64631938" allowfullscreen="" frameborder="0" height="1176" width="680" title="BLEU.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 1175.99px; left: 0px;"></iframe>

快速浏览 HuggingFace 页面上的评价:

快速浏览

我们正致力于通过开源和开放科学推动人工智能的发展并使其民主化。

huggingface.co

多模型基础模型的定量评估有所不同,如稳定扩散。可以采用 CLIP 得分相似性、CLIP 方向相似性和 Frechet 初始距离 (FID) 等指标。

基准和数据集

img

来源:AWS Innovate AI/ML 和数据版,2024 年 2 月

建议使用测试数据集来评估 LLM。社区建立了现有的数据集和基准,以帮助您更全面地比较生成模型。

  1. SemEval于 2019 年推出,是一系列正在进行的计算语义分析系统评估。其评估旨在探索语言意义的本质。
  2. 通用语言理解评估 (GLUE) ——于 2018 年推出,用于评估和比较一系列语言任务中的模型性能。
  3. SuperGLUE ——GLUE 的后继者,于 2019 年推出,包含更具挑战性的任务。
  4. HELM——旨在提高模型透明度的基准。16 个核心“场景”中的 7 个指标的组合。场景包括问答、总结、情绪分析、毒性和偏见检测等任务。
  5. 超越模仿游戏 (BIG-Bench) ——基准测试包括 204 项任务,涉及语言学、数学、生物学、物理学、软件开发、常识推理等领域。
  6. XNLI — 多语言 NLI 数据集。
  7. MMLU — 评估模型的知识和解决问题的能力。模型在不同学科中进行测试,包括数学、历史和科学。
  8. TruthfulQA 和 RealToxicityPrompts——简单的数据集,分别用于评估模型生成仇恨言论和错误信息的性能。

评估 RLHF 微调模型

img

微调后评估

定性评估

对于定性评估(一种主观比较),比较 RLHF 之前和之后相同输入的模型输出。微调后的输出应该看起来更符合人类的习惯。

定量评估

您可以使用模型在 RLHF 微调期间未看到的测试数据集对模型生成的大量完成情况使用总体毒性分数(或任何其他分数,具体取决于微调目标)。如果 RLHF 成功降低了生成模型的预期分数(或本例中的毒性),则毒性分数将相对于基线降低。

评估代码:

productionizing-llms/第 3 章 架构模式…

博客代码库 - 如何实现大型语言模型 (LLM) 的生产化 - productionizing-llms/第 3 章…

github.com

查看 aws 的基础模型评估库:

GitHub - aws/fmeval: 基础模型评估库

基础模型评估库。通过在 GitHub 上创建帐户来为 aws/fmeval 开发做出贡献。

github.com

专业领域的评估数据集

我鼓励您查看
公开的GitHub 存储库中精选的相关论文列表,这是 Zishan Guo 等人的精彩论文“评估大型语言模型:全面调查”的一部分,arXiv,2023 年。

问答与知识补全:

  • WikiFact (Goodrich 等,2019) 是一种用于评估生成文本事实准确性的自动指标。它以关系元组 (主体、关系、客体) 的形式定义数据集。此数据集基于英文维基百科和 Wikidata 知识库创建。
  • Social IQA(Sap 等,2019)数据集包含 38,000 个多项选择题,用于探究各种日常情况下的情商和社交智力。
  • MCTACO(Zhou 等,2019)一个包含 13k 个问答对的数据集,需要时间常识理解。
  • HellaSWAG(Zellers 等人,2019 年),该数据集是 Commonsense NLI 的基准。它包含一个上下文和一些完成上下文的结尾。
  • TaxiNLI(Joshi 等人,2020)是一个包含来自 MNLI数据集(Williams 等人,2018)的 10k 个示例的数据集,根据上述分类法的原理和分类进行收集。
  • LogiQA 2.0(Liu 等,2023)基准由来自标准化测试(例如法学院入学考试、管理研究生入学考试和中国国家公务员考试)的多项选择逻辑问题组成。
  • HybridQA(Chen et al.,2020)是一个需要对异构信息进行推理的问答数据集。
  • GSM8K(Cobbe 等人,2021 年)是一个由人类问题作者创建的 8.5K 高质量语言多样性小学数学应用题数据集。GSM8K 中的查询和答案均由人类问题作者精心设计,保证了中等程度的挑战性,同时在很大程度上避免了单调和刻板印象。
  • API-Bank(Li 等人,2023 年)是一个用于评估工具增强 LLM 的定制基准,包含 53 个标准 API 工具、一个用于工具增强 LLM 的综合工作流程和 264 个带注释的对话。
  • ToolQA(Zhuang 等人,2023 年)是一个用于评估 LLM 使用外部工具回答具有挑战性的问题的能力的数据集。它关注的是 LLM 是否能够给出正确的答案,而不是
    在基准测试期间使用工具的中间过程。此外,ToolQA 旨在通过从 LLM 尚未记住的来源中选择数据来区分使用外部工具的 LLM 和仅依赖其内部知识的 LLM。

偏见检测、毒性评估、真实性评估和幻觉:

  • 道德基础 Twitter 语料库(Hoover 等人,2020 年)
  • Moral Stroies(Emelin 等人,2021 年)是一个众包数据集,包含 12K 个以社会情境为基础的目标导向道德推理的简短叙述,根据从社会化学 101 中提取的社会规范生成。
  • Botzer 等人 (2021)专注于分析社交媒体上呈现的道德判断,通过捕捉 Reddit 上子版块 /r/AmITheAsshole 中传递的道德判断。
  • MoralExceptQA(Jin 等,2022)考虑了 3 种可能允许的例外情况,根据这 3 种例外情况手动创建场景,并在 Amazon Mechanical Turk(AMT)上招募受试者,包括不同的种族和民族
    群体。
  • SaGE:评估大型语言模型中的道德一致性
  • PROSOCIALDIALOG(Kim 等人,2022 年)是一个多轮对话数据集,
    用于教导对话代理按照社会规范来回应有问题的内容。
  • WikiGenderBias(Gaut 等人,2020 年)是一个用于评估关系提取系统中的性别偏见的数据集。它衡量了提取有关女性和男性的句子的性能差异,包含 45,000 个句子,每个句子由男性或女性实体
    以及四种关系之一组成:配偶、职业、出生日期和出生地。
  • StereoSet(Nadeem 等人,2021)是一个数据集,旨在
    通过使用句子对来确定语言模型 (LM) 是否更喜欢刻板印象的句子来测量语言模型 (LM) 中的刻板印象偏见。
  • COVID-HATE (He et al.,2021) 数据集包含 2K 条因 SARS 冠状病毒疾病 (COVID-19) 而对亚洲人的仇恨句子。
  • NewsQA(Trischler 等,2017)是一个机器理解数据集,包含 119,633 个基于 CNN 新闻文章的人工编写的问答对。
  • BIG-bench (Srivastava 等人,2022) 是一个协作基准,包含一系列多样化的任务,这些任务被广泛认为超越了当代 LLM 的现有能力。
  • SelfAware(Yin 等,2023 年)是一项基准测试,旨在评估法学硕士在缺乏足够信息来对问题提供明确答案的情况下,如何很好地识别其知识的边界。它包含 1,032 个无法回答的问题和 2,337 个可回答的问题。
  • DialFact(Gupta 等人,2022 年)基准包含
    22,245 个带注释的对话声明,每个声明都与从维基百科中提取的 32 个相应证据配对。根据这些声明与证据的关系,这些声明被归类为支持、驳斥或“信息不足”。

权力寻求行为和态势感知(具有特定领域的挑战和复杂性):

img

LLM 风险行为示例。资料来源:Zishan Guo 等人,《评估大型语言模型:综合调查》,arXiv,2023 年

  • PromptBench (Zhu et al. 2023) 基准,用于通过使用对抗性提示(动态创建的字符、单词、句子和语义级提示)攻击 LLM 来评估其稳健性
  • AdvGLUE对抗性 GLUE 基准 (Wang 等人,2021) 基准数据集,用于评估 LLM 在翻译、问答 (QA)、文本分类和自然语言推理 (NLI) 方面的稳健性
  • ReCode(Wang 等人,2023 年)基准用于评估 LLM 在代码生成中的稳健性。ReCode 会在代码文档字符串、函数、语法和格式中产生扰动。这些扰动样式包括字符和单词级插入或转换。
  • SVAMP(Patel 等人,2021 年),一项针对小学数学应用题(MWP)的挑战集。
  • BlendedSkillTalk (Smith 等人,2020) 一个包含 7000 条对话的数据集,专门设计用于展示多种对话模式:展示个性、有同理心和展示知识。可用于评估 Li 等人 (2023f) DGSlow 提出的白盒攻击对对话生成任务的稳健性。
  • BigToM(Gandhi 等人,2023 年)是一个包含 25 个控制变量的社会推理基准。它通过控制因果图中的不同变量和条件来调整人类的心智理论 (ToM)(Wellman,1992 年;Leslie 等人,2004 年;Frith & Frith,2005 年)的推理能力。

专业法学硕士评估(如生物学、教育学、
法律、计算机科学和金融):

  • PubMedQA
    (Jin et al.,2019) 衡量法学硕士 (LLM)对医学科学文献的问答能力。
  • LiveQA(Abacha 等人,2017)使用从医疗网站上抓取的常见问题来评估 LLM 作为咨询机器人。
  • Multi-MedQA(Singhal 等人,2022 年)整合了六个现有数据集,并通过精选的常见健康查询进一步扩充它们。
  • SARA(Holzenberger 等人,2020 年)是立法领域的税法含义和问答中的法定推理数据集。
  • EvalPlus(Liu 等人,2023 年)是一种代码合成基准测试框架,用于评估 LLM 合成代码的功能正确性。它使用自动测试输入生成器生成的测试用例来扩充评估数据集。流行的 HUMANEVAL 基准测试扩展了 81 倍,使用 EvalPlus 创建了 HUMANEVAL+。
  • FinBERT(Araci,2019)使用 Google 的 WordPiece 算法从金融文本语料库中构建金融词汇表(FinVocab)。
  • BloombergGPT(Wu et al.,2023)是一个拥有 500 亿个参数的语言模型,经过广泛金融数据的训练,使其在各种金融任务上的表现优于现有模型。

LLM代理商评价

  • AgentBench (Liu 等人,2023) 是一个用于评估 LLM 作为代理人的综合基准。
  • WebArena (Zhou 等人,2023) 是一个针对代理的现实且可重复的基准测试,其中包含来自四个常见域的功能齐全的网站。WebArena 包含一组基准测试任务,用于评估任务完成的功能正确性。
  • Alignment研究中心ARC Evals项目,负责评估高级AI寻找资源、自我复制、适应新环境的能力。

不要太相信基准。如果它是公开的,它可能已经泄露到 LLM 训练数据集中。

查看基础模型开发备忘单:

FoundationModel开发备忘单

应用程序

fmcheatsheet.org

在 CI/CD 中进行评估

查看Rob Zuber 和 Andrew Ng 在 DeepLearning.AI 上关于 LLMOps 自动测试的短期课程

基于规则

基于规则的评估使用模式或字符串匹配,运行速度快且经济高效。当您有真实标签时,非常适合在情绪分析、分类等情况下进行快速评估。

因为它们很快,所以它们可以在提交前运行,或者在提交代码更改时运行,以获得快速反馈。

模型分级评估

适用于可能出现许多好或坏结果的申请。在这里我们使用一个 LLM 来评估另一个 LLM 的输出。例如,当 LLM 被要求写一些内容并且可能有多个高质量的响应时。在这里,您可能会提示评估 LLM 以让其评估您的 LLM 申请的质量。

模型分级评估需要更多时间和成本,但它们允许您访问更复杂的输出。它们通常被推荐为预发布评估,而不是预提交的基于规则的评估。

以下演示代码可与预提交和预发布评估结合使用,以形成完整的自动化测试套件。

模型分级评估:

<iframe src="https://medium.com/media/9a20e5ac0c195a9554b2fbf5ed0d7786" allowfullscreen="" frameborder="0" height="1949" width="680" title="Model graded evaluation.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 1948.99px; left: 0px;"></iframe>

模型分级测试:

<iframe src="https://medium.com/media/769af3107e262d50b0dcad2022bbf32f" allowfullscreen="" frameborder="0" height="1924" width="680" title="Model graded test.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 1923.99px; left: 0px;"></iframe>

超越指标和基准的评估

img

整体评估

成本和内存

如果您使用的是 Amazon Bedrock 之类的托管服务,那么产生的成本取决于令牌的数量(请参阅“架构模式”一章中的“提示工程”部分以了解有关标记化的更多信息)。

要粗略计算输入标记的数量,请将单词数乘以 1.3。获得的数字将是该提示的输入标记成本的良好粗略估计。您可以存储输入提示的单词/标记数量,或将计数记录在标准输出中,以计算按需的成本。

可以使用输入参数来控制输出令牌的最大数量。您可以通过将输出字的总数乘以 1.3,以类似的方式计算令牌的数量。将输入令牌的成本 + 输出令牌的成本相加,将为您提供托管服务 1 次交互的最终成本的良好估计。

对于托管模型,费用取决于每小时实例数 x 所用实例数。您将根据模型大小选择实例类型。大多数基础设施提供商在公共网站上提供所有实例的按需费用。

如果使用SageMaker JumpstartSageMaker 大型推理容器等服务,则成本取决于所使用的底层基础设施和分配给您的总时间。

推理过程中的内存挑战可以通过模型量化或修剪来解决。量化是流行的选择,尽管这两种策略都会牺牲一些质量来换取速度和内存。在比较两个量化模型时,确保量化方法相似且量化位数相同。

训练所需的内存取决于参数的数量(请参阅“如何使用 LLM”一章中的“模型大小和所需内存”部分)。根据粗略估计,10 亿参数模型需要 24 GB 内存进行全精度训练。相比之下,加载模型进行推理则需要 4GB。同样,500 亿参数模型将需要约 1200 GB(或约 1.2 TB)的内存。

AWS p4d.24xlarge 有 8 个 nvidia A100 GPU,总共享内存为 640GB。要训练甚至在这样一台机器中都放不下的模型,您必须采用分片数据并行。在进行模型预训练或微调策略之前,最好先了解内存需求并计算成本。

潜伏

如果部署正确,较小的模型在延迟方面可能会胜过较大的模型,但会以质量为代价。两者之间需要取得良好的平衡。

img

选择法学硕士

大多数端点都支持流式输出(遗憾的是,带有 python 环境的 AWS Lambda 不支持)。但要以块的形式接收输出,即逐个单词而不是整个输出,您的应用程序必须能够处理流式输出。

输入上下文长度和输出序列最大长度

所有模型都限制了最大输入上下文长度和最大输出序列长度。您的用例可能需要更大的输入上下文长度。

部署 LLM

  • 部署与生产化
  • 经典 ML 模型管道
    - 开源工具
    - AWS SageMaker 管道
    - 在 SageMaker 上部署模型的不同方法
    - BYOC(自带容器)
    - 部署多个模型
  • 带量化的 LLM 推理
    - 使用 AutoGPTQ 进行量化
    - 使用 llama.cpp 进行量化
  • 在本地机器上部署 LLM
    - llama.cpp
    - Ollama
    - Transformers
    - 由 oobabooga 开发的文本生成 webui
    - Jan.ai
    - GPT4ALL
    - 由 Nvidia 开发的使用 RTX 聊天
  • 在云端部署 LLM
    - 主要云提供商
    - 在 Sagemaker Endpoint 上从 HuggingFace 部署 LLM
    - Sagemaker Jumpstart
    - SageMaker 部署您已预先训练或微调的 LLM
  • 使用容器部署
    - 使用容器的好处
    - GPU 和容器
    - 使用 Ollama
  • 使用专用硬件进行推理
    - AWS Inferentia
    - Apple 神经引擎
  • 边缘设备上的部署
    - 不同类型的边缘设备
    - TensorFlow Lite
    - SageMaker Neo
    - ONNX
  • 基于 LLM 应用程序的 CI/CD 管道
    - 微调管道
  • 捕获端点统计信息
    - 捕获端点统计信息的方法
    - 云提供商端点

部署与生产化

模型部署是什么意思?

模型部署是使经过训练的机器学习模型可用于特定环境的过程。它涉及将模型从开发或测试环境转移到生产或运营环境,最终用户或其他系统可以通过端点访问该模型。

模型生产化是什么意思?

将模型投入生产具体是指将模型纳入实时或运营环境,并积极影响或协助现实世界的流程或决策的步骤。它还涉及尽可能地自动化您的工作流程。

模型部署和投入生产的区别

这有点争议,因为有些人将生产化视为模型部署的一个子集,而对于某些模型部署来说,是将模型投入生产的整个过程的子集。

<iframe src="https://medium.com/media/2f7eac7e3ad79ca4563061debcddf7d5" allowfullscreen="" frameborder="0" height="235" width="680" title="模型部署与生产化.csv" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 235px; left: 0px;"></iframe>

本质上,模型部署就是让模型可用,而将模型投入生产则将这一概念扩展至整个生命周期,强调持续改进、监控和适应现实世界的情况。

经典 ML 模型管道

img

ML 管道示例

典型的机器学习模型流程始于从数据库中查询数据,检索相关数据集以供分析。接下来,应用数据预处理技术来清理、转换和准备数据以进行建模。此步骤涉及处理缺失值、编码分类变量和缩放数值特征以确保最佳模型性能。

数据预处理后,模型将在准备好的数据集上进行训练。根据具体应用,可以实施持续训练,随着时间的推移用新数据更新模型,确保模型保持最新和相关性。然后进行模型评估,以评估冠军(当前)和挑战者(新)模型的性能。这涉及使用适当的评估指标来比较它们的预测能力,并确定新模型是否优于现有模型。

一旦确定了性能最佳的模型,它就会被注册到模型注册表中,其中存储了有关该模型的详细信息,例如其版本、参数和性能指标。这可以轻松跟踪和管理不同的模型版本。

最后,选定的模型将自动或手动部署到生产环境中,可用于对新数据进行预测。此部署过程涉及设置模型端点、API 或服务,以向其他应用程序或用户公开模型的功能。

除了主要的流程步骤之外,其他重要的考虑因素还包括数据版本控制,以跟踪数据集随时间的变化,记录所有实验和模型开发过程以确保可重复性和透明度,执行数据完整性检查以确保用于建模的数据的质量和一致性,以及从模型端点收集指标以监控生产环境中的性能和使用情况。这些元素有助于确保机器学习流程的可靠性、效率和可扩展性。

开源工具

有许多久经考验的开源 ML 工作流管理工具,每两周就会有新的工具出现。无论你选择哪种工具,都会有一些权衡。最好在所选工具上创建一个简单的小型工作流,在现有基础设施中将其投入生产,以检查其可行性,然后再全力以赴。尽量在那个简单的小型管道中涵盖尽可能多的细微差别,以避免以后出现意外。例如,如果你的数据库在 VPC 中,或者你总是使用托管模型注册表和端点,请创建与这些目标一致的示例项目。

  1. MLFlow — 可以管理任何 ML 或生成式人工智能项目,并集成 PyTorch、HuggingFace、OpenAI、LangChain、Tensorflow、scikit-learn、XGBoost、LightGBM 等。完成初始设置阶段后,它也是最容易上手的。
  2. Kubeflow——这是 Google 推出的基于 Kubernetes 的机器学习和 MLOps 开源平台。它非常高效,并且需要 Kubernetes。Kubeflow 管道非常强大,拥有我见过的一些最可靠的模型部署。
  3. Apache Airflow — 是工作流管理工具的原始帮派 (OG)。虽然它并非专门用于机器学习,但由于其社区更广泛,许多工程师更喜欢它而不是任何其他工具。您通常会将它与 [add] 一起使用来执行工作流中的任何数据处理逻辑。
  4. Metaflow——最初由 Netflix 开发,并于 2019 年开源。与其他工作流工具相比,它具有许多优势,例如只需单击几下即可在本地创建原型并部署到现有基础架构上,或者与您的团队轻松协作等等。与任何其他工具一样,它也有一个轻微的学习曲线。

还有许多其他很棒的工具,例如Tensorflow Extended语义,可用于整个 ML 工作流管理。始终保持警惕并设计您的架构,以便轻松交换工具,就像双向门决策一样。

AWS SageMaker 管道

这些概念很重要,我们将在下一节讨论 LLM 的生产化中使用它们。

SageMaker 管道是实现机器学习任务的标准、全功能和最完整的方法。SageMaker 管道与 SageMaker 特征存储、数据管理器、处理作业、训练作业、超参数调整作业、模型注册、批量转换和模型端点集成。

每个管道步骤都旨在实现一个特定目标。数据预处理步骤将查询数据并使其准备好进行训练。训练步骤将仅训练模型。模型评估步骤将评估新训练的模型。等等。每个步骤可以使用不同类型的实例、不同类型的容器和不同的库。

数据预处理所需的库与训练模型所需的库不同。SageMaker 提供了使用内置算法、自带脚本并使用可用算法或自带容器 (BYOC) 的不同选项。

img

SageMaker 有三个选项来构建、训练、优化和部署我们的模型

<iframe src="https://medium.com/media/21517f26f755425fc4b6eff7f5b6e321" allowfullscreen="" frameborder="0" height="8474" width="680" title="Sample SageMaker pipeline.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 8473.99px; left: 0px;"></iframe>

SageMaker 管道

在 SageMaker 上部署模型的不同方法

使用 SageMaker 托管服务部署模型有多种方式。您可以使用 SageMaker Studio 以交互方式部署模型。或者,您可以使用 AWS SDK(例如 SageMaker Python SDK 或适用于 Python 的 SDK (Boto3))以编程方式部署模型。您还可以使用 AWS CLI 进行部署。

参考:https://docs.aws.amazon.com/sagemaker/latest/dg/how-it-works-deployment.html

在你开始之前

每个模型都有模型注册、端点配置和端点。

要在 Sagemaker 上部署任何模型,您需要三件事:

  1. 模型注册
  2. 端点配置
  3. 端点

模型注册将需要:

模型工件 - 模型二进制文件通常存储在 S3
推理代码中 - 容器化的推理代码图像存储在 ECR 中

端点配置将需要:

选择您想要无服务器还是专用实例。
生产和影子空间中的模型可选变体。默认为单个生产变体。
对于每个变体、实例类型以及如果生产或影子空间中有多个变体,则模型权重会分配流量

端点创建需要:

端点名称

实时推理

实时推理非常适合具有实时、交互式、低延迟要求的推理工作负载。您可以将模型部署到 SageMaker 托管服务并获取可用于推理的终端节点。这些终端节点是完全托管的,并且还支持自动扩展。

部署模型进行实时推理

了解如何使用 SageMaker 托管服务部署您的机器学习模型。

docs.aws.amazon.com

批量转换

当您需要执行以下操作时,请使用批量转换:

  • 预处理数据集以消除干扰数据集训练或推理的噪音或偏差。
  • 从大型数据集中获取推论。
  • 当您不需要持久端点时运行推理。
  • 将输入记录与推论关联起来,以协助解释结果。

异步推理

Amazon SageMaker 异步推理是 SageMaker 中的一项功能,可对传入请求进行排队并异步处理。此选项非常适合负载较大(高达 1GB)、处理时间较长(长达一小时)且延迟要求接近实时的请求。异步推理可让您在没有请求需要处理时自动将实例数量扩展到零,从而节省成本,因此您只需在终端节点处理请求时付费。

异步推理

使用异步推理对传入的推理请求进行排队并异步处理它们。

docs.aws.amazon.com

无服务器和 AWS Lambda

Amazon SageMaker 无服务器推理是一种专用推理选项,可让您部署和扩展 ML 模型,而无需配置或管理任何底层基础设施。按需无服务器推理非常适合在流量激增之间有空闲期且可以容忍冷启动的工作负载。无服务器终端节点会自动启动计算资源并根据流量进行扩展和缩减,无需选择实例类型或管理扩展策略。这消除了选择和管理服务器的繁重工作。无服务器推理与 AWS Lambda 集成,为您提供高可用性、内置容错能力和自动扩展。如果您的流量模式不频繁或不可预测,那么无服务器推理采用按使用付费模式,是一种经济高效的选择。在没有请求的时候,无服务器推理会将您的终端节点缩减到 0,帮助您最大限度地降低成本。

您还可以选择将预置并发与无服务器推理结合使用。当您的流量出现可预测的突发时,使用预置并发的无服务器推理是一种经济高效的选择。预置并发允许您在无服务器终端节点上部署模型,并通过保持终端节点预热来实现高可扩展性。SageMaker 确保对于您分配的预置并发数量,计算资源已初始化并准备在几毫秒内做出响应。

无服务器推理

Amazon SageMaker 无服务器推理让您无需选择实例类型即可部署 ML 模型。无服务器…

docs.aws.amazon.com

BYOC(自带容器)

您可以打包自己的算法,然后在 SageMaker 环境中进行训练和部署。通过将算法打包到容器中,您可以将几乎任何代码带入 Amazon SageMaker 环境,无论编程语言、环境、框架或依赖项如何。

您可能不需要创建容器即可将自己的代码引入 Amazon SageMaker。当您使用 SageMaker 直接支持的框架(例如 Apache MXNet 或 TensorFlow)时,您只需使用该框架的 SDK 入口点提供实现算法的 Python 代码即可。这组框架正在不断扩展,因此如果您的算法是在通用机器学习环境中编写的,我们建议您查看当前列表。

即使您的环境或框架有直接的 SDK 支持,您仍会发现构建自己的容器更为有效。如果实现算法的代码本身就相当复杂,或者您需要对框架进行特殊添加,那么构建自己的容器可能是正确的选择。

可以使用sagemaker-training-toolkitsagemaker-inference-toolkit构建自定义容器,分别用于训练和推理。

部署多个模型

您可以创建由 CPU 和 GPU 支持的多模型终端节点,其中多个模型托管在单个终端节点后面。SageMaker 会自动卸载未使用的模型,为热门模型腾出空间。

img

可以从控制台和 SDK 创建多模型端点。

img

通过控制台实现多模型端点

使用 SDK 创建多模型端点:

导入sagemaker 

... 

multi_model_container = { 
  '图像' : '<ACCOUNT_ID>.dkr.ecr.<REGION_NAME>.amazonaws.com/<IMAGE>:<TAG>',
  '模型数据网址' : 's3://<BUCKET_NAME>/<PATH_TO_ARTIFACTS>',
  '模式' :          '多模型'
 }

响应 = sagemaker_client.create_model(
  模型名称 = '<MODEL_NAME>',
  ExecutionRoleArn = role,
  容器 = [multi_model_container] 
)

响应 = sagemaker_client.create_endpoint_config(
      端点配置名称 = '<ENDPOINT_CONFIG_NAME>',
      生产变量 =[ 
           { 
              '实例类型' :         'ml.m4.xlarge',
              '初始实例计数' : 2,
              'InitialVariantWeight':1,
              '模型名称':             '<MODEL_NAME>',
              '变量名称':           'AllTraffic'
             } 
      ] 
)

TargetModel通过在api中传递参数来调用多模型端点invoke_endpoint

响应 = Runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/x-image",“application/x-image”,
    TargetModel = “MODEL_S3_KEY”,
    Body = payload,
)

打印(*json.loads(response [ “Body” ]。read()),sep = “ \ n”)

带量化的 LLM 推理

我们在“如何使用 LLM”一章的*“局部模型推理”*部分简要介绍了量化。在本节中,我们将演示几种量化 LLM 的方法。

量化涉及将较高精度的模型权重映射到较低精度。您可以将 32 位映射到 8 位,甚至可以将 8 位映射到 1 位。为了实现量化,我们需要找到将较高精度(如 32 位)映射到较低精度(如 16 位)的最佳方法。

64 位浮点数有 11 位指数、52 位小数和 1 位符号。

img

来源:https://en.wikipedia.org/wiki/Double-precision_floating-point_format

并且,32 位浮点数有 8 位指数、23 位小数和 1 位符号。

img

来源:https://en.wikipedia.org/wiki/Floating-point_arithmetic

其他值得注意的浮点格式:

img

来源:https://en.wikipedia.org/wiki/Floating-point_arithmetic

为了减少模型大小以进行推理,您需要对从互联网获得的模型进行训练后量化。对于内部模型,您可以在预训练阶段执行量化感知训练。

使用AutoGPTQ进行量化

许多开源模型都有量化版本。查看它们的模型卡以了解 API。要量化任何文本模型,您可以使用AutoGPTQ 库,该库提供了一个简单的 API,可在语言模型上应用 GPTQ 量化(还有其他方法)。

<iframe src="https://medium.com/media/048701246716cb40a145f151cb8b9fe2" allowfullscreen="" frameborder="0" height="627" width="680" title="Quantize with AutoGPTQ.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 626.997px; left: 0px;"></iframe>

使用 llama.cpp 进行量化

  1. 安装 llama.cpp
  2. 将 LLM 下载到./models/目录中。确保您有一个模型权重文件和一个标记器文件

3.将模型转换为gguf FP16格式:

python3 convert.py 模型/mymodel/
  1. 将模型量化为4位(使用Q4_K_M方法):
./量化 ./模型/mymodel/ggml-模型-f16.gguf ./模型/mymodel/ggml-模型-Q4_K_M.gguf Q4_K_M
  1. 运行量化模型:
./main-m./模型/mymodel/ggml-模型-Q4_K_M.gguf-n 128

量化模型相对较慢

除了质量损失之外,量化模型的推理速度也较慢。

查看 Miguel 关于 LLM 量化的精彩文章:https://www.tensorops.ai/post/what-are-quantized-llms

在本地机器上部署 LLM

我们在如何使用 LLM章节中的**本地模态推理部分介绍了本地机器部署。

骆驼.cpp

开源 | Mac OS、Linux、Windows(通过 CMake)、Docker、FreeBSD

llama.cpp/examples/server at master · ggerganov/llama.cpp

C/C++ 中的 LLM 推理。通过在 GitHub 上创建帐户为 ggerganov/llama.cpp 开发做出贡献。

github.com

  1. 安装 llama.cpp
  2. 将任何 gguf 模型下载到models/目录中,或使用 convert.py 文件将 LLM 转换为 ggml 格式
python3 convert.py 模型/mymodel/

3.启动服务器:

./服务器-m 模型/你的模型.gguf-c 2048

img

当在终端末尾看到“模型已加载”时,您可以从另一个终端窗口通过 CURL 向服务器发送 POST 请求。

img

从另一个终端窗口使用 CURL 进行测试:

curl --request POST \ 
    --url http://localhost:8080/completion \ 
    --header "Content-Type: application/json" \“Content-Type:application/json” \ 
    --data '{“prompt”:“生命的意义是什么?生命的意义”,“n_predict”:128}'

img

欧拉玛

开源 | Mac 和 Linux

  1. 下载 Ollama 或从官方网站复制 Linux 的安装命令

img

2.在终端中运行命令

curl -fsSL https://ollama.com/install.sh | sh

img

注意:它自动检测到我的 NVIDIA GeForce 960M 3GB GPU

3.现在您可以直接运行Ollama 库中的任何模型,也可以在运行之前自定义提示。要直接运行:

奥拉马·伦·皮

img

  1. 要自定义提示,首先拉取模型
ollama 拉 gemma:2b-instruct

创建一个Modelfile

来自gemma: 2 b-instruct
# 将温度设置为 1 [越高越有创意,越低越连贯]
参数温度 0.6
系统“”“
你是一个名为Therapy的心理学家聊天机器人。用同理心回答用户的所有问题。
“”“

img

5.创建模型

ollama 创建治疗 -f ./Modelfile创建治疗 -f ./Modelfile

6.调用Ollama端点(所有端点请参阅API文档)

curl http://localhost:11434/api/generate -d '{//localhost:11434/api/generate -d '{ 
  "model" : "therapy" , 
  "prompt" : "为什么天空是蓝色的?"
 }'

这将生成流式响应:

img

img

您还将在主终端窗口中看到日志:

img

请参阅官方文档中的所有服务器命令行参数。

🤗 变形金刚

<iframe src="https://medium.com/media/83ab5ef8ce740795cb013cf27c0bccd8" allowfullscreen="" frameborder="0" height="1067" width="680" title="带有 FastAPI.py 的 Mistral 7B 4bit" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 1067px; left: 0px;"></iframe>

由 oobabooga开发的文本生成 webui

GitHub - oobabooga/text-generation-webui:用于大型语言模型的 Gradio Web UI。支持……

适用于大型语言模型的 Gradio Web UI。支持 transformers、GPTQ、AWQ、EXL2、llama.cpp (GGUF)、Llama 模型。…

github.com

简爱

Jan | 重新思考计算机

Jan 通过在计算机上本地运行 LLM,将您的计算机变成 AI 机器。这是一项注重隐私、本地优先的课程……

jan.ai

GPT4All

GPT4All 具有服务器模式。查看官方文档了解更多信息。

img

设置中的 GPT4All 服务器模型

与 Nvidia 的 RTX 聊天(仅适用于 Windows 平台)

NVIDIA 与 RTX 聊天

一个演示应用程序,可让您个性化连接到您自己的内容文档的 GPT 大型语言模型 (LLM) 聊天机器人……

www.nvidia.com

在云端部署 LLM

主要云提供商

AWS

Amazon SageMaker — 一个用于机器学习和管理 LLM 整个生命周期的综合平台。它支持自定义模型开发、部署和扩展,并可访问预先训练的模型。

AWS Lambda——对于达到 0 的负载进行无服务器计算,或使用状态机来协调事件驱动的管道。

AWS Elastic Kubernetes 服务 (EKS) — 是一种托管的 Kuberenetes 服务,用于协调基于 LLM 的应用程序的微服务的容器。

Azure

Azure 机器学习——提供用于部署 LLM 的各种工具,如模型管理、端点、批量评分和托管推理;为实时或批量推理设置可扩展和托管的基础架构。

Azure Kubernetes 服务 (AKS):是谷歌管理的 Kubernetes 服务。它以容器化格式为您管理 LLM 模型。

Azure Functions:无服务器函数,用于部署您的 LLM 模型,实现轻量级、事件驱动的交互。

谷歌云

Vertex AI——为数据科学家和机器学习工程师提供专门构建的 MLOps 工具,以自动化、标准化和管理机器学习项目。其中一些功能包括模型管理、托管推理、批量推理和自定义容器。

Cloud Run 和 Cloud Functions——是一个无服务器平台,可将 LLM 部署为轻量级、事件驱动的应用程序,非常适合较小的模型或微服务。

注意:它们均以按需价格提供 Nvidia GPU。您的新帐户或个人帐户可能不符合高级 GPU 的资格(这要归功于比特币矿工)!

在 Sagemaker Endpoint 上从 HuggingFace 部署 LLM

快速部署HuggingFace模型的最简单方法

如果你有一个想要快速测试的新模型,请转到 HuggingFace 上的模型卡页面:

mistralai/Mixtral-8x7B-Instruct-v0.1 · 拥抱脸

我们正致力于通过开源和开放科学推动人工智能的发展并使其民主化。

huggingface.co

点击“部署”按钮

img

通常情况下,您总是会选择 Sagemaker,单击它

img

复制样板代码并将其粘贴到 sagemaker studio 或笔记本中

img

<iframe src="https://medium.com/media/646437385f8e1e1a6bc5e1fc998dc4a8" allowfullscreen="" frameborder="0" height="916" width="680" title="在 SageMaker.py 上部署 HuggingFace 模型" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 915.99px; left: 0px;"></iframe>

在 SageMaked 端点上部署 HuggingFace 模型

现在您必须更改一些变量,例如:

  1. 添加您的 AWS 账户 Sagemaker 执行角色。如果您从 sagemaker studio 运行它,那么sagemaker.get_execution_role()就足够了。
  2. 调整一些模型配置(将成为端点配置的一部分)。例如实例类型、GPU 数量(如果支持)和实例数量。

这将在我们的 sagemaker 域上部署一个专用端点。

要调用任何 sagemaker 端点,您将需要一个boto3已安装的环境(使用数据库触发器(如 AWS Aurora Postgres Sagemaker 触发器)时除外)。

<iframe src="https://medium.com/media/121a2f69007df794b342493f723a0d03" allowfullscreen="" frameborder="0" height="850" width="680" title="调用 SageMaker 端点.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 850px; left: 0px;"></iframe>

调用 SageMaker 端点

Sagemaker 快速入门

<iframe src="https://medium.com/media/f72e4e70d17254f223422b7b3186db8e" allowfullscreen="" frameborder="0" height="850" width="680" title="SageMaker 快速启动模型部署.py" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 850px; left: 0px;"></iframe>

SageMaker Jumpstart 模型部署代码

SageMaker 部署您已预先训练或微调的 LLM

要部署自定义 LLM,请查看模型使用的库是否在内置框架中可用,并使用脚本模式传递自定义脚本。如果您的 LLM 使用自定义包,请使用自带容器 (BYOC) 模式,使用sagemaker 推理工具包创建自定义推理容器。

查看 sagemaker 上的更多示例:https://github.com/aws/amazon-sagemaker-examples/tree/main

使用容器部署

使用容器的好处

在面向服务架构 (SOA) 的世界里,容器是一种福音。编排大量容器是一项挑战,但与在虚拟机上运行的应用程序相比,容器化服务具有诸多优势。

与传统 Web 服务相比,大型语言模型具有更高的内存要求。这意味着我们必须在容器化 LLM 或基于 LLM 的端点之前了解这些内存要求。除非出现少数情况,例如当您的生成模型完全适合 1 台服务器并且只需要 1 台服务器时;除非出现如此少的情况,否则建议在生产用例中容器化您的 LLM。

  1. 可扩展性和基础设施优化——细粒度的动态和弹性资源配置(CPU、GPU、内存、持久卷)、动态扩展和最大化组件/资源密度,以充分利用基础设施资源。
  2. 操作一致性和组件可移植性 — 构建和部署自动化,减少操作许多不同环境所需的技能范围。跨节点、环境和云的可移植性,可以在任何容器平台上构建和运行映像,使您能够专注于开放容器化标准,例如 Docker 和 Kubernetes。
  3. 服务弹性——快速重启、实现干净恢复的能力、安全的独立部署、消除现有组件不稳定的风险以及使用滚动升级、金丝雀发布和 A/B 测试进行细粒度的推出。

GPU 和容器

您可以将专用 GPU 或云 GPU 与容器结合使用。如果您有笔记本电脑,请在容器化应用之前检查 GPU 内存和模型大小。

当与 Docker 或 containerd、CRI-O 等不同的运行时一起使用时,容器使用 NVIDIA Container 工具包,该工具包会nvidia-container-runtime在主机中安装 NVIDIA Container Runtime()。

img

图片来源:https://developer.nvidia.com/blog/nvidia-docker-gpu-server-application-deployment-made-easy/

对于 containerd 运行时,NVIDIA Container Runtime 配置为符合 OCI 标准的运行时,并通过 NVIDIA Container Runtime Hook(nvidia-container-runtime-hook)在最低级别使用 NVIDIA CUDA、NVML 驱动程序,流程通过各个组件,如下图所示:

img

来源:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/arch-overview.html

安装 NVIDIA Container Toolkit后,您可以运行示例容器来测试 NVIDIA GPU 驱动程序。运行示例工作负载的官方文档:https://docs.nvidia.com/datacenter/cloud-native/container-toolkit/latest/sample-workload.html

我的系统是 Alienware 15 (2014),配备独立 GPU — Nvidia GeForce 960M,3GB GDDR5 内存和 8GB DDR3L 1600 MHz RAM。运行示例容器后,我得到了以下响应:

sudo docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smirm --runtime=nvidia --gpus 所有 ubuntu nvidia-smi

img

smi— 系统管理界面

要在运行时使用带有 GPU 的自定义容器,请--gpus为命令指定参数docker run。例如:

docker run --gpus all tensorflow/tensorflow:latest-gpu

要在构建期间利用 GPU,您有两个选择:

  1. 修改目录daemon.json内的文件/etc/docker,并将默认运行时更改为nvidia
{ 
  “默认运行时” : “nvidia” ,
   “运行时” : { 
      “nvidia” : { 
          “路径” : “/usr/bin/nvidia-container-runtime” ,
          “runtimeArgs” : [ ] 
      } 
  } 
}
  1. 或者,使用其中一个nvidia/cuda图像。以下是我从这里获取的示例 Dockerfile ,它用作nvidia/cuda:11.4.0-base-ubuntu20.04基础图像来检查容器内部的 PyTorch GPU 支持。
来自 nvidia/cuda:11.4.0-base-ubuntu20.04 


ENV  DEBIAN_FRONTEND=noninteractive 

# 安装 python
运行 apt-get  update  &&  \ 
    apt-get  install  -y  \ 
        git  \ 
        python3-pip  \ 
        python3-dev  \ 
        python3-opencv  \ 
        libglib2.0-0 

# 安装 PyTorch 和 torchvision
运行 pip3  install  torch  torchvision  torchaudio  -f  https://download.pytorch.org/whl/cu111/torch_stable.html 

WORKDIR  /app 

# 复制推理所需的文件

ENTRYPOINT [ “python3” ]

构建图像后,验证 PyTorch 安装:

docker exec -it <容器名称> /bin/bashexec -it <容器名称> /bin/bash

从容器内部逐个运行命令:

python3 

import torch 

torch.cuda.current_device() 

torch.cuda.get_device_name(0) # 如果你的机器有多个 GPU,则更改为所需的 GPU# 如果你的机器有多个 GPU,则更改为你想要的 GPU

通过使用其中一个 nvidia cude 基础镜像,您可以在许多游戏形式上执行 LLM 推理,例如:

  1. 在本地 Docker 容器上使用 GPU 进行 LLM
  2. EC2 上的 GPU
  3. AWS Fargate 上的 GPU
  4. Kubernetes 上的 GPU(https://thenewstack.io/install-a-nvidia-gpu-operator-on-rke2-kubernetes-cluster/)

Dockerfile另一个带有 nvidia cuda 基础图像的示例来自这里

FROM --platform=amd64 nvcr.io/nvidia/cuda:11.8.0-devel-ubuntu22.04 作为基础

ARG MAX_JOBS 

WORKDIR /workspace 

RUN apt update && \ 
    apt install -y python3-pip python3-packaging \ 
    git ninja-build && \ 
    pip3 install -U pip

# 调整此列表以减少构建时间
# https://developer.nvidia.com/cuda-gpus
 ENV TORCH_CUDA_ARCH_LIST "7.0;7.2;7.5;8.0;8.6;8.9;9.0" 

# 我们必须手动安装 Torch,否则 apex 和 xformers 将无法构建
RUN pip3 install "torch>=2.0.0" 

# 此构建速度很慢,但 NVIDIA 不提供二进制文件。根据需要增加 MAX_JOBS。
运行 git clone https://github.com/NVIDIA/apex && \ 
    cd apex && git checkout 2386a912164b0c5cfcd8be7a2b890fbac5607c82 && \ 
    sed -i '/check_cuda_torch_binary_vs_bare_metal(CUDA_HOME)/d' setup.py && \ 
    python3 setup.py install --cpp_ext --cuda_ext

运行 pip3 install "xformers==0.0.22"  "transformers==4.34.0"  "vllm==0.2.0"  "fschat[model_worker]==0.2.30" 

# 复制模型文件和脚本
# 复制

# 将入口点设置为服务器
# 入口点

使用 Ollama

在前面的部分中,我们了解了如何启动 Ollama 服务器并通过命令行执行 curl 命令。您可以在 Dockerfile 中编写 Ollama 安装和服务器执行命令来使用 Ollama。

您还可以使用Docker hub 上提供的官方 Ollama docker 镜像。确保安装NVIDIA Container Toolkit以使用 GPU。

使用专用硬件进行推理

AWS Inferentia

AI 芯片 - AWS Inferentia - AWS

了解 AWS 推出的 ML 芯片 AWS Inferentia。

亚马逊

ml.inf2实例系列专为深度学习和生成模型推理而设计。AWS 声称这些实例的吞吐量比同类Amazon EC2 实例高出 2.3 倍,每次推理成本降低 70% 。

AWS trainium可用于训练生成模型,而 inferentia 用于推理。

您可以使用ml.inf2实例来部署 SageMaker Jumpstart 模型,或部署在 SageMaker 端点上的任何 LLM。

从 sagemaker.jumpstart.model 导入 JumpStartModel 

model_id = “meta-textgenerationneuron-llama-2-13b-f”“meta-textgenerationneuron-llama-2-13b-f”
模型=JumpStartModel(
    model_id=model_id,
    env={ 
        “OPTION_DTYPE”:“fp16”,
        “OPTION_N_POSITIONS”:“4096”,
        “OPTION_TENSOR_PARALLEL_DEGREE”:“12”,
        “OPTION_MAX_ROLLING_BATCH_SIZE”:“4”,
    },
    instance_type= “ml.inf2.24xlarge”  
)
pretrained_predictor = model.deploy(accept_eula=True)
payload = { 
    “inputs”:“我相信生命的意义是”,“输入”:“我相信生命的意义是”,
    “参数”:{ 
        “max_new_tokens”:64,
        “top_p”:0.9,
        “温度”:0.6,
    },
} 

response = pretrained_predictor.predict(payload)

苹果神经引擎

苹果神经引擎( ANE ) 是一组专用核心的营销名称,这些核心充当神经处理单元(NPU),专用于加速人工智能操作和机器学习任务。来源

img

来源:Apple 2020

ANE 并不是唯一的 NPU。除了神经引擎之外,最著名的 NPU 是Google 的 TPU(即张量处理单元)。

img

来源:https://apple.fandom.com/wiki/Neural_Engine

要使用 ANE 进行推理,您必须ane-transformers从 pip 安装包(然后祈祷它能正常工作,因为苹果在过去 2 年内没有更新它)。

Apple 的 ml-ane-tranformers 的Github 仓库。

初始化基线模型

导入变压器
模型名称 = “distilbert-base-uncased-finetuned-sst-2-english”
基线模型 = transformers.AutoModelForSequenceClassification.from_pretrained(
    模型名称,
    return_dict= False,
    torchscript= True,
). eval ()

初始化数学上等效但经过优化的模型,并使用基线模型的参数恢复其参数

从ane_transformers.huggingface导入distilbert作为ane_distilbertoptimized_model 
= ane_distilbert.DistilBertForSequenceClassification( 
    baseline_model.config)。eval ( ) 
optimized_model.load_state_dict(baseline_model.state_dict())

为模型创建样本输入”

tokenizer = transformers.AutoTokenizer.from_pretrained(model_name) 
tokenized = tokenizer( 
    ["用于跟踪模型的示例输入文本"],"用于跟踪模型的示例输入文本" ], 
    return_tensors= "pt" , 
    max_length=128,   # 标记序列长度
    padding= "max_length" , 
) 

import torch 
traced_optimized_model = torch.jit.trace( 
    optimized_model, 
    (tokenized[ "input_ids" ], tokenized[ "attention_mask" ]) 
)

使用coremltools生成Core ML模型包文件并保存”

将coremltools导入为ct将numpy
导入为np 
ane_mlpackage_obj = ct.convert( 
    traced_optimized_model, 
    convert_to= "mlprogram" ,
    输入=[ 
        ct.TensorType( 
                f"input_ {name} " , 
                    shape=tensor.shape, 
                    dtype=np.int32, 
                ) for name, tensor in tokenized.items() 
            ], 
            compute_units=ct.ComputeUnit.ALL, 
) 
out_path = "HuggingFace_ane_transformers_distilbert_seqLen128_batchSize1.mlpackage"
 ane_mlpackage_obj.save(out_path)

使用来自官方 github repo 的安装和故障排除

其他的

https://www.cisco.com/c/en/us/td/docs/unified_computing/ucs/UCS_CVDs/flexpod_c480m5l_aiml_design.html

部署在边缘设备上

不同类型的边缘设备

边缘计算有多种类型,我们将讨论物联网 (IoT) 边缘。一些常见的 IoT 设备包括:

  • 移动设备
  • 联网相机
  • 零售亭
  • 传感器
  • 智能停车计费表等智能设备
  • 汽车及其他类似产品

Tensorflow Lite

对于具有设备上机器学习 (ODML) 功能的移动设备,甚至是 Rasberry Pi 等边缘设备,您可以将现有的 LLM 转换为TensorFlow Lite.tflite模型并在移动应用程序上进行推理。TensorFlow Lite是一个移动库,用于在移动设备、微控制器和其他边缘设备上部署模型。

img

TensorFlow Lite 的概念架构。图片来源:https 😕/github.com/tensorflow/codelabs/blob/main/KerasNLP/io2023_workshop.ipynb

使用 TensorFlow Lite 的高级开发人员工作流程是:首先使用 TensorFlow Lite转换器将 TensorFlow 模型转换为更紧凑的 TensorFlow Lite 格式,然后使用针对移动设备高度优化的 TensorFlow Lite解释器运行转换后的模型。在转换过程中,您还可以利用量化等多种技术进一步优化模型并加速推理。

img

图片来源:https://github.com/tensorflow/codelabs/blob/main/KerasNLP/io2023_workshop.ipynb

复制此官方 google colab以使用TensorFlow Lite 的GPT2CausalLM模型。

查看更多 TensorFlow Lite 示例(适用于 iOS、Android 和 Raspberry Pi):https://www.tensorflow.org/lite/examples

SageMaker Neo

Amazon SageMaker Neo使开发人员能够优化机器学习模型,以便在云端和边缘支持设备上的 SageMaker 进行推理。

使用 SageMaker Neo 优化 ML 模型的步骤:

  1. 使用SageMaker Neo 支持的任何框架构建和训练 ML 模型。
  2. 或者将现有模型的工件上传至 S3 存储桶。
  3. 使用 SageMaker Neo 为 ML 模型框架和目标硬件(例如 EC2 实例和边缘设备)创建优化的部署包。这是与常规 ML 部署流程相比唯一的额外任务。
  4. 在目标云或边缘基础设施上部署 SageMaker Neo 生成的优化 ML 模型。

使用 SageMaker neo 为某些边缘设备编译模型的示例:https://github.com/neo-ai/neo-ai-dlr/tree/main/sagemaker-neo-notebooks/edge

img

使用 SageMaker Neo 部署 LLM。来源:https://d1.awsstatic.com/events/Summits/reinvent2022/AIM405_Train-and-deploy-large-language-models-on-Amazon-SageMaker.pdf

光网络

ONNX 是一个社区项目,是一种用于表示机器学习模型的格式。ONNX 定义了一组通用运算符(机器学习和深度学习模型的构建块)和一种通用文件格式,使 AI 开发人员能够将模型与各种框架、工具、运行时和编译器一起使用。

如果您在 ONNX支持的框架之一中拥有一个模型(其中包括所有主要的 ML 框架),那么它可以使用受支持的加速器之一(如 Mace、NVIDIA、Optimum、Qualcomm、Synopsys、Tensorlfow、Windows、Vespa 等)优化该模型,以最大限度地提高硬件性能。

https://github.com/ggerganov/whisper.cpp

使用其他工具

如果您的边缘设备具有内核并支持容器,那么人们已经成功运行 Code Llama 和 llama.cpp,进行生成模型推理。

https://github.com/ggerganov/whisper.cpp

<iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FV87LsNuBPe0%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DV87LsNuBPe0&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FV87LsNuBPe0%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" allowfullscreen="" frameborder="0" height="480" width="854" title="Brad Munday - Modzy - 面向 LLM 的强大且有弹性的边缘+云推理" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 382.188px; left: 0px;"></iframe>
<iframe src="https://cdn.embedly.com/widgets/media.html?src=https%3A%2F%2Fwww.youtube.com%2Fembed%2FewXANEIC8pY%3Ffeature%3Doembed&amp;display_name=YouTube&amp;url=https%3A%2F%2Fwww.youtube.com%2Fwatch%3Fv%3DewXANEIC8pY&amp;image=https%3A%2F%2Fi.ytimg.com%2Fvi%2FewXANEIC8pY%2Fhqdefault.jpg&amp;key=a19fcc184b9711e1b4764040d3dc5c07&amp;type=text%2Fhtml&amp;schema=youtube" allowfullscreen="" frameborder="0" height="480" width="854" title="使用 Ollama 在 Raspberry Pi 5 上运行本地 LLM" class="ff n fp cl bg" scrolling="no" style="box-sizing: inherit; top: 0px; width: 680px; height: 382.188px; left: 0px;"></iframe>

> 如果边缘设备有自己的开发套件(如[NVIDIA IGX Orin)](https://www.nvidia.com/en-us/edge-computing/products/igx/),则请参阅边缘部署的[官方文档。](https://github.com/nvidia-holoscan/holohub/tree/main/tutorials/local-llama)

基于 LLM 的应用程序的 CI/CD 管道

您的模型管道将根据架构而有所不同。对于 RAG 架构,您需要使用新的知识库或更新的文章来更新向量存储。仅更新更新的文章的嵌入比每次更新任何文章时嵌入整个语料库是更好的选择。

在连续预训练架构中,Foundation 模型会连续预训练,无需新数据。为了防止模型因不良数据而退化,您需要拥有一个强大的管道,其中包含数据检查、端点漂移检测和基于规则/模型的评估。

具有微调生成模型的架构,您可以添加基于规则的检查,这些检查在开发人员每次提交代码更改时都会通过预提交触发。

*我们在“评估 LLM”一章的“CI/CD 评估”*部分中讨论了基于规则和基于模型的评估。

微调管道

在经典的 SageMaker 模型管道中,我们使用 ScriptProcessor 在自定义库上执行自定义脚本。当我们必须在容器中自行安装一堆软件包并在 ECR 上托管容器映像时,我们也会使用它。

Sagemaker 已拥有公共映像,其中安装了支持训练、处理和托管深度学习模型的软件包。这些映像包括 pytorch、tensorflow、transformers、huggingface 等常用软件包。

HuggingFace 处理器:

拥抱脸 - sagemaker 2.203.0 文档

包含有关如何运行分布式训练的信息的字典(默认值:无)。目前,以下内容为…

sagemaker.readthedocs.io

在生产管道中,您的 LLM 或任何其他模型通常不仅仅会返回预测。为此,Sagemaker 提供了不同的工具包。请记住,我们在经典模型示例中对自定义图像使用了推理和训练工具包,我们还有 Sagemaker huggingface 推理工具包。

HuggingFace 推理工具包:

GitHub - aws/sagemaker-huggingface-inference-toolkit

通过在 GitHub 上创建账户来为 aws/sagemaker-huggingface-inference-toolkit 开发做出贡献。

github.com

捕获端点统计信息

捕获端点统计数据并处理它们对于检查模型退化、扩展和服务的持续改进至关重要。

您的 DevOps 通常会拥有与所有基础设施的运营指标相关的所有热门数据。指标包括网络带宽、所有节点的 CPU 使用率、RAM 使用率、响应时间、启动/关闭的节点数、容器数等。

MLOps 仪表板通常具有特征分布、KL 散度、预测值分布、嵌入分布、内存使用情况、端点数量和其他模型相关指标,如召回率、F1、AUC、RMSE、MAP、BLEU 等。

对于 LLM 端点,您将拥有相关的 MLOps 指标和一些 LLM 子指标。

  • 第一个标记的时间(TTFT):这是用户输入查询后开始看到模型输出的速度。
  • 每个输出令牌的时间(TPOT):为每个查询系统的用户生成输出令牌的时间。

根据以上指标:

延迟 = TTFT + (TPOT)*(要生成的令牌数量)

捕获端点统计信息的方法

对于延迟不重要的应用程序,您可以将推理输出与终端节点指标一起添加到持久存储中,然后再从终端节点返回推理。如果您使用的是无服务器基础设施(如 AWS Lambda),则可以扩展推理 lambda,使其也将其输出添加到 RDS、键值存储(如 DynamoDB)或对象存储(如 S3)。

如果无法在端点代码中计算端点指标,则只需将它们存储在存储中并稍后分批处理输出。

对于低延迟应用程序,在返回最终预测之前添加逻辑以将输出附加到持久存储是不可行的。在这种情况下,您可以记录/打印预测,然后异步处理日志。如果您使用loki之类的日志聚合器,则可以在索引端点统计信息后计算它们。

要将端点指标计算与主要推理逻辑分离开来,您可以使用数据流。推理代码将记录输出。另一项服务将索引日志并将其添加到数据流中。您可以在流中处理日志,也可以将日志传送到持久存储并分批处理。

Apache KafakaAWS Kinesis 数据流可用于数据流。Apache Flink是我最喜欢的流处理工具。如果您使用 AWS 和 Lambda 进行推理,只需单击几下即可将 CloudWatch 日志流传输到 Kinesis。一旦 Kinesis 中有了日志,您就可以使用像 Flink 这样的流处理器或添加流消费者并计算端点指标。

云提供商端点

主要的云提供商(如 Google Cloud、AWS 和 Azure)提供了一组预定义的开箱即用端点指标。这些指标包括延迟、模型初始化时间、4XX 错误、5XX 错误、每个实例的调用次数、CPU 利用率、内存使用率、磁盘使用率和其他一般指标。这些都是很好的操作指标,可用于自动扩展端点和健康状况确定(即 HA 和可扩展性)等活动。

云提供商还提供了将端点的输入和输出数据存储到 S3 等持久存储的选项。

img

SageMaker 端点配置数据捕获选项

如果您可以批量处理日志并且不需要指标上的热数据,请使用此选项。您还可以添加触发器,当新数据到达 S3 时,它会立即被处理以计算您的端点指标。我建议在采用这种方法之前估算整个管道的成本。

6. 将 LLM 项目投入生产

  • 由 Llama 2 Chat 提供支持的智能 QA 聊天机器人
  • 基于法学硕士的推荐系统聊天机器人
  • 使用代理的客户支持聊天机器人

由 Llama 2 Chat 提供支持的智能 QA 聊天机器人

如何使用 LLM 或 ChatGPT 在您的数据上构建智能 QA 聊天机器人

欢迎来到由大型语言模型 (LLM) 赋能的智能聊天机器人的世界!

mrmaheshrajput.medium.com

在本文中,我使用 Llama 2 聊天模型构建了一个问答聊天机器人。我采用了 RAG 架构,并利用FAISS近似最近邻 (ANN) 库进行检索。对于数据集,我从Jira 云资源页面复制了几页来创建知识库语料库。

虽然我没有深入研究生产细节,但文章中提到了一些高级架构,以便让读者了解生产架构。

基于法学硕士的推荐系统聊天机器人

如何利用法学硕士学位制作推荐系统聊天机器人

基于开源大型语言模型或 openai ChatGPT 制作基于会话的服装推荐系统聊天机器人

mrmaheshrajput.medium.com

我喜欢推荐系统问题。在撰写本文时,我能找到的与以下方面相关的内容:法学硕士 (LLM) — 推荐系统 — 聊天机器人,都与预测下一个最有可能喜欢的商品或重新订购有关。本文介绍了一种基于会话的服装推荐引擎,并具备上下文理解功能。

使用 LLM 的好处是能够在用户提出问题时推荐商品,例如“感恩节我应该穿什么?”,“第一次参加办公室聚会我应该穿什么?”等等。这些商品是从互联网上的服装产品语料库中推荐的。我使用了 2 个 LLM,一个用于将用户查询转换为服装商品,例如“冬季假期”将转换为“夹克、靴子、毛衣……”。第二个 LLM 用于理解用户的聊天问题并根据给定的商品上下文回答它们。

该解决方案采用了 RAG 架构。当我公开演示时,互联网向聊天机器人提出了非常有趣的问题。我在同一篇文章中解释了部署架构。我使用了 AWS 服务,如 Elastic Container Service、MongoDB、Lambda、CloudFront、LoadBalancer、EFS 和 Aurora Serverless(用于通过pgvector进行向量存储和检索)。

使用代理的客户支持聊天机器人

这是即将开展的项目。我还没有完成它。一旦准备就绪,我会通知您并在此处发布。

7. 即将推出

提示压缩 ——与模型压缩类似,已显示出一些有希望的结果,可以降低提示成本和速度。该技术涉及使用训练有素的小型语言模型从提示中删除不重要的标记。

GPT-5应该是 GPT-4 的一次大规模升级,就像我们看到的从 3 到 4 的类似飞跃一样。用 Sam Altman 的话来说——“如果你忽视了改进的速度,你就会被‘碾压’……”。无论结果如何,你都可以创建基于 LLM 的应用程序管道来轻松测试和切换模型,就像双向门决策一样。

由 LLM 驱动的个人助理NVIDIA GR00T是 LLM 驱动的手机和机器人的一个例子。未来还会有更多这样的产品。

LLMOps — 对于进行预训练(从头开始训练)、微调甚至只是在其应用程序中使用开源模型进行推理的人来说,LLMOps 将在整个行业中不断改进。新的基准将会出现,新的工具将获得星级评价,一些存储库将被归档,LLMOps — MLOps 和 DevOps 之间的差距将进一步缩小。

img

用程序,在返回最终预测之前添加逻辑以将输出附加到持久存储是不可行的。在这种情况下,您可以记录/打印预测,然后异步处理日志。如果您使用loki之类的日志聚合器,则可以在索引端点统计信息后计算它们。

要将端点指标计算与主要推理逻辑分离开来,您可以使用数据流。推理代码将记录输出。另一项服务将索引日志并将其添加到数据流中。您可以在流中处理日志,也可以将日志传送到持久存储并分批处理。

Apache KafakaAWS Kinesis 数据流可用于数据流。Apache Flink是我最喜欢的流处理工具。如果您使用 AWS 和 Lambda 进行推理,只需单击几下即可将 CloudWatch 日志流传输到 Kinesis。一旦 Kinesis 中有了日志,您就可以使用像 Flink 这样的流处理器或添加流消费者并计算端点指标。

云提供商端点

主要的云提供商(如 Google Cloud、AWS 和 Azure)提供了一组预定义的开箱即用端点指标。这些指标包括延迟、模型初始化时间、4XX 错误、5XX 错误、每个实例的调用次数、CPU 利用率、内存使用率、磁盘使用率和其他一般指标。这些都是很好的操作指标,可用于自动扩展端点和健康状况确定(即 HA 和可扩展性)等活动。

云提供商还提供了将端点的输入和输出数据存储到 S3 等持久存储的选项。

[外链图片转存中…(img-awCWBpLO-1722335807945)]

SageMaker 端点配置数据捕获选项

如果您可以批量处理日志并且不需要指标上的热数据,请使用此选项。您还可以添加触发器,当新数据到达 S3 时,它会立即被处理以计算您的端点指标。我建议在采用这种方法之前估算整个管道的成本。

6. 将 LLM 项目投入生产

  • 由 Llama 2 Chat 提供支持的智能 QA 聊天机器人
  • 基于法学硕士的推荐系统聊天机器人
  • 使用代理的客户支持聊天机器人

由 Llama 2 Chat 提供支持的智能 QA 聊天机器人

如何使用 LLM 或 ChatGPT 在您的数据上构建智能 QA 聊天机器人

欢迎来到由大型语言模型 (LLM) 赋能的智能聊天机器人的世界!

mrmaheshrajput.medium.com

在本文中,我使用 Llama 2 聊天模型构建了一个问答聊天机器人。我采用了 RAG 架构,并利用FAISS近似最近邻 (ANN) 库进行检索。对于数据集,我从Jira 云资源页面复制了几页来创建知识库语料库。

虽然我没有深入研究生产细节,但文章中提到了一些高级架构,以便让读者了解生产架构。

基于法学硕士的推荐系统聊天机器人

如何利用法学硕士学位制作推荐系统聊天机器人

基于开源大型语言模型或 openai ChatGPT 制作基于会话的服装推荐系统聊天机器人

mrmaheshrajput.medium.com

我喜欢推荐系统问题。在撰写本文时,我能找到的与以下方面相关的内容:法学硕士 (LLM) — 推荐系统 — 聊天机器人,都与预测下一个最有可能喜欢的商品或重新订购有关。本文介绍了一种基于会话的服装推荐引擎,并具备上下文理解功能。

使用 LLM 的好处是能够在用户提出问题时推荐商品,例如“感恩节我应该穿什么?”,“第一次参加办公室聚会我应该穿什么?”等等。这些商品是从互联网上的服装产品语料库中推荐的。我使用了 2 个 LLM,一个用于将用户查询转换为服装商品,例如“冬季假期”将转换为“夹克、靴子、毛衣……”。第二个 LLM 用于理解用户的聊天问题并根据给定的商品上下文回答它们。

该解决方案采用了 RAG 架构。当我公开演示时,互联网向聊天机器人提出了非常有趣的问题。我在同一篇文章中解释了部署架构。我使用了 AWS 服务,如 Elastic Container Service、MongoDB、Lambda、CloudFront、LoadBalancer、EFS 和 Aurora Serverless(用于通过pgvector进行向量存储和检索)。

使用代理的客户支持聊天机器人

这是即将开展的项目。我还没有完成它。一旦准备就绪,我会通知您并在此处发布。

7. 即将推出

提示压缩 ——与模型压缩类似,已显示出一些有希望的结果,可以降低提示成本和速度。该技术涉及使用训练有素的小型语言模型从提示中删除不重要的标记。

GPT-5应该是 GPT-4 的一次大规模升级,就像我们看到的从 3 到 4 的类似飞跃一样。用 Sam Altman 的话来说——“如果你忽视了改进的速度,你就会被‘碾压’……”。无论结果如何,你都可以创建基于 LLM 的应用程序管道来轻松测试和切换模型,就像双向门决策一样。

由 LLM 驱动的个人助理NVIDIA GR00T是 LLM 驱动的手机和机器人的一个例子。未来还会有更多这样的产品。

LLMOps — 对于进行预训练(从头开始训练)、微调甚至只是在其应用程序中使用开源模型进行推理的人来说,LLMOps 将在整个行业中不断改进。新的基准将会出现,新的工具将获得星级评价,一些存储库将被归档,LLMOps — MLOps 和 DevOps 之间的差距将进一步缩小。

[外链图片转存中…(img-NuDSBbnh-1722335807945)]

DevinDevika这样的AI 软件工程师将继续发展。我们将看到代理执行更多操作,并在单调的任务中接近人类。
博客原文:https://dz.closeai.cc/forum.php?mod=viewthread&tid=168

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值