尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
DeepSpeed Flops Profiler 完整指南:模型参数、延迟与浮点运算量的模块级剖析
DeepSpeed Flops Profiler 完整指南模型参数、延迟与浮点运算量的模块级剖析【免费下载链接】DeepSpeedDeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.项目地址: https://gitcode.com/GitHub_Trending/de/DeepSpeedDeepSpeed Flops Profiler 是 DeepSpeed 内置的模型级性能剖析工具用于测量模型训练与推理中的关键量化指标参数量params、乘加运算量MACs、浮点运算量FLOPs、每模块延迟与吞吐。本指南基于 docs/_tutorials/flops-profiler.md 展开结合仓库源码说明其测量原理并给出「接入 DeepSpeed 训练运行时」与「脱离 DeepSpeed 独立使用」两条完整实战路径。读完本文你可以直接对任意 PyTorch 模型输出三份可定位瓶颈的报告并据此指导超参调优、并行策略选择与算子/内核融合改造。为什么需要模块级的 FLOPs 剖析大型模型训练与推理的性能低效往往难以定位显存或算力究竟消耗在哪一个子模块是线性层、注意力还是归一化拖慢了整体硬件资源的使用效率与理论峰值之间的差距又有多大常规的 PyTorch Profiler 只能统计到单个 PyTorch 算子的运算量很难回答“这个BertLayer到底占总运算量的百分之几”这类模型层面的问题。DeepSpeed Flops Profiler 的定位正是填补这一空白它以module模块为粒度在测量训练/推理速度延迟 latency、吞吐 throughput的同时输出模型及其各子模块的浮点运算效率FLOPS。从 profiler.py 的类文档可见它“profiles the forward pass of a PyTorch model and prints the model graph with the measured profile attached to each module”即把剖析结果直接“挂”到模型图的每个模块上展示 latency、flops 与参数在模型中的分布帮助用户定位瓶颈层。典型输出包含三个层次Summary Profile汇总全模型在指定训练步的总体参数、FLOPs、FLOPS、延迟与 samples/second 吞吐Aggregated Profile聚合在不同模型深度上按参数量 / MACs / 前向延迟排序的 Top 模块Detailed Profile明细逐模块打印的模型树每个模块行尾附上参数量、MACs、延迟及其各自占全模型的百分比、以及该模块前向 FLOPS。以 BERT-LargeNVIDIA 预训练版本在 A100 GPU、batch size 80 上的输出为例节选汇总与聚合部分-------------------------- DeepSpeed Flops Profiler -------------------------- Profile Summary at step 10: Notations: data parallel size (dp_size), model parallel size(mp_size), number of parameters (params), number of multiply-accumulate operations(MACs), number of floating-point operations (flops), floating-point operations per second (FLOPS), fwd latency (forward propagation latency), bwd latency (backward propagation latency), step (weights update latency), iter latency (sum of fwd, bwd and step latency) world size: 1 data parallel size: 1 model parallel size: 1 batch size per GPU: 80 params per gpu: 336.23 M params of model params per GPU * mp_size: 336.23 M fwd MACs per GPU: 3139.93 G fwd flops per GPU: 6279.86 G fwd flops of model fwd flops per GPU * mp_size: 6279.86 G fwd latency: 76.67 ms bwd latency: 108.02 ms fwd FLOPS per GPU fwd flops per GPU / fwd latency: 81.9 TFLOPS bwd FLOPS per GPU 2 * fwd flops per GPU / bwd latency: 116.27 TFLOPS fwdbwd FLOPS per GPU 3 * fwd flops per GPU / (fwdbwd latency): 102.0 TFLOPS step latency: 34.09 us iter latency: 184.73 ms samples/second: 433.07 ----------------------------- Aggregated Profile per GPU ----------------------------- Top modules in terms of params, MACs or fwd latency at different model depths: depth 0: params - {BertForPreTrainingPreLN: 336.23 M} MACs - {BertForPreTrainingPreLN: 3139.93 GMACs} fwd latency - {BertForPreTrainingPreLN: 76.39 ms} depth 1: params - {BertModel: 335.15 M, BertPreTrainingHeads: 32.34 M} MACs - {BertModel: 3092.96 GMACs, BertPreTrainingHeads: 46.97 GMACs} fwd latency - {BertModel: 34.29 ms, BertPreTrainingHeads: 3.23 ms} depth 2: params - {BertEncoder: 302.31 M, BertLMPredictionHead: 32.34 M} MACs - {BertEncoder: 3092.88 GMACs, BertLMPredictionHead: 46.97 GMACs} fwd latency - {BertEncoder: 33.45 ms, BertLMPredictionHead: 2.61 ms} depth 3: params - {ModuleList: 302.31 M, Embedding: 31.79 M, Linear: 31.26 M} MACs - {ModuleList: 3092.88 GMACs, Linear: 36.23 GMACs} fwd latency - {ModuleList: 33.11 ms, BertPredictionHeadTransform: 1.83 ms} depth 4: params - {BertLayer: 302.31 M, LinearActivation: 1.05 M} MACs - {BertLayer: 3092.88 GMACs, LinearActivation: 10.74 GMACs} fwd latency - {BertLayer: 33.11 ms, LinearActivation: 1.43 ms} depth 5: params - {BertAttention: 100.76 M, BertIntermediate: 100.76 M} MACs - {BertAttention: 1031.3 GMACs, BertIntermediate: 1030.79 GMACs} fwd latency - {BertAttention: 19.83 ms, BertOutput: 4.38 ms} depth 6: params - {LinearActivation: 100.76 M, Linear: 100.69 M} MACs - {LinearActivation: 1030.79 GMACs, Linear: 1030.79 GMACs} fwd latency - {BertSelfAttention: 16.29 ms, LinearActivation: 3.48 ms}详细明细Detailed Profile则以缩进树的形式逐层展示嵌套模块例如聚合报告中 depth 6 显示BertSelfAttention前向延迟 16.29 ms 是主要热点展开明细可以看到它内部的 query/key/value 三个 Linear 各自的参数量与延迟从而量化每个算子级子模块的贡献文件里的完整输出还逐项列出了BertLayer内的 LayerNorm、Dropout、Softmax 等结构。汇总报告中值得关注的关系式如下源码见 profiler.py 中print_model_profile的输出逻辑fwd flops per GPU由模型前向的总 MACs×2 得到fwd flops of model fwd flops per GPU * mp_sizefwd FLOPS per GPU fwd flops per GPU / fwd latency后向运算量按2 * fwd flops估算因此bwd FLOPS per GPU 2 * fwd flops / bwd latency前向后向合计按3 * fwd flops / (fwdbwd latency)估算iter latency fwd bwd stepsamples/second (batch size per GPU * world size) / iter latency。该输出直观展示了模型当前执行与硬件理论峰值的差距可用于调整 batch size、数据/模型并行度、系统配置等以获得更优性能。DeepSpeed 团队在开发融合 transformer kernel 时正是依据这类剖析数据BERT 明细显示BertLayer中除了线性层还密集分布着 Dropout、Softmax、LayerNorm这些算子 FLOPs 不高却触发大量 kernel 启动与内存读写这种访问模式非常适合做 kernel fusion相关优化见 bert-pretraining 教程。Flops 测量原理模块级统计 Function 级捕获与既有 FLOPs 计算工具类似DeepSpeed Flops Profiler 直接测量模块前向传播的 FLOPs并把后向传播 FLOPs 估计为前向的2倍。它的设计受 ptflops 启发但存在关键差异这也是其核心价值能直接捕获模块内部调用的torch.nn.functional如F.linear、F.gelu等从而支持自定义模块而无需为其编写专属的 flops 计算函数对 Megatron-LM 这类含ParallelTransformerLayerworks、ParallelSelfAttention、RowParallelLinear等自定义模块的模型ptflops 需要逐个编写定制计算函数而 DeepSpeed Flops Profiler 开箱即用。其实现机制从 profiler.py 中可以清晰看到start_profile()通过_patch_functionals()、_patch_tensor_methods()与_patch_miscellaneous_operations()对torch.nn.functional、torch.matmul/torch.mm/torch.bmm/torch.addmm/torch.einsum乃至einops.einsum做 monkey-patch 包装见 profiler.py并用一个栈式计数器module_flop_count/module_mac_count把算子运算量归属到当前正在前向执行的模块对每个子模块递归注册 forward pre/post hooks计时与运算量累计并额外为 RNN/GRU/LSTM 及其 Cell 变体通过MODULE_HOOK_MAPPING注册专用的运算量计算 hook见 profiler.py原因是 RNN 这类含循环结构、无法由算子包装完整覆盖的模块需要整模块级估算stop_profile()会将所有被包装的函数恢复原状end_profile()再清理模块上临时添加的属性保证剖析结束不污染模型每个模块被独立记录__params__、__expert_params__、__model_expert_params__、__flops__、__macs__与__duration__属性其中对 MoE混合专家层做了专门处理专家参数与普通参数分别计数并考虑 expert parallelism 的分组大小reset_profile中通过参数的group_name前缀ep_size_识别专家并行组见 profiler.py。典型算子估算式MACs 与 flops2×MACs可从各_*_flops_compute函数直接读出线性层按input.numel() * out_features计 MACs卷积按batch × 输出位置数 × 卷积核尺寸 × 输入通道 × 每组滤波器数累乘含 bias 额外计数softmax、dropout、embedding等按input.numel()或 0 计PyTorch 2.0 的scaled_dot_product_attention也被纳入统计。聚合与明细报告的打印逻辑分别位于print_model_aggregated_profile与print_model_profile。单位与数值约定输出中的字符串单位转换集中在 profiler.py数字按 K/M/G/T 分档MACs 记为...MACsFLOPS 记为...FLOPS参数量单位显示为 B即把 1e9 记为1B与业界参数量的“Billion”惯例一致延迟以 s 为单位ms 记为76.67 ms。格式化的辅助函数get_total_flops/get_total_macs/get_total_params/get_total_duration支持as_string开关返回原始数值或人类可读字符串。多 GPU / 多节点与并行规模的影响DeepSpeed Flops Profiler 输出的是per GPU的剖析结果同时报告 world size、data parallel size 与 model parallel size。对运行在多 GPU / 多节点上的模型只有改变模型并行规模例如 Megatron-LM 的--model-parallel-size才会影响剖析出的 FLOPs 与参数量即model_parallel_size * flops total_flopsmodel_parallel_size * parameters total_parameters而数据并行规模或 world sizeGPU/节点数量不影响单卡剖析结果——因为数据并行时每卡持有相同的模型副本、处理各自的 micro batch。从 profiler.py 的输出实现可见world size、dp_size、mp_size、batch size per GPU均取自ds_engine对序列并行Ulysses场景数据并行组的尺寸取 sequence-data-parallel 组大小。因此在阅读输出时请把 “fwd flops per GPU” 与 “fwd flops of model” 区分开二者的比值正是模型并行度mp_size。使用方式一接入 DeepSpeed 训练运行时零代码改动当使用 DeepSpeed 进行模型训练时无需任何用户代码改动只需在 DeepSpeed 配置文件中开启 flops profiler 即可配置节格式如下完整字段语义见 config.json 参考文档的 Flops Profiler 一节{ flops_profiler: { enabled: true, recompute_fwd_factor: 0.0, profile_step: 1, module_depth: -1, top_modules: 1, detailed: true, output_file: null } }各字段含义与默认值如下表默认值取自 constants.py解析逻辑见 config.py参数类型说明默认值enabledboolean是否启用 flops profiler启用后同时会开启 wall_clock_breakdown 计时falserecompute_fwd_factorfloat激活重计算activation recomputation导致的额外前向开销因子。由于存在重计算时反向传播需重新执行部分前向后向总运算量估计为2 recompute_fwd_factor倍的前向 FLOPs0.0profile_stepinteger进行剖析的全局训练步号注意准确计时需要一定的预热步1module_depthinteger打印聚合模块信息时下探的模型深度-1表示从顶层到最内层全部打印-1top_modulesinteger聚合报告中每个深度只展示排序靠前的 Top N 模块1detailedboolean是否打印逐模块的详细报告trueoutput_filestring报告输出文件路径为null时打印到 stdoutnull运行时的触发时机在 engine.py 中只有同时满足“flops profiler 已启用、当前global_steps profile_step、且global_rank 0”三个条件时才会执行start_profile()见 engine.py前向完成后停止剖析、读取get_total_flops()并按配置打印报告、随后end_profile()清理见 engine.py。这意味着多节点/多卡时只有 rank 0 打印报告避免输出风暴剖析在训练进行到profile_step时一次性完成随后自动恢复原状不影响后续训练性能。由于recompute_fwd_factor与激活检查点activation checkpointing相关启用激活重计算的训练任务应将该值设为前向重计算占总前向的比例例如典型重计算场景为 1.0此时后向因子为2 1.0 3见 profiler.py 中bwd_factor的计算。仓库单测 tests/unit/profiling/flops_profiler/test_flops_profiler.py 中也有基于 DeepSpeed 运行时配置的端到端集成用例该测试对一个小模型断言 profiler 输出的 flops/params 落在指定容差范围内可用作参考。实例Megatron-LM 输出解读Megatron-LM 的仓库教程可参见 megatron 教程。一个 12 层 Megatron-LM 模型hidden_size 8192, num_attention_heads 32, batch_size 1024, seq_length 1024的剖析输出节选如下-------------------------- DeepSpeed Flops Profiler -------------------------- Profile Summary at step 10: ... world size: 1 data parallel size: 1 model parallel size: 1 batch size per GPU: 1024 params per gpu: 1.29 M params of model params per GPU * mp_size: 1.29 M fwd MACs per GPU: 41271.95 G fwd flops per GPU: 82543.9 G fwd flops of model fwd flops per GPU * mp_size: 82543.9 G fwd latency: 1.89 s bwd latency: 5.38 s fwd FLOPS per GPU fwd flops per GPU / fwd latency: 43.68 TFLOPS bwd FLOPS per GPU 2 * fwd flops per GPU / bwd latency: 30.7 TFLOPS fwdbwd FLOPS per GPU 3 * fwd flops per GPU / (fwdbwd latency): 34.07 TFLOPS step latency: 34.12 s iter latency: 41.39 s samples/second: 24.74 ----------------------------- Aggregated Profile per GPU ----------------------------- Top 1 modules in terms of params, MACs or fwd latency at different model depths: depth 0: params - {GPT2Model: 1.29 M} MACs - {GPT2Model: 41271.95 GMACs} fwd latency - {GPT2Model: 1.84 s} depth 1: params - {TransformerLanguageModel: 1.29 M} MACs - {TransformerLanguageModel: 39584.03 GMACs} fwd latency - {TransformerLanguageModel: 1.83 s} depth 2: params - {ParallelTransformer: 1.29 M} MACs - {ParallelTransformer: 39584.03 GMACs} fwd latency - {ParallelTransformer: 1.81 s} depth 3: params - {ModuleList: 1.28 M} MACs - {ModuleList: 39584.03 GMACs} fwd latency - {ModuleList: 1.3 s} depth 4: params - {ParallelTransformerLayerPart2: 688.15 k} MACs - {ParallelTransformerLayerPart2: 26388.28 GMACs} fwd latency - {ParallelTransformerLayerPart2: 865.73 ms} depth 5: params - {ParallelMLP: 491.54 k} MACs - {ParallelMLP: 26388.28 GMACs} fwd latency - {ParallelMLP: 849.4 ms}注意 Megatron 是张量并行的自定义并行模块这一实例直接印证了前文所述“自定义并行模块无需手写 flops 计算函数”的能力。其明细报告的阅读注意事项profiler 也会在输出中打印模块内若直接使用torch.nn.functional或裸算子计算 logits如CrossEntropyLoss它们不作为子模块打印但构成了父模块 MACs或延迟与其子模块之和的差值FLOPs 是理论估算值据此算出的 FLOPS 可能大于系统实际吞吐上限明细报告中顶层模块的 fwd latency 是在 PyTorch 模块 forward 处直接捕获的因此小于 Summary 中由 DeepSpeed 计时器在更外层测得的前向延迟。使用方式二脱离 DeepSpeed 运行时独立使用flops profiler 也可作为独立包使用安装 DeepSpeed 后导入flops_profiler包直接调用其 API安装说明见 getting-started 教程。该包的实现位于 deepspeed/profiling/flops_profiler模块文档与源码注释见 README.md 与 profiler.py。推理场景get_model_profile函数剖析已训练模型的推理成本使用get_model_profile函数一次调用即可返回(flops, macs, params)三元组。完整签名与参数语义如下源码见 profiler.py参数默认值说明model必填待剖析的 PyTorchnn.Moduleinput_shapeNone模型的输入张量形状指定后构造一个该形状的全零/随机张量作为唯一位置参数送入模型args[]传给模型的位置参数列表input_shape为None时必填kwargs{}传给模型的关键字参数字典input_shape为None时必填print_profileTrue是否打印模型剖析报告detailedTrue是否打印逐模块明细module_depth-1聚合报告下探深度-1表示直至最内层top_modules1聚合报告每层展示的 Top 模块数warm_up1计时前预热warm-up的次数预热不进入统计as_stringTrue返回值是否格式化为可读字符串如1k、3.14 GMACsoutput_fileNone报告输出路径None时打印到 stdoutignore_modulesNone剖析时忽略的模块类型列表modeforward支持forward普通推理与generate调用model.generate适用于生成式模型注意使用时应把模型放入与训练一致的设备典型写法配合get_accelerator()的设备上下文剖析前函数会把模型切到eval()模式。示例一剖析 AlexNetimport torchvision.models as models import torch from deepspeed.profiling.flops_profiler import get_model_profile from deepspeed.accelerator import get_accelerator with get_accelerator().device(0): model models.alexnet() batch_size 256 flops, macs, params get_model_profile(modelmodel, # model input_shape(batch_size, 3, 224, 224), # input shape to the model. If specified, the model takes a tensor with this shape as the only positional argument. argsNone, # list of positional arguments to the model. kwargsNone, # dictionary of keyword arguments to the model. print_profileTrue, # prints the model graph with the measured profile attached to each module detailedTrue, # print the detailed profile module_depth-1, # depth into the nested modules, with -1 being the inner most modules top_modules1, # the number of top modules to print aggregated profile warm_up10, # the number of warm-ups before measuring the time of each module as_stringTrue, # print raw numbers (e.g. 1000) or as human-readable strings (e.g. 1k) output_fileNone, # path to the output file. If None, the profiler prints to stdout. ignore_modulesNone) # the list of modules to ignore in the profiling示例二剖析基于 Hugging Face Transformers 的 BERT 分类模型当模型前向需要预处理输入如 tokenizer 产出input_ids/attention_mask等 kwargs时可以像下面这样先构造好 kwargs 再传入from functools import partial import torch from transformers import BertForSequenceClassification, BertTokenizer from deepspeed.profiling.flops_profiler import get_model_profile from deepspeed.accelerator import get_accelerator def bert_input_constructor(batch_size, seq_len, tokenizer): fake_seq for _ in range(seq_len - 2): # ignore the two special tokens [CLS] and [SEP] fake_seq tokenizer.pad_token inputs tokenizer([fake_seq] * batch_size, paddingTrue, truncationTrue, return_tensorspt) labels torch.tensor([1] * batch_size) inputs dict(inputs) inputs.update({labels: labels}) return inputs with get_accelerator().device(0): tokenizer BertTokenizer.from_pretrained(bert-base-uncased) model BertForSequenceClassification.from_pretrained(bert-base-uncased) batch_size 4 seq_len 128 enable_profile True if enable_profile: flops, macs, params get_model_profile( model, kwargsbert_input_constructor(batch_size, seq_len, tokenizer), print_profileTrue, detailedTrue, ) else: inputs bert_input_constructor((batch_size, seq_len), tokenizer) outputs model(inputs)训练流程FlopsProfiler类若要在训练循环内剖析模型前向例如只在某个指定 step 统计一次则使用FlopsProfiler类。其方法一览源码见 profiler.pystart_profile(ignore_listNone)开始剖析。会递归为所有模块添加剖析属性并对 torch 函数做 monkey-patchignore_list可传入需要忽略剖析的模块类型列表get_total_flops(as_stringFalse)返回模型前向总浮点运算量get_total_macs(as_stringFalse)返回模型前向总 MACsget_total_params(as_stringFalse)返回每 rank 存储的参数总量含 MoE 专家参数get_total_duration(as_stringFalse)返回模型前向总耗时print_model_profile(profile_step1, module_depth-1, top_modules3, detailedTrue, output_fileNone)打印三份模型剖析报告output_file指定非空路径时会把 stdout 重定向写入该文件并自动创建目录完成后恢复 stdoutstop_profile()停止剖析恢复被 patch 的 torch 函数、移除模块 hooks但保留统计属性以便继续读取结果end_profile()清理剖析期间添加到模型上的全部属性与句柄。应在get_total_flops/get_total_params/print_model_profile之后调用。下面是在典型训练工作流中使用该类的完整示例from deepspeed.profiling.flops_profiler import FlopsProfiler model Model() prof FlopsProfiler(model) profile_step 5 print_profile True for step, batch in enumerate(data_loader): # start profiling at training step profile_step if step profile_step: prof.start_profile() # forward() method loss model(batch) # end profiling and print output if step profile_step: # if using multi nodes, check global_rank 0 as well prof.stop_profile() flops prof.get_total_flops() macs prof.get_total_macs() params prof.get_total_params() if print_profile: prof.print_model_profile(profile_stepprofile_step) prof.end_profile() # runs backpropagation loss.backward() # weight update optimizer.step()多节点训练时建议加上global_rank 0判断只让 rank 0 执行剖析与打印避免多个进程重复统计和输出。工程验证与适用注意事项仓库在 tests/unit/profiling/flops_profiler/test_flops_profiler.py 中提供了一批针对性单测可作为理解与验证行为边界的参考例如对简单模型逐一断言各算子级 flops/macs/params 与手算理论值一致含容差判定如within_range(model.flops_profiler.flops, 200, toleranceTOLERANCE)端到端验证 DeepSpeed 运行时配置方式下的 flops/params 输出get_model_profile推理路径验证验证被多个父模块共享的子模块只被计数一次每个模块持有单一__flops__累加器见 profiler.pyMoE 相关参数统计的正确性。最后需要重申几点使用注意事项避免误读结果FLOPs 为理论估算基于 shape 推导而非真实硬件指令计数因此据此计算的 FLOPS 有可能高于机器实测吞吐明细报告与汇总报告中的 fwd latency 采集点不同二者不可直接混用前者在 PyTorch 模块 forward 捕获后者在 DeepSpeed 引擎层捕获剖析会给模型临时添加 forward hooks 与属性并 patch 全局 torch 函数请在剖析结束后务必调用end_profile()运行时配置方式由引擎自动完成确保后续训练/推理不受影响profiler 功能仍处于积极迭代中本文描述以当前仓库源码为准。通过 Summary、Aggregated、Detailed 三层报告的配合使用你可以定量回答“某一层占了多少算力、哪个模块是延迟瓶颈、距硬件峰值还有多大余量”这类问题从而把优化从“拍脑袋”变成“看数据”无论是调整并行配置、更换层结构还是决定是否对某类模式做 kernel fusion都有的放矢。【免费下载链接】DeepSpeedDeepSpeed is a deep learning optimization library that makes distributed training and inference easy, efficient, and effective.项目地址: https://gitcode.com/GitHub_Trending/de/DeepSpeed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
RELATED

