- 博客(54)
- 收藏
- 关注
原创 大模型开发和微调工具Llama-Factory-->训练方法(SFT, RLHF, DPO, KTO)
论文指出,大规模无监督语言模型(如大型 AI 助手)虽然能够学习广泛的世界知识和一些推理技能,但由于其训练的无监督性质,精确控制其行为非常困难。现有的方法通过收集人类对模型生成内容质量的标签,使用基于人类反馈的强化学习(RLHF)来微调这些模型,使其符合人类的偏好。然而,RLHF 过程复杂且通常不稳定,需要先拟合一个反映人类偏好的奖励模型,然后使用强化学习来微调模型,使其最大化这个估计的奖励。作者提出了 DPO 算法,它通过简单的分类损失直接优化策略。
2024-12-01 14:46:58
2213
原创 大模型开发和微调工具Llama-Factory-->量化2(AQLM和OFTQ)
作者们探讨了如何通过加性量化(Additive Quantization, AQ)方法实现大型语言模型(LLMs)的极端压缩,目标是将模型的比特数压缩到每个参数仅2到3比特。图 1:在 LLAMA2 的 7, 13 和 70B 模型上,AQLM(2 位)相对于最先进的 QuIP#(2 位)和原始 16 位权重的比较。大模型的参数量通常达到数十亿级别,需要大量的计算和存储资源。本文证明,通过我们提出的半二次量化 (HQQ) 方法进行免校准量化,其质量可与 GPTQ 和 AWQ 等依赖数据的流行方法相媲美。
2024-12-01 14:43:40
1173
原创 大模型开发和微调工具Llama-Factory-->量化1(GPTQ 和 AWQ)
大型语言模型(LLMs)如 GPT 和 OPT 在各种任务上展现了卓越的性能,但同时也因其庞大的模型尺寸带来了硬件上的挑战,尤其是在内存大小和内存带宽方面。这限制了这些模型在边缘设备上的部署和使用。图 1.我们介绍 AWQ,这是一种用于 LLM 的多功能权重量化方法。为了实现 AWQ,我们开发了 TinyChat,将4 bit 量化 LLM 部署到各种边缘平台,与FP16相比,性能提升了3-4 倍。
2024-12-01 14:39:20
2552
原创 大模型开发和微调工具Llama-Factory-->调优算法2(Galore、Badm)
BAdam 为大型语言模型的微调提供了一种内存高效的方法,能够在有限的内存资源下实现与 Adam 相当的性能。在训练过程中,P和Q矩阵不需要频繁更新。实验中,作者发现每 200 次迭代更新一次 P 和 Q 就足够了,这样的更新频率既保证了训练的稳定性,又避免了过高的计算开销。传统的全参数微调方法,如Adam,需要大量的 GPU 内存,这在实际应用中常常受到限制,尤其是 LLMs 的情况。在每个块周期(block-epoch)内,BAdam 只更新一个活跃的块,而其他块保持在它们当前的值不变。
2024-12-01 14:30:50
897
原创 大模型开发和微调工具Llama-Factory-->调优算法1(全量、冻结、LoRA及其变体)
LLaMA-Factory 支持多种调优算法,包括:。
2024-12-01 14:23:54
1893
原创 大模型开发和微调工具Llama-Factory-->推理与评估
LLaMA-Factory 支持多种推理方式。您可以使用或进行推理与模型对话。对话时配置文件只需指定原始模型和template,并根据是否是微调模型指定和。如果您希望向模型输入大量数据集并记录推理输出,您可以使用使用数据集或使用 api 进行批量推理。Note:使用任何方式推理时,模型需要存在且与template相对应。
2024-12-01 14:18:22
2178
1
原创 大模型开发和微调工具Llama-Factory-->LoRA合并
当我们基于预训练模型训练好 LoRA 适配器后,我们不希望在每次推理的时候分别加载预训练模型和 LoRA 适配器,因此我们需要将预训练模型和 LoRA 适配器合并导出成一个模型。根据是否量化以及量化算法的不同,导出的配置文件有所区别。
2024-12-01 14:17:23
2204
原创 大模型开发和微调工具Llama-Factory-->WebUI
LLaMA-Factory 支持通过 WebUI 零代码微调大模型。通过如下指令进入 WebUI。
2024-12-01 14:16:12
1774
原创 大模型开发和微调工具Llama-Factory-->数据处理
包含了所有经过处理的 本地数据集 和 在线数据集。如果使用本地数据集, 务必在中添加对应数据集及其内容的定义目前支持Alpaca格式 和ShareGPT的格式。
2024-12-01 14:14:25
2153
1
原创 向量数据库FAISS之七:GPU上的FAISS
实例化多个 GPU 索引时,最好分解 GPU 资源以避免浪费内存。该函数采用可以在索引之间重用的资源对象列表作为其第一个参数,对象,该对象可用于调整 GPU 存储对象的方式。除了普通参数之外,它们还接受资源对象作为输入,以及索引存储配置选项和 float16/float32 配置参数。GPU 通常比 CPU 具有更高的延迟,但和 CPU 相比具有更高的并行吞吐量和内存带宽。的输入已经与 索引 位于同一 GPU 上,则不会执行任何副本,,因为这可以在所有查询中分摊索引内存的接触。在 GPU 上实现为。
2024-11-19 19:42:51
2644
原创 向量数据库FAISS之六:如何让FAISS更快
但这种实例化方式将索引参数设置为安全值,同时存在许多与速度相关的参数。但强烈建议研究可用参数,以便在您的特定速度与精度与 RAM 情况下找到最佳点。训练模式,该模式用于为所有子量化器训练单个码本,而不是为每个子量化器训练单独的码本。在内部,Faiss 以比调用者执行并行化更有效的方式对批处理元素进行并行化。这显着减少了 10 位或 12 位 PQ 的训练时间,但代价是准确性。训练慢约 16 倍,因为输入数据集中使用的样本数量比例较高。Faiss 针对批量样本的处理进行了优化,而不是逐个处理样本。
2024-11-19 19:41:59
934
原创 向量数据库FAISS之五:原理(LSH、PQ、HNSW、IVF)
Code是数据点量化后对应质心的索引,用来表示该数据点最接近的质心。Codebook是质心的集合,表示数据点被聚类后可以映射到的典型位置。其思想是将空间分解为低维子空间的笛卡尔积,并分别对每个子空间进行插值。向量由其子空间量化索引组成的短码表示。两个向量之间的欧氏距离可以有效地从它们的代码估计。非对称版本提高了精度,因为它计算了向量和代码之间的近似距离。实验结果表明,我们的方法有效地搜索最近的邻居,特别是在与倒排文件系统相结合。上面有点乱,总结一下核心思想。
2024-11-19 19:40:37
2369
原创 向量数据库FAISS之三:FAISS 索引
平面索引只是将向量编码为固定大小的代码,并将它们存储在 字节的数组中。在搜索时,所有索引向量都被顺序解码并与查询向量进行比较。对于 ,比较是在压缩域中完成的,速度更快支持操作平面索引类似于 C++ 向量。它们不存储向量 ID,因为在许多情况下顺序编号就足够了。所以:向量编码可用的编码是(压缩率由小到大):一种典型的加速方法是采用 k-means 等分区技术,但代价是失去找到最近邻居的保证。相应的算法有时也被称为单元探测法。我们使用基于多重探测的基于分区的方法。这样做时,仅将数据库的一小部分与查询进行比较:
2024-11-19 19:27:11
2136
原创 向量数据库FAISS之二:基础进阶版
我们引入了一种新的高维矢量压缩方案,该方案使用来自 M 个不同码本的 M 个码字的和来近似矢量。我们表明,所提出的方案允许压缩和未压缩矢量之间的有效距离和标量积计算。我们进一步建议矢量编码和码本学习算法,其可以最小化所提出的方案内的编码误差。在实验中,我们证明了所提出的压缩可以代替乘积量化或与乘积量化一起使用。我们提出了一种称为加性量化(AQ)的新编码方法,它可以推广 PQ 并进一步提高 PQ 精度,同时在很大程度上保持其计算效率。与 PQ 类似,AQ将每个向量表示为几个组件的总和。
2024-11-19 19:17:40
1367
原创 向量数据库FAISS之一:官方简单教程
在下面的示例中,我们将使用在 d=64 维度上形成均匀分布的向量。向量仍然存储在 Voronoi 单元中,但它们的大小减小到可配置的字节数 m(d 必须是 m 的倍数)。为了扩展到非常大的数据集,Faiss 提供了基于乘积量化的有损压缩来压缩存储的向量的变体。正如我们看见的,IndexFlatL2 和 IndexIVFFlat 都存储全部的向量。我们假设行优先存储,即向量编号 i 的第 j 个分量存储在矩阵的第 i 行、j 列中。给数据库:包含所有的必须被索引化的、需要去查找的 向量。
2024-11-19 19:14:03
1816
原创 BERT--公认的里程碑
BERT 的意义在于,从大量无标记的数据集中训练得到的深度模型,可以限制提高各项自然语言处理任务的准确率。BERT 在当时,几乎刷新了自然语言图段、问答及命名实体识别等11项自然语言处理任务上的表现,甚至在 SQuAD 问答测试中,超过了人类表现。SQuAD(Stanford Question Answering Dataset)是一种机器阅读理解(Machine Reading Comprehension, MRC)任务,主要目标是根据给定的文本段落回答问题。
2024-11-19 00:53:08
1697
原创 大模型采样技术(从头到尾明明白白的~)
Top-p 采样中,采样不只是在最有可能的 K 个单词中进行,,而是在累积概率超过 P 的最小单词集中进行。在 Top-K 采样中,概率最大的 K 个词会被选中,然后对这 K 个词重新归一化,最后在这重新归一化概率后的 K 个词进行采样。假设 p=0.92,Top-p 采样对单词概率进行降序排列并累加,然后选择概率和首次超过 p=0.92 的单词集作为采样池。在 t=1 的时候,词集有 9 个词,而在 t=2 的时候,他只需要选择前三个词就超过了 0.92.对于输出概率陡峭的情况,可能效果不好。
2024-11-13 10:09:00
869
原创 开放域问答的密集段落检索(以密集检索的角度解决 QA 问题)
开放域问答依赖于有效的段落检索去选择候选内容,传统的稀疏向量空间模型,比如 TF-IDF 恶和 BM25,确实是一个方法。在这项工作中,我们证明了检索实际上可以单独使用密集表示来实现,其中嵌入是通过一个简单的双编码器框架从少量的问题和段落中学习到的。在广泛的开放域 QA 数据集上进行评估时,我们的密集检索器在前 20 个段落检索准确率方面的绝对性能大大超过强大的 Lucene-BM25 系统 9%-19%,并帮助我们的端到端 QA 系统在多个开放域 QA 基准上建立新的最先进水平。
2024-11-11 15:01:00
940
原创 RRF(Reciprocal Rank Fusion,倒数排序融合)
倒数排序融合 RRF 是一种简单的方法,用于结合多个 IR(Information Retrieval) 系统的文档排名,始终比任何单独的系统产生更好的结果。通过使用 RRF 来结合几个TREC实验的结果,并建立一个 元学习器,该元学习器 对 LETOR 3 数据集的排名优于任何先前的方法,从而证明了这一结果。
2024-11-09 11:02:22
1214
原创 FastAPI 教程(官网同步,包含30+demo,英语不好的宝子来!)
你可以为查询参数声明额外的校验和元数据。aliastitledeprecatedmin_lengthmax_lengthregex在这些示例中,你了解了如何声明对str值的校验。你能够以与查询参数和字符串校验相同的方式使用QueryPath(以及其他你还没见过的类)声明元数据和字符串校验。gt:大于(greaterthan)ge:大于等于(gequal)lt:小于(lessthan)le:小于等于(lequal)与 JSON 不同,HTML 表单 (
2024-11-09 10:31:14
1416
原创 大模型微调技术 --> IA3
我们引入了一种名为IA3(通过抑制和放大内部激活的注入适配器, Infused Adapter by Inhibiting and Amplifying Inner Activations)的新的PEFT方法,该方法通过学习向量缩放激活,在只引入相对少量的新参数的情况下获得更强的性能。我们还提出了一个基于 T0 模型的简单配方,称为T-Few,可以应用于新任务,而无需针对任务进行调优或修改。
2024-11-08 22:56:35
937
原创 大模型微调技术 --> LoRA 系列之 AdaLoRA
之前的微调方法(如低秩更新)通常将增量更新的预算均匀地分布在所有预训练的权重矩阵上,并且忽略了不同权重参数的不同重要性。结果,微调结果不是最优的。为了弥补这一差距,我们提出了AdaLoRA,它根据权重矩阵的重要性得分自适应地在权重矩阵之间分配参数预算。特别地,AdaLoRA以奇异值分解的形式将增量更新参数化。这种新的方法允许我们有效地修剪不重要更新的奇异值,这实质上是减少它们的参数预算,但避免了密集的精确 SVD 计算。
2024-11-07 20:08:29
1295
原创 大模型微调技术 --> LoRA 系列之 LoRA(现今最火热的模型微调方法,甚至没有之一,下面有常用的 lora 参数)
"r": 8,# 起始rank"alpha": 8,# 与rank相同"dropout": 0.1,# 默认dropout"target_modules": ["q_proj", "v_proj"]# 基础配置Step 1: 先固定其他参数,调整 rank 和 alphaStep 2: 确定最优 rank 后,可以尝试增加 target modulesStep 3: 如果还不够好,可以调整 dropout 或 学习率rank 设置过大可能导致显存不足。
2024-11-07 19:59:28
3579
原创 大模型微调技术 --> Adapter
权衡准确率和可训练任务特定参数的数量,对于 adapter 微调和 finetuning。y 轴以全量微调的性能为基准,x 轴是微调参数量。曲线显示了 GLUE 基准九项任务的第 20、50 和 80 百分位数性能。基于 adapter 的调整在训练参数数量减少两个数量级的情况下取得了与 全量微调 类似的性能。提出了 compact 和 extensible 下游任务模型的迁移学习策略紧凑型(compact)模型是只需要为每个任务添加少量参数,就能解决多项任务的模型。
2024-11-06 13:53:22
1288
原创 大模型微调技术 --> P-Tuning v1和 P-Tuning v2
手动的离散提示通常导致一个不稳定的性能——比如,在提示中改变一个词可能导致性能大幅度下降。于是提出了新颖的方法 —— P-Tuning,它采用连续的提示 embedding 与离散提示 结合在一起。P-Tuning 不仅能够通过最小化各种离散提示之间的差距来稳定训练,还能在很多基准测试中提高性能。预训练模型一般都可以通过手动编写提示模版进一步的提升性能。但是,手动的离散提示有很大程度的不稳定性。如图所示,仅仅改变一个单词,就导致了准确率大幅度的变化,但是 P-Tuning 基本稳定。
2024-11-05 20:02:05
1281
原创 大模型微调技术 --> 脉络
微调技术从最早期的全模型微调演变成如今的各种参数高效微调(PEFT)方法,背后是为了应对大模型中的计算、存储和数据适应性的挑战。
2024-11-05 19:56:56
759
1
原创 RAG 系统的评测 --> RAGAs(量化 RAG 系统的好坏)
在开发RAG系统的过程中,比较头疼的就是怎么评测做出来的系统的好与坏。人工评测最直观,但是局限性很大,且不够客观。所以 RAGAs 作为一个很方便的一个测评 RAG 系统的工具而问世。让我们来看看他的真面目吧。
2024-11-05 19:55:13
1040
原创 关于 PDF 抽取的吐槽
今天一下午写了8,9个 PDF 抽取的脚本。最后又回归最开始简单的模式了,要疯了,谁懂啊。我是下午的工作是这样的(我是这么疯的)
2024-11-04 23:58:45
390
原创 大模型的常用指令格式 --> ShareGPT 和 Alpaca (以 llama-factory 里的设置为例)
包含了所有经过处理的 本地数据集 和 在线数据集。如果使用本地数据集, 务必在中添加对应数据集及其内容的定义目前支持Alpaca格式 和ShareGPT的格式。
2024-11-03 11:46:46
4240
原创 大模型部署利器 -- vLLM(别总用着好,不知道他哪好啊)
大型语言模型(LLM)的高吞吐量服务需要一次处理足够多的请求。然而,现有的系统很难做到这一点,因为每个请求的键值缓存(KV 缓存)内存都很大,并且动态地增长和收缩。当管理效率低下时,碎片和冗余复制会严重浪费此内存,从而限制批处理大小。为了解决这个问题,我们提出了,这个注意力算法的灵感来自经典的虚拟内存和操作系统中的分页技术。在此基础上,我们构建了 vLLM,这是一个 LLM 服务系统,它实现了(1)KV 缓存内存的近零浪费,以及(2)在请求内部和请求之间灵活共享 KV 缓存,以进一步减少内存使用。
2024-11-03 11:34:59
2296
原创 SBERT 原始论文(带你3分钟了解 SBERT,草履虫都能看懂)
BERT 和 RoBERTa 在语义文本相似性(STS)等句对回归任务上设置了新的最先进的性能。然而,它需要将两个句子都输入到网络中,这导致了巨大的计算开销:在 10000 个句子的集合中找到最相似的一对需要大约 5000 万次 BERT 推理计算(约65小时)。BERT的构造使其不适合语义相似性搜索以及聚类等无监督任务。
2024-11-03 11:25:09
987
原创 在 NLP 中,为什么用 LN 而不是 BN(面试常见!)
normalization 的计算一般都是对数据进行“减均值,除方差”的操作。他们都能缓解 ICL 的内部偏移现象,不同点在于特征映射的维度,所以导致了应用范围的不同。在 CV 时代,normalization 几乎被 BN 支配;但是在 NLP 时代,LN 却变成了主流,为什么呢?在自然界中,大多数的客观事物都遵循高斯分布,
2024-11-03 11:16:30
520
原创 生成式语言模型的文本生成评价指标(从传统的基于统计到现在的基于语义)
BLEU优点:计算速度,适合评估机器翻译等文本生成任务的准确性。依赖于 n-gram 匹配,所以对短文本评价友好缺点:无法衡量语义,容易惩罚语义合理的表示;对自由度较高的生成任务表现不佳使用场景:机器翻译、文本摘要,尤其是目标文本相对固定的情形ROUGE优点:对文本摘要任务适用,尤其是 ROUGE-L 可识别长的匹配序列,适合评估摘要生成中较长的语义片段缺点:依赖表层匹配,缺乏对语义的深层次理解使用场景:在摘要生成任务中表现良好PPL。
2024-11-03 11:09:23
1145
原创 大模型中的 KV Cache
是否大家在部署大模型的时候,总会遇到显存不足的问题呢?明明我的设备能存下模型参数啊!凭什么超内存了了呢!?其实,这是 KV Cache 在作祟KV Cache 是一种大模型推理加速的方法,该方法通过缓存 Attention 中的 K, V 来实现推理优化。
2024-11-03 11:05:51
1102
2
原创 ElastricSearch 原理以及简单实用(超级通俗)
提到非结构化数据的检索,常常用到 ElasticSearch,他是什么呢?ElasticSearch 是一个基于 Apache Lucene 的分布式搜索引擎,可以作为实时文档存储系统,且文档的每一个内容都可以被检索,能够处理 PB 级别的结构化和非结构化数据。ElasticSearch 本身具有分布式特性的特点。背景Lucene 是为了解决大规模文本数据的高效检索问题而设计的。90 年代末,互联网的内容量飞速增加,企业的大量文本数据难以快速检索。
2024-11-03 11:00:29
1052
原创 Bi-Encoder 和 Cross-Encoder
可以使用一个两阶段的查找流水线,首先使用 bi-encoder 快速高效的检索一个结果候选列表;然后使用 cross encoder 去重排序这些最相关的结果。多级搜索管道可受益于 bi-encoder 的高效检索方法和 cross-encoder 的高精确度,从而在大规模数据集上进行有效搜索。结合 Bi-Encoder 和 Cros-Encoder 来提高 RAG 流水线。
2024-11-03 10:54:52
646
Web开发+Flask+Postgresql+Docker+个人博客网站+项目部署+可以用来撰写个人博客+学习Flask
2024-09-25
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人