什么才是真正影响性能的关键:一年来基准测试的经验教训

网络拓扑结构对AI算力性能的影响:基准测试研究 在当今AI飞速发展的时代,AI算力性能的提升至关重要。而网络拓扑结构作为数据传输和处理的基础框架,对AI算力性能有着不可忽视的影响。本研究的目的就是通过基准测试,全面了解不同网络拓扑结构如何影响AI算力性能,为优化AI计算系统提供参考。研究范围涵盖了常见的网络拓扑结构,如总线型、星型、环型、树型和网状型等,以及在不同AI计算任务下的性能表现。本文首先会介绍网络拓扑结构和AI算力性能的核心概念,以及它们之间的联系。接着会阐述核心算法原理和具体操作步骤,并用数学模型进行详细解释。 阅读详情

图片

本文字数:4369;估计阅读时间:11 分钟

作者:Tom Schreiber

本文在公众号【ClickHouseInc】首发

图片

为什么基准测试总是贯穿于我的工作

年末将至,我习惯回顾一些最令我自豪的工作成果。

2025年我创作并协助发布了大量与 ClickHouse 相关的内容,但其中最让我在意的几篇文章都有一个共同点:背后都基于一项基准测试。

图片

基准测试之所以频繁出现在我的工作中,是因为它能带来清晰的认知。它能纠正我们对性能的直觉,揭示各种取舍,有时甚至会推翻一些已经存在太久的固有看法。

以下是我今年最喜欢的几个案例——它们让我感到惊讶,改变了人们对 ClickHouse 的认知,甚至直接影响了实际系统的构建方式。把它们串联起来,可以勾勒出一个完整的发展路径:从数据布局与写入,到存储与执行,最终落脚到成本优化。

在重读这些内容时,我不断意识到同一个事实:性能归根结底取决于引擎在端到端传输数据时的效率。

十亿文档的 JSON 基准测试

这项基准测试源于一个基础性的问题:如果将 JSON 看作列式数据,而不是传统的文档格式,它将呈现出怎样的形态?

ClickHouse 在列式存储架构之上,彻底重构了 JSON 的存储方式,带来了远超以往的处理速度、压缩率和使用体验,在现有所有 JSON 数据存储方案中遥遥领先。

为了验证性能,我们设计了 JSONBench——一项可复现的基准测试,它会将相同的真实数据集(最多包含 10 亿条 Bluesky 事件)加载到多个系统中,然后对存储空间、冷热查询时延及数据质量(成功导入的文档数量)进行测量。

在初始的十亿文档测试中,ClickHouse 的查询速度快了数个数量级,同时在磁盘占用上也更具优势——相比将同一 JSON 存为压缩文件,ClickHouse 所需空间还减少了 20%。

图片

图片

我们还构建了一个在线实时仪表板,支持按数据集规模、冷热状态、存储方式和数据质量维度进行结果筛选,还可以切换是否显示支持 JSON 扁平化处理的系统。

图片

JSONBench 不止是一次性博客项目。它已经在社区中被广泛使用,并持续收到外部贡献者的拉取请求,用于新增或更新不同系统的测试结果。

这是我今年最喜欢的基准测试之一,因为它的结果超出了我的预期。

ClickHouse 相比传统的 JSON 数据存储系统(例如 MongoDB),性能提升达到成千上万倍,同时使用的存储空间也明显更少。这完全颠覆了我对 JSON 可执行分析查询的认知。

图片

小插曲:ClickHouse 在最初的 JSONBench 测试中就已展现出显著优势。随后我们又独立优化了 JSON 的实现方式,并引入了新的共享数据序列化机制,使得复杂 JSON 场景下的性能和内存占用得到了大幅提升。如今,无论在冷热查询还是任意数据集规模下,ClickHouse 都以更大的领先优势遥遥领先于其他系统。

输入格式基准测试

这个基准测试源于一个看似简单却实际复杂的问题:ClickHouse 支持 70 多种输入格式,那在追求高吞吐导入时,哪些格式才是真正关键的?

为了系统性地回答这个问题,我们设计了 FastFormats 基准测试。它专注于测量服务端导入的成本,并在几十种格式、批处理大小、压缩方案和预排序策略下,对时间、CPU 占用、内存使用和文件大小等指标进行详细对比。

