当前位置: 首页 > article >正文

Google Cloud Dataflow 背后的流式处理模型

原文towardsdatascience.com/the-stream-processing-model-behind-google-cloud-dataflow-0d927c9506a0?sourcecollection_archive---------3-----------------------#2024-04-27在无界数据处理中的正确性、延迟和成本平衡https://medium.com/vutrinh274?sourcepost_page---byline--0d927c9506a0--------------------------------https://towardsdatascience.com/?sourcepost_page---byline--0d927c9506a0-------------------------------- Vu Trinh·发表于 Towards Data Science ·14 分钟阅读·2024 年 4 月 27 日–https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/7d2d4818f0ca3e0538f82f7b4d3ded71.png图片由作者创建。本文最初发布于https://vutr.substack.com。目录在我们继续之前论文中的介绍。Dataflow 模型的细节。模型的实现与设计。简介Google Dataflow是一个完全托管的数据处理服务提供无服务器统一的流式和批量数据处理。当处理流式数据工作负载时它是 Google 推荐的首选服务。该服务承诺无论工作负载多大都能确保正确性和延迟。为了实现这些特性Google Dataflow 基于一个专用的处理模型——Dataflow该模型源自 Google 多年来的研究和开发。本文是我在阅读论文后做的笔记The Dataflow Model: A Practical Approach to Balancing Correctness, Latency, and Cost in Massive-Scale, Unbounded, Out-of-Order Data Processing。如果你想深入了解流式处理我强烈推荐这篇论文。它包含了 Google 在引入 Dataflow 模型以应对其全球规模的流式数据处理需求过程中获得的所有经验和见解。尽管这篇论文写于 2015 年但我相信它的贡献永不过时。注意本文发表于 2015 年因此一些细节可能已经发生变化或更新。如果你有任何反馈或能够补充我博客内容的信息欢迎评论。在我们继续之前为了避免更多的混淆Dataflow是谷歌的流处理模型。Apache Beam允许用户基于 Dataflow 模型定义处理逻辑。Google Cloud Dataflow是来自 Google Cloud 的统一处理服务你可以认为它是 Apache Beam 管道的目标执行引擎。工作流你可以使用 Apache Beam 定义统一的处理逻辑并决定将管道运行在你想要的执行引擎上比如 Google Dataflow、Spark、Flink等。在深入探索 Dataflow 模型之前以下几节将介绍一些背景信息、挑战和概念。论文简介在论文撰写时像MapReduce及其“亲戚”如Hadoop、Pig、Hive或Spark等数据处理框架允许数据消费者大规模处理批量数据。在流处理方面像MillWheel、Spark Streaming或Storm等工具也开始支持用户。然而这些现有模型在一些常见的用例中并未满足要求。考虑一个例子一个视频流媒体提供商的商业收入来自于向广告商收费费用是根据广告观看量来计算的。他们想知道每天应向每个广告商收费多少并汇总关于视频和广告的统计数据。此外他们还希望对大量历史数据进行离线实验。他们希望了解他们的视频被观看的频率和时长以及观看这些视频的内容/广告和观众的群体。所有这些信息都必须快速提供以便在接近实时的情况下调整他们的业务。处理系统还必须简单且灵活以适应业务的复杂性。他们还需要一个能够处理全球规模数据的系统因为互联网使公司能够接触到比以往更多的客户。以下是谷歌一些人关于当时数据处理系统状况的观察批处理系统如MapReduce,FlumeJava(谷歌内部技术)以及 Spark 无法确保延迟 SLA因为它们需要等待所有数据输入适配到批处理后才能进行处理。提供可扩展性和容错性的流处理系统在表达力或正确性方面有所不足。许多系统无法提供精确一次语义这会影响正确性。其他系统缺乏进行窗口处理所需的基本操作或提供的窗口语义仅限于基于元组或处理时间的窗口例如Spark Streaming*大多数基于事件时间窗口的实现依赖于排序或具有有限的窗口触发条件。MillWheel 和 Spark Streaming 足够可扩展、容错性强且低延迟但缺乏高级编程模型。他们总结了上述所有模型和系统的主要弱点是假设无界输入数据最终会完成。当面对今天庞大且高度无序的数据时这种方法已经不再合理。他们还认为任何解决多样化实时工作负载的方法必须提供简单但强大的接口以根据特定的使用场景平衡正确性、延迟和成本。从这个角度来看本文对统一流处理模型做出了以下概念性贡献允许在无界、无序的数据源上计算事件时间顺序事件发生时的结果并提供正确性、延迟和成本属性的可配置组合。在四个相关维度上分离管道实现正在计算哪些结果它们在事件时间中的计算位置。当它们在处理时间期间被具体化时早期结果如何与后续改进相关将数据处理的逻辑抽象与底层物理实现层分离允许用户选择处理引擎。在本博客的其余部分我们将看到 Google 如何促进这一贡献。在我们进入下一部分之前最后提一点Google 指出“这个模型没有什么神奇之处。” 这个模型并不会让你计算量大的任务突然加速它提供了一个通用框架允许简单表达并行计算这并不依赖于像 Spark 或 Flink 这样的特定执行引擎。无界/有界https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/b600c3a3d1d9b71e57545ed30fd2fe74.png图片由作者创建。论文的作者使用“无界/有界”这个术语来定义无限/有限数据。他们避免使用流处理/批处理术语因为这些术语通常意味着使用特定的执行引擎。无界数据指的是没有预定义边界的数据例如活跃电商应用的用户交互事件数据流只有在应用不活跃时才会停止。而有界数据指的是可以通过明确的开始和结束边界来定义的数据例如从操作数据库导出的每日数据。为了继续介绍部分我们将回顾论文中使用的一些概念。窗口化组织者窗口化将数据划分为有限的块。通常系统使用时间概念将数据组织到窗口中例如过去 1 小时内的所有数据将属于一个窗口。窗口中的所有数据作为一个组进行处理。用户需要对窗口抽象进行分组操作聚合或时间限制操作以处理无界数据。另一方面一些对无界数据的操作不需要窗口概念比如过滤、映射或内连接。窗口可以是对齐的例如应用于给定窗口的所有数据或者是不对齐的例如仅应用于该窗口中特定数据子集的操作。窗口有三种主要类型https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4e03f22f65b904cf7b97c9f9de7d290b.png作者创建的图像。固定窗口窗口大小为静态定义例如按小时划分的窗口。滑动窗口窗口由窗口大小和滑动周期定义例如每 5 分钟开始的 30 分钟窗口。会话窗口捕捉数据子集中的一段活动期在这种情况下是按键捕捉。通常它们通过超时间隔定义。时间域在处理与时间相关的事件数据时需要考虑两个时间域事件时间事件本身发生的时间。例如如果系统设备在 11:30 记录了你购买游戏物品这个时间就被视为事件时间。处理时间在处理过程中事件在任何给定时刻被观察到的时间。例如购买的游戏物品在 11:30 被记录但仅在 11:35 到达流处理系统这个“11:35”就是处理时间。根据这个定义事件时间永远不会改变但处理时间会随着每个事件在管道步骤中流动而不断变化。这是在分析事件发生时刻时的一个关键因素。事件时间和处理时间之间的差异被称为时间域偏差。偏差可能由多种潜在原因引起例如通信延迟或每个管道阶段处理时花费的时间。像水印这样的指标是可视化偏差的好方法。对于本文作者考虑了管道处理过的事件时间的下水印。这些水印提供了一种概念告诉系统“在这个时间点之前的事件时间不会再出现在管道中。”水印不仅用于观察时间域之间的偏差还用于监控整体系统。在一个理想的世界中偏差始终为零我们可以在事件发生的第一时间就处理所有事件。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/4a1327f226be77c03f1911ae75999655.png作者创建的图像。在接下来的章节中我们将学习数据流模型的细节。核心原语模型有两个核心转换操作作用于(key, value)对这两种转换都可以作用于有界和无界数据https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/c4485cf3b3b6d6be67d4ab71ab77a2a4.png图像由作者创建。ParDo用于通用并行处理。它将使用提供的用户定义函数在 Dataflow 中称为DoFn处理每个输入元素该函数可以为每个输入元素生成零个或多个输出。输入不需要是无界集合。GroupByKey用于基于定义的键进行分组操作。ParDo对每个元素进行操作因此它可以转换为无界数据。GroupByKey在将数据发送到下游步骤之前会收集给定键的所有数据。如果输入源是无界的那么无法定义它何时结束。标准解决方案是数据窗口化。窗口化支持分组的系统通常会重新定义其GroupByKey操作为GroupByKeyAndWindow。作者在这方面的重要贡献是未对齐的窗口。第一个是将所有窗口化策略视为来自数据流模型的未对齐并允许在需要时自定义调整以应用对齐的窗口。第二个是任何窗口化过程都可以分解为两个相关的操作https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/00c182d4cd7e9b73bb943724146758f5.png图像由作者创建。AssignWindows将元素分配到零个或多个窗口。从模型的角度来看窗口分配在每个窗口中创建组件的新副本。MergeWindows在分组时合并窗口。这允许在数据到达并被分组时基于时间构建数据驱动的窗口。窗口合并作为GroupByKeyAndWindow操作的一部分进行。我们可以通过以下示例来更好地理解触发器与增量处理虽然支持未对齐的窗口事件时间窗口带来了另一个挑战需要告诉系统何时发出窗口的结果因为数据可能以无序的方式出现在管道中。使用事件时间进度指标如上所述的水印的初步解决方案存在一些缺点提醒一下免得你滚动回去看水印是一个指示器告诉系统“在这个时间点之前没有更多的事件时间较早的数据会出现在管道中。”例如在给定时间水印为“11:30”这意味着不再会有事件时间早于 11:30 的数据出现。它们有时太快这种行为意味着延迟数据可能会落后于水印。它们有时太慢这种行为可能导致整个管道被延迟等待一个缓慢的数据点。这导致了以下观察仅使用水印决定何时发出窗口的结果可能会增加延迟当水印较慢时或影响管道的准确性如果水印过快可能会漏掉一些数据。作者在 Lambda 架构中观察到该架构有两个独立的管道流式和批处理两个管道的结果最终会汇聚在一起该范式并没有通过更快地提供正确答案来解决完整性问题相反它提供了来自流式管道的低延迟结果估算然后承诺通过批处理管道提供正确的结果。他们指出如果我们希望在单个管道中实现相同的目标我们需要一种机制为任何给定的窗口提供多个面板答案。这个功能称为触发器允许用户指定何时触发给定窗口的输出结果。这里有一个插图帮助你理解触发器和 Lambda 架构中的语义之间的相似性。https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/eb2b6fb1621bf6cb50d441b19e5f2a76.png由作者创建的图像。作者介绍的系统支持以下触发器实现https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/a831282ccd30ace2528a98f6dbb9f062.png由作者创建的图像。在如水印这样的完成估算时触发。在处理时间点触发。基于数据到达特征如计数、字节、数据标记、模式匹配等进行触发。支持使用循环、序列或逻辑组合与、或实现的组合。用户可以利用执行运行时的底层原语例如水印计时器、处理时间计时器和外部信号例如数据注入请求、外部进度度量来定义触发器。除了控制系统何时发出窗口的结果外触发机制还提供了一种方法通过以下精细化模式控制给定窗口的面板答案之间的关系https://github.com/OpenDocCN/towardsdatascience-blog-zh-2024/raw/master/docs/img/1b5901e09ce2e8247d282836691bfb0b.png由作者创建的图像。丢弃在触发时系统丢弃所有内容的窗口。后续结果与之前的结果没有关系。此模式在下游消费者需要各个触发器的值独立时非常有用。在数据缓冲的空间效率方面这也是最有效的选项。累积在触发时系统将窗口内容保持在持久状态后续结果与之前的结果相关联。当下游消费者期望在接收同一窗口的多个结果时用新结果覆盖旧值时这种模式非常有用。这也是 Lambda 架构系统中使用的模式其中流式管道输出低延迟结果随后被批处理管道的结果覆盖。积累与撤回在触发时除了积累语义外发出的结果副本也会存储在持久状态中。当窗口在未来再次触发时首先会发出对先前值的撤回然后才是新值。下一部分将描述 Google 如何实现和设计 Dataflow 模型。实现论文的作者表示他们已经使用 FlumeJava 在内部实现了这个模型这是一个 Java 库使得开发、测试和运行高效的数据并行管道变得容易。MillWheel 作为底层的流执行引擎。此外Google Cloud Dataflow 的外部重新实现主要在论文撰写时已经完成。有趣的是核心的窗口和触发代码相当通用批处理和流处理实现之间有很大一部分是共享的。设计原则Dataflow 模型的核心原则永远不要依赖任何完整性的概念。灵活适应已知用例的多样性以及未来可能出现的用例。它不仅在每个预期执行引擎的上下文中有意义而且还增加了价值。鼓励实现的清晰性。支持在数据发生的上下文中进行强有力的数据分析。激励经验在设计模型时他们积累了与 FlumeJava 和 MillWheel 的实际经验。那些运作良好的部分会在模型中得到体现那些不太理想的部分则会推动方法的改变。以下是一些影响设计选择的经验统一模型这个设计选择的最初动机是默认情况下一个巨大的管道以流模式在 MillWheel 上运行但对于大规模回填有一个专门的 FlumeJava 批处理实现。另一个动机来自 Lambda 架构的经验其中一个客户在 MillWheel 中运行流管道并使用夜间的 MapReduce批处理生成真值。他们发现随着时间的推移客户逐渐不再信任管道之间弱一致性的结果。会话是 Google 内部一个关键的使用案例。这个机制在许多场景中都得到了应用包括搜索、广告、分析、社交媒体和 YouTube。任何关心在一段时间内关联用户活动波动的用户都会利用会话。因此支持会话成为模型设计中不可或缺的一部分。触发器、累积与撤回:两个在 MillWheel 上运行账单管道的团队遇到了问题这些问题促使了模型的部分设计。那时的最佳实践是将水印作为完成度度量并针对延迟数据使用额外的临时逻辑。由于缺乏更新和撤回系统处理资源利用率统计的团队决定自行构建解决方案。另一个账单团队则遇到了由慢速数据处理单元引起的水印滞后问题慢速单元影响整体作业完成性能。这些不足成为了设计的重要推动因素并使设计重点从追求完整性转向随时间适应性。这导致了两个决策触发器允许灵活指定何时生成结果以及通过累积支持增量处理。水印触发器:许多 MillWheel 管道计算聚合统计信息。大多数情况下它们并不要求 100% 的准确性它们关心的是在合理的时间内能够获得大致完整的数据视图。由于通过水印处理结构化输入源如日志文件时能够实现较高的准确性客户发现水印在每个窗口触发单一、精确的聚合结果方面非常有效。处理时间触发器:推荐管道使用处理时间定时器发出其输出。这些系统定期更新部分数据视图比起等到基于水印的大致完整视图准备好它们更具价值。这也意味着水印的概念不会影响其余数据输出的及时性。数据驱动和复合触发器:用于追踪 Google 网页搜索趋势的异常检测管道中的不同检测系统促使了数据驱动触发器的设计。这些系统观察查询流并计算统计估计以检查是否存在异常波动。当它们认为波动正在发生时会发出开始记录当它们认为波动已经停止时会发出停止记录。这也成为了触发器组合的推动因素因为实际上系统同时运行多个差异检测器并根据一组逻辑多路复用输出。Outro在本周的博客中我们讨论了数据流模型的设计原则和实现该模型是著名的 Google Cloud Dataflow 服务背后的核心。如果你想深入了解该模型我强烈推荐阅读这本书流处理系统大规模数据处理的“什么”、“哪里”、“何时”和“如何”或者阅读论文作者之一的两篇博客流处理 101 和 流处理 102。希望我的工作能为那些想了解流处理世界的人带来一些价值。下次博客见参考文献[1] Google数据流模型在大规模、无界、无序数据中平衡正确性、延迟和成本的实用方法2015 年。我的通讯是一封每周发布的博客风格邮件在其中我记录我从比我聪明的人那里学到的东西。所以如果你想和我一起学习和成长请在这里订阅https://vutr.substack.com.

