标签: AI
-
长文本检索的突破:LoCoV1 基准测试和 M2-BERT 模型的最新进展
近年来,随着人工智能技术的飞速发展,长文本检索成为了一个备受关注的研究领域。传统的检索方法往往难以处理长文本,而新的模型和方法正在不断涌现,为我们提供了更强大的工具。今天,我们将介绍由斯坦福大学 Hazy Research 团队发布的最新成果:LoCoV1 长文本检索基准测试和 M2-BERT 模型的最新进展。
LoCoV1:一个更全面的长文本检索基准测试
在之前的一篇博文中,Hazy Research 团队曾向社区征求对长文本检索的需求。经过与研究人员和从业者的交流,他们发现法律、编程等领域对长文本检索有着迫切的需求。为了满足这些需求,他们构建了 LoCoV1 基准测试,它包含了来自法律、医学、科学、金融、公司治理、政府报告等多个领域的 12 个任务。
LoCoV1 基准测试使用了多个真实世界的数据集,包括 Tau Scrolls、QASPER、LongBench、Legal Case Reports 等。这些数据集的共同特点是:
- 更长、更复杂的查询和文档格式: LoCoV1 中的查询和文档往往包含大量信息,需要模型具备更强的理解能力才能进行有效的检索。
- 能够评估模型对长文本的处理能力: LoCoV1 的设计确保了查询和文档中包含了大量相关信息,能够有效地测试模型在长文本检索方面的性能。
Hazy Research 团队在 HuggingFace 上发布了 LoCoV1 的查询和文档,方便研究人员进行测试。
M2-BERT 模型的最新进展:更强大的长文本检索能力
为了更好地应对 LoCoV1 基准测试中的挑战,Hazy Research 团队对 M2-BERT 模型进行了微调,并发布了新的 M2-BERT-V2 模型。这些模型针对 128、2k、8k 和 32k 的输入 token 进行了优化,并可以在 HuggingFace 和 Together 平台上进行推理。
在 LoCoV1 基准测试上,M2-BERT-V2 模型的表现非常出色,甚至超过了更大规模的模型。例如,M2-BERT-80M-32k-Retrieval 模型在 LoCoV1 上取得了 95.2 的得分,超过了 4 倍大小的 E5-Mistral 模型和 85 倍大小的 OpenAI Ada 模型。
总结与展望
LoCoV1 基准测试和 M2-BERT 模型的最新进展,标志着长文本检索领域取得了新的突破。未来,Hazy Research 团队将继续探索如何将神经网络、词汇方法和混合方法相结合,进一步提升长文本检索的性能。
参考文献
Announcing LoCoV1 and the Latest M2-BERT Models · Hazy Research
-
斯坦福“雷猫”:GPU 性能的秘密武器
AI 计算需求与日俱增,如何让 GPU 充分发挥潜力成为一大难题。斯坦福大学的研究人员最近发布了一个名为“雷猫”(ThunderKittens)的工具,它可以显著提升 GPU 的运行效率,甚至比目前最快的 FlashAttention2 还要快 30%!
雷猫的秘密武器在于它对 GPU 硬件的深度理解。研究人员从“硬件实际需要什么?如何满足这些需求?”这两个问题出发,设计了一个嵌入式 CUDA DSL 工具。雷猫通过操作小型张量块(tile)来简化 AI 内核的编写,并充分利用张量核心、异步数据传输和共享内存等硬件特性。
H100:性能之王,如何榨干它的潜力?
研究人员以英伟达最新的 H100 GPU 为例,深入探讨了如何优化 GPU。H100 拥有 989 TFLOPs 的半精度矩阵乘法计算能力,但要充分发挥它的能力,关键是保持张量核心持续运算。
然而,要做到这一点并不容易。研究人员发现,H100 硬件具有一些特性,对于保持矩阵乘法的运行至关重要:
- WGMMA 指令: H100 引入了新的指令集 WGMMA,它允许 128 个线程跨 SM 所有子单元协作同步,并从共享内存及寄存器异步启动矩阵乘法。这些指令对于充分利用 H100 的计算能力是必不可少的,没有它们,GPU 的峰值利用率会损失 37%。
- 共享内存: 共享内存的延迟虽然看似不多,但对于高速运行的张量核心来说已经足够显著。此外,共享内存的存储单元独立,处理不当会导致 bank conflicts,显著拖慢内核速度。
- 地址生成: H100 的张量核心和内存速度极快,仅生成用于获取数据的内存地址就占用了芯片的大量资源。英伟达提供的张量内存加速器(TMA)可以异步提取张量的一部分,大大节省了地址生成的开销。
- 占用率: 占用率指的是 GPU 上同时调度的线程数。高占用率可以隐藏缺陷或同步问题,但一个设计良好的 pipeline 即使在占用率不高的情况下也能运行得相当快。
雷猫:小而精,性能大提升
为了更轻松地编写所需的内核类型,并充分发挥硬件的全部潜力,雷猫应运而生。它是一个嵌入在 CUDA 中的 DSL,包含四种模板类型:寄存器 tiles、寄存器向量、共享 tiles 和共享向量。雷猫提供了一系列操作来处理这些张量,既可在 warp 级别使用,也可用于多个 warp 协作。
雷猫的优势在于它的小而简单,功能有限,但它符合 AI 和硬件的发展趋势。研究人员认为,AI 的设计理念应该根据硬件特性进行重新定义,例如循环状态应该足够大以适应一个 SM,计算的密度应该不低于硬件的需求。
未来展望:AI 与硬件的深度融合
雷猫的出现,标志着 AI 和硬件深度融合的新方向。研究人员认为,未来需要利用对硬件的了解,设计与之匹配的 AI,从而进一步提升 GPU 的性能,释放 AI 的潜力。
雷猫的未来展望:
- 跨平台支持: 研究人员计划将雷猫扩展到 AMD 硬件平台,进一步扩大其应用范围。
- 更深度的硬件融合: 雷猫团队将继续研究如何更深入地利用 GPU 硬件特性,例如利用 H100 的分布式共享内存,以进一步提升性能。
- AI 设计理念的革新: 研究人员认为,未来 AI 的设计理念应该更加贴近硬件,例如循环状态的大小应该与 SM 的容量相匹配,计算密度应该不低于硬件的需求。
雷猫的出现,为 AI 计算领域带来了新的希望。通过深入理解硬件特性,并设计与之匹配的 AI,我们可以进一步提升 GPU 的性能,释放 AI 的潜力,为 AI 技术的进步贡献力量。
参考文献:
[1] https://hazyresearch.stanford.edu/blog/2024-05-12-tk
斯坦福大学的研究人员开发了一款名为“雷猫”的新工具,它被称为GPU性能的秘密武器。这个工具可以提高GPU的运行效率,比使用FlashAttention-2(FA2)还要快。通过使用雷猫,研究人员成功地将H100 GPU的性能提升了30%[1]。
以下是关于斯坦福“雷猫”工具的一些关键信息:
- 工具简介:
- 工具优势:
- 使用雷猫实现的注意力机制内核,代码量少且能实现很高的硬件利用率,性能超过直接使用底层库(如Cutlass)[1]。
- 雷猫可以帮助开发者相对简单地编写代码,充分利用张量核心、异步数据传输和共享内存等硬件特性[1]。
- H100 GPU的优化方法:
- H100 GPU是斯坦福研究人员探讨的一个例子,用于讨论GPU的优化方法[1]。
- H100 GPU具有80GB的HBM3内存、50MB的L2缓存和132个流式多处理器(SM)等硬件细节[1]。
- 为了充分发挥H100的计算能力,关键是保持张量核心持续运算[1]。
- 保持张量核心持续运算的注意事项:
- WGMMA指令是保持矩阵乘法运行的关键,但使用起来较为麻烦[1]。
- 共享内存的速度可能不如预期快,需要额外注意[1]。
- 生成地址的成本较高,需要注意控制[1]。
- 保持高占用率对于提升性能是有益的,寄存器至关重要[1]。
斯坦福大学的研究人员通过这项研究和开发的“雷猫”工具,成功提高了GPU的运行效率,为AI算力资源紧张的时代提供了一种新的解决方案。这项研究对于进一步优化GPU性能和提高AI算力的利用率具有重要意义。
Learn more:
- 斯坦福让“GPU高速运转”的新工具火了,比FlashAttention2更快创事记新浪科技_新浪网
- 斯坦福让”GPU高速运转”的新工具火了,比FlashAttention2更快 | 量子位
- 优化架构,降低频率,骁龙8gen2高性能、低功耗的秘密武器之一|高通|gpu|处理器|cpu|骁龙+移动平台_网易订阅
-
斯坦福新工具“雷猫”:让 GPU 性能飙升,比 FlashAttention2 更快!
AI 算力资源越来越紧张,如何让 GPU 充分发挥潜力成为一大难题。最近,斯坦福大学的研究人员发布了一个名为“雷猫”(ThunderKittens)的工具,它可以显著提升 GPU 的运行效率,甚至比目前最快的 FlashAttention2 还要快 30%!
雷猫的秘密武器在于它对 GPU 硬件的深度理解。研究人员从“硬件实际需要什么?如何满足这些需求?”这两个问题出发,设计了一个嵌入式 CUDA DSL 工具。雷猫通过操作小型张量块(tile)来简化 AI 内核的编写,并充分利用张量核心、异步数据传输和共享内存等硬件特性。
H100:性能之王,如何榨干它的潜力?
研究人员以英伟达最新的 H100 GPU 为例,深入探讨了如何优化 GPU。H100 拥有 989 TFLOPs 的半精度矩阵乘法计算能力,但要充分发挥它的能力,关键是保持张量核心持续运算。
然而,要做到这一点并不容易。研究人员发现,H100 硬件具有一些特性,对于保持矩阵乘法的运行至关重要:
- WGMMA 指令: H100 引入了新的指令集 WGMMA,它允许 128 个线程跨 SM 所有子单元协作同步,并从共享内存及寄存器异步启动矩阵乘法。这些指令对于充分利用 H100 的计算能力是必不可少的,没有它们,GPU 的峰值利用率会损失 37%。
- 共享内存: 共享内存的延迟虽然看似不多,但对于高速运行的张量核心来说已经足够显著。此外,共享内存的存储单元独立,处理不当会导致 bank conflicts,显著拖慢内核速度。
- 地址生成: H100 的张量核心和内存速度极快,仅生成用于获取数据的内存地址就占用了芯片的大量资源。英伟达提供的张量内存加速器(TMA)可以异步提取张量的一部分,大大节省了地址生成的开销。
- 占用率: 占用率指的是 GPU 上同时调度的线程数。高占用率可以隐藏缺陷或同步问题,但一个设计良好的 pipeline 即使在占用率不高的情况下也能运行得相当快。
雷猫:小而精,性能大提升
为了更轻松地编写所需的内核类型,并充分发挥硬件的全部潜力,雷猫应运而生。它是一个嵌入在 CUDA 中的 DSL,包含四种模板类型:寄存器 tiles、寄存器向量、共享 tiles 和共享向量。雷猫提供了一系列操作来处理这些张量,既可在 warp 级别使用,也可用于多个 warp 协作。
雷猫的优势在于它的小而简单,功能有限,但它符合 AI 和硬件的发展趋势。研究人员认为,AI 的设计理念应该根据硬件特性进行重新定义,例如循环状态应该足够大以适应一个 SM,计算的密度应该不低于硬件的需求。
未来展望:AI 与硬件的深度融合
雷猫的出现,标志着 AI 和硬件深度融合的新方向。研究人员认为,未来需要利用对硬件的了解,设计与之匹配的 AI,从而进一步提升 GPU 的性能,释放 AI 的潜力。
参考文献:
[1] https://hazyresearch.stanford.edu/blog/2024-05-12-tk
[2] https://github.com/HazyResearch/ThunderKittens
[3] https://news.ycombinator.com/item?id=40337936
斯坦福大学的研究人员最近发布了一个名为“雷猫”(ThunderKittens)的工具,它可以显著提升 GPU 的运行效率,比目前最快的 FlashAttention2 还要快30% [1]。雷猫是一个嵌入在 CUDA 中的 DSL 工具,通过操作小型张量块来简化 AI 内核的编写,并充分利用 GPU 硬件的特性,如张量核心、异步数据传输和共享内存等 [1]。
下面是关于雷猫和 GPU 性能提升的一些关键信息:
雷猫:GPU 性能提升的秘密武器
- 雷猫是一个嵌入在 CUDA 中的 DSL 工具,通过操作小型张量块来简化 AI 内核的编写,并充分利用 GPU 硬件的特性 [1].
- 雷猫提供了四种模板类型:寄存器 tiles、寄存器向量、共享 tiles 和共享向量,用于处理张量操作 [1].
- 雷猫的优势在于它的小而简单,功能有限,但符合 AI 和硬件的发展趋势 [1].
GPU 性能提升的关键因素
- GPU 硬件具有一些特性,对于保持矩阵乘法的运行至关重要 [1]:
- WGMMA 指令:H100 GPU 引入了新的指令集 WGMMA,允许线程跨 SM 所有子单元协作同步,并从共享内存及寄存器异步启动矩阵乘法 [1].
- 共享内存:共享内存的延迟对于高速运行的张量核心来说已经足够显著,处理不当会导致 bank conflicts,拖慢内核速度 [1].
- 地址生成:GPU 的张量核心和内存速度极快,但生成用于获取数据的内存地址占用了大量资源,张量内存加速器(TMA)可以异步提取张量的一部分,节省了地址生成的开销 [1].
- 占用率:高占用率可以隐藏缺陷或同步问题,但设计良好的 pipeline 即使在占用率不高的情况下也能运行得相当快 [1].
未来展望:AI 与硬件的深度融合
- 雷猫的出现标志着 AI 和硬件深度融合的新方向,未来需要利用对硬件的了解,设计与之匹配的 AI,进一步提升 GPU 的性能,释放 AI 的潜力 [1].
参考文献:
- 比标准Attention提速5-9倍,大模型都在用的FlashAttention v2来了 | 机器之心 [1]
- 斯坦福大学发布的ThunderKittens工具 [1]
- https://news.ycombinator.com/item?id=40337936 [1]
Learn more:
-
斯坦福“雷猫”:让 GPU 高速运转,比 FlashAttention2 还快!
AI 算力资源越来越紧张,如何提升 GPU 的运行效率成为了热门话题。斯坦福大学的研究人员近日推出了一个名为 ThunderKittens(暂且译为“雷猫”)的嵌入式 CUDA DSL 工具,它能显著提升 GPU 的性能,甚至比目前最快的 FlashAttention-2 还要快 30%。
“雷猫”的秘密武器:小型张量块
“雷猫”的强大之处在于它巧妙地利用了 GPU 的硬件特性。它将 AI 内核的编写简化,并充分利用底层硬件能力。具体来说,它主要抽象了寄存器和共享内存中的小型张量块(tile),这与目前 GPU 中对小矩阵乘法的优化相匹配。通过操作这些 tile,开发者可以相对简单地编写代码,充分利用张量核心、异步数据传输和共享内存等硬件特性。
H100:如何榨干它的潜力?
为了更好地理解“雷猫”的原理,我们以英伟达最新的 H100 GPU 为例。H100 拥有强大的计算能力,但要充分发挥它的潜力,需要克服一些挑战。
- WGMMA 指令:H100 引入了一套新的指令集,名为“warp group matrix multiply accumulate”。这些指令对于充分发挥 H100 的计算能力至关重要,但它们的使用也颇为复杂,需要精心控制内存请求的合并和避免 bank conflicts。
- 共享内存:共享内存的速度并不如预期快,使用时需要格外注意。处理不当可能会引发 bank conflicts,显著拖慢内核速度。
- 地址生成:生成地址的成本较高,特别是加入复杂的交错或重排模式时,这种情况更为明显。
- 占用率:保持高占用率对于提升性能是有益的,寄存器至关重要。
“雷猫”:简化代码,提升性能
为了解决这些挑战,斯坦福的研究人员开发了“雷猫”。它包含四种模板类型:寄存器 tiles、寄存器向量、共享 tiles 和共享向量。开发者可以使用这些模板类型和一系列操作来处理张量,并充分利用 GPU 的硬件特性。
“雷猫”的优势:
- 简化代码:使用“雷猫”编写的内核代码量更少,复杂性更低。
- 提升性能:“雷猫”可以显著提高 GPU 的硬件利用率,性能超过直接使用底层库(如 Cutlass)。
- 适应性强:“雷猫”作为一个嵌入到 CUDA 中的库,其提供的抽象层在遇到不支持的功能时能够很好地处理。
未来展望:
斯坦福的研究人员认为,小型张量块的设计理念符合 AI 和硬件的发展趋势。他们相信,未来会看到更多基于小型张量块的 AI 设计,以及硬件对小型矩阵乘法的支持。
总结:
“雷猫”是一个强大的工具,它可以帮助开发者更轻松地编写高效的 AI 内核,并充分发挥 GPU 的潜力。它不仅能提升 AI 模型的训练和推理速度,还能促进一系列高吞吐量应用的发展。
参考文献:
[1] https://hazyresearch.stanford.edu/blog/2024-05-12-tk
[2] https://github.com/HazyResearch/ThunderKittens
[3] https://news.ycombinator.com/item?id=40337936 -
联邦学习:保护隐私,共同进步
近年来,人工智能技术飞速发展,机器学习模型在各个领域都取得了显著成果。然而,传统的机器学习方法通常需要将所有数据集中到一个中央服务器进行训练,这可能会引发数据隐私和安全问题。为了解决这一问题,联邦学习应运而生。
联邦学习:数据不共享,模型共训练
通俗来说,联邦学习就像一群人共同学习一项技能,每个人都拥有自己的学习资料,但他们可以互相交流学习方法,最终共同提高技能水平。在联邦学习中,多个设备或数据源在不共享原始数据的情况下,共同训练模型以提高预测性能。
联邦学习的工作原理
联邦学习的工作方式可以概括为以下几个步骤:
- 初始化阶段: 中央服务器或云端会初始化一个全局模型。
- 本地训练: 参与方(本地设备)使用自己的本地数据集对全局模型进行训练,这个训练过程只在本地设备上进行,不会共享原始数据。
- 模型聚合: 参与方将训练得到的模型参数更新发送回中央服务器,中央服务器对这些参数进行聚合,得到一个新的全局模型。
- 迭代更新: 重复进行本地训练和模型聚合的过程,直到全局模型收敛到一个满意的状态。
联邦学习的优势
联邦学习的优势主要体现在以下几个方面:
- 数据隐私保护: 原始数据保留在本地,不需要共享,因此可以更好地保护数据隐私。
- 降低数据传输需求: 仅传输模型参数更新,而不是原始数据,从而减少了数据传输的需求。
- 适用于分布式数据: 适用于数据分布在不同地点或设备上的情况,如移动设备上的个人数据。
异构联邦学习:应对现实世界中的差异
联邦学习的核心理念是将模型训练分布在多个参与方之间,保护数据隐私的同时提高模型的整体性能。然而,现实世界中的数据分布、模型结构、通信网络和系统边缘设备存在很大差异,这些差异被称为异构性。
异构联邦学习的主要特点
异构联邦学习面临着以下几个方面的挑战:
- 异构数据: 参与方的数据可能来自不同的领域、行业或地区,具有不同的特征分布和属性。
- 异构计算能力: 不同参与方的计算能力可能不同,有些设备可能更强大,而其他设备可能计算资源有限。
- 异构通信环境: 不同参与方之间的通信环境也可能不同,有些设备可能具有较快的网络连接,而其他设备可能连接较慢。
- 异构模型: 不同参与方所希望用到的模型更加的本地化,因此不同参与方用到的模型有所差异。
异构联邦学习的分类
为了应对这些异构性,异构联邦学习采取了一些策略,并被分为以下三个层次:
- 数据层: 在客户端之间对数据进行操作,以减少局部数据的统计异质性或提高数据隐私。
- 模型层: 在模型层面设计的操作,例如共享部分模型结构和模型优化。
- 服务器层: 服务器级方法需要服务器的参与,例如参与客户端选择或客户端聚类。
数据层方法
数据层方法主要包括数据准备和数据隐私保护。数据准备包括数据收集、过滤、清洗、增强等操作,可以缓解统计异质性。数据隐私保护则通过数据加密、扰动和匿名化等技术来保护客户端数据的隐私。
模型层方法
模型层方法主要包括联邦优化、跨模型的知识转移和架构共享。联邦优化通过正则化、元学习和多任务学习等技术来提高模型的适应性。跨模型的知识转移则通过知识蒸馏和迁移学习等技术来实现模型之间的协作。架构共享则通过共享部分模型结构来提高模型的效率。
服务器层方法
服务器层方法主要包括客户端选择和客户端聚类。客户端选择是指选择合适的客户端参与训练,以提高模型的性能。客户端聚类则是将具有相似特征的客户端进行分组,以提高训练效率。
未来方向
异构联邦学习仍然面临着许多挑战,未来研究方向包括:
- 提高通信效率: 探索更有效的通信策略,减少通信开销。
- 联邦公平性: 保证不同参与方在联邦学习过程中的公平性。
- 隐私保护: 设计更强大的隐私保护机制,防止数据泄露。
- 攻击鲁棒性: 提高联邦学习系统对攻击的抵抗能力。
- 统一基准: 建立统一的基准数据集和测试框架,方便不同方法的比较和评估。
总结
联邦学习是一种新兴的机器学习技术,它能够在保护数据隐私的前提下,实现分布式模型训练。异构联邦学习则进一步考虑了现实世界中数据和计算环境的差异,为联邦学习在实际应用中提供了更强大的支持。随着研究的不断深入,联邦学习将为人工智能技术的发展带来新的机遇。
参考文献
[1] Heterogeneous Federated Learning: State-of-the-art and Research Challenges. https://arxiv.org/abs/2112.10542
-
SiLu:深度学习中的“平滑”激活函数
近年来,深度学习领域取得了飞速发展,各种新技术层出不穷。其中,激活函数作为神经网络中不可或缺的一部分,也得到了广泛的研究和应用。SiLu 激活函数,也称为 Swish 激活函数,便是近年来备受关注的激活函数之一。它由 Google Brain 在 2017 年首次提出,并逐渐在深度学习模型中崭露头角。
SiLu:Sigmoid 和 ReLU 的“完美结合”
SiLu 激活函数的数学表达式为:f(x) = x * sigmoid(x),其中 sigmoid(x) 是标准的 Sigmoid 函数。简单来说,SiLu 函数将 Sigmoid 函数与线性函数相结合,既保留了 Sigmoid 函数的平滑特性,又具备 ReLU 函数的线性特性。
那么,SiLu 究竟有哪些优势呢?
- 无上界有下界: 与 ReLU 函数不同,SiLu 函数在负数部分仍然有输出,避免了 ReLU 函数在负数部分梯度为零的问题,有效缓解了梯度消失问题。
- 平滑: SiLu 函数在整个定义域内都具有导数,这使得它在训练过程中更加平滑,更容易进行优化。
- 非单调: 与 ReLU 函数相比,SiLu 函数是非单调的,这使得它能够更好地拟合非线性数据。
SiLu 的应用:从 YOLOv5 到更广阔的未来
SiLu 激活函数在深度学习领域已经展现出了强大的应用潜力。例如,在 YOLOv5 等目标检测模型中,SiLu 激活函数被广泛应用,并取得了优异的效果。
为什么 SiLu 能够在深度学习模型中取得成功呢?
- 缓解梯度消失问题: SiLu 函数在负数部分仍然有输出,避免了梯度消失问题,使得模型能够更有效地学习深层特征。
- 提升模型性能: SiLu 函数的平滑特性和非单调特性,使得模型能够更好地拟合复杂的数据分布,从而提升模型的性能。
结语
SiLu 激活函数作为一种新型的激活函数,展现出了其独特的优势,并逐渐成为深度学习领域的重要工具。未来,随着深度学习技术的不断发展,SiLu 激活函数有望在更多领域发挥重要作用,推动深度学习技术的进一步发展。
参考文献
[1] SiLu 激活函数解释_silu 函数 -CSDN 博客
[2] [CV – Image Classification] 图像分类之激活函数 SiLU – YOLOv7 使用的激活函数 – 知乎
[3] [杂记] 激活函数 SiLU 和 Swish 的区别 -CSDN 博客 -
超越相似性:基于复合聚合的个性化联邦推荐
近年来,联邦推荐(FR)作为一种新兴的设备端学习范式,在学术界和工业界都引起了广泛关注。现有的联邦推荐方法通常采用不同的协同过滤模型作为本地模型,并通过各种聚合函数来获得一个全局推荐器,遵循基本的联邦学习(FL)原则。例如,一项开创性的工作是 FCF,它通过执行本地更新和使用联邦优化进行全局聚合,对集中式矩阵分解进行了改进。此外,FedNCF 将矩阵分解的线性与深度嵌入技术的非线性相结合,建立在 FCF 的基础之上。这些基于嵌入的联邦推荐模型有效地平衡了推荐准确性和隐私保护。
然而,现有的联邦推荐方法主要利用联邦视觉领域中发明的聚合函数来聚合来自相似客户端的参数,例如聚类聚合。尽管这些方法取得了相当大的性能,但我们认为直接将它们应用于联邦推荐并非最佳选择。这主要体现在模型结构的差异上。与联邦视觉中的卷积神经网络等结构化参数不同,联邦推荐模型通常采用一对一的项目嵌入表来进行区分。这种差异导致了嵌入偏差问题,即在聚合过程中不断更新已训练的嵌入,而忽略了未训练的嵌入,从而无法准确预测未来的项目。
为了解决这个问题,我们提出了一种基于复合聚合的个性化联邦推荐模型(FedCA),它不仅聚合了相似客户端以增强已训练的嵌入,还聚合了互补客户端以更新未训练的嵌入。此外,我们将整个学习过程转化为一个统一的优化算法,以共同学习相似性和互补性。在多个真实数据集上的大量实验证明了我们提出的模型的有效性。
嵌入偏差问题:联邦推荐的独特挑战
联邦推荐模型通常使用一个嵌入表来存储所有项目的表示,每个客户端只训练与自己交互过的项目的嵌入。当使用传统的相似性聚合方法时,会发生嵌入偏差问题:已训练过的项目的嵌入会不断得到优化,而未训练过的项目的嵌入则保持不变甚至退化。这导致模型在预测用户未来可能感兴趣的项目时,由于缺乏对未训练项目信息的了解,效果不佳。
FedCA:基于复合聚合的个性化联邦推荐
为了解决嵌入偏差问题,我们提出了 FedCA 模型,它采用了一种复合聚合机制,同时考虑了模型相似性和数据互补性。
- 模型相似性: FedCA 聚合来自相似客户端的模型,以增强已训练的项目的嵌入。
- 数据互补性: FedCA 聚合来自互补客户端的模型,以更新未训练的项目的嵌入。
FedCA 使用一个统一的优化框架来共同学习相似性和互补性。通过这种方式,FedCA 能够更有效地聚合项目嵌入,从而提高模型的预测准确性和泛化能力。
实验结果
我们对四个基准数据集进行了实验,包括 Movielens-100K. Filmtrust、Movielens-1M 和 Microlens-100K。实验结果表明,FedCA 在所有数据集上都优于其他基线模型,包括 FCF、FedAvg、PerFedRec、FedAtt、FedFast、pFedGraph 和 PFedRec。此外,我们还进行了消融实验,验证了模型相似性和数据互补性在 FedCA 中的有效性。✅
总结
本文首先重新思考了联邦视觉和联邦推荐任务之间的根本差异。具体来说,联邦视觉领域主要利用结构化参数(例如卷积神经网络)进行联邦优化,而联邦推荐任务主要采用一对一的项目嵌入表进行个性化推荐。这种关键差异导致了从联邦视觉领域借鉴的基于相似性的聚合方法在聚合嵌入表时无效,从而导致嵌入偏差问题。为了解决上述挑战,我们提出了一种专门针对联邦推荐任务的复合聚合机制。具体来说,通过在一个统一的优化框架内结合模型相似性和数据互补性,我们的方法增强了客户端已交互过的项目的训练嵌入,并优化了客户端未交互过的项目的非训练嵌入。这使得能够有效地预测未来的项目。此外,我们还探讨了近端项在联邦推荐任务中对个性化偏好的无效性,并提出了一种插值方法来缓解联邦推荐中的空间错位问题。
这项研究特别提出了一种很有前景的联邦推荐任务复合聚合框架。它是一个与模型无关的即插即用模块,可以无缝集成到主流联邦推荐模型中。然而,在这项工作中,我们需要手动调整相似性和互补性的权重分配。这些局限性可以通过在未来的研究中使用自动机器学习技术来自适应地学习权重分配来缓解。此外,探索更适合联邦推荐任务的模型相似性和数据互补性机制也是一个很有前景的研究方向。
参考文献
[1] Hongzhi Yin, Liang Qu, Tong Chen, Wei Yuan, Ruiqi Zheng, Jing Long, Xin Xia, Yuhui Shi, and Chengqi Zhang. On-device recommender systems: A comprehensive survey. arXiv preprint arXiv:2401.11441, 2024.
[2] Karan Singhal, Hakim Sidahmed, Zachary Garrett, Shanshan Wu, John Rush, and Sushant Prakash. Federated reconstruction: Partially local federated learning. In NeurIPS, pages 11220–11232, 2021.
[3] Canh T Dinh, Nguyen Tran, and Josh Nguyen. Personalized federated learning with moreau envelopes. In NeurIPS, pages 21394–21405, 2020.
[4] Muhammad Ammad-Ud-Din, Elena Ivannikova, Suleiman A Khan, Were Oyomno, Qiang Fu, Kuan Eeik Tan, and Adrian Flanagan. Federated collaborative filtering for privacy-preserving personalized recommendation system. arXiv preprint arXiv:1901.09888, 2019.
[5] Honglei Zhang, Fangyuan Luo, Jun Wu, Xiangnan He, and Yidong Li. LightFR: Lightweight federated recommendation with privacy-preserving matrix factorization. ACM Trans. Inf. Syst., 41(4):1–28, 2023.
[6] Lin Ning, Karan Singhal, Ellie X Zhou, and Sushant Prakash. Learning federated representations and recommendations with limited negatives. arXiv preprint arXiv:2108.07931, 2021.
[7] Andrew Hard, Kanishka Rao, Rajiv Mathews, Swaroop Ramaswamy, Françoise Beaufays, Sean Augenstein, Hubert Eichner, Chloé Kiddon, and Daniel Ramage. Federated learning for mobile keyboard prediction. arXiv preprint arXiv:1811.03604, 2018.
[8] Yehuda Koren, Robert Bell, and Chris Volinsky. Matrix factorization techniques for recommender systems. Computer, 42(8):30–37, 2009.
[9] Xiangnan He, Lizi Liao, Hanwang Zhang, Liqiang Nie, Xia Hu, and Tat-Seng Chua. Neural collaborative filtering. In The Web Conference, pages 173–182, 2017.
[10] Brendan McMahan, Eider Moore, Daniel Ramage, Seth Hampson, and Blaise Aguera y Arcas. Communication-efficient learning of deep networks from decentralized data. In AISTAT, pages 1273–1282, 2017.
[11] Khalil Muhammad, Qinqin Wang, Diarmuid O’Reilly-Morgan, Elias Tragos, Barry Smyth, Neil Hurley, James Geraci, and Aonghus Lawlor. Fedfast: Going beyond average for faster training of federated recommender systems. In SIGKDD, pages 1234–1242, 2020.
[12] Vasileios Perifanis and Pavlos S Efraimidis. Federated neural collaborative filtering. Knowl.-Based Syst., 242:1–16, 2022.
[13] Zhiwei Li, Guodong Long, and Tianyi Zhou. Federated recommendation with additive personalization. In ICLR, 2024.
[14] Wei Yuan, Liang Qu, Lizhen Cui, Yongxin Tong, Xiaofang Zhou, and Hongzhi Yin. Hetefedrec: Federated recommender systems with model heterogeneity. In ICDE, 2024.
[15] Bingyan Liu, Yao Guo, and Xiangqun Chen. Pfa: Privacy-preserving federated adaptation for effective model personalization. In The Web Conference, pages 923–934, 2021.
[16] Shaoxiong Ji, Shirui Pan, Guodong Long, Xue Li, Jing Jiang, and Zi Huang. Learning private neural language modeling with attentive aggregation. In IJCNN, pages 1–8, 2019.
[17] Avishek Ghosh, Jichan Chung, Dong Yin, and Kannan Ramchandran. An efficient framework for clustered federated learning. In NeurIPS, pages 19586–19597, 2020.
[18] Sichun Luo, Yuanzhang Xiao, and Linqi Song. Personalized federated recommendation via joint representation learning, user clustering, and model adaptation. In CIKM, pages 4289–4293, 2022.
[19] Xin Xia, Hongzhi Yin, Junliang Yu, Qinyong Wang, Guandong Xu, and Quoc Viet Hung Nguyen. On-device next-item recommendation with self-supervised knowledge distillation. In SIGIR, pages 546–555, 2022.
[20] Chunxu Zhang, Guodong Long, Tianyi Zhou, Peng Yan, Zijian Zhang, Chengqi Zhang, and Bo Yang. Dual personalization on federated recommendation. In IJCAI, 2024.
[21] Jinze Wu, Qi Liu, Zhenya Huang, Yuting Ning, Hao Wang, Enhong Chen, Jinfeng Yi, and Bowen Zhou. Hierarchical personalized federated learning for user modeling. In The Web Conference, pages 957–968, 2021.
[22] Tian Li, Anit Kumar Sahu, Manzil Zaheer, Maziar Sanjabi, Ameet Talwalkar, and Virginia Smith. Federated optimization in heterogeneous networks. In MLSys, pages 429–450, 2020.
[23] Liam Collins, Hamed Hassani, Aryan Mokhtari, and Sanjay Shakkottai. Exploiting shared representations for personalized federated learning. In ICML, pages 2089–2099, 2021.
[24] Filip Hanzely, Slavomír Hanzely, Samuel Horváth, and Peter Richtárik. Lower bounds and optimal algorithms for personalized federated learning. In NeurIPS, pages 2304–2315, 2020.
[25] Xinrui He, Shuo Liu, Jacky Keung, and Jingrui He. Co-clustering for federated recommender system. In The Web Conference, pages 3821–3832, 2024.
[26] Rui Ye, Zhenyang Ni, Fangzhao Wu, Siheng Chen, and Yanfeng Wang. Personalized federated learning with inferred collaboration graphs. In ICML, pages 39801–39817, 2023.
[27] Guibing Guo, Jie Zhang, and Neil Yorke-Smith. A novel bayesian similarity measure for recommender systems. In IJCAI, pages 2619–2625, 2013.
[28] F Maxwell Harper and Joseph A Konstan. The movielens datasets: History and context. ACM Trans. Interact. Intell. Syst., 5(4):1–19, 2015.
[29] Ellango Jothimurugesan, Kevin Hsieh, Jianyu Wang, Gauri Joshi, and Phillip B Gibbons. Federated learning under distributed concept drift. In IJCAI, pages 5834–5853, 2023.
[30] Alexander Kraskov, Harald Stögbauer, and Peter Grassberger. Estimating mutual information. Phys. Rev. E, 69(6):1–16, 2004.
[31] Steven Diamond and Stephen Boyd. Cvxpy: A python-embedded modeling language for convex optimization. J. Mach. Learn. Res., 17(83):1–5, 2016.✅
[32] Lorenzo Minto, Moritz Haller, Benjamin Livshits, and Hamed Haddadi. Stronger privacy for federated collaborative filtering with implicit feedback. In RecSys, pages 342–350, 2021.
[33] Badih Ghazi, Noah Golowich, Ravi Kumar, Pasin Manurangsi, and Chiyuan Zhang. Deep learning with label differential privacy. In NeurIPS, pages 27131–27145, 2021.
[34] Elan Rosenfeld, Ezra Winston, Pradeep Ravikumar, and Zico Kolter. Certified robustness to label-flipping attacks via randomized smoothing. In ICML, pages 8230–8241, 2020.
[35] Yongxin Ni, Yu Cheng, Xiangyan Liu, Junchen Fu, Youhua Li, Xiangnan He, Yongfeng Zhang, and Fajie Yuan. A content-driven micro-video recommendation dataset at scale. arXiv preprint arXiv:2309.15379, 2023.
[36] Andriy Mnih and Russ R Salakhutdinov. Probabilistic matrix factorization. NeurIPS, 2007.
[37] Christos Boutsidis, Anastasios Zouzias, and Petros Drineas. Random projections for k-means clustering. NeurIPS, 2010.
[38] David Goldberg, David Nichols, Brian M Oki, and Douglas Terry. Using collaborative filtering to weave an information tapestry. Commun. ACM, 35(12):61–70, 1992.
[39] Matthias Feurer, Aaron Klein, Katharina Eggensperger, Jost Springenberg, Manuel Blum, and Frank Hutter. Efficient and robust automated machine learning. In NeurIPS, 2015.
-
DJL Serving: 轻松部署你的深度学习模型
你是否还在为如何将训练好的深度学习模型部署到生产环境而烦恼?传统的部署方式往往需要复杂的配置和维护,而且难以扩展。现在,DJL Serving 为你提供了一个简单、高效、可扩展的解决方案!
DJL Serving 是一个基于 DJL 的高性能通用模型服务解决方案,它可以将你的深度学习模型轻松部署为 HTTP 服务,方便其他应用程序调用。
DJL Serving 的优势
- 通用性: 支持多种深度学习框架,包括 PyTorch、TensorFlow、MXNet、ONNX、TensorRT 等等。
- 高性能: 利用多线程推理,在单一 JVM 中实现高吞吐量,性能优于市场上的大多数 C++ 模型服务器。
- 易用性: 开箱即用,无需复杂的配置。
- 可扩展性: 支持插件机制,方便扩展功能。
- 自动伸缩: 根据负载自动调整工作线程数量,保证服务稳定性。
- 动态批处理: 支持动态批处理,提高吞吐量。
- 模型版本控制: 支持加载不同版本的模型,方便迭代更新。
- 多引擎支持: 支持同时服务来自不同引擎的模型。
安装 DJL Serving
你可以通过以下方式安装 DJL Serving:
- macOS: 使用 Homebrew 安装:
brew install djl-serving
- Ubuntu: 使用
dpkg
安装:
curl -O https://publish.djl.ai/djl-serving/djl-serving_0.27.0-1_all.deb sudo dpkg -i djl-serving_0.27.0-1_all.deb
- Windows: 下载 zip 文件并解压:
curl -O https://publish.djl.ai/djl-serving/serving-0.27.0.zip unzip serving-0.27.0.zip
- Docker: 使用 Docker 镜像运行:
docker run -itd -p 8080:8080 deepjavalibrary/djl-serving
使用 DJL Serving
DJL Serving 可以通过命令行启动,并提供 RESTful API 用于模型推理和管理。
启动 DJL Serving:
djl-serving --help
REST API:
- 推理 API: 用于客户端调用模型进行推理。
- 管理 API: 用于添加、删除和扩展模型。
默认情况下,DJL Serving 监听端口 8080,仅允许本地访问。你可以修改配置文件以允许远程访问。
扩展 DJL Serving
DJL Serving 支持插件机制,你可以开发自己的插件来扩展功能。
总结
DJL Serving 是一个强大的模型服务解决方案,它能够帮助你轻松部署和管理深度学习模型,并提供高性能和可扩展性。无论你是初学者还是经验丰富的开发者,DJL Serving 都能满足你的需求。
更多信息:
DJL Serving 架构揭秘:模型服务背后的秘密
DJL Serving 是一款功能强大的模型服务解决方案,它将你的深度学习模型转化为可供其他应用程序访问的 HTTP 服务。但你是否好奇它背后的运作机制?本文将带你深入了解 DJL Serving 的架构,揭开模型服务背后的秘密。
四层架构:协同运作,高效服务
DJL Serving 的架构可以大致分为四层:
- 前端 (Frontend): 负责接收和管理来自客户端的请求。它使用 Netty 框架构建,并包含多个 HTTP 请求处理器,分别处理推理 API、管理 API 以及其他插件提供的 API。
- 工作流 (Workflows): 用于组合多个模型和代码片段,形成执行计划。它通过
workflow.json
文件定义,描述了模型的调用顺序和数据流向。 - 工作负载管理器 (WorkLoadManager,WLM): 负责管理工作线程,支持批处理和请求路由。它可以独立使用,并提供工作线程扩展功能。
- 模型管理器 (ModelManager): 负责加载和管理模型,根据配置在启动时加载指定模型。
各层职责:紧密合作,高效执行
- 前端: 接收来自客户端的请求,并根据请求类型选择相应的处理器。例如,推理 API 请求会传递给 WorkLoadManager,管理 API 请求则会传递给 ModelManager。
- 工作流: 定义模型的执行顺序和数据流向,并协调各个模型的调用。它可以包含多个模型,并通过代码片段连接它们,形成完整的推理流程。
- 工作负载管理器: 管理工作线程,将请求分配给不同的工作线程进行处理。它支持动态批处理,根据负载自动调整工作线程数量,并提供模型版本控制功能。
- 模型管理器: 负责加载和管理模型,根据配置在启动时加载指定模型,并提供模型版本控制功能。
深入 WLM:高效管理工作线程
WLM 是 DJL Serving 的核心组件,它负责管理工作线程,并确保模型推理的高效执行。
- 工作线程池: WLM 为每个模型创建独立的工作线程池,每个线程池包含多个工作组。
- 工作组: 每个工作组对应一个特定的设备,例如 CPU 或 GPU。同一个模型可以在不同的设备上创建多个工作组,以充分利用硬件资源。
- 工作线程: 每个工作组包含多个工作线程,每个线程负责执行模型推理任务。
- 自动伸缩: WLM 支持自动伸缩功能,根据负载动态调整工作线程数量,保证服务稳定性。
- 模型预测器: 每个工作线程包含一个 DJL 模型预测器,它负责执行模型推理。预测器支持多种模型引擎,例如 PyTorch、TensorFlow、XGBoost 等。
Python 引擎:灵活扩展,无缝集成
DJL Serving 还支持 Python 引擎,允许你使用 Python 代码编写模型预处理、后处理逻辑,甚至直接调用 Python 模型。
- 独立进程: 每个工作线程拥有独立的 Python 进程,确保代码执行的隔离性。
- 灵活调用: 通过 Python 预测器 (PyPredictor) 可以方便地调用 Python 进程,执行预处理、后处理或模型推理。
总结:高效、灵活、可扩展
DJL Serving 的架构设计体现了高效、灵活、可扩展的原则,它能够满足各种深度学习模型部署需求,并提供强大的性能和可靠性。
更多信息:
希望本文能够帮助你更好地理解 DJL Serving 的架构,并为你的模型部署提供参考。
-
用Java玩转深度学习:DJL实战指南
深度学习模型大多用Python开发,而服务端却多用Java,导致许多开发者不得不使用Java调用Python接口,效率低下且不够优雅。更糟糕的是,如果想在Android上进行推理,就必须使用Java。
别担心!现在,我们可以用Java直接进行深度学习了!DJL(Deep Java Library)是一个强大的开源深度学习框架,它支持模型构建、训练、推理,甚至在Android上运行。本文将带你深入了解DJL,并通过一个实战案例,教你用Java加载PyTorch模型进行图片分类。
DJL:Java深度学习的利器
DJL 的出现,为Java开发者打开了深度学习的大门。它提供了一套简洁易用的API,让Java开发者能够轻松地构建、训练和部署深度学习模型。
DJL 的优势:
- Java 开发: 使用熟悉的 Java 语言进行深度学习开发,无需学习其他语言。
- 跨平台支持: 支持 Windows、Linux、macOS 和 Android 等多种平台。
- GPU 加速: 支持 GPU 加速,提升模型训练和推理速度。
- 模型兼容性: 支持多种深度学习框架,包括 PyTorch、TensorFlow 和 MXNet。
DJL 核心 API 解密
DJL 的核心 API 包括 Criteria、Translator 和 NDArray,它们共同构成了深度学习模型的构建和操作基础。
1. Criteria:模型的定义
Criteria 类对象定义了模型的属性,例如模型路径、输入和输出类型等。
Criteria<Input, Output> criteria = Criteria.builder() .setTypes(Input.class, Output.class) // 定义输入和输出数据类型 .optTranslator(new InputOutputTranslator()) // 设置输入输出转换器 .optModelPath(Paths.get("/var/models/my_resnet50")) // 指定模型路径 .optModelName("model/resnet50") // 指定模型文件前缀 .build(); ZooModel<Image, Classifications> model = criteria.loadModel();
这段代码定义了一个名为 “resnet50” 的模型,并加载了它。
2. Translator:数据转换桥梁
Translator 接口定义了如何将自定义的输入输出类转换为 Tensor 类型。
private Translator<Input, Output> translator = new Translator<Input, Output>() { @Override public NDList processInput(TranslatorContext ctx, Input input) throws Exception { return null; } @Override public Output processOutput(TranslatorContext ctx, NDList ndList) throws Exception { return null; } };
Translator 接口包含两个方法:
- processInput: 将输入类对象转换为 Tensor。
- processOutput: 将模型输出的 Tensor 转换为自定义类。
3. NDArray:Tensor 操作的利器
NDArray 类类似于 Python 中的 NumPy 数组,它提供了丰富的 Tensor 操作功能。
NDManager ndManager = NDManager.newBaseManager(); // 创建 NDManager 对象 NDArray ndArray = ndManager.create(new Shape(1, 2, 3, 4)); // 创建一个 Shape 为 (1, 2, 3, 4) 的 Tensor
DJL 提供了多种 NDArray 操作,例如:
- 创建 NDArray
- 变更数据类型
- 运算(加减乘除)
- 切片
- 赋值
- 翻转
实战:用 DJL 加载 PyTorch 模型进行图片分类
下面,我们将使用 PyTorch 提供的 ResNet18 模型进行图片分类。
步骤:
- 引入依赖: 在项目的 pom.xml 文件中添加 DJL 的依赖。
- 导出 PyTorch 模型: 使用 Python 将 ResNet18 模型保存为 TorchScript 模型。
- 创建 Translator: 定义输入为图片路径,输出为类别。
- 定义 Criteria: 定义模型路径、输入输出类型和 Translator。
- 实例化模型: 使用 Criteria 加载模型。
- 创建 Predictor: 使用模型创建 Predictor 对象。
- 进行预测: 使用 Predictor 对图片进行分类。
代码示例:
// ... (引入依赖) // 创建 Translator Translator<String, String> translator = new Translator<String, String>() { @Override public NDList processInput(TranslatorContext ctx, String input) throws Exception { // ... (读取图片,进行预处理) return new NDList(ndArray); } @Override public String processOutput(TranslatorContext ctx, NDList list) throws Exception { // ... (获取预测结果) return index + ""; } }; // 定义 Criteria Criteria<String, String> criteria = Criteria.builder() .setTypes(String.class, String.class) .optModelPath(Paths.get("model/traced_resnet_model.pt")) .optOption("mapLocation", "true") .optTranslator(translator) .build(); // 实例化模型 ZooModel model = criteria.loadModel(); // 创建 Predictor Predictor predictor = model.newPredictor(); // 进行预测 System.out.println(predictor.predict("test/test.jpg"));
最终输出:
258
258 对应的类别为 Samoyed(萨摩耶),说明预测成功。
总结
DJL 为 Java 开发者提供了强大的深度学习能力,让我们能够使用 Java 语言进行模型构建、训练和推理。本文通过一个简单的图片分类案例,展示了如何使用 DJL 加载 PyTorch 模型进行预测。
参考文献:
希望本文能够帮助你快速入门 DJL,并开始你的 Java 深度学习之旅!