最终结论非常清晰且出奇一致:

  • 原生格式几乎在所有场景中都是最优解;

  • 压缩几乎是“标配”:LZ4 优先,若带宽受限则用 ZSTD;

  • 预排序确实有帮助,但效果远没有人们想象中那么大;

  • 批处理大小的影响甚至超过几乎所有其他因素。

图片

就像 JSONBench 一样,我们也构建了一个实时在线仪表板,用户可以按格式、批量大小、压缩方式、是否预排序及不同性能指标,灵活查看测试结果。

图片

这是我今年最喜欢的基准之一,因为它对 ClickHouse 以外的实际生产环境也产生了直接影响。

Netflix 就提到,他们在数据导入方面的一个重大突破,正是来源于这篇文章和 FastFormats 的测试结果。他们发现 ClickHouse 原生协议在性能上始终优于 RowBinary 后,便反向分析了 Go 客户端的实现逻辑,并在 Java 管道中重写了采用 LZ4 压缩的原生协议编码。最终取得了更低的 CPU 占用、更高的内存效率,如今这个系统每天向 ClickHouse 写入约 5PB 的日志数据。

对象存储缓存基准测试

这个基准测试起源于一个实际的云计算问题:为什么一些分析系统在测试中吞吐量很高,但实际使用时却仍感觉缓慢?

答案不是带宽,而是延迟。对象存储虽然具备可观的吞吐能力,但每次读取通常需要几百毫秒的延迟,对于许多分析类查询(尤其是小型、选择性强、随机读取)来说,延迟才是决定性能的核心因素。

为此,我们为 ClickHouse Cloud 构建并测试了一个分布式缓存系统——它是一个位于无状态计算节点与对象存储之间的共享、低延迟缓存层。与其让每个节点各自建立本地缓存,不如将热点表数据缓存一次,让所有节点即时复用。

我们对比了以下三种方案,使用相同的数据集与查询:

  • 一台带本地 SSD 的自建服务器;

  • ClickHouse Cloud 使用传统的每节点文件系统缓存;

  • ClickHouse Cloud 启用新型分布式缓存。

结果显示:

  • 在吞吐受限的扫描任务中,冷查询性能最高可达本地 SSD 的 4 倍,这得益于共享缓存和缓存节点之间的并行拉取;

  • 在延迟敏感的分散读取场景中,冷查询性能可媲美本地 SSD,而热查询则稳定实现低于 60 毫秒的内存级访问速度——整个过程中完全不依赖本地磁盘。

图片

图片

核心观点是:共享缓存结合弹性无状态计算架构,即便是冷启动,也优于依赖“高速磁盘”的传统方式。这样不仅启动更快,无需反复从对象存储下载,还能灵活扩缩计算资源而不丢失任何热点数据。

这是我今年最欣赏的基准测试之一,因为它展示了一种真正的架构范式转变。

云原生分析系统,不再需要在弹性与性能之间权衡。两者可以兼得。

UPDATE 基准测试

过去很长时间,ClickHouse 都被一句话所定义:“适合做分析,但不支持频繁快速的更新操作。”

这个基准测试终于打破了这种固有看法。

我们撰写了一篇博客文章,基于同一数据集、相同硬件和相同查询,对 ClickHouse 支持的所有 UPDATE 方式进行了对比测试——包括传统变更(classic mutations)、即时变更(on-the-fly mutations)、ReplacingMergeTree 插入方式,以及通过 patch parts 实现的新一代轻量级标准 SQL UPDATE。

测试结果令人惊讶:

  • ClickHouse 的标准 SQL UPDATE 比传统变更最多快达 1000 倍;

  • 原本需要几分钟的大批量更新,如今只需毫秒级时间;

  • 单行更新也能在几十毫秒内完成,性能几乎与插入相当。

图片

这是我今年最喜欢的基准测试之一,因为它颠覆了人们对 ClickHouse 的传统认知。

你现在可以用标准 SQL 高频率地执行快速更新,无需牺牲分析性能,也不必依赖特定引擎的特殊方案。

分布式 GROUP BY 基准测试

这个基准测试关注的是:GROUP BY 作为分析查询的核心,其执行模型到底能扩展到多大规模?

GROUP BY 是支撑几乎所有分析查询的基础:可观测性仪表盘、实时对话型生成式 AI、AI 智能体可视化分析等场景都离不开它。

ClickHouse Cloud 利用并行副本架构,可将单个 GROUP BY 查询扩展到所有计算节点的所有 CPU 核心上执行。