相关推荐

SQL注入攻防实战:从原理分析到预编译防御落地

SQL注入攻防实战:从原理分析到预编译防御落地

SQL注入这四个字,在安全圈里可以说是传家级别的话题了。从我最早接触Web安全开始,SQL注入就是各类漏洞榜单的常客,到现在十几年过去,它依然排在漏洞榜前列。最近还时不时看到某电子文档管理系统接口被通报存在SQL注入漏洞&#xf…

📅 2026/9/9 20:58:10
ADR-323 全解读:RuView 用原生 Rust 构建 RF 姿态推理之后的物理约束精修边界

ADR-323 全解读:RuView 用原生 Rust 构建 RF 姿态推理之后的物理约束精修边界

ADR-323 全解读:RuView 用原生 Rust 构建 RF 姿态推理之后的物理约束精修边界 【免费下载链接】RuView π RuView turns commodity WiFi signals into real-time spatial intelligence, vital sign monitoring, and presence detection — all without a single pix…

📅 2026/9/9 20:58:10
COMSOL仿真环盘结构近场增强:从建模到优化全攻略

COMSOL仿真环盘结构近场增强:从建模到优化全攻略

一束波长632 nm、电场强度1 V/m的红光,照到一个直径120 nm的金盘上,原本平平无奇。可是当这个金盘旁边,多了一个内外径并不大的金环,两者之间隔开10 nm的缝隙,盘与环的电场会在那10 nm的间隙里猛然叠加,增强…

