GPTQ vs AWQ vs GGUF(GGML) 速览和 GGUF 文件命名规范

news2024/11/29 8:51:52

简单介绍一下四者的区别。

参考链接:GPTQ - 2210.17323 | AWQ - 2306.00978 | GGML | GGUF - docs | What is GGUF and GGML?

文章目录

    • GPTQ vs AWQ vs GGUF(GGML) 速览
      • GGUF 文件命名
      • GGUF 文件结构
      • 文件名解析答案
    • 附录
      • GGUF 文件命名
      • GGUF 文件结构

GPTQ vs AWQ vs GGUF(GGML) 速览

  • GPTQ (Generalized Post-Training Quantization)
    GPTQ 是一种基于近似二阶信息的后训练量化技术,能够将模型的权重位宽降低到 3-4 bits,在大幅减少模型大小和计算成本的同时还能保持模型性能。在极端情况下还能量化到 2 bits 甚至 3 进制,但会有一定的性能损失。

  • AWQ (Activation-aware Weight Quantization)

    image-20241004182540373

    AWQ 不会量化模型的所有权重,保留了对模型性能重要的一小部分权重,大大减少了量化损失。如图所示,这里比较极端,是 INT3 量化:

    • 图 a:RTN量化(Round-to-Nearest)
      将权重直接四舍五入到目标位宽,导致性能明显下降,PPL 达到 43.2。

    • 图 b:保护 1% 的显著权重,使用混合精度形式
      这里展示了一种改进策略,即保留 1% 最重要的权重通道使用高精度(FP16),其余使用低精度(INT3)。PPL 降低到 13.0。虽然这种方法能保住性能,但由于需要不同精度切换,硬件效率不高。但这一策略证明了并非所有权重都对模型性能同等重要。

    • 图 c:AWQ 提出的通道缩放量化方法

      AWQ 通过通道缩放保护显著权重,利用激活分布找到重要的权重并缩放它们的值来减少量化误差。相比混合精度形式,AWQ 提升了硬件效率,同时性能与图 b 一致,PPL 也为到 13.0。

  • GGML (GPT-Generated Model Language)
    「显存不够内存来凑」,这是一种文件格式,支持在CPU和GPU上进行推理。

  • GGUF (GPT-Generated Unified Format):
    GGUF 是 GGML 的升级版,提升了扩展和兼容性。

GGUF 文件命名

参考链接:GGUF - docs

GGUF 格式将加载模型所需的所有信息封装在一个文件中,简化了模型的分发和部署。同时,GGUF 文件命名遵循 <BaseName><SizeLabel><FineTune><Version><Encoding><Type><Shard>.gguf 的规则,方便人们快速识别模型的关键信息。具体说明如下:

  • BaseName:模型的基础名称或架构名称,例如 Llama
  • SizeLabel:模型的参数规模标签,表示模型的参数数量及可能的专家数量,格式为 <expertCount>x<count><scale-prefix>
    • expertCount:表示专家模型中的专家数量。如果模型没有使用 Mixture of Experts (MoE) 架构,可以省略。
    • Count
      • Q: 表示百万亿(quadrillion)参数。
      • T: 表示万亿(trillion)参数。
      • B: 表示十亿(billion)参数。
      • M: 表示百万(million)参数。
      • K: 表示千(thousand)参数。
        当前主流大模型多为 B 级参数(十亿级),但未来 T(万亿级)模型可能会成为主流。
    • 附加属性:在某些情况下,-<attributes><count><scale-prefix> 可以进一步细化模型的描述,添加额外的参数,例如 Q, K, T,这些表示量化方式或其他模型特性。例如:
      • Q4: 表示 4-bit 量化。
        示例:
      • 7B: 表示 70 亿参数的模型。
      • 4x3T: 表示有 4 个专家的 3 万亿参数模型。
      • 2x10B-Q4: 表示有 2 个专家且采用 Q4 量化的 100 亿参数模型。
  • FineTune:微调目标描述(如 ChatInstruct)。
  • Version(可选):模型的版本号,格式为 v<Major>.<Minor>,没提供则假设为 v1.0
  • Encoding:权重编码方案(如 Q4_0 表示 4-bit 量化)。
  • Type:文件类型,如 LoRA(适配器)或 vocab(仅包含词汇表)。
  • Shard(可选):模型分片信息,格式为 <ShardNum>-of-<ShardTotal>,适用于大型模型。例如 00003-of-00009 表示第 3 个分片,共 9 个分片,注意分片编号从 00001 开始,而非 00000

