GGUF 文件格式全解析
在机器学习领域,模型的存储和部署一直是关键环节。随着大语言模型 (LLM) 的广泛应用,如何高效地存储和加载这些复杂的模型成为一个亟待解决的问题。GGUF(GGML Universal Format)作为一种新兴的二进制文件格式,旨在解决传统 GGML 及其衍生格式(如 GGMF 和 GGJT)的局限性,为模型推理提供更高效、更灵活的解决方案。
官方介绍:https://github.com/ggml-org/ggml/blob/master/docs/gguf.md
GGUF 文件格式全解析
- 一、关于 GGUF
- 二、GGUF 规范
- 三、GGUF 命名约定
- 四、GGUF 文件结构
一、关于 GGUF
GGUF 是一种用于存储模型以便与 GGML 及其基于 GGML 的执行器进行推理的文件格式。GGUF 是一种二进制格式,设计目的是为了快速加载和保存模型,并便于读取。模型通常使用 PyTorch 或其他框架开发,然后转换为 GGUF 以在 GGML 中使用。
它是 GGML、GGMF 和 GGJT 的后继文件格式,旨在通过包含加载模型所需的所有信息来消除歧义,同时设计为可扩展,以便在不破坏兼容性的情况下为模型添加新信息。
二、GGUF 规范
GGUF 是一种基于现有 GGJT 格式的格式,但对其进行了一些更改,使其更具扩展性和易用性。以下是期望的功能:
- 单文件部署:易于分发和加载,不需要额外的外部文件提供附加信息。
- 可扩展性:可以在不破坏现有模型兼容性的情况下,为基于 GGML 的执行器添加新功能或为 GGUF 模型添加新信息。
- mmap 兼容性:模型可以使用 mmap 加载,以实现快速加载和保存。
- 易于使用:通过少量代码即可轻松加载和保存模型,无需外部库,且不受所用语言限制。
- 完整信息:加载模型所需的所有信息都包含在模型文件中,用户无需提供额外信息。
GGJT 与 GGUF 的关键区别在于,超参数(现称为元数据)使用了键值结构,而不是无类型的数值列表。这允许在不破坏现有模型兼容性的情况下添加新元数据,并为模型添加可能对推理或识别模型有用的附加信息。
三、GGUF 命名约定
GGUF 遵循 .gguf 的命名约定,其中每个组件如果存在则由 - 分隔。最终目的是让人类能够一目了然地了解模型的最重要细节。由于现有 GGUF 文件名的多样性,这一命名约定并非旨在实现完美的字段解析。
组件包括:
- BaseName:模型基础类型或架构的描述性名称。
- 可从 GGUF 元数据 general.basename 派生,将空格替换为短划线。
- SizeLabel:参数权重类别(适用于排行榜),表示为 x。
- 可从 GGUF 元数据 general.size_label 派生(若存在),或在缺失时计算。
- 支持带单个字母比例前缀的四舍五入小数点计数,以辅助显示浮点指数,如下所示:
- Q:千万亿参数。
- T:万亿参数。
- B:十亿参数。
- M:百万参数。
- K:千参数。
- 可根据需要附加额外的 - 来表示其他感兴趣的属性。
- FineTune:模型微调目标的描述性名称(例如 Chat、Instruct 等)。
- 可从 GGUF 元数据 general.finetune 派生,将空格替换为短划线。
- Version:(可选)表示模型版本号,格式为 v.。
- 如果模型缺少版本号,则假定为 v1.0(首次公开发布)。
- 可从 GGUF 元数据 general.version 派生。
- Encoding:表示应用于模型的权重编码方案。内容、类型混合和排列由用户代码决定,可能因项目需求而异。
- Type:表示 GGUF 文件的类型及其预期用途。
- 如果缺失,则文件默认是一个典型的 GGUF 张量模型文件。
- LoRA:GGUF 文件是一个 LoRA 适配器。
- vocab:仅包含词汇表数据和元数据的 GGUF 文件。
- Shard:(可选)表示模型已被分成多个分片,格式为 -of-。
- ShardNum:此模型中的分片位置,必须为 5 位数字,用零填充。
- 分片编号始终从 00001 开始(例如,第一个分片始终为 00001-of-XXXXX,而不是 00000-of-XXXXX)。
- ShardTotal:此模型中的分片总数,必须为 5 位数字,用零填充。
- ShardNum:此模型中的分片位置,必须为 5 位数字,用零填充。
验证上述命名约定
至少,所有模型文件应包含 BaseName、SizeLabel 和 Version,以便轻松验证其是否符合 GGUF 命名约定。例如,如果省略 Version,则 Encoding 可能被误认为是 FineTune。
可以使用以下正则表达式进行验证:^(?<BaseName>[A-Za-z0-9\s]*(?:(?:-(?:(?:[A-Za-z\s][A-Za-z0-9\s]*)|(?:[0-9\s]*)))*))-(?:(?<SizeLabel>(?:\d+x)?(?:\d+\.)?\d+[A-Za-z](?:-[A-Za-z]+(\d+\.)?\d+[A-Za-z]+)?)(?:-(?<FineTune>[A-Za-z0-9\s-]+))?)?-(?:(?<Version>v\d+(?:\.\d+)*))(?:-(?<Encoding>(?!LoRA|vocab)[\w_]+))?(?:-(?<Type>LoRA|vocab))?(?:-(?<Shard>\d{5}-of-\d{5}))?\.gguf$
,它将检查 BaseName、SizeLabel 和 Version 是否按照正确顺序存在。
例如:
- Mixtral-8x7B-v0.1-KQ2.gguf:
- 模型名称:Mixtral
- 专家数量:8
- 参数数量:7B
- 版本号:v0.1
- 权重编码方案:KQ2
- Hermes-2-Pro-Llama-3-8B-F16.gguf:
- 模型名称:Hermes 2 Pro Llama 3
- 专家数量:0
- 参数数量:8B
- 版本号:v1.0
- 权重编码方案:F16
- 分片:无
- Grok-100B-v1.0-Q4_0-00003-of-00009.gguf:
- 模型名称:Grok
- 专家数量:0
- 参数数量:100B
- 版本号:v1.0
- 权重编码方案:Q4_0
- 分片:共 9 个分片中的第 3 个
四、GGUF 文件结构
GGUF 文件结构如下。它们使用由 general.alignment 元数据字段指定的全局对齐(下文称为 ALIGNMENT)。必要时,文件会用 0x00 字节填充至 general.alignment 的下一个倍数。
字段(包括数组)按顺序写入,除非另有说明,否则不进行对齐。
模型默认使用小端序(little-endian)。它们也可以使用大端序(big-endian)以适应大端序计算机;在这种情况下,所有值(包括元数据值和张量)也将是大端序。目前无法确定模型是否为大端序,这一问题可能在未来版本中得到修正。如果未提供额外信息,则假定模型为小端序。
enum ggml_type: uint32_t {GGML_TYPE_F32 = 0,GGML_TYPE_F16 = 1,GGML_TYPE_Q4_0 = 2,GGML_TYPE_Q4_1 = 3,// GGML_TYPE_Q4_2 = 4, 支持已移除// GGML_TYPE_Q4_3 = 5, 支持已移除GGML_TYPE_Q5_0 = 6,GGML_TYPE_Q5_1 = 7,GGML_TYPE_Q8_0 = 8,GGML_TYPE_Q8_1 = 9,GGML_TYPE_Q2_K = 10,GGML_TYPE_Q3_K = 11,GGML_TYPE_Q4_K = 12,GGML_TYPE_Q5_K = 13,GGML_TYPE_Q6_K = 14,GGML_TYPE_Q8_K = 15,GGML_TYPE_IQ2_XXS = 16,GGML_TYPE_IQ2_XS = 17,GGML_TYPE_IQ3_XXS = 18,GGML_TYPE_IQ1_S = 19,GGML_TYPE_IQ4_NL = 20,GGML_TYPE_IQ3_S = 21,GGML_TYPE_IQ2_S = 22,GGML_TYPE_IQ4_XS = 23,GGML_TYPE_I8 = 24,GGML_TYPE_I16 = 25,GGML_TYPE_I32 = 26,GGML_TYPE_I64 = 27,GGML_TYPE_F64 = 28,GGML_TYPE_IQ1_M = 29,GGML_TYPE_COUNT,
};enum gguf_metadata_value_type: uint32_t {// 值是 8 位无符号整数。GGUF_METADATA_VALUE_TYPE_UINT8 = 0,// 值是 8 位有符号整数。GGUF_METADATA_VALUE_TYPE_INT8 = 1,// 值是 16 位无符号小端整数。GGUF_METADATA_VALUE_TYPE_UINT16 = 2,// 值是 16 位有符号小端整数。GGUF_METADATA_VALUE_TYPE_INT16 = 3,// 值是 32 位无符号小端整数。GGUF_METADATA_VALUE_TYPE_UINT32 = 4,// 值是 32 位有符号小端整数。GGUF_METADATA_VALUE_TYPE_INT32 = 5,// 值是 32 位 IEEE754 浮点数。GGUF_METADATA_VALUE_TYPE_FLOAT32 = 6,// 值是布尔值。// 1 字节值,其中 0 表示假,1 表示真。// 其他任何值均无效,应视为模型无效或读取器有错误。GGUF_METADATA_VALUE_TYPE_BOOL = 7,// 值是 UTF-8 非空终止字符串,前置长度。GGUF_METADATA_VALUE_TYPE_STRING = 8,// 值是其他值的数组,前置长度和类型。// 数组可以嵌套,数组长度是元素数量而非字节数。GGUF_METADATA_VALUE_TYPE_ARRAY = 9,// 值是 64 位无符号小端整数。GGUF_METADATA_VALUE_TYPE_UINT64 = 10,// 值是 64 位有符号小端整数。GGUF_METADATA_VALUE_TYPE_INT64 = 11,// 值是 64 位 IEEE754 浮点数。GGUF_METADATA_VALUE_TYPE_FLOAT64 = 12,
};// GGUF 中的字符串。
struct gguf_string_t {// 字符串的字节长度。uint64_t len;// UTF-8 非空终止字符串。char string[len];
};union gguf_metadata_value_t {uint8_t uint8;int8_t int8;uint16_t uint16;int16_t int16;uint32_t uint32;int32_t int32;float float32;uint64_t uint64;int64_t int64;double float64;bool bool_;gguf_string_t string;struct {// 任何值类型均有效,包括数组。gguf_metadata_value_type type;// 元素数量而非字节数uint64_t len;// 值数组。gguf_metadata_value_t array[len];} array;
};struct gguf_metadata_kv_t {// 元数据的键。它是一个标准的 GGUF 字符串,但有以下限制:// - 必须是有效的 ASCII 字符串。// - 必须是层次键,每段为 `lower_snake_case`,由 `.` 分隔。// - 长度最多为 2^16-1/65535 字节。// 不遵循这些规则的键均无效。gguf_string_t key;// 值的类型。// 必须是 `gguf_metadata_value_type` 中的一个值。gguf_metadata_value_type value_type;// 值。gguf_metadata_value_t value;
};struct gguf_header_t {// 魔数,表明这是一个 GGUF 文件。// 在字节级别必须是 `GGUF`:`0x47` `0x47` `0x55` `0x46`。// 您的执行器可能使用小端字节序,因此可能需要检查 0x46554747 并让字节序抵消。// 在此建议非常明确地指定字节序。uint32_t magic;// 实现的格式版本。// 对于本规范中描述的版本必须为 `3`,该版本引入了大端序支持。// 仅在格式结构发生变化时才应增加此版本。// 不影响文件结构的变化应通过更新元数据来表示。uint32_t version;// 文件中的张量数量。// 明确包含此项,而不是将其放入元数据,以确保加载张量时始终存在。uint64_t tensor_count;// 元数据键值对的数量。uint64_t metadata_kv_count;// 元数据键值对。gguf_metadata_kv_t metadata_kv[metadata_kv_count];
};uint64_t align_offset(uint64_t offset) {return offset + (ALIGNMENT - (offset % ALIGNMENT)) % ALIGNMENT;
}struct gguf_tensor_info_t {// 张量的名称。它是一个标准的 GGUF 字符串,但限制最多为 64 字节长。gguf_string_t name;// 张量的维度数。// 当前最多为 4,但未来可能会改变。uint32_t n_dimensions;// 张量的维度。uint64_t dimensions[n_dimensions];// 张量的类型。ggml_type type;// 张量数据在此文件中的字节偏移量。//// 此偏移量相对于 `tensor_data`,而不是文件的开头,以方便写入器编写文件。// 读取器应考虑将此偏移量暴露为相对于文件开头的值,以方便读取数据。//// 必须是 `ALIGNMENT` 的倍数。即 `align_offset(offset) == offset`。uint64_t offset;
};struct gguf_file_t {// 文件头部。gguf_header_t header;// 张量信息,可用于定位张量数据。gguf_tensor_info_t tensor_infos[header.tensor_count];// 填充至最接近的 `ALIGNMENT` 倍数。//// 即,如果 `sizeof(header) + sizeof(tensor_infos)` 不是 `ALIGNMENT` 的倍数,则添加此填充。//// 可计算为 `align_offset(position) - position`,其中 `position` 是 `tensor_infos` 末尾的位置(即 `sizeof(header) + sizeof(tensor_infos)`)。uint8_t _padding[];// 张量数据。//// 这是对应模型权重的任意二进制数据。这些数据应与原始模型文件中的数据接近或相同,但由于量化或其他推理优化可能有所不同。任何此类偏差应记录在元数据或架构定义中。//// 每个张量的数据必须存储在此数组中,并通过其 `tensor_infos` 条目定位。每个张量数据的偏移量必须是 `ALIGNMENT` 的倍数,张量之间的空间应填充至 `ALIGNMENT` 字节。uint8_t tensor_data[];
};
相关文章:
GGUF 文件格式全解析
在机器学习领域,模型的存储和部署一直是关键环节。随着大语言模型 (LLM) 的广泛应用,如何高效地存储和加载这些复杂的模型成为一个亟待解决的问题。GGUF(GGML Universal Format)作为一种新兴的二进制文件格式,旨在解决…...
剑指offer - 面试题11 旋转数组的最小数字
题目链接:旋转数组的最小数字 第一种:正确写法(num[m]和nums[r]比较) class Solution { public:/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** * param nums int整型v…...
JNA基础使用,调用C++返回结构体
C端 test.h文件 #pragma oncestruct RespInfo {char* path;char* content;int statusCode; };extern "C" { DLL_EXPORT void readInfo(char* path, RespInfo* respInfo); }test.cpp文件 #include "test.h"void readInfo(char* path, RespInfo* respInfo…...
Typora的Github主题美化
[!note] Typora的Github主题进行一些自己喜欢的修改,主要包括:字体、代码块、表格样式 美化前: 美化后: 一、字体更换 之前便看上了「中文网字计划」的「朱雀仿宋」字体,于是一直想更换字体,奈何自己拖延症…...
计算机网络模型-TCP/IP协议簇
目录 1. OSI 参考模型 2. TCP/IP 5层协议簇 3. 数据传输过程 4. OSI模型vsTCP/IP模型 5. 工作设备和协议 1. OSI 参考模型 OSI 参考模型 OSI 参考模型 7层参考协议:同层使用相同协议,下层为上层提供服务 再往每一层填网络协议的时候,表…...
ros进阶——强化学习倒立摆的PG算法实现
项目地址:https://github.com/chan-yuu/cartpole_ws git clone https://github.com/chan-yuu/cartpole_ws依赖安装: xterm等 python3.8 torch等上一节中我们定义了很多ros工具,在这里我们将进行验证。 对于launch_robot_test.py来说&#x…...
BUU41 [GYCTF2020]FlaskApp1【SSTI】
题目: 加密处没啥事,但是解密的地方提交{{7*7}}就会返回报错界面,顺便把代码也爆出来了 text_decode base64.b64decode(text.encode()) 先将字符串 text编码为字节对象,然后使用 base64.b64decode 函数对这个字节对象进行 Base…...
pandas读取数据
pandas读取数据 导入需要的包 import pandas as pd import numpy as np import warnings import oswarnings.filterwarnings(ignore)读取纯文本文件 pd.read_csv 使用默认的标题行、逗号分隔符 import pandas as pd fpath "./datas/ml-latest-small/ratings.csv" 使…...
React + TypeScript 全栈开发最佳实践
React TypeScript 全栈开发最佳实践 一、环境搭建与项目初始化 node.js和npm的安装请参考我的文章。 1.1 脚手架选择与工程创建 # 使用Vite 5.x创建ReactTS项目(2025年主流方案) npx create-vitelatest my-app --template react-ts cd my-app npm in…...
RK3399 Android7双WiFi功能实现
在Android系统里面,WiFi功能STA和AP模式是互斥的,而现在越来越多的WiFi模组或者芯片能支持并发模式,即STA+P2P、STA+STA或者STA+AP模式组合。不管是单WiFi并发,还是双WiFi模组,想让STA和AP两个模式同时运行,对于Android7来说,是需要修改到系统源码,才能让APP层用Androi…...
前端包管理工具进化论:npm vs yarn vs pnpm 深度对比
前端包管理工具进化论:npm vs yarn vs pnpm 深度对比 一、工具定位与核心差异二、功能特性对比三、优缺点深度解析四、性能实测对比(示例数据)五、选型建议六、未来趋势 一、工具定位与核心差异 npm (Node Package Manager) Node.js 官方捆绑…...
绕过information_schema与order by注入以及seacsmv9注入
一:information_schema绕过 1,、sys数据库包含了许多视图,这些视图整合了来自information_schema和performance_schema的数据,攻击者可以利用这些视图来获取数据库结构信息。 -- 获取所有数据库名 SELECT DISTINCT table_schema FROM sys.schema_table_…...
在LangFlow中集成OpenAI Compatible API类型的大语言模型
一、背景与核心价值 从Dify换到这个langflow真的时各种的不适应啊。 就比如这个OpenAI Compatible API,这不应该是基本操作嘛? 算了,服了,习惯了就好了。咱闲言少叙,正片开始: LangFlow作为LangChain的可视化开发工具,其最大优势在于无需编写代码即可构建复杂的大模型…...
PING命令TTL解析
在 ping 命令中,TTL(Time to Live,生存时间) 是 IP 数据包的核心字段之一,用于控制数据包在网络中的生命周期。以下是针对 TTL 的简明解析: 1. TTL 的核心作用 防循环机制:TTL 是一个计数器&a…...
Hadoop 基础原理
Hadoop 基础原理 基本介绍Hadoop 的必要性Hadoop 核心组件Hadoop 生态系统中的附加组件 HDFSHDFS 集群架构HDFS 读写流程HDFS 写流程HDFS 读流程 NameNode 持久化机制 MapReduce底层原理示例 Hadoop 是一个由 Apache 基金会开发的分布式系统基础架构,主要解决海量数…...
蓝桥杯单片机基础部分——1.5基础模块代码升级
前言 之前的蓝桥杯单片机基础部分——1、基础模块代码发现有的同学不太会使,这样的话就给他们都封装一下函数,额外封装一下蜂鸣器和继电器,这就全了,到时候的逻辑只要没问题就没啥事了 LED灯模块 现在,给这里封装一个…...
PyTorch常用函数总结(持续更新)
本文主要记录自己在用 PyTorch复现经典模型 过程中遇到的一些函数及用法,以期对 常见PyTorch函数 更加熟练~ 官方Docs:PyTorch documentation — PyTorch 2.6 documentation 目录 数据层面 torch.sign(tensor) torch.tensor(np.eye(3)[y]) torch.on…...
Docker 常用命令大全
一、启动类 1. 启动 docker systemctl start docker 2. 关闭 docker systemctl stop docker 3. 重新启动 docker systemctl restart docker 4. docker 设置自启动 systemctl enable docker 5. 查看 docker 运行状态 systemctl status docker 6. 查看 docker 版本号等信息 docke…...
单片机裸机编程:状态机与其他高效编程框架
在单片机裸机编程中,状态机是一种非常强大的工具,能够有效管理复杂的逻辑和任务切换。除了状态机,还有其他几种编程模式可以在不使用 RTOS 的情况下实现高效的程序设计。以下是一些常见的方法: 1. 状态机编程 状态机通过定义系统…...
TCP,http,WebSocket
TCP(Transmission Control Protocol,传输控制协议)和HTTP(HyperText Transfer Protocol,超文本传输协议)都是网络通信中的重要协议,但它们在网络协议栈的不同层次上工作,各自负责不同…...
gotool在线工具集
1. 包含各种 sql 处理 2. 包含 json 处理 3. 包含 图片处理 4. 跨平台传输 gotool...
HBuilder X中,uni-app、js的延时操作及定时器
完整源码下载 https://download.csdn.net/download/luckyext/90430165 在HBuilder X中,uni-app、js的延时操作及定时器可以用setTimeout和setInterval这两个函数来实现。 1.setTimeout函数用于在指定的毫秒数后执行一次函数。 例如, 2秒后弹出一个提…...
ow rank decomposition如何用于矩阵的分解
1. 什么是矩阵分解和低秩分解 矩阵分解是将一个矩阵表示为若干结构更简单或具有特定性质的矩阵的组合或乘积的过程。低秩分解(Low Rank Decomposition)是其中一种方法,旨在将原矩阵近似为两个或多个秩较低的矩阵的乘积,从而降低复…...
2.3做logstash实验
收集apache日志输出到es 在真实服务器安装logstash,httpd systemctl start httpd echo 666 > /var/www/html/index.html cat /usr/local/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/httpd #系统内置变量 cd /usr/local/…...
JAVAweb之过滤器,监听器
文章目录 过滤器认识生命周期FilterConfigFilterChain过滤器执行顺序应用场景代码 监听器认识ServletContextListenerHttpSessionListenerServletRequestListener代码 过滤器 认识 Java web三大组件之一,与Servlet相似。过滤器是用来拦截请求的,而非处…...
IO进程 day05
IO进程 day05 9. 进程9. 9. 守护进程守护进程的特点守护进程创建步骤 10. 线程10.1. 线程的概念10.2. 进程和线程的区别10.2. 线程资源10.3. 线程的函数接口1. pthread_create-创建线程线程函数和普通函数的区别 2. pthread_exit3.线程资源回收函数join和detach的区别 获取线程…...
Mac 散热救星:Macs Fan Control,让你的苹果电脑“冷静”又安静!
各位果粉们,是不是经常遇到这样的烦恼:用着用着电脑,突然就发热卡顿,风扇狂转噪音大得跟拖拉机似的?别担心,今天给大家安利一款超实用的软件 —— Macs Fan Control,它可是让苹果电脑“冷静”又…...
警惕将“数据标注”岗位包装为“大数据工程师”充数
数据标注(Data Annotation)是人工智能和大数据产业链中的基础性工作,其核心任务是为原始数据添加标签或注释,使计算机能够识别和学习数据中的特征,从而训练出更精准的机器学习或深度学习模型。以下是具体解析及它与“大…...
C语言 —— 此去经年 应是良辰好景虚设 - 函数
目录 1. 函数的概念 1.1 库函数 1.2 自定义函数 2. 形参和实参 3. return 语句 4. 数组做函数参数 5. 嵌套调用和链式访问 5.1 嵌套调用 5.2 链式访问 6. 函数的声明和定义 6.1 单个文件 6.2 多个文件 7. static 和 extern 7.1 static 修饰局部变量 7.2 static 修…...
最新前端框架选型对比与建议(React/Vue/Svelte/Angular)
前端框架选型对比与建议(React/Vue/Svelte/Angular) 一、核心框架技术特性对比(基于最新版本) 维度React 19 25Vue 3.5 12Svelte 5 25Angular 19 5核心理念函数式编程、JSX语法、虚拟DOM渐进式框架、组合式API、模板语法编译时框…...
AOP基础-01.快速入门
一.AOP 对于统计每一个业务方法的耗时这一操作,如果再业务层的每一个方法前获取方法运行的开始时间,方法结束获取结束时间,然后计算执行耗时,那这样就太繁琐了。能不能定义一个模板方法,使得该方法能够在业务层的方法执…...
为什么MySQL选择使用B+树作为索引结构
B树是MySQL最常见的索引结构,大部分存储引擎都支持 B 树索引。 相对于其他竞争力强的数据结构,B树都有战胜它们成为大多时候MySQL选择使用索引结构的理由: 第一个强有力的竞争对手是B树: 1. B树每个节点都存储了完整的数据&…...
基于SSA-KELM-Adaboost(麻雀搜索优化的极限学习机自适应提升算法)的多输入单输出回归预测【MATLAB】
SSA-KELM-Adaboost 是一种结合了麻雀搜索算法(SSA)、核极限学习机(KELM)和Adaboost集成学习的复合回归预测模型。该模型通过参数优化与集成策略提升预测精度和鲁棒性,适用于复杂非线性回归问题。以下是其核心理论与…...
分享些常用的工具类
一、照片 1、Unsplash:https://unsplash.com/ 2、pixabay:https://pixabay.com/zh/ 二、壁纸 1、Wallpaper Engine 2、wallhaven:https://wallhaven.cc/ 3、极简壁纸:https://bz.zzzmh.cn/ 三、AI语音 1、微软Azure项目&…...
Apache SeaTunnel 构建实时数据同步管道(最新版)
文章作者 王海林 白鲸开源 数据集成引擎研发 Apache SeaTunnel Committer & PMC Member,Apache SkyWalking Committer,多年平台研发经验,目前专注于数据集成领域。 导读 在当今数字化快速发展的时代,数据已然成为企业决策…...
96.【C语言】解析预处理(4)
目录 5.条件编译 #ifdef 其他条件编译指令 #if 多个分支的条件编译 判断是否被定义 嵌套指令 6.头文件的包含方式 本地文件包含 库文件包含 嵌套文件包含 问题:头文件的重复包含 解决问题:避免头文件的重复包含 方法1:#pragma once 方法2:#ifndef、#define和#en…...
linux用户操作与权限
Linux的root用户 root用户(超级管理员) root用户拥有最大的系统操作权限。 普通用户的权限一般在其home目录内是不受限的,但是出来自己的home目录,仅有只读和执行权限。 su su命令切换到root账号 语法:su [-] [用户…...
Proof Beyond Boundaries: Hong Kong zkNight 活动精彩回顾
2 月 19 日,随着夜幕的降临,一场汇聚行业智慧与前瞻视野的高端主题活动 ——Proof Beyond Boundaries: Hong Kong zkNight,在香港铜锣湾 Vpoint 的 6/F 盛大启幕。本次活动由 ZEROBASE 主办,Techub News 承办,吸引了众…...
QT零基础学习之路(五)--自定义信号和槽
源码地址(优先更新):点击此处...
Pytorch实现之GIEGAN(生成器信息增强GAN)训练自己的数据集
简介 简介:在训练数据样本之前首先利用VAE来推断潜在空间中不同类的分布,用于后续的训练,并使用它来初始化GAN。与ACGAN和BAGAN不同的是,提出的GIEGAN有一个分类器结构,这个分类器主要判断生成的图像或者样本图像属于哪个类,而鉴别器仅判断图像是来自于生成器还是真实样…...
HTTP 动态报错码的原因和解决方法
目录 1xx(信息性状态码) 2xx(成功状态码) 3xx(重定向状态码) 4xx(客户端错误状态码) 5xx(服务器错误状态码) 参考文章 以下是 HTTP 动态报错码的常见原…...
单核处理器编程会简单很多的原因
乱序执行的本质:单核处理器的乱序执行(Out-of-Order Execution)允许指令动态调度以提升效率,但其核心原则是保持程序语义的单线程正确性。所有指令的最终提交(Retirement)必须严格按照程序顺序完成,以确保异常处理、中断和外部观察结果的正确性。 提交阶段的顺序性:尽管…...
C++之vector和list辨析
std::vector 和 std::list 是 C 标准库中两种常用的容器,它们都用于存储和管理元素集合,但在底层实现和性能特性上有显著的区别。 1. 底层实现 std::vector: 基于动态数组实现。元素在内存中是连续存储的。支持随机访问(通过下标访问元素&a…...
C++ 八股(整理记录)
1. 指针和引用的区别 定义与初始化: 指针:可以声明时不初始化,并且可以在之后指向任何同类型的变量。指针是一个变量,它存储的是另一个变量的地址。 int a 10; int* p; // 声明一个指向int的指针 p &a; // 将p指向变量a的…...
docker部署GPU环境
使用 Docker 部署 GPU 环境涉及到几个关键步骤,以下是详细步骤: 1. 安装 NVIDIA 驱动程序 确保你的系统已经安装了 NVIDIA GPU 驱动。这是使用 GPU 的前提条件。 2. 安装 Docker 和 nvidia-container-toolkit 首先,确保你已经安装了 Docker。然后,安装 NVIDIA Containe…...
单片机裸机编程-时机管理
对于 RTOS 实时操作系统,我们是通过 TASK(任务)进行底层操作的,这与裸机编程中的函数(fun)类似。不同的任务或函数实现不同的功能,在RTOS中,单片机有信号量、队列等不同任务之间的通…...
使用VScode开发STM32:基于CMake(包含标准库和HAL库工程)
使用VScode开发STM32:基于CMake(包含标准库和HAL库工程) 本教程使用VScode作为代码编辑工具、Cmake作为构建系统生成器、Make进行构建系统、使用arm-none-eabi-gcc进行交叉编译、使用OpenOCD作为代码下载与调试工具,最终搭建出适…...
Linux操作与权限2
查看权限控制信息 序号1,表示文件,文件夹权限控制信息 序号2,表示文件,文件夹所属用户 序号3,表示文件,文件夹所属用户组 12345678910d/l/-r/-w/-x/-r/-w/-x/-r/-w/-x/- 权限细节总共分为10个槽位 表格1&…...
解析第十一页
多选707、如图所示组网,SWA、SWB、SWC、SWD运行RSTP,则以下说法正确的是? A、可以在SWB的GE0/0/2端口开启边缘端口,让连接终端的接口快速进入转发状态 B、边缘端口收到BPDU之后会重新参与生成树的计算 C、可以在SWC的GEO/0/2端口开启边缘端口,让连接终端的接口快速进入转…...
SQL之order by盲注
目录 一.order by盲注的原理 二.注入方式 a.布尔盲注 b.时间盲注 三.防御 一.order by盲注的原理 order by子句是用于按指定列排序查询结果,列名或列序号皆可。 order by 后面接的字段或者数字不一样,那么这个数据表的排序就会不同。 order by 盲…...