📅 2026/9/9 20:53:10
MORE NEWS

更多资讯

📰

主动调Q固体激光器Matlab仿真:速率方程求解与参数扫描实战

简介:一套面向激光技术学习者和科研人员的主动调Q固体激光器Matlab仿真文件,以四能级系统与声光调Q技术为核心,通过数值模型直观展示粒子数反转、受激辐射及激光脉冲形成过程,是理解激光物理和调Q机制的实用工具。压缩包内共2个文…

📰

西门子S7-200 SMART恒压供水系统:PID整定与泵组调度实战解析

简介:西门子S7-200 SMART恒压供水项目程序包,面向电气工程师、自动化调试人员及水务相关从业者,主要解决多泵恒压供水系统的电机投切、频率调节与压力稳定控制问题。系统采用一台变频器控制一台水泵,共四台主泵、一台辅泵&#xf…

📰

Ionic中嵌入Unity:双向消息桥接与Vuforia AR实践

简介:面向需要将Unity 3D场景嵌入Ionic混合应用的开发者,这份指南演示了如何在Android/iOS端打通Cordova插件与Unity之间的双向消息通道,并已在含Vuforia插件的商业项目中验证。资源共21个文件,压缩包仅424KB,包含7张运…

📰

新款双臂刀削面机拆解:结构原理、选购要点与商用维护指南

新款双臂刀削面机深度拆解:结构原理、选购要点与商用维护实操指南在食堂、面馆后厨待过的人都有体会:刀削面好吃,但人工削面太累。一位熟练师傅一小时削出几十碗,已经气喘吁吁;遇上饭点高峰,窗口挤满人&…

📰

免费AI模型Agnes接入实战:从API申请到Codex集成与限流应对

1. Agnes 到底是什么:先说清楚再上车的免费模型 如果你最近混 AI 相关的社区,应该能在不少群里看到"Agnes"这个名字。有人喊它白嫖神器,有人用它跑自动化脚本,还有人把它接进了 Codex 当免费编码后端。我大概在一个多月…

📰

学术论文写作全流程指南:从逻辑重构到AI辅助润色的实战路径

我手头这篇论文断断续续改了大半年,格式来回调了五遍,审稿意见跑到第二轮。最初被拒稿那阵子,我几乎怀疑自己根本不会写作。后来复盘才发现,问题不一定出在研究设计上,而是出在“讲故事”的方式上。研究做得再扎实&…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