验证命名是否符合规范的正则:

^(?<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$

尝试理解下面三个来自官方文档的文件命名,看看你能否正确解析:

  1. Mixtral-8x7B-v0.1-KQ2.gguf
  2. Hermes-2-Pro-Llama-3-8B-F16.gguf
  3. Grok-100B-v1.0-Q4_0-00003-of-00009.gguf

在文章的末尾会给出解析答案,现在请停下来思考。

GGUF 文件结构

*diagram by @mishig25(/Users/home/Downloads/agent/LLM-API-Guide-and-Demos/Guide/assets/313174776-c3623641-3a1d-408e-bfaf-1b7c4e16aa63-2.png)*

如果想进一步了解,查看附录部分的代码。

文件名解析答案

  • Mixtral-8x7B-v0.1-KQ2.gguf

    • BaseName:Mixtral
    • SizeLabel
      • Expert Count: 8
      • Parameter Count: 7B
    • Version:v0.1
    • Encoding:KQ2
  • Hermes-2-Pro-Llama-3-8B-F16.gguf

    • BaseName:Hermes 2 Pro Llama 3
    • SizeLabel
      • Expert Count: 0
      • Parameter Count: 8B
    • Version:v1.0
    • Encoding:F16
  • Grok-100B-v1.0-Q4_0-00003-of-00009.gguf

    • BaseName:Grok
    • SizeLabel
      • Expert Count: 0
      • Parameter Count: 100B
    • Version:v1.0
    • Encoding:Q4_0
    • Shard:第 3 个分片,共 9 个分片

附录

GGUF 文件命名

Quantization Types

类型来源描述
F64Wikipedia64 位标准 IEEE 754 双精度浮点数。
I64GH64 位定宽整数。
F32Wikipedia32 位标准 IEEE 754 单精度浮点数。
I32GH32 位定宽整数。
F16Wikipedia16 位标准 IEEE 754 半精度浮点数。
BF16Wikipedia32 位 IEEE 754 单精度浮点数的 16 位简化版本。
I16GH16 位定宽整数。
Q8_0GH8 位四舍五入量化(q)。每个块有 32 个权重。权重公式:w = q * block_scale。目前已不广泛使用的过时量化方法。
Q8_1GH8 位四舍五入量化(q)。每个块有 32 个权重。权重公式:w = q * block_scale + block_minimum。目前已不广泛使用的过时量化方法。
Q8_KGH8 位量化(q)。每个块有 256 个权重。仅用于量化中间结果。此量化类型支持所有 2-6 位点积。权重公式:w = q * block_scale
I8GH8 位定宽整数。
Q6_KGH6 位量化(q)。超块包含 16 个块,每个块有 16 个权重。权重公式:w = q * block_scale(8-bit),每个权重占用 6.5625 位。
Q5_0GH5 位四舍五入量化(q)。每个块有 32 个权重。权重公式:w = q * block_scale。目前已不广泛使用的过时量化方法。
Q5_1GH5 位四舍五入量化(q)。每个块有 32 个权重。权重公式:w = q * block_scale + block_minimum。目前已不广泛使用的过时量化方法。
Q5_KGH5 位量化(q)。超块包含 8 个块,每个块有 32 个权重。权重公式:w = q * block_scale(6-bit) + block_min(6-bit),每个权重占用 5.5 位。
Q4_0GH4 位四舍五入量化(q)。每个块有 32 个权重。权重公式:w = q * block_scale。目前已不广泛使用的过时量化方法。
Q4_1GH4 位四舍五入量化(q)。每个块有 32 个权重。权重公式:w = q * block_scale + block_minimum。目前已不广泛使用的过时量化方法。
Q4_KGH4 位量化(q)。超块包含 8 个块,每个块有 32 个权重。权重公式:w = q * block_scale(6-bit) + block_min(6-bit),每个权重占用 4.5 位。
Q3_KGH3 位量化(q)。超块包含 16 个块,每个块有 16 个权重。权重公式:w = q * block_scale(6-bit),每个权重占用 3.4375 位。
Q2_KGH2 位量化(q)。超块包含 16 个块,每个块有 16 个权重。权重公式:w = q * block_scale(4-bit) + block_min(4-bit),每个权重占用 2.5625 位。
IQ4_NLGH4 位量化(q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 计算得到。
IQ4_XSHF4 位量化(q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 计算得到,每个权重占用 4.25 位。
IQ3_SHF3 位量化(q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 计算得到,每个权重占用 3.44 位。
IQ3_XXSHF3 位量化(q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 计算得到,每个权重占用 3.06 位。
IQ2_XXSHF2 位量化(q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 计算得到,每个权重占用 2.06 位。
IQ2_SHF2 位量化(q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 计算得到,每个权重占用 2.5 位。
IQ2_XSHF2 位量化(q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 计算得到,每个权重占用 2.31 位。
IQ1_SHF1 位量化(q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 计算得到,每个权重占用 1.56 位。
IQ1_MGH1 位量化(q)。超块包含 256 个权重。权重 w 通过 super_block_scaleimportance matrix 计算得到,每个权重占用 1.75 位。

GGUF 文件结构

GGUF - docs

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, support has been removed
    // GGML_TYPE_Q4_3 = 5, support has been removed
    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 {
    // The value is a 8-bit unsigned integer.
    GGUF_METADATA_VALUE_TYPE_UINT8 = 0,
    // The value is a 8-bit signed integer.
    GGUF_METADATA_VALUE_TYPE_INT8 = 1,
    // The value is a 16-bit unsigned little-endian integer.
    GGUF_METADATA_VALUE_TYPE_UINT16 = 2,
    // The value is a 16-bit signed little-endian integer.
    GGUF_METADATA_VALUE_TYPE_INT16 = 3,
    // The value is a 32-bit unsigned little-endian integer.
    GGUF_METADATA_VALUE_TYPE_UINT32 = 4,
    // The value is a 32-bit signed little-endian integer.
    GGUF_METADATA_VALUE_TYPE_INT32 = 5,
    // The value is a 32-bit IEEE754 floating point number.
    GGUF_METADATA_VALUE_TYPE_FLOAT32 = 6,
    // The value is a boolean.
    // 1-byte value where 0 is false and 1 is true.
    // Anything else is invalid, and should be treated as either the model being invalid or the reader being buggy.
    GGUF_METADATA_VALUE_TYPE_BOOL = 7,
    // The value is a UTF-8 non-null-terminated string, with length prepended.
    GGUF_METADATA_VALUE_TYPE_STRING = 8,
    // The value is an array of other values, with the length and type prepended.
    ///
    // Arrays can be nested, and the length of the array is the number of elements in the array, not the number of bytes.
    GGUF_METADATA_VALUE_TYPE_ARRAY = 9,
    // The value is a 64-bit unsigned little-endian integer.
    GGUF_METADATA_VALUE_TYPE_UINT64 = 10,
    // The value is a 64-bit signed little-endian integer.
    GGUF_METADATA_VALUE_TYPE_INT64 = 11,
    // The value is a 64-bit IEEE754 floating point number.
    GGUF_METADATA_VALUE_TYPE_FLOAT64 = 12,
};

// A string in GGUF.
struct gguf_string_t {
    // The length of the string, in bytes.
    uint64_t len;
    // The string as a UTF-8 non-null-terminated string.
    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 {
        // Any value type is valid, including arrays.
        gguf_metadata_value_type type;
        // Number of elements, not bytes
        uint64_t len;
        // The array of values.
        gguf_metadata_value_t array[len];
    } array;
};

struct gguf_metadata_kv_t {
    // The key of the metadata. It is a standard GGUF string, with the following caveats:
    // - It must be a valid ASCII string.
    // - It must be a hierarchical key, where each segment is `lower_snake_case` and separated by a `.`.
    // - It must be at most 2^16-1/65535 bytes long.
    // Any keys that do not follow these rules are invalid.
    gguf_string_t key;

    // The type of the value.
    // Must be one of the `gguf_metadata_value_type` values.
    gguf_metadata_value_type value_type;
    // The value.
    gguf_metadata_value_t value;
};

struct gguf_header_t {
    // Magic number to announce that this is a GGUF file.
    // Must be `GGUF` at the byte level: `0x47` `0x47` `0x55` `0x46`.
    // Your executor might do little-endian byte order, so it might be
    // check for 0x46554747 and letting the endianness cancel out.
    // Consider being *very* explicit about the byte order here.
    uint32_t magic;
    // The version of the format implemented.
    // Must be `3` for version described in this spec, which introduces big-endian support.
    //
    // This version should only be increased for structural changes to the format.
    // Changes that do not affect the structure of the file should instead update the metadata
    // to signify the change.
    uint32_t version;
    // The number of tensors in the file.
    // This is explicit, instead of being included in the metadata, to ensure it is always present
    // for loading the tensors.
    uint64_t tensor_count;
    // The number of metadata key-value pairs.
    uint64_t metadata_kv_count;
    // The metadata key-value pairs.
    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 {
    // The name of the tensor. It is a standard GGUF string, with the caveat that
    // it must be at most 64 bytes long.
    gguf_string_t name;
    // The number of dimensions in the tensor.
    // Currently at most 4, but this may change in the future.
    uint32_t n_dimensions;
    // The dimensions of the tensor.
    uint64_t dimensions[n_dimensions];
    // The type of the tensor.
    ggml_type type;
    // The offset of the tensor's data in this file in bytes.
    //
    // This offset is relative to `tensor_data`, not to the start
    // of the file, to make it easier for writers to write the file.
    // Readers should consider exposing this offset relative to the
    // file to make it easier to read the data.
    //
    // Must be a multiple of `ALIGNMENT`. That is, `align_offset(offset) == offset`.
    uint64_t offset;
};

struct gguf_file_t {
    // The header of the file.
    gguf_header_t header;

    // Tensor infos, which can be used to locate the tensor data.
    gguf_tensor_info_t tensor_infos[header.tensor_count];

    // Padding to the nearest multiple of `ALIGNMENT`.
    //
    // That is, if `sizeof(header) + sizeof(tensor_infos)` is not a multiple of `ALIGNMENT`,
    // this padding is added to make it so.
    //
    // This can be calculated as `align_offset(position) - position`, where `position` is
    // the position of the end of `tensor_infos` (i.e. `sizeof(header) + sizeof(tensor_infos)`).
    uint8_t _padding[];

    // Tensor data.
    //
    // This is arbitrary binary data corresponding to the weights of the model. This data should be close
    // or identical to the data in the original model file, but may be different due to quantization or
    // other optimizations for inference. Any such deviations should be recorded in the metadata or as
    // part of the architecture definition.
    //
    // Each tensor's data must be stored within this array, and located through its `tensor_infos` entry.
    // The offset of each tensor's data must be a multiple of `ALIGNMENT`, and the space between tensors
    // should be padded to `ALIGNMENT` bytes.
    uint8_t tensor_data[];
};

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2189174.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

pWnOS2.0 靶机渗透( cms 渗透,php+mysql 网站渗透,密码碰撞)

pWnOS2.0 靶机渗透( ) 靶机介绍 vulnhub 靶机 本地搭建 由于靶机特性&#xff0c;靶机网卡位nat模式扫不到&#xff0c;原来需要改 nat 的地址 参考方法 https://blog.csdn.net/Bossfrank/article/details/131415257 作者主页 https://blog.csdn.net/Bossfrank?typeblog P…

Spring Boot新闻推荐系统:性能优化策略

5系统详细实现 5.1 管理员模块的实现 5.1.1 用户信息管理 新闻推荐系统的系统管理员可以可以对用户信息添加修改删除操作。具体界面的展示如图5.1所示。 图5.1 用户信息管理界面 5.1.2 排行榜管理 系统管理员可以对排行榜进行手动管理&#xff0c;可以对排行榜进行添加删除修…

Acwing 背包问题

背包问题 首先&#xff0c;什么是背包问题&#xff1f; 给定N个物品和一个容量为V的背包&#xff0c;每个物品有体积和价值两种属性&#xff0c;在一些限制条件下&#xff0c;将一些物品放入背包&#xff0c;使得在不超过背包体积的情况下&#xff0c;能够得到的最大价值。根据…

老年人意外跌倒感知技术

意外跌倒是导致老年人仙游的6大原因之一&#xff0c;尤其多余80岁以上的老年人。跌倒已成为我国 65 岁以上老年人因伤致死的首位原因&#xff08;来源&#xff1a;IT之家&#xff09;。 跌倒最容易发生在两个地方&#xff0c;卫生间和过道。主要可能是卫生间没有安装扶手&…

关于Generator,async 和 await的介绍

在本篇文章中我们主要围绕下面几个问题来介绍async 和await &#x1f370;Generator的作用&#xff0c;async 及 await 的特点&#xff0c;它们的优点和缺点分别是什么&#xff1f;await 原理是什么&#xff1f; &#x1f4c5;我的感受是我们先来了解Generator&#xff0c;在去…

将视频改成代码滚动

本文章就来讲讲如何将视频转换成代码滚动&#xff0c;也就是这种模式&#xff1a; 本文章就来详细的教大家如何制作达到这种效果吧&#xff01; &#xff08;注&#xff1a;我记得一些python库也可以轻松达到这些效果&#xff0c;但我一时半伙想不起来了&#xff0c;所以这里用…

idea插件开发的第六天-开发一个笔记插件

介绍 Demo说明 本文基于maven项目开发,idea版本为2022.3以上,jdk为1.8本文在JTools插件之上进行开发本插件目标是做一款笔记插件,用于开发者在开发过程中随时记录信息仓库地址: jtools-notes JTools插件说明 Tools插件是一个Idea插件,此插件提供统一Spi规范,极大的降低了id…

手写mybatis之Mapper XML的解析和注册使用

前言 你是怎么面对功能迭代的&#xff1f; 很多程序员在刚开始做编程或者新加入一家公司时&#xff0c;都没有多少机会可以做一个新项目&#xff0c;大部分时候都是在老项目上不断的迭代更新。在这个过程你可能要学习N个前人留下的各式各样的风格迥异的代码片段&#xff0c;在这…

【杂谈一之概率论】CDF、PDF、PMF和PPF概念解释与分析

一、概念解释 1、CDF&#xff1a;累积分布函数&#xff08;cumulative distribution function&#xff09;&#xff0c;又叫做分布函数&#xff0c;是概率密度函数的积分&#xff0c;能完整描述一个实随机变量X的概率分布 2、PDF&#xff1a;连续型概率密度函数&#xff08;p…

平面电磁波的电场能量磁场能量密度相等,能量密度的体积分等于能量,注意电场能量公式也没有复数形式(和坡印廷类似)

1、电场能量密度和磁场能量密度相等(实数场算的) 下面是电场能量密度和磁场能量密度的公式&#xff0c;注意这可不是坡印廷定理。且电场能量密度没有复数表达式&#xff0c;即不是把E和D换成复数形式就行的。注意&#xff0c;一个矢量可以转化为复数形式&#xff0c;两个矢量做…

数据挖掘-padans初步使用

目录标题 Jupyter Notebook安装启动 Pandas快速入门查看数据验证数据建立索引数据选取⚠️注意&#xff1a;排序分组聚合数据转换增加列绘图line 或 **&#xff08;默认&#xff09;&#xff1a;绘制折线图。bar&#xff1a;绘制条形图。barh&#xff1a;绘制水平条形图。hist&…

Discord:报错:A fatal Javascript error occured(解决办法)

按 Windows 键 R 并输入 %appdata% 选择 discord 文件夹并将其删除。 再次按 Windows 键 R 并输入 %LocalAppData% 选择 discord 文件夹并再次将其删除。 附加&#xff1a; 如果还不行&#xff0c;就通过官网下载吧&#xff0c;这个问题通过epic下载可能会有

图文深入理解Oracle DB企业级集中管理神器-GC的安装和部署

值此国庆佳节&#xff0c;深宅家中&#xff0c;闲来无事&#xff0c;就多写几篇博文。今天继续宅继续写。 本文承接上篇&#xff0c;介绍GC的安装和部署。咱们不急&#xff0c;慢慢来&#xff0c;饭要一口一口地吃才能吃得踏实自然。 限于篇幅&#xff0c;本节将重点介绍关键步…

【ubuntu】apt是什么

目录 1.apt简介 2.常用apt指令 2.1安装 2.2更新列表 2.3更新已经安装的软件包 2.4搜索软件包 2.5显示软件包信息 2.6移除软件包 2.7清理无用的安装包 2.8清理无用的依赖项 3.apt和apt-get 3.1区别 3.2 总结 1.apt简介 apt的全称是advanced package …

JAVA的三大特性-封装、继承、多态

Java作为一种面向对象的编程语言&#xff0c;其核心特性包括封装、继承和多态。这三大特性是Java语言的基石&#xff0c;它们相互关联&#xff0c;共同构成了Java强大的面向对象能力。 封装&#xff08;Encapsulation&#xff09; 封装是面向对象编程的一个重要概念&#xff0c…

Pytorch最最适合研究生的入门教程,Q3 开始训练

文章目录 Pytorch最最适合研究生的入门教程Q3 开始训练3.1 训练的见解3.2 Pytorch基本训练框架work Pytorch最最适合研究生的入门教程 Q3 开始训练 3.1 训练的见解 如何理解深度学习能够完成任务&#xff1f; 考虑如下回归问题 由函数 y f ( x ) yf(x) yf(x)采样得到的100个…

现在的新电脑在任务管理器里又多了个NPU?它是啥?

前言 今年中旬各家品牌的新笔记本感觉上都是很不错&#xff0c;搞得小白自己心痒痒&#xff0c;突然间想要真的买一台Windows笔记本来耍耍了。 但今天这个文章并不是什么商品宣传啥的&#xff0c;而是小白稍微尝试了一下新笔记本之后的一些发现。 在今年的新笔记本上都多了一…

【GESP】C++一级练习BCQM3025,输入-计算-输出-6

题型与BCQM3024一样&#xff0c;计算逻辑上稍微复杂了一点点&#xff0c;代码逻辑没变&#xff0c;仍属于小学3&#xff0c;4年级的题目水平。 题解详见&#xff1a;https://www.coderli.com/gesp-1-bcqm3025/ https://www.coderli.com/gesp-1-bcqm3025/https://www.coderli.c…

数据提取之JSON与JsonPATH

第一章 json 一、json简介 json简单说就是javascript中的对象和数组&#xff0c;所以这两种结构就是对象和数组两种结构&#xff0c;通过这两种结构可以表示各种复杂的结构 > 1. 对象&#xff1a;对象在js中表示为{ }括起来的内容&#xff0c;数据结构为 { key&#xff1…

最新版本SkyWalking【10.1.0】部署

这里写目录标题 前言前置条件启动Skywalking下载解压启动说明 集成Skywalking Agent下载Agent在IDEA中添加agent启动应用并访问SpringBoot接口 说明 前言 基于当前最新版10.1.0搭建skywalking 前置条件 装有JDK11版本的环境了解SpringBoot相关知识 启动Skywalking 下载 地…