为评估其可扩展性,我们在从数千万行到 1000 亿行、甚至 1 万亿行的数据集上运行相同的 GROUP BY 查询,并逐步将 ClickHouse Cloud 中的计算节点规模从 1 台扩展至数百台。

结果令人震撼:

图片

  • 1000 亿行聚合仅耗时约 0.4 秒;

  • 每秒处理数据量高达约 2400 亿行,吞吐超过 1.4 TB/s;

  • 无需预聚合,无需重排数据。

图片

这是我今年最欣赏的基准测试之一,它展示了架构设计的极致扩展能力。

就像一款精致的钢笔或经典的 Unix 工具,ClickHouse 聚焦一项核心功能——GROUP BY,并将其做到极致。从本地笔记本到云端大规模集群,执行模型无需任何改动,而这个基准测试展现了这种设计理念带来的实际影响。你可以将这个决定分析速度的操作横向扩展到整个集群,而无需更改任何查询逻辑或数据模型。

值得一提:云数据仓库的成本-性能基准测试

这个基准测试关注的不再是功能细节,而是一个更核心的问题:在云上,性能如何转化为真实的使用成本?

它被列为“特别推荐”,因为相比其他测试,它的研究范围更广、挑战也更大。

测试的起点是一个朴素的观察:标价往往并不能代表实际花费。不同系统的计费模型各异,计费单位与资源模型错位,使得单纯对比价格表既困难又容易误导。

为了还原真实成本,我们选取了五大主流云数据仓库,在相同分析负载和不同规模下进行测试,然后根据各自的计费方式,将运行时长换算为实际成本。

这是我今年最喜欢的基准之一,因为它重构了对话方式。

与其争论价格表和档位设置,不如专注效率这个真正的“价值单位”。当以系统实际计费方式来衡量成本时,ClickHouse Cloud 总能实现单位成本下的最大性能回报。

图片

一年来基准测试的启示

回顾过去,这些工作背后都体现了基准测试在打破假设中的关键作用。

它们推翻了固有观念(“ClickHouse 不支持 UPDATE”),揭示了关键取舍(延迟 vs 吞吐、速度 vs 成本),验证了架构选择的有效性(列式 JSON、无状态云计算)。在一些案例中,基准测试甚至影响了真实系统的构建方式,而不仅仅停留在博客层面。

这一年,所有测试都指向同一个核心结论:性能取决于引擎在端到端过程中传输和处理数据的效率。总结下来,我们反复看到:

  • 没有批量处理,数据格式再先进也徒劳;

  • 延迟没控好,带宽再高也无济于事;

  • 计算节点是弹性的,缓存不能是孤立的;

  • 更新操作能避免大规模重写时,存储结构就不是瓶颈;

  • 执行模型不具备扩展性,节点数量再多也无法提升性能;

  • 价格表再诱人,如果执行效率不高,也无法节省成本。

这就是为什么基准测试始终贯穿我的工作:它让所有这些端到端的性能权衡变得透明可见。

2026年,我们会发布新的功能、新的架构、提出新的性能主张。而我们的方法仍然不变:先测量,公布结果,用真实数据推动讨论。

征稿启示

面向社区长期正文,文章内容包括但不限于关于 ClickHouse 的技术研究、项目实践和创新做法等。建议行文风格干货输出&图文并茂。质量合格的文章将会发布在本公众号,优秀者也有机会推荐到 ClickHouse 官网。请将文章稿件的 WORD 版本发邮件至:Tracy.Wang@clickhouse.com

MySQL之基准测试策略与关键指标解析 在数据库开发和优化的过程中,MySQL基准测试是一项至关重要的技能。它能够帮助我们深入了解系统性能,发现潜在问题,并为优化提供有力依据。今天,让我们一起深入学习MySQL基准测试的策略以及关键指标,在技术的道路上共同进步。 阅读详情

相关推荐

Sass性能基准测试:预处理对CSS体积的影响

前端性能优化中,CSS文件体积直接影响页面加载速度(据HTTP Archive统计,2023年网页平均CSS体积达170KB)。Sass作为最流行的CSS预处理器,虽提升了代码可维护性,但不当使用可能导致生成的CSS体积膨胀。Sass核心功能(变量/混合宏/嵌套)对体积的具体影响不同编译器(Dart Sass/Node Sass)的体积差异压缩工具(如CSSNano)的优化效果量化。