相关文章:

Google Cloud Dataflow 背后的流式处理模型

原文:towardsdatascience.com/the-stream-processing-model-behind-google-cloud-dataflow-0d927c9506a0?sourcecollection_archive---------3-----------------------#2024-04-27 在无界数据处理中的正确性、延迟和成本平衡 https://medium.com/vutrinh274?sour…...

5分钟搞定!NewGAN-Manager终极配置指南:让Football Manager游戏体验焕然一新

5分钟搞定!NewGAN-Manager终极配置指南:让Football Manager游戏体验焕然一新 【免费下载链接】NewGAN-Manager A tool to generate and manage xml configs for the Newgen Facepack. 项目地址: https://gitcode.com/gh_mirrors/ne/NewGAN-Manager …...

【MySQL百日打怪升级第8天】SELECT执行流程

【第8天】每天一个MySQL知识点,百日打怪升级 SQL基础:SELECT执行流程 大家好,我是一名拥有10年以上经验的DBA老兵。 做这个系列,源于一个朴素的愿望:把踩过的坑、总结的经验系统化输出,希望能帮到刚入行或…...

堆叠集成方法

原文:towardsdatascience.com/the-stacking-ensemble-method-984f5134463a 发现堆叠在机器学习中的力量——一种将多个模型组合成一个单一强大预测器的技术。本文从基础知识到高级技术探讨了堆叠,揭示了它是如何结合不同模型的优势以提高准确性的。无论你…...

