- 博客(38)
- 资源 (1)
- 收藏
- 关注
原创 NCCL N卡通信机制
转自我的博客:https://shar-pen.github.io/2025/05/05/torch-distributed-series/nccl_communication/
2025-05-11 17:25:38
774
原创 MNIST DDP 分布式数据并行
转自我的个人博客:https://shar-pen.github.io/2025/05/04/torch-distributed-series/3.MNIST_DDP/DDP使用的是多进程multiprocessingDP 使用的是多线程(multithreading)Python 有个限制叫 GIL(Global Interpreter Lock):DDP 的多进程模式就天然绕开了 GIL,每个进程有独立的 Python 解释器和 GIL,不会互相争抢锁。所以执行速度更快、效率更高、更适合大模型和多 GP
2025-05-11 17:23:59
819
原创 MNIST 数据并行 Data Parallel - DP
用DP情况下虽然循环里每次的 batch 大小还是一样的, 但模型 forward 确实将 batch / len(device_ids), 原来 512 的 batch 变为 256, 两个卡上各自有一个模型分别跑了 1 / len(device_ids) 的数据。模型输出(outputs)来自多个子 GPU,但会 在主卡上 gather,因为 torch.nn.DataParallel 的默认行为是把所有子 GPU 的输出,gather 回主 GPU(device[0])。数据并行 vs. 模型并行。
2025-05-11 17:23:39
593
原创 MNIST 手写数字分类
转自我的个人博客: https://shar-pen.github.io/2025/05/04/torch-distributed-series/1.MNIST/
2025-05-11 17:21:49
947
原创 使用json_repair修复大模型的json输出错误
有些 LLM 在返回格式正确的 JSON 数据时会有些问题,有时会漏掉括号,有时会在数据中添加一些单词。不至于这种错误每次都要丢弃,再次生成太浪费时间了,因此能修复错误时还是要尽量修复。这就是的主要目的:修复 LLM 在生成 json 数据时的错误。
2025-04-21 20:38:28
648
原创 图谱三元组信息提取-Open IE
Open Information Extraction (Open IE) 是一种自然语言处理技术,旨在从文本中自动提取结构化的事实或信息,而不依赖于特定的领域或预定义的关系。它的核心目标是从非结构化的文本中提取出简洁、易于理解的事实三元组(如:subject-predicate-object 结构)。这种方法通常用于从大规模文本中自动抽取信息,并为数据分析、知识图谱构建、问答系统等任务提供支持。
2025-02-21 14:42:57
323
原创 SFT数据指令评估-2.基于困惑度的5种指标(微调白盒模型)
白盒大模型最基础的指标就是困惑度 perplexity (PPL)。低 PPL 表示模型对输出序列 y 的概率分布预测更精确,模型对数据的“困惑”更低。高 PPL 表示模型对输出序列 y 的概率分布预测不准确,困惑程度较高。同时 PPL 是长度归一化的,可以避免直接受到长度的影响。
2025-02-19 21:39:06
751
原创 SFT数据指令评估-1.AlpaGasus/基于强大模型直接评估数据
这种情况下一般指的是文本理解能力很强的黑盒api大模型,如chatgpt。这种情况下,大模型对文本理解不会有什么大的问题,因此对于嵌套数据也能理解,例如我让大模型执行指令微调数据打分,以一个任务的prompt和output为输入。小模型可能会对这种包含了两个指令的文本理解错误,强模型基本能理解。因此,可以以强模型来直接对指令微调数据进行打分。
2025-02-19 16:41:25
687
原创 变相提高大模型上下文长度-RAG文档压缩-3.优化map-reduce(reranker过滤+社区聚类)
我遇到的业务问题实际上是RAG需要处理很多同一对象的日常报告,不像常识类问题,它的相关Document更多而且更分散,日常报告代表数据库里有很多它的内容,而且对象可能只在段落中的几句话提及到。top-k数量受限于大模型长度,目前是top-10/15,明显一个月的情况都没法正常枚举,而且上下文中也有很多无关内容,既会干扰大模型又会占着token,所以必需对上下文进行过滤,到这一步后再压缩下文本。我的方法主要灵感来自于map-reduce总结方法,主要由于它可以并行处理的优点,利用小模型做简单任务。
2025-02-15 23:10:44
860
原创 变相提高大模型上下文长度-RAG文档压缩-2.带早停机制的map-refine
我试过用map-refine方法来精炼上下文,由于它是线性的,运行时间随着文档数量线性增长。所以可以考虑通过判断上下文是否可以满足QA来提前结束过程。
2025-02-15 22:39:19
242
原创 RAG评估方法RAGAS的langchain实现-4
原理:Context Relevance 指标用于评估一个回答的句子是否受到提供的上下文支持,以及上下文是否受到回答的支持。
2025-02-13 11:47:15
405
原创 RAG评估方法RAGAS的langchain实现-3
djj12345djTop1d1d11d10,即前两个文档命中结果的平均值。比如Top210/20.5ScoreN1∑i1NTopi∗di。
2025-02-12 22:51:49
747
1
原创 RAG评估方法RAGAS的langchain实现-2
指标原理通过大语言模型(LLM)根据给定答案生成多个潜在问题,将这些问题与原始问题进行相似度计算,利用相似度均值来衡量答案和原始问题的契合程度,进而评估回答相关性。具体计算方式为AR1n∑i1nsimqqiARn1∑i1nsimqqi,其中ARARAR是答案相关性得分,nnn是生成的潜在问题数量,simqqisimqqi是原始问题qqq与生成的潜在问题qiq_{i}qi的相似度。
2025-02-12 13:52:21
897
原创 变相提高大模型上下文长度-RAG文档压缩-1.常识
之前遇到一个问题,公司大模型的长度不长,而且业务需要RAG返回不少的相关内容。通常RAG都是取top-10/15,文档由于长度限制不能太多,加上embedding效果不佳,返回的文档不多也不能保证都相关。我们考虑到返回的文档中真正能被用于求解的文本可能只占总文本的一部分,其他无关部分只会影响大模型,而且会占用上下文长度。因此我们对RAG文档进行问题相关的总计/query-focused summarization,一方面可以过滤无关内容,另一方面让文本更助于大模型回答问题。
2025-02-11 23:16:35
892
原创 RAG评估方法RAGAS的langchain实现-1
指标原理:忠实度指标用于评估生成回答是否忠于提供的上下文信息。从回答中提取陈述:将回答拆解为多个可验证的原子化陈述。在上下文中验证陈述:检查这些陈述是否可以从上下文信息推导得出。计算忠实度得分:忠实度得分是可验证陈述的比例。背景原因:生成式模型可能会生成幻觉,即回答中包含超出提供上下文的信息。忠实度指标可以帮助检测这种情况,确保模型回答与上下文一致,提高模型的可靠性。解析回答:使用 LLM 提取回答中的关键陈述。验证陈述:使用 LLM 判断每个陈述是否可以在上下文中得到支持。计算评分。
2025-02-11 23:07:12
721
原创 langchain教程-12.Agent/工具定义/Agent调用工具/Agentic RAG
除了 LangChain 提供的内置工具外,你还可以定义和使用自己的自定义工具。为此,可以使用模块提供的@tool装饰器将一个函数转换为工具。@tool 装饰器: 这个装饰器允许你将一个函数转换为工具。它提供了各种选项来定制工具的行为。使用方法在函数上方应用@tool装饰器。根据需要设置装饰器参数。使用这个装饰器,你可以轻松地将常规 Python 函数转换为强大的工具,从而实现自动化文档生成和灵活的接口创建。@tool@tool定义GoogleNews。
2025-02-06 22:42:03
1135
原创 langchain教程-10.Reranker/文档重排序
我没有在 langchain 上找到基于 api 的 reranker 类,xinference有,它能部署embedding和reranker,也有对应的类来调用接口。只是对文档压缩, 现在起到过滤作用。对检索到的结果进行重新排序。
2025-02-06 22:35:58
715
原创 langchain教程-9.Retriever/检索器
是一种文档检索系统,它利用向量存储根据文档的向量表示来进行搜索。这种方法使得基于相似度的搜索变得高效,特别适用于处理非结构化数据。一旦向量数据库创建完成,就可以使用检索方法,如和,加载并查询数据库,从中搜索相关的文本。方法允许你将一个向量数据库转换为一个检索器,从而实现从向量库中高效地搜索和检索文档。方法允许你配置高级检索策略,如和。
2025-02-06 22:34:05
1326
原创 langchain教程-8.VectorStore/向量数据库存储和检索
是专门设计的数据库,用于通过向量表示(嵌入)来和信息。它们通常用于通过识别语义相似的内容而非依赖精确的关键词匹配,来搜索非结构化数据,如文本、图像和音频。
2025-02-06 22:32:55
1924
原创 langchain教程-6.TextSplitter/文档切分
是通过将文本按指定的分隔符拆分成多个块来进行切分的。separator:首先,会按照用户指定的分隔符(如换行符、空格、逗号等)拆分文本。分隔符可以是一个简单的字符串,也可以是一个正则表达式。chunk_size:每个生成的块会被限制在一个最大大小(chunk_size)内,超出这个大小的文本会被分割成新的块。:为了保持上下文的连贯性,可以在相邻块之间保持一定的字符重叠。重叠的字符数由参数指定,通常用来避免分割导致的上下文丢失。chunk_sizechunk_size创建separator。
2025-02-06 22:30:53
1213
原创 langchain教程-5.DocumentLoader/多种文档加载器
该系列教程的代码: https://github.com/shar-pen/Langchain-MiniTutorial我主要参考 langchain 官方教程, 有选择性的记录了一下学习内容这是教程清单用于存储一段文本及其相关元数据的类。metadata是一个用于从加载Document的类。CSVLoaderJSONLoaderTextLoader可以观察到,这种方法作为一个 async_generator工作。它是一种特殊类型的异步迭代器,能够值,而不需要一次性将所有值存储在内存中。
2025-02-06 22:29:08
1100
原创 langchain教程-4.model/vllm模型部署和langchain调用
该系列教程的代码: https://github.com/shar-pen/Langchain-MiniTutorial我主要参考 langchain 官方教程, 有选择性的记录了一下学习内容这是教程清单。
2025-02-06 22:28:05
421
原创 langchain教程-3.OutputParser/输出解析
是一个用于将语言模型的输出转换为结构化信息的类。它能够提供清晰且有组织的格式化信息,而不仅仅是简单的文本响应。通过使用此类,您可以将语言模型的输出转换为特定的数据模型,使其更易于处理和利用。 主要依赖于两个核心方法:1. 2. 以下是一个使用 Parser 简化流程的示例当不使用 output parser(PydanticOutputParser) 时,需要对数据类型和访问方式自定义使用 PydanticOutputParser当提供类似上述的电子邮件内容时,我们将使用以下以 Pydanti
2025-02-06 22:25:58
1032
原创 langchain教程-2.prompt
Prompt 模板对于生成动态且灵活的提示至关重要,可用于各种场景,例如会话历史记录、结构化输出和特定查询。在本教程中,我们将探讨创建对象的方法,应用部分变量,通过 YAML 文件管理模板,并利用和等高级工具来增强功能。
2025-02-06 22:24:54
1437
原创 LightRAG 简单使用教程
我只展示了和gpt不同的地方,主要是换了LLM和embedding的调用方式,但我在个人电脑上使用ollama很慢,主要在LLM调用方面,半小时完成了不到20个chunk的图谱提取,embedding速度还行。我自己主要用的deepseek的api,但也试过本地部署的xinference,虽然模型自己调用没问题,但lightrag调用时会出现500gateway错误,试了qwen和chatglm都一样,但同时部署的embedding模型没出现问题。4.问答,它提供了多种维度的问答方式,含义就不说了。
2024-11-27 16:31:36
4926
3
原创 VLLM快速部署大模型 单卡/多卡
本人之前试过Xinference和Ollama,这两个遇到了因为其他软件不兼容或者无安装软件权限导致安装失败,vllm是python包,不需要安装软件所以更方便。
2024-11-20 00:43:26
2268
原创 Prompt tuning/P-tuning/指令微调
训练大型预训练语言模型非常耗时且计算密集。随着模型规模的不断扩大,人们对更高效的训练方法的兴趣逐渐增加,比如使用提示(prompting)。提示技术通过包含描述任务或甚至示例任务的文本提示,来调整一个冻结的预训练模型以适应特定的下游任务。通过提示,您可以避免为每个下游任务完全训练一个独立的模型,而是使用同一个冻结的预训练模型。这种方法更为简单,因为可以使用同一个模型处理不同的任务,而只需训练并存储少量的提示参数,效率远高于训练模型的全部参数。提示微调(Prompt Tuning)本质上是一种加性微调技术。
2024-10-29 20:42:49
2435
1
原创 Embedding模型训练/sentence transformer
类似微调LLM,微调embedding模型也是为了提高在自己数据域上的效果。sentence transformer本质上在transformers的基础上包装了方法。因此用起来相当简洁。
2024-10-15 23:48:58
1073
原创 BUG: 加载部分sentence transformers模型报错HFValidationError: Repo_id must be in the form repo_name
解释:以bge-m3为例,除了常见的config.json、pytorch_model.bin等等外还需要下载1_Pooling文件夹,里面包含了一个config.json,这是sentence transformers模型中的pooling层。虽然还能正常加载,没有报错HFValidationError,但实际pooling层因为缺少config.json会创建新层。个人觉得是由于all-MiniLM-L6-v2有考虑到这种情况的异常处理,而bge-m3没有,就直接报错了。
2024-10-13 22:37:53
2178
原创 re-ranker应用
re-ranker的作用就是在retriever过滤部分数据后,再将query和corpus的内容融合计算相似度,像bert一样,用attention综合两个句子的信息,而retriever仅需要计算query/corpus的embedding,因此re-ranker的时间复杂度更高,但也能显著的提高检索结果。
2024-10-13 21:59:17
467
原创 Embedding模型/sentence transformers应用
在RAG中,我们需要检索与query相关的文本段,通常都是两阶段实现,一阶段利用retriever来进行初步筛选,二阶段利用reranker重新对筛选结果进行排序,其中reranker通常能更好的得到更高质量的文本段,当然这建立在reranker更高的计算成本和更少的数据对象上(仅限初步筛选结果)。retriever是用于将文本降维成连续空间的向量值(即embedding),进而计算文本相似度的。
2024-10-13 21:39:22
1740
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人