- 博客(964)
- 资源 (37)
- 收藏
- 关注
原创 Docker卷挂载:为何不同路径指向同一份文件
在Docker容器化场景中,我们常遇到这样的现象:两个容器挂载同一个命名卷到不同路径(例如容器A挂载到/app,容器B挂载到/analyzer),但双方对文件的修改会实时同步。这背后的本质可以用和来解释。
2025-03-04 17:35:08
1100
原创 Graph-Augmented Reasoning: Evolving Step-by-Step Knowledge Graph Retrieval for LLM Reasoning
A: 本文的核心内容是提出了一种名为**图增强推理(Graph-Augmented Reasoning)**的新范式,旨在通过逐步检索和利用结构化的知识图谱(KGs)来增强大型语言模型(LLMs)的推理能力,特别是在处理复杂推理任务时。该方法特别适用于资源受限的小规模LLMs,无需额外训练即可提升其推理性能。
2025-03-04 14:35:17
812
原创 为什么传统注意力机制的位置编码会“混在K中”
传统注意力机制把位置编码“混在K中”,像中世纪的手抄本,虽然古朴但效率低下。而RoPE、MLA等新技术,正在像印刷术一样革新模型的地理感知能力。或许未来,AI不仅能分清“猫在树上”,还能写出《百年孤独》般恢弘的篇章——只要我们不让它再当“路痴”。思考题:如果你的生活被混入错误的位置编码(比如每天上班走错工位),会发生什么?欢迎在评论区脑洞大开!
2025-02-27 14:31:39
740
原创 为什么 JSON 不能序列化 set
JSON(JavaScript Object Notation)作为一种广泛使用的数据交换格式,虽然功能强大,但它无法直接序列化set类型。本文将从设计原理、实现限制和实际应用角度,探讨这一现象的原因及解决方案。
2025-02-22 17:46:19
307
原创 推理加速trick之:Multi-Token Prediction(MTP)
是一种用于加速推理的技巧,特别适用于自回归模型(autoregressivemodels)的生成任务。传统自回归解码:生成文本时,模型逐个token地生成,每个token的生成都依赖于之前生成的结果。这种方法尽管准确,但非常慢,因为每次生成都需要进行完整的前向计算。:通过推测未来的多个token,提前生成一部分候选结果,然后在这些候选结果中进行验证或修正,从而减少逐步生成的次数。通过预测多个token提供更密集的训练信号,提高上下文建模能力,从而提升模型性能。
2025-01-20 15:10:59
1418
原创 GPU-L4 GPU-T4 GPU-4090 GPU-P100 GPU-H100 GPU-H800
GPU型号特点总结适用人群L4最新Ada架构,低功耗,适合AI推理和视频处理,支持AV1。云服务提供商、流媒体平台、AI推理服务开发者T4较老的Turing架构,功耗低,适合边缘部署和通用推理任务。中小型AI推理应用、边缘计算开发者4090消费级旗舰GPU,适合高性能AI训练和推理,也适合游戏和3D渲染。游戏开发者、个人深度学习开发者P100Pascal架构,适合科学计算和传统深度学习训练,但无AI推理优化。科学研究人员、高性能计算用户。
2025-01-20 11:29:17
1569
原创 理解 Python ProcessPoolExecutor 的序列化问题:为什么线程锁(threading.Lock)会导致异常?
通过本文的分析,我们可以看到,ProcessPoolExecutor 的序列化机制是 Python 多进程中一个重要但容易被忽视的细节。当任务中涉及不可序列化的对象(如 threading.Lock)时,程序可能会表现为任务提交失败或直接抛出异常。
2024-12-18 17:53:42
739
原创 python的中‘a‘为什么占用50个字节
单个字符 ‘a’ 在 Python 中占用 50 字节,主要是因为 Python 的字符串对象有较大的头部开销。这包括引用计数、类型信息、长度等元数据,而字符本身只占用 1 字节。对于优化内存占用,可以考虑使用 bytes 或操作更长的字符串以分摊头部开销。
2024-12-11 14:32:12
1055
原创 git合并提交为什么有两个父提交,撤销时一般要选择哪一个呢
我在master分支将dev分支合并进来了,需要撤销这一次的合并,要怎么操作呢,直接执行git commit revert 提示如下:因为合并必然涉及两个分支,撤销合并就需要选择保留哪个分支; 当A与B合并成D,撤销D就需要告知是保留父分支A还是保留父分支B-m 参数用于指定合并提交的父提交,告诉 Git 在撤销合并时应该以哪个父提交为基准。合并提交通常有两个父提交:需要明确选择保留哪个父提交的内容。合并提交的两个父提交的作用合并提交的两个父提交用于表示合并的来源和目标:举例:假设你在分支 mai
2024-11-29 13:00:53
1055
原创 为什么模块级别的实例只会被加载一次
Python通过模块缓存机制确保模块级别的实例只会被加载一次。模块缓存:使用sys.modules字典缓存已经导入的模块。模块查找路径:使用sys.path列表确定模块的查找路径。模块加载:首次导入时,创建模块对象并执行模块代码。后续导入:直接返回缓存的模块对象,不会重新执行模块代码。这种机制确保了模块级别的实例在内存中是唯一的,避免了重复初始化和资源浪费。
2024-11-25 12:56:11
712
原创 探索 Python 字典的奥秘:Future 对象为何能成为字典的键?
Python 字典的强大在于其哈希表实现,而 Future 对象之所以能成为字典的键,是因为它们的可哈希性和身份不变性。即使在内存重用的情况下,Python 也能通过哈希值和相等性检查来确保字典的正确性。
2024-11-19 16:17:58
365
原创 探索 MongoDB 的奇幻世界:路由、分片与节点的三重奏
MongoDB 的路由、分片和节点就像是数据世界中的三重奏,默默地为你处理复杂的任务,让你专注于业务逻辑的实现。希望这篇博客能让你对 MongoDB 的这些特性有更深入的理解,并在你的项目中自信地使用它们。记住,数据的魔法世界永远在等待着你去探索!
2024-10-29 19:24:03
1241
原创 vae与ae的区别
为了更好地理解变分自编码器(VAE)和自编码器(AE)的区别,让我们通过一个具体的例子来说明。假设我们正在处理一个手写数字图像数据集,如 MNIST。
2024-10-13 15:34:34
1182
原创 BPE(Byte Pair Encoding)和BBPE(Byte-Level Byte Pair Encoding)的区别
BPE:在字符级别操作,适合处理标准字符集的文本。BBPE:在字节级别操作,能够处理多语言文本和特殊字符,适合需要处理多种编码的场景。通过这些例子,可以看到BPE和BBPE在处理文本时的不同之处,以及它们各自的适用场景。
2024-10-11 16:23:24
631
原创 DPO vs RLHF:AI训练的“速食竞技场“
在AI训练的美食世界里,DPO和RLHF就像快餐和精致料理。它们各有特色,关键是要根据你的"胃口"(需求)和"预算"(资源)来选择。“DPO快餐香又脆,RLHF细品味悠长。智选其一助AI飞,终得美味慰芳心。准备好开始你的AI美食之旅了吗?无论你选择DPO的快捷还是RLHF的精致,记住,最终目标是让你的AI模型成为一个让人赞不绝口的"数字大厨"!
2024-09-26 12:20:05
454
原创 大模型训练的“减肥秘籍“:用损失斜率配比你的数据餐单
简单来说,损失斜率就像是模型学习的"热情指数"。斜率大,说明模型对这块数据兴趣高涨,学得飞快;斜率小,可能是模型已经把这块数据嚼烂了,或者觉得这数据难嚼得很。现在,让我们用一个生动的例子来说明这个过程:想象你在教一只聪明的狗狗学新技能。有些动作狗狗学得快(高斜率),有些则需要更多时间(低斜率)。我们的目标是让狗狗以最快速度掌握所有技能,同时不浪费时间在已经学会的动作上。
2024-09-26 12:04:06
328
原创 Python中的列表:当内置遇上类型提示
代码清晰度:使用类型提示让你的代码意图更加明确。错误预防:静态类型检查可以在运行前捕获潜在的类型错误。兼容性:同时使用list和List可以兼顾不同Python版本和各种工具。性能平衡:运行时检查保证了执行效率,而类型提示不会影响运行时性能。记住,在Python的世界里,list和List就像是一对相辅相成的双胞胎。善用它们,你的代码不仅会更加清晰,还能避免许多潜在的错误。下次当你在代码中看到它们时,别忘了向这对双胞胎打个招呼!
2024-08-29 20:10:53
490
1
原创 当线程遇到超时:用 func_timeout 优雅地说再见
真正地终止超时的线程,而不是让它们在后台继续运行。更好地控制程序的执行时间,提高效率。优雅地处理超时情况,不让一个任务拖累整个程序。记住,在编程世界里,时间就是金钱,效率就是生命。善用 func_timeout,让你的程序不再"迷路",准时"回家"。下次当你的程序遇到那些顽固的、不愿意结束的线程时,别忘了召唤 func_timeout 这个法力无边的"线程终结者"。它会帮你把那些超时的线程送入温柔的离别之乡,让你的程序再次风驰电掣!记住,在编程的世界里,有时候说再见,是为了更好的相遇。
2024-08-27 10:57:38
1482
原创 探索 LoRA-GA:低秩适配与梯度近似的完美结合
LoRA-GA 是一种结合了低秩适配(LoRA)和梯度近似(GA)的技术。它的核心思想是通过引入低秩矩阵来减少需要更新的参数数量,从而降低计算和存储成本。同时,LoRA-GA 通过梯度近似技术确保低秩矩阵的更新方向与全参数矩阵的更新方向尽可能一致,从而提高模型的适应性和训练效率。LoRA-GA 通过结合低秩适配和梯度近似技术,有效地提高了模型微调的效率和性能。与原始的 LoRA 技术相比,LoRA-GA 在减少计算和存储成本的同时,能够更快地收敛,并且在相同的训练时间内达到更低的损失值和更高的准确率。
2024-08-14 14:52:41
1170
2
原创 探索 MongoDB 的 $currentDate:解决 TTL 时间不同步问题的利器
currentDate 是 MongoDB 的一个更新操作符,用于将指定字段的值设置为当前日期和时间。它的作用类似于你在 Python 中调用 datetime.now(),但更强大的是,它确保时间戳是由 MongoDB 服务器生成的,而不是客户端。这意味着,无论你的客户端时钟有多么不靠谱,MongoDB 都能保证时间的一致性。通过使用 $currentDate 操作符,我们可以确保时间戳是由 MongoDB 服务器生成的,从而避免了客户端和服务器之间的时间不同步问题。
2024-08-14 09:27:02
536
原创 探索 Pluggy 插件系统:未注册插件时返回空列表的奥秘
在 Python 的世界里,插件系统是一个强大的工具,能够让我们的代码更加模块化和可扩展。而 Pluggy 作为一个灵活的插件管理框架,正是我们实现这一目标的利器。然而,当我们在使用 Pluggy 时,可能会遇到一些令人困惑的现象,比如未注册插件时返回空列表。今天,我们就通过一个具体的代码实例来揭开这个谜团。
2024-08-12 19:58:49
314
原创 探索Transformer中的多头注意力机制:如何利用GPU并发
首先,什么是多头注意力机制?简单来说,它是Transformer模型的核心组件之一。它通过并行计算多个注意力头(attention heads),使模型能够从不同的表示子空间中捕捉不同的特征。想象一下,你有八只眼睛,每只眼睛都能看到不同的东西,这样你就能更全面地理解世界。
2024-08-07 09:47:13
793
原创 线程不安全的那些事儿
这段代码的目标很简单:我们创建了一个共享变量 counter,然后启动100个线程,每个线程都对 counter 进行100,000次递增操作。理论上,最终的 counter 值应该是100 * 100,000 = 10,000,000,对吧?什么?10,000,000变成了100,040?这到底是怎么回事?
2024-07-31 09:13:29
392
原创 保存模型可训练参数的正确姿势:state_dict vs named_parameters
今天我们来聊聊一个看似简单但却容易踩坑的主题:如何正确保存模型的可训练参数。你可能会问:“这有什么难的?直接用 model.state_dict() 不就行了吗?” 哦,朋友,事情可没那么简单!
2024-07-24 15:15:37
825
原创 递归锁与普通锁的区别
在多线程编程中,锁是一种机制,用来确保某些代码块在同一时间只能被一个线程执行。想象一下,你和你的朋友们都想同时进入一个只有一把椅子的房间。为了避免混乱,你们需要一个锁来控制进入的顺序。
2024-07-16 14:27:02
447
原创 缓存与锁:让你的Python代码不仅能飞且安全
通过结合 cachetools 的 cachedmethod 装饰器、TTLCache 和 threading.Lock,我们实现了线程安全且带有过期时间的类方法缓存。这样,你的代码不仅跑得更快,还能在多线程环境中稳如泰山。
2024-07-10 20:44:20
584
原创 深入浅出:MongoDB中的背景创建索引
想象一下,你正忙于将成千上万的数据塞入你的MongoDB数据库中,你的用户期待着实时的响应速度。此时,你突然想到:“嘿,我应该给这些查询加个索引!” 没错,有了索引,查询速度将大大提升。但问题是,创建索引需要时间,而这段时间里,你的数据库性能可能会有所下降。该怎么办呢?别急,让我向你介绍一种神奇的操作——背景创建索引。
2024-06-27 09:49:24
731
原创 mongo使用投影(projection)的作用
投影在MongoDB中是一个非常有用的功能,通过它你可以控制查询结果中返回的字段,从而减少数据传输量,提高查询效率,并简化数据处理逻辑。在使用mongo时大脑需要有这样的意识,即投影的存在;理论和使用方法都可以从GPT4获得;
2024-05-30 09:26:27
1063
原创 RuntimeError: “LayerNormKernelImpl“ not implemented for ‘Half‘
另一方面,GPU,尤其是NVIDIA的一些较新的GPU,如支持Tensor Cores的V100、A100等,专门设计了硬件加速FP16运算,这使得它们在处理这种数据类型时非常高效。相对于GPU,CPU在处理FP16计算方面通常要缓慢得多,因为它们可能需要将这些数值转换回FP32来进行计算,然后再转换回FP16来存储。它通常用于深度学习模型,因为它可以减少模型的内存占用,并可能在支持FP16计算的GPU上加速模型的训练和推理。如果你希望在CPU上进行推理,通常需要将模型转换回FP32精度。
2024-04-25 11:22:46
504
原创 vim中粘贴代码片段出现每行新增缩进的解决方法-set paste
set paste准备复制一段代码到Linux服务器上的vim文件中,效果如下:
2024-04-25 09:16:07
1173
1
原创 pulsar存在大量消费未ack的原因
某产品灰度上线后,从pulsar服务端监控发现存在一种现象:消费但未ack的信息不断增加,直到3000左右就稳定下来了且消费速度为0,但不清楚这3000是怎么来的,因为代码是消费到立马ack的;
2024-04-01 13:03:05
782
原创 Temperature&Top-k&Top-p
在语言模型中使用温度(temperature)这个参数是为了控制文本生成过程中的随机性和可预测性。这个概念来自于统计力学中的温度概念,在那里它用来描述系统的熵(或随机性)水平。在语言模型中,输出概率分布上的温度参数用于调整选择下一个词的多样性。pwsoftmaxTlogp利用温度参数,模型能够在生成预测的词时权衡探索(尝试新的、不太可能的词)和利用(选择最可能的词)之间的平衡。在实际应用中,根据语境和应用场景的要求,可以调节温度参数,以产生合适的输出文本。
2024-03-31 22:27:48
1134
原创 深入探秘Python生成器:揭开神秘的面纱
想象一下,您掌握了一种魔法,在代码世界里,您可以轻松呼唤出一个整数。然而,事情并不总是看起来那样简单。表面上,这段代码看起来像是在进行一个简单的问候和返回神秘数字1的仪式。这个不是预期中的整数!而是一种被称为生成器的强大生物。那么,这是如何发生的呢?
2024-03-31 11:44:26
565
原创 (生成器)yield与(迭代器)generator
外部的 while True 循环将会导致无限循环,但不是因为 yield_test() 函数内部的逻辑,而是因为外部循环每次迭代都重新创建了一个新的生成器对象。可以忽略掉yield_test内部执行逻辑,从外部调用来看,while会一直执行yield_test方法,永远都不会有终止的时候。
2024-03-26 20:20:24
777
原创 当模型足够大时,Bias项不会有什么特别的作用
阅读OLMo论文时,发现有如下一段话:加上前面研究llama和mistral结构时好奇为什么都没有偏置项了。
2024-03-14 09:54:29
1442
原创 python导入的缓存机制
logger文件main文件中调用会执行print语句输出: load logger然后执行子进程每个子进程都会有from app.internal.component.logger import logger但没有执行print语句,且Logger.info打印的日志也没有输出。
2024-03-13 20:49:48
636
Training deep network without learningrate coinbet
2018-11-14
stacked Denoise autoencoder learning useful representation
2018-11-14
深度学习+tf
2018-11-14
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人