Android 端侧推理:基于内存映射的分页加载大模型权重 大家好,今天我们来聊聊如何在 Android 设备上进行端侧推理,特别是针对那些模型权重体积庞大的情况。我们重点讨论利用内存映射(mmap)和分页机制来解决大模型权重加载的问题。 1. 端侧推理的挑战 在移动设备上进行机器学习推理,相比于服务器端,面临着诸多挑战: 资源限制: 移动设备的内存、CPU、GPU 资源都相对有限。 功耗限制: 推理过程需要尽可能降低功耗,延长电池续航。 模型体积: 深度学习模型的体积越来越大,难以一次性加载到内存中。 启动速度: 应用启动时加载模型,需要尽可能缩短启动时间。 对于大模型而言,一次性加载所有权重数据到内存中,很容易导致内存溢出(OOM)错误,或者显著增加应用启动时间。因此,我们需要一种高效的方式来管理模型权重,按需加载,减少内存占用。 2. 内存映射(mmap)机制 内存映射(Memory Mapping)是一种将文件或设备映射到进程地址空间的技术。通过 mmap,进程可以直接像访问内存一样访问文件内容,而无需显式地进行读写操作。这为我们加载大模型权重提供了很大的便利。 mmap 的工 …
BOFT(Butterfly Orthogonal Fine-Tuning):利用蝶形因子分解矩阵实现正交微调
BOFT:利用蝶形因子分解矩阵实现正交微调 大家好,今天我们来深入探讨一种新兴的微调技术——BOFT(Butterfly Orthogonal Fine-Tuning)。在深度学习模型日益庞大的背景下,如何高效且稳定地进行微调成为了一个关键问题。BOFT通过引入蝶形因子分解矩阵,巧妙地实现了参数的正交微调,从而在保证模型性能的同时,提升了训练的稳定性和泛化能力。 1. 微调的挑战与正交性的重要性 微调(Fine-tuning)作为一种常见的迁移学习方法,在预训练模型的基础上,利用目标任务的数据对模型参数进行调整,使其适应特定任务。然而,随着模型参数规模的增大,微调过程面临着诸多挑战: 灾难性遗忘(Catastrophic Forgetting): 在微调过程中,模型容易忘记在预训练阶段学到的知识,尤其是在目标任务与预训练任务差异较大时。 过拟合(Overfitting): 微调时使用的数据量通常远小于预训练数据,这使得模型容易过拟合目标任务的数据,导致泛化能力下降。 训练不稳定(Training Instability): 大规模模型的参数空间复杂,微调过程中参数的微小变化可能导致性能 …
继续阅读“BOFT(Butterfly Orthogonal Fine-Tuning):利用蝶形因子分解矩阵实现正交微调”
VeRA(Vector-based Random Matrix Adaptation):冻结随机投影矩阵仅训练缩放向量
VeRA (Vector-based Random Matrix Adaptation): 冻结随机投影矩阵仅训练缩放向量 大家好,今天我们要探讨一种高效的参数化技术,名为VeRA,全称Vector-based Random Matrix Adaptation。VeRA的核心思想是利用随机投影矩阵来降低模型的计算成本,同时只训练一个小的缩放向量,从而实现高效的模型微调和迁移学习。 1. 背景:参数化方法与效率挑战 在深度学习领域,参数化方法是构建模型、进行训练和部署的关键。随着模型规模的不断扩大,参数量也随之增加,这给计算资源和存储带来了巨大的挑战。例如,大型语言模型(LLM)拥有数十亿甚至数万亿的参数,训练和部署这些模型需要大量的GPU资源和时间。 传统的微调(Fine-tuning)方法需要更新所有模型参数,这在资源受限的环境下变得不可行。因此,近年来涌现出许多参数高效的微调方法,旨在只更新模型中的一小部分参数,同时保持甚至提高模型性能。 常见的参数高效微调方法包括: Adapter Layers: 在预训练模型中插入少量的可训练层(Adapter),只更新这些Adapter的参数 …
继续阅读“VeRA(Vector-based Random Matrix Adaptation):冻结随机投影矩阵仅训练缩放向量”
LoRA适配器的合并冲突:不同任务LoRA合并时的权重干扰与TIES-Merging解决方法
LoRA适配器的合并冲突:不同任务LoRA合并时的权重干扰与TIES-Merging解决方法 大家好,今天我们来深入探讨一个在大型语言模型(LLM)微调领域中日益重要的主题:LoRA适配器的合并,以及由此产生的权重干扰问题,并重点介绍一种有效的解决方案——TIES-Merging。 1. LoRA适配器的基本原理 在深入讨论合并冲突之前,我们先简单回顾一下LoRA(Low-Rank Adaptation)的核心思想。LoRA通过引入少量可训练的参数来适应下游任务,而无需修改预训练模型本身的大部分权重。具体来说,LoRA会在预训练模型的特定层(例如Transformer的注意力机制或MLP层)旁边添加两个低秩矩阵A和B,其维度分别为rxd和dxr,其中r << d,d是原始权重的维度。 在训练过程中,我们只更新A和B的权重,而原始预训练模型的权重保持不变。前向传播时,LoRA的输出会与原始模型的输出相加,如下所示: h = Wx + BAx 其中,W是原始预训练模型的权重,x是输入,h是最终的输出。 代码示例(PyTorch): import torch import tor …
QLoRA的双重量化(Double Quantization):对量化常数再次量化以节省显存的实现
QLoRA 的双重量化:对量化常数再次量化以节省显存的实现 大家好,今天我们要深入探讨 QLoRA 中一项至关重要的技术:双重量化。这项技术通过对量化常数进行再次量化,能够显著降低模型在微调期间的显存占用,使得在资源有限的环境下进行大规模语言模型的微调成为可能。 1. 背景:QLoRA 和量化 QLoRA (Quantization-aware Low-Rank Adaptation) 是一种高效的参数高效微调方法,它通过以下关键技术来实现显存节省: 4-bit NormalFloat (NF4) 量化: 将预训练模型的权重从 FP16 或 FP32 量化为 4-bit NF4 格式。NF4 是一种针对正态分布数据优化的量化格式,可以更好地保留模型的性能。 LoRA (Low-Rank Adaptation): 只训练少量(通常是低秩)的适配器参数,并将这些参数添加到冻结的预训练模型中。这大大减少了需要更新的参数数量。 分页优化器: 使用 NVIDIA unified memory 将优化器状态分页到 CPU 内存,从而释放 GPU 显存。 双重量化: 对量化常数进行再次量化,进一步减 …
MemoRAG:基于长期记忆模块的RAG系统设计以处理模糊与多跳查询
MemoRAG:构建基于长期记忆模块的RAG系统以处理模糊与多跳查询 大家好,今天我们来深入探讨一个颇具挑战性的RAG(Retrieval-Augmented Generation)系统设计——MemoRAG,它的核心目标是提升RAG系统在处理模糊和多跳查询时的性能。传统的RAG方法在面对这类复杂查询时,往往会遇到信息检索不准确、推理能力不足的问题,而MemoRAG试图通过引入长期记忆模块来解决这些问题。 1. RAG系统的局限性分析 在深入MemoRAG之前,我们先回顾一下传统RAG系统的基本流程以及其局限性。一个典型的RAG系统包含以下几个步骤: 查询编码(Query Encoding): 将用户query转换为向量表示。 信息检索(Information Retrieval): 在知识库中检索与查询相关的文档片段。 内容增强(Context Augmentation): 将检索到的文档片段作为上下文添加到原始查询中。 文本生成(Text Generation): 利用增强后的查询,通过语言模型生成最终答案。 虽然RAG系统在许多场景下表现出色,但它仍然面临一些挑战: 模糊性查询处 …
Embedding模型的Matryoshka Representation Learning:训练可变维度嵌入以适应不同存储需求
Matryoshka Representation Learning:训练可变维度嵌入以适应不同存储需求 各位同学,大家好!今天我们来深入探讨一个在嵌入模型领域颇具创新性的技术——Matryoshka Representation Learning (MRL)。它解决了一个现实问题:如何在保证模型性能的前提下,根据不同的存储和计算资源限制,灵活调整嵌入向量的维度。 1. 嵌入模型与维度困境 嵌入模型,例如Word2Vec、GloVe、BERT等,已经成为自然语言处理 (NLP) 和其他机器学习任务中不可或缺的工具。它们将离散的符号 (例如单词、图像、用户) 映射到连续的向量空间,从而使得相似的符号在向量空间中彼此靠近。这些嵌入向量捕捉了符号之间的语义和关系,为下游任务提供了强大的特征表示。 然而,这些模型的嵌入向量通常具有固定的维度。高维嵌入可以更好地捕捉复杂的语义信息,从而提高模型性能。但高维嵌入也带来了两个主要挑战: 存储成本: 存储大量高维嵌入向量需要大量的内存空间,这在资源受限的设备上 (例如移动设备、嵌入式系统) 是一个严重的限制。 计算成本: 在下游任务中使用高维嵌入向量进 …
继续阅读“Embedding模型的Matryoshka Representation Learning:训练可变维度嵌入以适应不同存储需求”
Rerank模型蒸馏:将Cross-Encoder的能力蒸馏至Bi-Encoder以降低重排序延迟
Rerank模型蒸馏:将Cross-Encoder的能力蒸馏至Bi-Encoder以降低重排序延迟 各位同学,大家好!今天我们要讨论一个在信息检索和自然语言处理领域非常重要的技术:Rerank模型蒸馏,以及如何利用它来将Cross-Encoder的强大能力迁移到Bi-Encoder,从而显著降低重排序过程中的延迟。 1. 引言:检索系统的瓶颈与Rerank的必要性 现代信息检索系统,例如搜索引擎和推荐系统,通常遵循一个两阶段的架构:召回(Retrieval)和重排序(Reranking)。 召回阶段: 负责从海量的文档库中快速筛选出与用户查询相关的候选文档集合。为了追求速度,召回阶段通常采用一些轻量级的模型,例如基于关键词匹配的BM25算法或者基于向量相似度的Bi-Encoder模型。 重排序阶段: 负责对召回阶段返回的候选文档进行更精确的排序,以便将最相关的文档排在前面。这个阶段通常采用更复杂的模型,例如Cross-Encoder,它可以更深入地理解查询和文档之间的关系。 虽然Cross-Encoder在精度上表现出色,但它的计算复杂度也更高。对于每个候选文档,Cross-Encod …
GraphRAG的社区检测:利用Leiden算法对知识图谱进行分层摘要生成的工程实现
好的,让我们开始吧。 GraphRAG中的社区检测:Leiden算法驱动的分层摘要生成 大家好,今天我们要深入探讨一个非常有趣且实用的主题:如何在GraphRAG(Graph-based Retrieval Augmented Generation)系统中利用社区检测算法,特别是Leiden算法,来进行知识图谱的分层摘要生成。这不仅能提升RAG系统的效率,也能让生成的内容更具结构性和相关性。 1. GraphRAG与知识图谱的简要回顾 首先,让我们快速回顾一下GraphRAG和知识图谱的概念。 GraphRAG: 是一种结合了图神经网络(GNN)和检索增强生成(Retrieval Augmented Generation)的架构。其核心思想是,利用图结构来表示知识,并利用图算法进行知识检索,然后将检索到的知识作为上下文信息,输入到大型语言模型(LLM)中,以生成更准确、更相关的回复。 知识图谱 (Knowledge Graph): 是一种结构化的知识表示形式,由实体(nodes)和关系(edges)组成。例如,“北京”和“中国”是实体,“位于”是它们之间的关系。知识图谱可以有效地存储和 …
Long Context vs RAG:在1M窗口下“迷失中间”(Lost-in-the-middle)现象的缓解策略
Long Context vs RAG:在1M窗口下“迷失中间”(Lost-in-the-middle)现象的缓解策略 各位早上好,今天我们来深入探讨一个在大型语言模型(LLM)领域日益重要的问题:长文本处理中的“迷失中间”(Lost-in-the-middle)现象,以及在1M上下文窗口下,如何利用Long Context模型和检索增强生成(RAG)来缓解这一现象。 1. 长文本处理的挑战:上下文窗口与“迷失中间” 近年来,LLM的发展日新月异,上下文窗口长度也呈指数级增长。最初的几百个token,发展到现在的几万甚至上百万token。理论上,更长的上下文窗口意味着模型可以处理更复杂、更依赖上下文的任务,例如: 长篇文档摘要: 提取长篇报告、论文或书籍的关键信息。 多轮对话: 记住对话历史,提供更连贯和个性化的回复。 代码生成: 理解大型代码库的结构和依赖关系,生成高质量的代码。 然而,实际应用中,我们发现LLM并非能够完美地利用所有上下文信息。一个显著的问题就是“迷失中间”现象。简单来说,模型在处理长文本时,往往更关注文本的开头和结尾部分,而忽略中间部分的内容。这意味着,即使关键信 …
继续阅读“Long Context vs RAG:在1M窗口下“迷失中间”(Lost-in-the-middle)现象的缓解策略”