离谱!上海交大一学生私吞 5000 奖金,还用豆包 P 假收据骗队友。网友:学历虽高但人品太低

①5 月 18 日,上海交大一则学生违纪通报冲上热搜,实锤了前几天网上曝光的一名学生侵占团队竞赛奖金、造假欺骗队友的恶劣行为。②在 2025 下半年,樊同学(上交大智慧能源学院女生)与 K 同学(电院男生&#x…...

ABAP 采购带组件收货BAPI

一、背景 有一项业务比较特殊,金靶的回收加工,既会有物料的消耗,也会收进上一批加工洗出来的物料,并且组件物料会带有批次,MIGO过账时需要填写批次,那么对应BAPI,也需要加入这一部分批次。如果…...

荣耀MagicOS 10系统游戏模式:如何启用幻影稳帧功能并调整游戏画面的流畅度与画质平衡?

用手机玩游戏,最怕遇到卡顿和画面不清晰。想开高帧率保证流畅,画质就可能下降;想开高画质享受视觉盛宴,又容易掉帧卡顿。这真是让不少玩家头疼的问题。如果你的荣耀手机升级到了MagicOS 10系统,那么恭喜你,…...

Perplexity不是越低越好!资深NLP架构师亲授:3类典型查询场景下的阈值黄金区间

更多请点击: https://kaifayun.com 第一章:Perplexity不是越低越好!资深NLP架构师亲授:3类典型查询场景下的阈值黄金区间 Perplexity(困惑度)常被误认为语言模型性能的“万能标尺”,但实际部署…...

一小时搞懂Python函数:原理+实践

目录 🙄什么是Python函数(了解函数的概念) 🤔为什么需要它?(背景和痛点) 😮函数的分类(函数有哪些?) 内置函数 标准库函数 第三方库函数 定…...

互联网大厂 Java 求职者面试:音视频场景下的技术挑战

互联网大厂 Java 求职者面试:音视频场景下的技术挑战在一次互联网大厂的面试中,面试官和候选人燕双非之间展开了一场精彩的对话。燕双非是一位幽默风趣的程序员,尽管他在技术上并不是特别扎实,但他总是能用他的幽默化解紧张氛围。…...

软件设计师下午题训练2-3题+2020下上午题错题解析 练习真题训练15

一、训练题2 1、2021上 (1) (2) a:团购点编号 b:客户电话 供货 主键 :(供货商编号,团购点编号) 外键:供货商编号、团购点编号 订单 主键:订单编号…...

PHP SimpleXML:深入解析与高效使用

PHP SimpleXML:深入解析与高效使用 引言 PHP 是一种广泛使用的服务器端脚本语言,它以其灵活性和强大的功能而闻名。在处理 XML 数据时,PHP 提供了多种方法,其中 SimpleXML 是一个简单且强大的库,它允许开发者轻松地解析和操作 XML 数据。本文将深入探讨 PHP SimpleXML 的…...

远洋边缘计算实战:基于 Linux 的客滚船高并发网络 QoS 调度与隔离策略

摘要:客滚船直连卫星网络面对几百名旅客并发时存在瘫痪与越权风险。本文记录了基于 Linux 构建标准工业级边缘网关多链路 QoS 调度与隔离的实操复盘。导语:在主导一艘国际客滚船的网络重构项目时,我们面临一个典型的高并发调度与合规挑战&…...

RAG检索体系①【第十一篇】:混合检索架构(BM25+向量+过滤),工业级召回落地方案

生产级 RAG 避坑实战合集【第十一篇】文章简介:前十篇我们彻底打通数据层改写层:文档清洗、Chunk切块、元数据、生命周期、Query双层改写。绝大多数人做完这些,直接无脑上单向量检索。线上投产全部翻车。本文直击行业痛点:纯向量检…...

c++11的初见

列表初始化 c11以后支持{ }的列表初始可以使用{ }括住数据来进行初始化&#xff0c;使用{ }初始化时可以省略号{ }中的数据要匹配构造&#xff1b;使用{ }可以统一初始化方式。#include<iostream> #include<vector> using namespace std; int main(){vector<pai…...

YOLO26优化:TIP2026 FourierSR | FourierSR引入YOLO C3k2:解决感受野局限,实现高效全局特征交互

💡💡💡现有 YOLO C3k2 模块主要基于卷积与跨阶段部分连接,虽能平衡计算与精度,但仍存在以下问题: 感受野受限:堆叠的小核卷积(如 33)感受野有限,难以捕获全局上下文,对尺度变化大或远距离依赖的目标(如小目标、遮挡目标)特征提取能力不足。 特征混合效率低:通…...

基于 HarmonyOS 6.0 的智能家政预约页面实战开发:从页面构建到跨端体验优化

基于 HarmonyOS 6.0 的智能家政预约页面实战开发&#xff1a;从页面构建到跨端体验优化 前言 随着 HarmonyOS 生态不断完善&#xff0c;HarmonyOS 6.0 已经不仅仅是一个移动端操作系统&#xff0c;而是逐渐演变为一个真正意义上的全场景分布式操作平台。对于开发者而言&#xf…...

基于 HarmonyOS 6.0 的家政服务预约页面实战开发:ArkUI 页面构建与跨端设计深度解析

基于 HarmonyOS 6.0 的家政服务预约页面实战开发&#xff1a;ArkUI 页面构建与跨端设计深度解析 前言 随着 HarmonyOS 生态逐渐成熟&#xff0c;HarmonyOS NEXT 与 HarmonyOS 6.0 的持续推进&#xff0c;越来越多开发者开始从传统 Android、Flutter、Web 技术栈逐步迁移到鸿蒙原…...

Ubuntu 下 P106-100 矿卡 `nvidia-smi No devices were found` 问题解决全过程

Ubuntu 下 P106-100 矿卡 nvidia-smi No devices were found 问题解决全过程 最近折腾一张老矿卡 P106-100,在 Ubuntu 下遇到一个非常经典的问题: nvidia-smi No devices were found但是: lspci | grep -i nvidia却能看到显卡: 01:00.0 3D controller: NVIDIA Corporat…...

《龙虾OpenClaw系列:从嵌入式裸机到芯片级系统深度实战60课》060、未来趋势与芯片设计者的思考

OpenClaw系列总结:未来趋势与芯片设计者的思考 昨晚调试一块RISC-V核的cache一致性,波形里看到一条store指令被莫名其妙地重复执行了两次。我盯着GTKWave看了半小时,最后发现是写缓冲的valid信号在复位释放后没有清零——一个典型的“芯片级”bug,在嵌入式裸机里永远不会遇…...

3分钟学会:免费飞书文档转Markdown终极指南

3分钟学会&#xff1a;免费飞书文档转Markdown终极指南 【免费下载链接】cloud-document-converter Convert Lark Doc to Markdown 项目地址: https://gitcode.com/gh_mirrors/cl/cloud-document-converter 想象一下&#xff0c;你花了好几个小时在飞书上精心排版的技术…...

桌面音乐可视化革命:Lano Visualizer如何让你的音乐“看得见“

桌面音乐可视化革命&#xff1a;Lano Visualizer如何让你的音乐"看得见" 【免费下载链接】Lano-Visualizer A simple but highly configurable visualizer with rounded bars. 项目地址: https://gitcode.com/gh_mirrors/la/Lano-Visualizer 在数字时代&#…...

5分钟终极指南:用m4s-converter永久保存你的B站缓存视频

5分钟终极指南&#xff1a;用m4s-converter永久保存你的B站缓存视频 【免费下载链接】m4s-converter 一个跨平台小工具&#xff0c;将bilibili缓存的m4s格式音视频文件合并成mp4 项目地址: https://gitcode.com/gh_mirrors/m4/m4s-converter 你是否曾经遇到过这样的烦恼…...

大模型微调实战:用LoRA技术微调LLaMA 2模型

在人工智能技术飞速发展的当下&#xff0c;大语言模型&#xff08;LLM&#xff09;在自然语言处理领域展现出了强大的能力。LLaMA 2作为Meta推出的开源大模型&#xff0c;凭借其出色的性能和广泛的适用性&#xff0c;成为了众多开发者和研究人员的首选。对于软件测试从业者而言…...

【RuoYi】数据分页功能分析 —— 以登录日志页面为例

本文基于 RuoYi-Vue v3.8.2&#xff0c;以"监控 → 登录日志"页面为例&#xff0c;从前端代码、前端开发者工具、后端代码到后端 Log 输出&#xff0c;完整分析 RuoYi 框架中数据分页的实现原理。一、实例简介本次分析选取的含数据分页功能的页面为&#xff1a;系统管…...

GIS技巧100例23-ArcGIS像元统计实战:从月度栅格到年度气候指标

1. 像元统计基础与气候数据特点 刚接触GIS处理气候数据时&#xff0c;我经常被各种栅格格式和统计方法搞得晕头转向。直到有次用ArcGIS的像元统计工具批量处理了5年的月降水数据&#xff0c;才发现这个功能简直是隐藏的效率神器。像元统计&#xff08;Cell Statistics&#xff…...

AI数据标注实战:如何高效、准确地标注训练数据

在AI模型的开发与迭代过程中&#xff0c;数据标注是连接原始数据与智能算法的关键桥梁&#xff0c;其质量与效率直接决定了模型的性能上限。对于软件测试从业者而言&#xff0c;掌握高效、准确的数据标注方法&#xff0c;不仅能为AI模型提供可靠的训练“食粮”&#xff0c;更能…...

【致91岁的双胞胎】堡垒复习:3步搭建理科“作战地图”,告别零散刷题效率翻倍

很多学生长期陷入理科复习瓶颈:花费大量时间刷题、背书,成绩却始终原地踏步。核心根源只有一个:照搬文科的复习方式学理科。 文科复习侧重知识点记忆、框架梳理、素材积累,通用的A4纸整理法完全适用;但理科的核心是逻辑闭环、体系串联、题型落地、抗遗忘复盘,死记硬背、…...

2026年选对工作钢格板厂家,这三大核心标准决定你的采购成败

在工业厂房、化工厂、电厂等生产场景中&#xff0c;工作钢格板作为至关重要的安全承重平台与通道&#xff0c;其产品质量直接关系到人员安全与生产稳定。2026年的制造业竞争愈发激烈&#xff0c;供应链选择也更为审慎。面对市场上琳琅满目的供应商&#xff0c;您是否正为找到一…...

《字节码到JVM:Java基础核心知识点全解析(小林八股·上)》

&#x1f525;个人主页&#xff1a;北极的代码&#xff08;欢迎来访&#xff09; &#x1f3ac;作者简介&#xff1a;java后端学习者 ❄️个人专栏&#xff1a;苍穹外卖日记&#xff0c;SSM框架深入&#xff0c;JavaWeb ✨命运的结局尽可永在&#xff0c;不屈的挑战却不可须臾或…...