AI架构全栈开发实战笔记 482

Apache DataFusion查询重写规则性能影响:基准测试

你是否在优化SQL查询时遇到过执行计划效率低下的问题?是否想知道查询重写规则如何影响整体性能?本文通过基准测试,深入分析Apache DataFusion中查询重写规则对性能的实际影响,帮助你理解如何通过优化规则提升查询效率。读完本文,你将了解常见查询重写规则的作用、基准测试方法以及性能对比结果,为实际应用中的查询优化提供参考。 ## 查询重写规则概述 查询重写规则(OptimizerRule...

gitblog_00140的博客 805

python指纹识别算法(亲测代码可用)

python指纹识别算法

2301_76482796的博客 3078

revanced-patches性能基准测试:量化补丁对应用的影响

还在为应用卡顿、耗电快而烦恼?ReVanced Patches作为一个强大的Android应用修改框架,不仅提供丰富的功能增强,更在性能优化方面表现出色。本文将深入分析补丁对应用性能的实际影响,为你提供科学的量化数据。 ## 性能优化的核心技术原理 ReVanced Patches通过字节码修改技术实现功能增强,这种技术在性能方面具有独特优势: - **运行时拦截**:通过方法hook在关键

gitblog_00436的博客 1019

FANUC机器人KAREL编程实战:手把手教你用SOCKET指令连接外部设备(附完整.KL文件)

本文详细解析了FANUC机器人KAREL编程中SOCKET指令的应用,从开发环境配置到工业级通讯全流程,涵盖网络参数设置、模块化代码设计、错误处理及现场调试技巧。通过实战案例,帮助开发者掌握与外部设备稳定连接的关键技术,提升工业自动化系统的通讯可靠性。

weixin_30907935的博客 225

在Docker中集成GPU监控体系

先上效果图 等文档整理出来再更

tamako0v0的博客 2470

Caire基准测试:评估图像处理性能的关键指标

你是否在为图片压缩导致的画质损失而烦恼?是否想知道如何在保持视觉效果的同时优化图像处理速度?本文将通过Caire的基准测试体系,带你掌握评估内容感知图像缩放性能的核心方法,让你轻松判断图像处理效率,选择最优参数配置。读完本文,你将了解Caire基准测试的关键指标、测试流程以及如何解读测试结果,为你的图像处理任务提供科学的性能评估依据。 ## 什么是Caire基准测试 Caire是一个基于《Se...

gitblog_00837的博客 717

华为手环实时心率数据导出到UWP项目中

hello大家好呀O(∩_∩)O最近在做毕设 其中有个小功能要用到实时心率数据。查找网上的资料发现只有小米手环的实时心率数据导出但是没有华为手环的,我试了华为手环但是并不能行得通哈哈哈。现在分享一下华为手环实时心率数据导出的代码。

apple_63713858的博客 1581

Draper装饰器性能基准测试:装饰器对应用性能的实际影响

在Rails应用开发中,Draper装饰器为视图逻辑提供了优雅的面向对象解决方案。但许多开发者关心一个重要问题:使用装饰器会对应用性能产生多大影响?通过深入分析Draper的性能基准测试,我们将揭示装饰器在实际应用中的性能表现。 ## 性能测试环境搭建 Draper项目内置了完整的性能测试框架,位于`spec/performance/`目录下。该框架包含了模型定义、装饰器实现和基准测试脚本,为

gitblog_00790的博客 701

MoCap 动作捕捉开源库教程

数据通过 tf2 和支持不同 QoS 设置的 /poses 主题直接发布。该软件包最初是为 Crazyswarm 开发的,用于跟踪多达 50 个飞行机器人。

机器人控制与仿真应用 1307

手把手入门YOLO到改进优化教程 | 【P1基础篇】YOLOv8网络架构原理

本节先来学习基础知识,以YOLOv8进行讲解入门, 拿YOLOv8入手掌握YOLO的底层逻辑 ,也可以基于此来轻松学习后面更新的YOLO系列 (大部分YOLO版本的核心思想一致,更新是基于旧版本做结构升级、优化策略,学习成本会越来越低)。

嵌入式阿齐Archie 2万+

Go代码混淆工具Garble性能基准测试:揭秘混淆对运行效率的真实影响

