全面解析机器学习与深度学习中的模型权重文件格式与应用场景
概述
随着机器学习和人工智能技术的飞速发展,高效且安全地存储、共享和部署训练有素的模型的方法变得越来越重要。模型权重文件格式在这个过程中发挥着关键作用。这些格式不仅保存了模型的学习参数,还能够实现可复现性,并且便于在各种不同环境和平台上进行部署。本文将深入探讨行业中最受欢迎的模型权重文件格式,研究它们的起源、结构、用例以及优势。
一、 为何模型权重文件格式至关重要
模型权重格式不仅仅是数据容器。它们:
- 实现工具和框架之间的模型可移植性和互操作性:不同的机器学习框架(如PyTorch、TensorFlow、Keras等)具有各自的特点和优势。模型权重文件格式使得在这些框架之间迁移和共享模型成为可能,极大地促进了技术的交流与发展。
- 保存训练进度,以便进行检查点设置和恢复:在训练大型模型时,可能会耗费大量的时间和计算资源。模型权重文件格式能够保存训练过程中的关键信息,如模型的权重、优化器的状态等,使得在训练中断后可以从中断的地方继续训练,避免了重复训练的麻烦。
- 支持在资源受限的环境中进行部署:在一些应用场景中,如移动设备、嵌入式系统等,计算资源和存储空间可能非常有限。特定的模型权重文件格式可以对模型进行优化,使其在这些资源受限的环境中高效运行,满足实际应用的需求。
- 在共享模型时确保安全性和完整性:当模型需要在不同的用户或组织之间共享时,模型权重文件格式能够保证模型的安全性和完整性,防止模型被篡改或泄露,保护知识产权。
每种格式都是基于特定的目标和权衡设计的,这决定了它们的使用方式和使用位置。
二、 流行模型权重文件格式概述
以下是广泛使用的模型权重格式的总结对比:
格式 | 框架 | 主要用例 | 关键特性 |
---|---|---|---|
.pt / .pth | PyTorch | 训练和推理 | 灵活、可读性强、框架原生 |
.ckpt | TensorFlow | 检查点设置和训练恢复 | 鲁棒性强,适合大型模型 |
.h5 | Keras / TensorFlow | 在一个文件中保存完整模型 | 包括模型、权重和优化器状态 |
.onnx | 跨平台 | 模型互操作性和部署 | 开放标准,硬件优化推理 |
.safetensors | Hugging Face (PyTorch) | 安全且快速地共享模型 | 苹果原生,针对苹果芯片优化 |
.gguf | GGML-based (LLaMA.cpp) | 高效的LLM推理 | 量化就绪,CPU/GPU优化 |
.tflite | TensorFlow Lite | 移动和边缘推理 | 轻量级,硬件加速 |
.engine | TensorRT | GPU推理优化 | 高性能,精度可调的部署 |
.mlmodel | Core ML (Apple) | iOS/macOS部署 | 苹果原生,针对苹果芯片优化 |
三、 Pickle在模型权重文件格式中的作用
Python的pickle模块是许多机器学习文件格式的基础,特别是在PyTorch和更广泛的Python生态系统中。尽管它本身不是一种正式的模型格式,但pickle通常是用于序列化和反序列化模型权重和配置的底层机制。
3.1 什么是Pickle?
Pickle是Python的一个标准库,它将Python对象转换为字节流(序列化),并恢复它们(反序列化)。它允许将对象(如模型权重、整个模型或训练历史记录)保存到磁盘上。
Python中的Pickle序列化和反序列化过程
3.2 Pickle在哪里使用?
- PyTorch:
.pt
和.pth
格式使用pickle
来序列化模型状态字典或整个模型。 - Scikit-learn:模型通常使用
.pkl
保存,这是使用pickle.dump()
的直接结果。 - XGBoost和LightGBM:尽管它们支持原生格式,但在Python环境中,
pickle
有时用于快速保存。
3.3 优点:
- Python原生:对于Python开发者来说,使用起来非常方便,易于上手和集成。
- 灵活:可以存储几乎所有Python对象,包括复杂的模型结构和训练过程中的各种信息。
3.4 缺点:
- 安全风险:从不受信任的来源加载pickle文件可能会执行任意代码,从而带来安全风险。这使得它不适合用于公共共享或面向网络的应用程序,可能会导致数据泄露或恶意代码执行等问题。
- 缺乏互操作性:pickle文件不能轻松地在Python之外或不同框架版本之间加载,限制了其在跨语言和跨框架场景中的应用。
四、 Protocol Buffers在模型权重文件格式中的作用
由Google开发的Protocol Buffers(protobuf
)是一种基础编码格式,通常不是开发者直接用来保存或加载模型权重的文件扩展名。它提供了一种紧凑且高效的二进制序列化机制,非常适合表示模型架构和权重等结构化数据。
4.1 Protocol Buffers在哪里使用:
- TensorFlow
.pb
文件:这些是使用Protobuf序列化的冻结模型,将架构和训练参数结合起来用于部署。 - ONNX(
.onnx
):整个ONNX标准都是基于Protobuf序列化模式构建的。 - Apple Core ML(
.mlmodel
):使用自定义模式下的Protobuf来定义模型组件。
4.2 优点:
- 高效性:Protocol Buffers的二进制序列化机制能够生成紧凑的数据格式,占用存储空间小,传输效率高,适合在分布式系统和网络环境中使用。
- 语言无关性:Protocol Buffers支持多种编程语言,包括C++、Java、Python等,使得不同语言编写的程序能够方便地进行数据交换和通信,提高了跨语言开发的便利性。
- 可扩展性:通过定义清晰的数据结构和字段,Protocol Buffers能够方便地对数据进行扩展和修改,适应不断变化的应用需求,而无需对现有的代码进行大规模的改动。
4.3 缺点:
- 学习成本:对于初学者来说,Protocol Buffers的学习曲线相对较陡,需要花费一定的时间来掌握其基本概念、语法和使用方法。
- 依赖性强:在使用Protocol Buffers时,需要依赖特定的编译器和库来生成代码和进行序列化/反序列化操作,这可能会增加项目的复杂性和依赖管理的难度。
五、 模型权重文件格式的详细探讨
5.1 .pt
/ .pth
(PyTorch)
PyTorch的原生模型权重格式是当今研究和行业中使用最广泛的格式之一。由Facebook AI于2016年推出,.pt
和.pth
格式存储整个模型或仅其状态字典(权重和偏差)。它们依赖于Python的pickle模块进行序列化。
PyTorch的.pt和.pth模型格式
关键特性:
- 高度灵活:便于在研究工作流程中保存和加载模型,支持对模型的各种操作和自定义修改,能够满足不同研究人员和开发者的多样化需求。
- 常与Hugging Face模型一起使用:特别是基于Transformer的架构,在自然语言处理领域得到了广泛的应用,推动了预训练模型的发展和共享。
.pth
和.pt
在功能上是相同的:命名只是约定俗成,开发者可以根据个人喜好或项目规范进行选择。
注意事项:
- 移植性有限:尽管在PyTorch内广泛支持,但这些格式不能原生移植到其他框架,可能会导致在跨框架使用时出现兼容性问题。
- 基于pickle的加载风险:从不受信任的来源加载pickle文件可能会带来安全风险,尤其是当文件来自不可靠的来源时,可能会导致恶意代码执行或数据泄露等问题。
5.2 .ckpt
(TensorFlow)
TensorFlow的检查点格式,以.ckpt
表示,允许模型保存训练状态、权重和优化器配置。每个检查点通常包括三个文件:.data
、.index
和.meta
(对于旧版模型)。
TensorFlow检查点格式表示为.ckpt文件
关键特性:
- 允许从上次停止的地方恢复训练:这对于训练大型模型和存储中间结果非常有用,能够有效避免因意外中断而导致的训练进度丢失,节省时间和计算资源。
- 在Google的BERT和T5等模型中广泛使用:这些模型在自然语言处理领域取得了显著的成果,.ckpt格式为其训练和研究提供了有力支持。
注意事项:
- 不适合部署:检查点主要用于训练过程中的保存和恢复,模型通常需要被转换为TensorFlow的SavedModel格式或
.tflite
等其他格式,以便在实际应用中进行部署。 - 文件管理复杂:由于检查点包含多个文件,文件管理可能较为复杂,需要确保这些文件的完整性和一致性,否则可能会导致模型无法正确加载或恢复。
- 不包含模型架构:检查点文件仅保存模型的权重和训练状态,而不包含模型的架构信息。因此,在加载模型时,需要提供原始的模型代码来重建模型结构,这可能会给模型的共享和迁移带来一定的不便。
5.3 .h5
(HDF5)
被Keras早期采用的.h5
(HDF5)格式允许在一个文件中存储整个模型架构、权重和优化器状态。这种格式直观,便于共享和检查模型组件。
Keras风格的.h5模型文件图标
关键特性:
- 用户友好且文档完善:HDF5格式具有良好的文档支持和丰富的社区资源,使得开发者能够方便地学习和使用。其直观的文件结构也便于对模型进行检查和修改,有助于模型的调试和优化。
- 适用于小型到中型模型:对于规模适中的模型,.h5格式能够提供较好的性能和存储效率,满足大多数常见应用场景的需求。
注意事项:
- 逐渐被TensorFlow的SavedModel格式取代:随着TensorFlow的发展,SavedModel格式逐渐成为主流,它提供了更强大的功能和更好的兼容性,能够更好地满足模型的保存、共享和部署需求。
- 对于大型模型或复杂序列化需求效率不高:在处理大型模型或具有复杂结构的模型时,.h5格式可能会出现性能瓶颈,存储效率和加载速度相对较慢,影响模型的使用体验。
5.4.onnx
(Open Neural Network Exchange)
ONNX是一种由Microsoft和Facebook联合开发的开源格式。它允许在一个框架中训练的模型(如PyTorch)在另一个框架中运行(如TensorFlow或ONNX Runtime),从而促进跨平台兼容性。
ONNX格式实现跨框架模型互操作性
关键特性:
- 开放标准:ONNX作为一种开放的模型格式标准,得到了众多框架和工具的支持,为模型的跨框架共享和部署提供了坚实的基础。
- 硬件优化推理:ONNX Runtime能够针对不同的硬件平台进行优化,提高模型的推理性能,使得模型能够在各种设备上高效运行,满足实际应用中的性能要求。
注意事项:
- 自定义层和操作的兼容性问题:如果模型中包含自定义层或特殊操作,可能需要进行ONNX兼容的重写或扩展,这可能会增加模型转换的复杂性和工作量。
- 转换工具的限制:虽然ONNX提供了丰富的转换工具,但在某些情况下,这些工具可能无法完全准确地转换模型,需要开发者进行手动调整和优化,以确保模型的正确性和性能。
5.5 .safetensors
由Hugging Face创建的.safetensors
解决了基于pickle的格式(如.pt
)的安全风险。它是一种二进制格式,针对安全且快速的张量存储进行了优化,尤其适用于公开共享模型。
安全高效的张量存储
关键特性:
- 零拷贝加载:启用零拷贝加载技术,显著减少模型加载时间,提高模型的加载效率,使得模型能够更快地投入使用。
- 消除代码执行风险:在反序列化过程中不会执行任何代码,从而消除了基于pickle格式可能带来的代码执行风险,提高了模型共享和加载的安全性。
- 成为Hugging Face的Transformers库的默认格式:随着Hugging Face在自然语言处理领域的广泛应用,.safetensors格式得到了越来越多的开发者和研究者的认可和使用,成为了一种重要的模型权重文件格式。
注意事项:
- 仅存储张量:.safetensors格式仅存储模型的张量数据,而不包含模型的架构信息。因此,在加载模型时,需要提供模型的架构代码,这可能会给模型的共享和使用带来一定的不便。
- 对于完整模型序列化不够灵活:虽然在安全性和效率方面表现出色,但在对模型进行完整序列化时,.safetensors格式的灵活性相对较低,可能无法满足一些复杂的模型序列化需求。
5.6 .gguf
(GGML Unified Format)
.gguf
是为高效推理大型语言模型(LLMs)而设计的,它是llama.cpp
生态系统的一部分。它将权重、分词器和元数据整合到一个单一的量化友好文件中。
gguf文件的内部结构[[来源
关键特性:
- 支持多种量化级别:提供Q4、Q5等多种量化级别,能够根据实际需求对模型进行量化,有效减少模型的内存占用和计算需求,提高模型在资源受限环境下的运行效率。
- 适合在资源受限的环境中部署:在CPU/GPU等计算资源有限的设备上,.gguf格式能够充分发挥其优势,使得大型语言模型能够在这些设备上高效运行,为边缘计算和移动设备等应用场景提供了有力支持。
- 在开源LLM社区中广泛使用:得到了Mistral、LLaMA等开源大型语言模型项目的广泛采用,推动了开源LLM社区的发展和繁荣。
注意事项:
- 专为
llama.cpp
和类似推理引擎设计:.gguf格式主要针对llama.cpp
等特定的推理引擎进行优化,对于其他类型的模型或框架,可能无法充分发挥其优势,适用范围相对较窄。 - 不适合训练:该格式主要用于模型的推理阶段,不支持模型的训练过程,因此在模型开发和训练阶段需要使用其他格式进行保存和加载。
5.7.tflite
(TensorFlow Lite)
.tflite
是Google开发的一种FlatBuffer格式,用于优化TensorFlow模型以在边缘和移动设备上运行。它提供了一种高度压缩的模型结构,非常适合在设备上进行推理。
TensorFlow Lite的.tflite文件格式
关键特性:
- 低延迟执行:.tflite格式能够提供低延迟的执行性能,并且支持硬件加速(如NNAPI、GPU、Edge TPU等),使得模型能够在移动设备和嵌入式系统上快速运行,满足实时性要求较高的应用场景。
- 适用于Android和嵌入式系统:针对Android操作系统和嵌入式设备进行了优化,提供了良好的兼容性和支持,使得开发者能够方便地将TensorFlow模型部署到这些平台上。
- 支持后训练量化:通过后训练量化技术,可以在不显著影响模型精度的前提下,进一步减小模型的大小,提高模型的运行效率,降低对设备硬件资源的需求。
注意事项:
- 并非所有TensorFlow操作都受支持:由于.tflite格式对模型进行了优化和转换,部分TensorFlow操作可能无法直接在.tflite模型中使用,需要对模型进行简化或转换,这可能会增加模型部署的复杂性。
- 调试和检查困难:由于.tflite文件采用了紧凑的二进制结构,对模型的调试和检查相对困难,开发者可能需要借助专门的工具或方法来进行模型的调试和优化。
5.8.engine
(TensorRT)
TensorRT是NVIDIA的高性能深度学习推理库,.engine
是其优化的运行时格式。模型通常从.onnx
或.pb
等格式导出,然后编译成.engine文件,以在NVIDIA GPU上实现超快速推理。
TensorRT的.engine工作流程
关键特性:
- 高性能:TensorRT能够将预训练模型转换为高度优化的执行图,充分发挥NVIDIA GPU的计算能力,显著提高模型的推理速度和性能,满足高吞吐量和低延迟的应用需求。
- 支持多种精度模式:提供FP32、FP16和INT8等多种精度模式,开发者可以根据实际需求选择合适的精度模式,在性能和精度之间进行权衡,以达到最佳的推理效果。
- 适合生产部署:专为生产环境中的GPU加速部署而设计,能够有效提高模型的稳定性和可靠性,降低推理延迟,提高系统的整体性能和效率。
常见用例:
- 实时目标检测:在Jetson设备等边缘计算平台上,利用TensorRT的高性能推理能力,可以实现对实时视频流的快速目标检测和识别,满足安防监控、智能交通等领域的实时性要求。
- 云环境中的高吞吐量AI推理:在具有GPU的云环境中,TensorRT能够充分发挥GPU的并行计算优势,实现高吞吐量的AI推理服务,满足大规模数据处理和实时响应的需求。
- 机器人技术、汽车AI和其他对延迟敏感的任务:在这些对延迟要求极高的应用场景中,TensorRT的低延迟推理能力能够为系统提供快速的决策支持,提高系统的响应速度和效率。
注意事项:
- 硬件和版本依赖性:.engine文件是针对特定的GPU架构和TensorRT版本生成的,具有较强的硬件和版本依赖性。如果在不同的GPU架构或TensorRT版本上使用,需要重新生成相应的.engine文件,这可能会增加模型部署的复杂性和工作量。
- 仅适用于训练后的部署:TensorRT主要用于模型的推理阶段,不支持模型的训练过程。因此,在模型开发和训练阶段需要使用其他框架和工具进行训练,然后将训练好的模型转换为TensorRT支持的格式进行部署。
5.8.mlmodel
(Core ML)
Apple的.mlmodel
格式是为在Apple生态系统内部署ML模型而设计的,包括iOS、macOS和watchOS。它允许使用Xcode和Swift无缝集成到应用程序中。
Apple Core ML的.mlmodel格式
关键特性:
- 苹果原生支持:作为Apple生态系统的一部分,.mlmodel格式得到了苹果公司的原生支持,能够与iOS、macOS和watchOS等平台无缝集成,为开发者提供了一种便捷、高效的方式来将机器学习模型集成到苹果设备的应用程序中。
- 针对Apple Silicon性能优化:针对苹果的M1芯片等Apple Silicon进行了专门的性能优化,能够充分发挥苹果设备的硬件性能,提高模型的推理速度和效率,为用户提供更好的使用体验。
- 与Core ML工具兼容:与Core ML工具(如coremltools)紧密集成,提供了丰富的模型转换、验证和优化功能,使得开发者能够方便地将不同框架训练好的模型转换为.mlmodel格式,并进行进一步的优化和调试。
注意事项:
- 仅限于Apple平台:.mlmodel格式是专门为苹果生态系统设计的,仅适用于iOS、macOS和watchOS等苹果平台,无法在其他操作系统或平台上使用,限制了其应用范围。
- 需要使用转换工具进行模型准备:虽然Core ML工具提供了强大的模型转换功能,但在将模型转换为.mlmodel格式之前,可能需要对模型进行一定的预处理和优化,以确保模型能够在苹果设备上正确运行,这可能会增加模型部署的复杂性。
六、 选择正确的格式
您选择的模型权重文件格式应取决于:
- 框架和训练流程:不同的机器学习框架具有各自的特点和优势,选择与框架兼容的权重文件格式能够确保模型的正确保存和加载,提高开发效率。例如,如果您使用PyTorch进行模型训练,则可以选择
.pt
或.pth
格式;而如果您使用TensorFlow,则可以选择.ckpt
或.h5
格式。 - 目标部署平台:根据模型的部署目标平台(如移动设备、边缘计算设备、服务器等),选择适合该平台的权重文件格式。例如,对于移动设备和边缘计算设备,可以选择
.tflite
或.engine
等轻量级格式;而对于服务器端的部署,则可以选择.onnx
或.pb
等格式。 - 安全性和可移植性要求:如果模型需要在不同的用户或组织之间共享,或者需要在不同的框架之间迁移,则需要考虑权重文件格式的安全性和可移植性。例如,.safetensors格式能够提供较高的安全性,而ONNX格式则具有良好的跨框架兼容性。
- 性能限制:根据模型的性能要求(如推理速度、内存占用等),选择能够满足性能需求的权重文件格式。例如,对于对推理速度要求较高的应用场景,可以选择TensorRT的
.engine
格式或针对特定硬件优化的格式(如.mlmodel
格式针对Apple Silicon的优化)。
以下是一些常见场景的推荐格式:
场景 | 推荐格式 |
---|---|
使用PyTorch进行训练 | .pt / .safetensors |
TensorFlow模型检查点 | .ckpt |
在Keras中共享模型 | .h5 |
跨框架部署 | .onnx |
边缘推理(Android) | .tflite |
通过Hugging Face安全共享 | .safetensors |
在CPU/GPU上进行量化的LLMs | .gguf |
GPU加速部署 | .engine |
iOS/macOS应用 | .mlmodel |
结论
了解模型权重文件格式对于高效地进行模型训练、共享和部署至关重要。每种格式都针对特定的用例和环境进行了优化,具有各自的优势和局限性。在实际应用中,开发者需要根据项目的具体需求和目标,综合考虑框架兼容性、目标部署平台、安全性和性能等因素,选择最适合的模型权重文件格式。只有选择正确的格式,才能确保模型在训练、共享和部署过程中的高效性、可移植性和安全性,充分发挥模型的价值,推动机器学习和人工智能技术在各个领域的广泛应用。
相关文章:
全面解析机器学习与深度学习中的模型权重文件格式与应用场景
概述 随着机器学习和人工智能技术的飞速发展,高效且安全地存储、共享和部署训练有素的模型的方法变得越来越重要。模型权重文件格式在这个过程中发挥着关键作用。这些格式不仅保存了模型的学习参数,还能够实现可复现性,并且便于在各种不同环…...
鸿蒙OSUniApp 实现的地图定位与导航功能#三方框架 #Uniapp
UniApp 实现的地图定位与导航功能 随着移动互联网的发展,地图定位与导航功能已成为众多应用的标配。本文将详细介绍如何在 UniApp 框架下实现地图定位与导航功能,并探讨如何适配鸿蒙系统,助力开发者打造更加流畅的地图体验。 前言 最近在做一…...
【HarmonyOS 5】鸿蒙星闪NearLink详解
【HarmonyOS 5】鸿蒙星闪NearLink详解 一、前言 鸿蒙星闪NearLink Kit 是 HarmonyOS 提供的短距离通信服务,支持星闪设备间的连接、数据交互。例如,手机可作为中心设备与外围设备(如鼠标、手写笔、智能家电、车钥匙等)通过星闪进…...
Java并发编程面试题总结
目录 线程有哪几种状态?状态如何流转? 创建线程的方式? 多线程有什么应用? 线程池的好处? 线程池的七个参数? 为什么不推荐使用jdk的Executors创建线程池? 线程池的执行流程? 任务拒绝策略有哪些,怎么选择? 线程池的核心线程数和最大线程数怎么设定…...
LAMP项目部署实战
一、LAMP部署前期准备 1.1 关闭防火墙 # systemctl stop firewalld # systemctl disable firewalld 1.2 关闭SELinux SELinux(Security-EnhancedLinux)是美国国家安全局(NSA)对于强制访问控制的实现,是Linux历史上最杰出的新安全子系统。 …...
Dify与n8n全面对比指南:AI应用开发与工作流自动化平台选择【2025最新】
Dify与n8n全面对比指南:AI应用开发与工作流自动化平台选择【2025最新】 随着AI技术与自动化工具的迅速发展,开发者和企业面临着多种平台选择。Dify和n8n作为两个备受关注的自动化平台,分别专注于不同领域:Dify主要面向AI应用开发&…...
VBA_NZ系列工具NZ10:VBA压缩与解压工具
我的教程一共九套及VBA汉英手册一部,分为初级、中级、高级三大部分。是对VBA的系统讲解,从简单的入门,到数据库,到字典,到高级的网抓及类的应用。大家在学习的过程中可能会存在困惑,这么多知识点该如何组织…...
EFT不过整改思路与调试经验
EFT是如何影响EUT的: EFT试验是为了验证电气和电子设备对诸如来自切换瞬态过程(切断感性负载、继电器触点弹跳等)的各种类型瞬变骚扰的抗扰度。EFT干扰是在电路中感性负载断开时产生的,它的特点是干扰信号不是单个脉而是一连串的脉冲群。EFT 干扰可以在…...
2.安卓逆向2-adb指令
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 内容参考于:图灵Python学院 工具下载: 链接:https://pan.baidu.com/s/1bb8NhJc9eTuLzQr39lF55Q?pwdzy89 提取码࿱…...
VSCode CMake工作流
Foreword 之前看到CMake有这么多选项,感觉不简单,还是看下别人在这里设计了多少东西 CMake 整体来说CMake遵循这样一套结构 操作-操作预设(如果有的话)-操作目标(如果有的话)比如 Configure-Configure…...
【上位机——WPF】App.xml和Application类简介
App.xml和Application类简介 概述App.xamlApp.xaml.cs 入门代码App.xamlMainWindow.xml Application生命周期窗体的声明周期 概述 xaml类型的文件包含两部分,一部分以.xaml扩展名结尾的前端代码,另一部分以.xaml.cs结尾的后端代码,通常我们也…...
MySQL 8.0 OCP 1Z0-908 101-110题
Q101.which two queries are examples of successful SQL injection attacks? A.SELECT id, name FROM backup_before WHERE name‘; DROP TABLE injection; --’; B. SELECT id, name FROM user WHERE id23 oR id32 OR 11; C. SELECT id, name FROM user WHERE user.id (SEL…...
Linux/Centos7离线安装并配置MySQL 5.7
文章目录 前言1、安装包下载2、卸载MariaDB3、创建MySQL用户4、上传安装包5、创建数据目录和配置文件6、安装MySQL7、启动MySQL8、初始化MySQL9、退出验证新密码10、创建普通用户和库11、测试普通用户和库总结 前言 博主参考了一些大佬的文章,部分收费的就看不了了&…...
在Angular中使用Leaflet构建地图应用
Leaflet是一个用于创建地图的JavaScript库,它包含许多功能,并且非常适用于移动设备。 准备 nodejs: v20.15.0 npm: 10.7.0 angular: 19.2.10 创建一个地图应用工程 npx angular/cli new my-leaflet-app --stylecss --routingfalse --skip-tests提示 …...
GPU与NPU异构计算任务划分算法研究:基于强化学习的Transformer负载均衡实践
点击 “AladdinEdu,同学们用得起的【H卡】算力平台”,H卡级别算力,按量计费,灵活弹性,顶级配置,学生专属优惠。 引言 在边缘计算与AI推理场景中,GPU-NPU异构计算架构已成为突破算力瓶颈的关键技…...
iOS 抓包实战:从 Charles 到Sniffmaster 的日常工具对比与使用经验
iOS 抓包实战:从 Charles 到抓包大师 Sniffmaster 的日常工具对比与使用经验 抓包这件事,不是高级黑客才要做的。作为一名移动端开发,我几乎每天都要和网络请求打交道,尤其是 HTTPS 请求——加密、重定向、校验证书,各…...
【微服务】SpringBoot + Docker 实现微服务容器多节点负载均衡详解
目录 一、前言 二、前置准备 2.1 基本环境 2.2 准备一个springboot工程 2.2.1 准备几个测试接口 2.3 准备Dockerfile文件 2.4 打包上传到服务器 三、制作微服务镜像与运行服务镜像 3.1 拷贝Dockerfile文件到服务器 3.2 制作服务镜像 3.3 启动镜像服务 3.4 访问一下服…...
【Linux系统】从 C 语言文件操作到系统调用的核心原理
文章目录 前言lesson 15_基础IO一、共识原理二、回顾C语言接口2.1 文件的打开操作2.2 文件的读取与写入操作2.3 三个标准输入输出流 三、过渡到系统,认识文件系统调用3.1 open 系统调用1. 比特位标志位示例 3.2 write 系统调用1. 模拟实现 w 选项2. 模拟实现 a 选项…...
俄罗斯方块算法
俄罗斯方块是一款风靡全球 38 年的经典益智游戏,凭借其简单易学但难于精通的特点,成为游戏史上的不朽之作。 游戏界面与规则 游戏界面为 20 行10 列的可视区域。横向 X 轴区间为 [0,9],共 10 列;纵向 Y 轴区间为 [0&a…...
Node.js 循环依赖问题详解:原理、案例与解决方案
文章目录 一、什么是循环依赖?二、循环依赖的典型表现三、解决方案四、如何检测循环依赖五、循环依赖的隐藏危害 一、什么是循环依赖? 当两个或者多个模块互相直接或者间接引用时,就会形成循环依赖。例如: A.js → 依赖 → B.js…...
Linux系统编程——vfork函数的使用方法以及与fork函数的区别
vfork() 是 Linux 系统编程中与 fork() 类似的系统调用,用于创建一个新的子进程。它们都能创建子进程,但在实现机制和使用场景上有明显区别。 以下是对 vfork() 的详细介绍,包括: 使用方法 注意事项 与 fork() 的联系与区别 使…...
.NET 无侵入自动化探针原理与主流实现详解
目录 引言 一、.NET 无侵入自动化探针的原理 1.1 CLR Profiling API 核心机制 示例代码 1.2 CLR Instrumentation 核心机制 示例代码 1.3 反射和动态代理 核心机制 示例代码 1.4 DiagnosticSource 核心机制 示例代码 二、主流实现与工具 2.1 AppDynamics 实现原…...
大数据:新能源汽车宇宙的未来曲率引擎
** 发布日期:2025-05-14** 关键词:大数据、新能源、机器学习、碳中和、CSDN爆款 1. 大数据科普:定义、特征与技术核心 1.1 什么是大数据? 大数据(Big Data)指规模巨大、类型多样、生成速度快且价值密度低…...
创建你的第一个MCP服务
创建你的第一个MCP服务 Model Context Protocol (MCP) 中国天气查询服务创建教程 什么是 Model Context Protocol (MCP) Model Context Protocol (MCP) 是一种开放标准协议,允许大型语言模型(LLM)如 Claude 与外部系统和数据源进行交互。通…...
说一说Node.js高性能开发中的I/O操作
众所周知,在软件开发的领域中,输入输出(I/O)操作是程序与外部世界交互的重要环节,比如从文件读取数据、向网络发送请求等。这段时间,也指导项目中一些项目的开发工作,发现在Node.js运用中&#…...
小白入门:GitHub 远程仓库使用全攻略
一、Git 核心概念 1. 三个工作区域 工作区(Working Directory):实际编辑文件的地方。 暂存区(Staging Area):准备提交的文件集合(使用git add操作)。 本地仓库(Local…...
Protobuf3协议关键字详解与应用实例
一、核心语法与基础关键字 syntax 声明协议版本,必须为文件的第一行非空、非注释内容。 syntax "proto3"; // 显式指定proto3语法,否则编译器默认使用proto2message 定义消息类型,包含一组结构化字段。支持嵌套消息定义ÿ…...
阿克曼-幻宇机器人系列教程3- 机器人交互实践(Message)
上一篇文章介绍了如何通过topic操作命令实现与机器人的交互,本篇我们介绍如何通过Message(即topic的下一级)实现与机器人的交互。 和topic一样,首先在一个终端通过ssh命令登录机器人、启动机器人,然后打开另外一个终端…...
Leetcode刷题 | Day63_图论08_拓扑排序
一、学习任务 拓扑排序代码随想录 二、具体题目 1.拓扑排序117. 软件构建 【题目描述】 某个大型软件项目的构建系统拥有 N 个文件,文件编号从 0 到 N - 1,在这些文件中,某些文件依赖于其他文件的内容,这意味着如果文件 A 依…...
[Harmony]获取资源文件中.txt文件中的字符串
txt文件 src/main/resources/rawfile/userInfo.txt {"Code": 200,"Msg": "登录成功","RetData": {"Name": "shq","Phone": "18511111111","PostName": "按摩技师",&qu…...
matlab多项式
1. 多项式表示 多项式用行向量表示,按降幂排列系数。例如,多项式 3x22x1 表示为 [3 2 1]。 2. 创建多项式 直接输入系数:如 p [1 -3 3 -1] 表示 x3−3x23x−1。由根创建:使用 poly 函数。例如,根为 [1, 1, 1]&…...
手搓传染病模型(SEI - SEIAR )
在传染病防控的前沿研究中,构建精准的数学模型对于理解疾病传播机制、预测疫情走势以及制定有效干预策略至关重要。SEI - SEIAR 模型(易感媒介 \(S_m\) - 潜伏媒介 \(E_m\) - 感染媒介 \(I_m\) - 易感人群 S - 潜伏人群 E - 有症状感染者 I - 无症状感染…...
Ubuntu 安装 Redis
1. 下载 redis 下载地址:https://github.com/redis/redis 2. 解压 redis 把下载的软件包,上传到服务器的 /usr/local 目录中,执行解压命令 tar -zxvf redis-8.0.1.tar.gz 3. 安装 redis 安装依赖 sudo apt-get updatesudo apt-get ins…...
【QGIS二次开发】地图显示与交互-03
系列目录: 【QGIS二次开发】地图显示与交互-01_qgis二次开发加载地图案例-CSDN博客 【QGIS二次开发】地图显示与交互-02_setlayerlabeling-CSDN博客 3. 地图符号与色表 3.1 矢量图层符号设置 任务要求:双击图层树节点,实现图层中图元的符…...
28、动画魔法圣典:Framer Motion 时空奥义全解——React 19 交互动效
"在数字世界的夹缝中,存在着连接现实与虚拟的魔法纽带——这便是 Framer Motion 的时空秘术。" ——《前端魔法师手札卷七》 一、时空裂隙动画 - FLIP量子跃迁术 1. FLIP时空扭曲原理 <motion.divlayout // 开启时空裂隙transition{{type: "spr…...
Ken Thompson 和 Dennis Ritchie
Ken Thompson(肯汤普逊)和Dennis Ritchie(丹尼斯里奇)是计算机科学领域的两位传奇人物,他们对现代计算机技术的发展产生了深远影响。以下是关于他们的详细介绍: 1. Ken Thompson 出生&am…...
SQL:MySQL函数:条件函数(Conditional Functions)
目录 什么是条件函数? 常用 MySQL 条件函数总览表 1️⃣ IF() – 条件判断函数(If Statement) 2️⃣ IFNULL() – 空值判断与替代函数(If Null) 3️⃣ NULLIF() – 相等返回 NULL(Null If Equal&#…...
初识Linux · IP分片
目录 前言: IP分片 分片vs不分片 如何分片 分片举例 三个字段 前言: 前文IP协议上和IP协议下我们已经把IP协议的报头的大多数字段介绍了,唯独有三个字段现在还有介绍,即16位标识,8位协议,13位片偏移…...
TCP 粘包
一、粘包问题详解 1. 粘包的概念 定义: 指在 TCP 通信中,由于发送方和接收方的读写速度、数据量不一致,导致多个数据包被错误地合并成一个数据包处理的现象。产生原因: TCP 是流式协议(无边界)࿰…...
第一个优化
agent项目 tool 调用外部服务时 选择了指数回避的重试机制 优化点:延迟时间那 加了一个随机的时间抖动 指数回避 我第一眼看到 这不就是 tcp重连机制吗 其实就是 如果当时网络波动 网况不好 || 服务正忙 ,可以不急着在这个时候选择多次重试,…...
LabVIEW的CAN通讯测试程序
该程序是基于 NI LabVIEW 平台开发的 CAN(Controller Area Network,控制器局域网)通讯测试程序。主要功能是对 CAN 通讯过程进行模拟、数据传输与验证,确保 CAN 通讯的正常运行和数据的准确传输。 程序详细说明 接口选择ÿ…...
视频质量分析时,遇到不同分辨率的对照视频和源视频,分辨率对齐的正确顺序。
背景 我们平时在做视频转码后,会用VMAF/PSNR得评分工具进行视频对比的评分,但是这几种客观评分方式都有一个要求就是分辨率要一模一样,因为这样才对像素点做数学运算。 但是分辨率对齐其实有两种选择,例如源视频是1080P…...
Kotlin并发请求的一些知识记录
private suspend fun fetchDataConcurrently(list: MutableList<MyType>,onRequestResult: (Int, List<MyType>?) -> Unit //高阶函数回调) {val deferredList mutableListOf<Deferred<MyType?>>()// 设定任务超时时间为12秒,并使用 …...
Ubuntu 编译SRS和ZLMediaKit用于视频推拉流
SRS实现视频的rtmp webrtc推流 ZLMediaKit编译生成MediaServer实现rtsp推流 SRS指定某个固定网卡,修改程序后重新编译 打开SRS-4.0.0/trunk/src/app/srs_app_rtc_server.cpp,在 232 行后面添加: ZLMediaKit编译后文件存放在ZLMediakit/rele…...
typora免费获取序列号
这个方法不是唯一,但是所需要的时长很短。废话不多说 1.下载网盘文件 通过网盘分享的文件:typora破解 链接: https://pan.baidu.com/s/1KQnSUV3V0uBGpLc_iz2UFQ?pwdetc4 提取码: etc4 2.把解压下来的文件放到装软件的文件夹 3. 打开cmd,…...
C++23 新增的查找算法详解:ranges::find_last 系列函数
文章目录 引言C Ranges 库简介ranges::find_last、ranges::find_last_if 和 ranges::find_last_if_not 概述ranges::find_last示例代码代码解释 ranges::find_last_if函数签名参数解释示例代码代码解释 ranges::find_last_if_not示例代码代码解释 使用场景总结 引言 在 C 的发…...
11.基础IO(上)
一、文件概念 对文件归类认知: 对于 0KB 的空文件是占用磁盘空间的 文件是文件属性(元数据)和文件内容的集合(文件 属性(元数据) 内容) 所有的文件操作本质是文件内容操作和文件属性操作。 …...
本地部署Firecrawl+Dify调用踩坑记录
最近自己研究Dify,使用到Firecrawl这个比较好用的工具。用Firecrawl官网的不知道为什么总是卡住得不到结果,于是我打算自己去本地部署一个。好家伙真给我人搞麻了,太多问题了。 我是在京东云上面租的一台服务器。 首先就是docker的安装&…...
硬盘坏了电脑会出现哪些明显现象?机械和固态可不一样
机械硬盘(HDD)损坏的常见表现 >启动异常:如果是启动盘,可能会遭遇系统无法启动,提示“No Bootable Device”“Operating System not found”或“Sector not found”等错误;以及BIOS无法识别硬盘&#x…...
数据驱动下的具身智能进化范式
数据驱动技术与挑战...