在当今软件安全日益重要的环境下,Go代码混淆工具Garble成为了保护商业代码的利器。但许多开发者担心:混淆处理是否会影响程序性能?本文将基于Garble项目的基准测试数据,深入分析混淆对Go程序运行效率的实际影响。 ## 🚀 Garble混淆工具简介 Garble是一个专为Go语言设计的代码混淆工具,它通过重命名标识符、混淆字符串字面量和控制流等方式,让你的Go代码更难被逆向分析。作为Gi

gitblog_00294的博客 646

2024顶级提示工程工具:提升效率的12个神器

LlamaIndex虽然本身不是直接的提示词编辑工具,但其整个设计都围绕着如何有效地将外部知识融入LLM的提示词。它提供了结构化的方式来管理“上下文窗口”——即哪些私有数据应该被包含在提示词中。通过优化索引结构和检索策略,可以确保提示词中包含最相关、最高质量的上下文信息,从而大幅提升LLM基于私有数据回答问题的准确性和相关性。同时,LlamaIndex允许开发者针对不同的查询类型和数据特点定制提示词模板,这使得提示词的复用和优化更加系统化。

AIGC应用创新大全的博客 1098

CompreFace人脸识别性能基准测试:终极指南与7个关键指标

CompreFace作为领先的免费开源人脸识别系统,其性能基准测试对于评估系统效率和优化至关重要。本文将详细介绍CompreFace人脸识别性能基准测试的标准与方法,帮助您全面了解如何评估这一强大的人脸识别工具。🚀 ## 为什么需要性能基准测试? 在部署人脸识别系统前,性能基准测试是必不可少的环节。通过系统化的测试,您可以: - 评估识别准确率和响应速度 - 确定系统的处理能力和资源需求

gitblog_00737的博客 1036

[QMT量化交易小白入门]-五十、十年基本保证每年盈利,全天ETF候稳稳的幸福

全局参数raise_rate = -1 # 触发rebalance的上涨比例period: 设定为22,表示每22个交易日执行一次调仓(即大约每月一次)。这是策略的时间框架基础。raise_rate: 初始值设为-1,意味着默认情况下不会因为资产的涨幅而触发调仓。这一参数用于控制是否基于资产表现动态调整仓位。run_count: 用于记录策略运行的次数,帮助判断何时执行定期调仓。1、为了简便计算,回撤时将调仓再平衡是先卖出再买入,没有比较持仓,实盘时是需要计算的,减少交易费用。

木头大左的博客 806

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Termux性能基准测试:不同设备的性能对比

你是否曾在Android设备上运行Termux时遇到过命令执行缓慢、多任务卡顿的问题?随着移动设备硬件配置的多样化,了解不同设备在Termux环境下的性能表现变得尤为重要。本文将通过标准化的基准测试方法,帮助开发者和高级用户: - 评估设备在Linux命令行环境下的实际性能 - 选择适合特定计算任务的移动硬件 - 优化Termux环境配置以匹配设备能力 - 建立性能基线用于后续优化对比 ## ...

gitblog_00669的博客 1421

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Rust性能优化与调试之性能基准测试

在 Criterion 中创建多个测试组,通过分组功能生成针对不同环境(例如小规模数据 vs 大规模数据、冷缓存 vs 热缓存)的详细分析报告,帮助开发者在不同场景下优化性能。为保证测试结果的实用性,必须首先确定基准测试的目标对象,比如特定的算法、关键函数或模块,以及确定如何在不同硬件环境(如不同内存配置和处理器架构)下统一评估性能。通过 Criterion 的分组功能,开发者可以在同一文件中对多组数据进行性能测试,模拟不同数据规模或输入条件下的性能表现。,提供高精度测试和深入的统计分析。

好看资源网的博客 1665

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

etcd数据迁移性能:迁移过程中的性能影响

在现代分布式系统中,数据迁移是一个不可避免的操作场景。无论是版本升级、硬件更换还是集群扩容,数据迁移都扮演着关键角色。etcd作为分布式键值存储的核心组件,其数据迁移性能直接影响整个系统的可用性和稳定性。 **痛点场景**:当你需要将etcd集群从3.5版本升级到3.6版本时,数据迁移过程是否会显著影响生产环境的性能?迁移期间读写操作是否会受到阻塞?如何评估和优化迁移性能? 本文将深入分析et...

gitblog_01183的博客 1080

【PHP基准测试实战指南】:5个关键步骤让你精准评估代码性能

掌握PHP性能优化关键,本文提供清晰的PHP基准测试示例,涵盖微基准与宏基准场景,使用PHPBench工具详解5个核心步骤,精准定位性能瓶颈。方法实用,结果可复现,助力开发者高效优化代码,值得收藏。

DevPath的博客 960

Delayed Job性能基准测试:在不同场景下的表现对比分析

Delayed Job作为Ruby社区中广受欢迎的后台任务处理库,在异步任务执行方面发挥着重要作用。本文将深入分析Delayed Job在不同场景下的性能表现,帮助开发者更好地理解和优化其应用性能。Delayed Job性能基准测试是评估系统稳定性和效率的关键环节,通过对比分析不同配置下的表现,为实际项目部署提供参考依据。🚀 ## Delayed Job性能测试环境搭建 要了解Delayed

gitblog_00854的博客 785

Meshery服务网格基准测试:硬件配置对性能的影响分析

服务网格(Service Mesh)作为云原生应用的流量管理核心,其性能表现直接取决于底层硬件配置。本文基于Meshery([README.md](https://link.gitcode.com/i/2f3c50bfcc28e070cfbbbaa23f0a8e9e))的基准测试框架,通过分析CPU、内存等硬件资源对服务网格关键指标的影响,为生产环境配置提供数据支持。 ## 测试环境与工具链 ...

gitblog_01165的博客 422

vanna性能基准测试:不同配置下的查询性能对比

在AI驱动的SQL生成领域,性能表现直接影响用户体验和生产效率。vanna作为基于RAG(Retrieval-Augmented Generation)架构的开源SQL生成框架,其性能受到多个关键因素的影响。本文通过系统性基准测试,深入分析不同配置组合下的性能表现,为实际部署提供数据支撑。 ## 测试环境与方法论 ### 测试环境配置 ```python # 基准测试环境配置 test_con...

gitblog_00521的博客 880

React Native性能基准测试终极指南:量化应用性能指标的10个关键步骤

React Native作为构建原生移动应用的JavaScript框架,性能基准测试是确保应用流畅运行的关键环节。在前100个字的介绍中,我们将深入探讨React Native性能基准测试的核心概念,帮助开发者量化应用性能指标,优化用户体验。通过系统性的性能测量方法,你可以准确识别应用瓶颈,提升React Native应用的响应速度和稳定性。 ## 📊 为什么React Native性能基准测

gitblog_00469的博客 493

性能测试之基准测试

~~~什么是基准测试~~~ 基准测试是一种测量和评估软件性能指标的活动。 ~~~基准测试数据的实际用途~~~ 1) 了解系统性能基准作为参照物(性能问题发生后的测试很难了解系统性能基准) 2) 识别系统或环境的配置变更对性能响应带来的影响 3) 为系统优化前后的性能提升/下降提供参考指标(收集,保存基准测试结果作为测试指标) 4) 观察系统的整体性能趋势与拐点发生,及早识别系统性能风险 ~~~性能基准自动化测试与一般性能测试的主要区别~~~ 1) 测试周期:基准测试每天定时自动化执行(...

软件测试专博 5793

AppFlowy-Cloud性能基准:基准测试与性能对比

AppFlowy-Cloud作为开源Notion替代方案的核心后端服务,其性能表现直接影响用户体验。本文深入分析AppFlowy-Cloud的性能基准测试结果,通过详实的数据对比和架构解析,帮助开发者理解系统性能特征并进行优化。 ## 性能监控体系架构 AppFlowy-Cloud采用基于Prometheus的监控体系,全面覆盖各个核心模块: ```mermaid graph TB ...

gitblog_00213的博客 652

Spring Boot 数据源与 MyBatis(-Plus) 自定义配置详解

本文详解 Spring Boot 中单数据源环境下 HikariCP 与 MyBatis-Plus 的自定义配置。通过手动声明 SqlSessionFactory,实现下划线转驼峰、日志输出、一级缓存策略等精细化控制。结合 HikariCP 核心参数调优(如最大连接数、连接生命周期),确保高性能与稳定性。适用于仅需访问单一数据库的场景,避免多数据源复杂性,兼顾性能与可维护性。

BADAO_LIUMANG_QIZHI的博客 191
上一篇: ClickHouse 25.12 版本发布说明
下一篇: 为了驯服 PostgreSQL GUC 的 extra 数据,我在 C 内存管理里踩了四次坑
ClickHouseDB
博客等级 码龄3年 1707粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值