LLM - 大模型 ScallingLaws 的指导模型设计与实验环境(PLM) 教程(4)

news2025/3/4 12:32:07

欢迎关注我的CSDN:https://spike.blog.csdn.net/
本文地址:https://spike.blog.csdn.net/article/details/145323420

免责声明:本文来源于个人知识与公开资料,仅用于学术交流,欢迎讨论,不支持转载。


Scaling Laws (缩放法则) 是大模型领域中,用于描述 模型性能(Loss) 与 模型规模N、数据量D、计算资源C 之间关系的经验规律,揭示在大模型中,随着模型参数数量、数据集大小和计算资源的增加,模型性能的变化模式,指导更高效地分配资源,优化模型训练过程,实现更好的性能。这些规律不仅有助于预测不同规模模型的表现,还能为模型设计和训练提供理论依据,是推动大模型发展和应用的重要理论基础。

使用 ScalingLaws 指导模型设计,验证模型效果,超过根据经验设计的模型,以及介绍模型的训练环境与超参数。

系列文章:

  1. 大模型 ScallingLaws 的 C=6ND 公式推导
  2. 大模型 ScallingLaws 的 CLM 和 MLM 中不同系数
  3. 大模型 ScallingLaws 的迁移学习与混合训练
  4. 大模型 ScallingLaws 的指导模型设计与实验环境
  5. 大模型 ScallingLaws 的设计 100B 预训练方案

1. ScalingLaws 指导模型设计

验证根据 ScalingLaws 指导模型设计的效果:

ScalingLaws

根据 PLM 的 ScalingLaw 公式计算,CLM 模型,模型规模(N)是 7.2 B 7.2B 7.2B,数据量(D)是 265 B 265B 265B,计算量( C C C) 是 1.14 × 1 0 22 1.14 \times 10^{22} 1.14×1022,即输入计算量,输出模型规模与数据量,公式如下:

N = ( 1.26 × 1 0 − 3 ) × C 0.578 N = 1.26 × 1 0 − 3 × ( 1.14 × 1 0 22 ) 0.578 = 7.067 × 1 0 9 D = ( 1.23 × 1 0 2 ) × C 0.422 D = 1.23 × 1 0 2 × ( 1.14 × 1 0 22 ) 0.422 = 250 × 1 0 9 \begin{align} N &= (1.26 \times 10^{-3}) \times C^{0.578} \\ N &= 1.26 \times 10^{-3} \times (1.14 \times 10^{22})^{0.578} \\ &= 7.067 \times 10^9 \\ D &= (1.23 \times 10^{2}) \times C^{0.422} \\ D &= 1.23 \times 10^{2} \times (1.14 \times 10^{22})^{0.422} \\ &= 250 \times 10^9 \\ \end{align} NNDD=(1.26×103)×C0.578=1.26×103×(1.14×1022)0.578=7.067×109=(1.23×102)×C0.422=1.23×102×(1.14×1022)0.422=250×109

Protein 的 CLM 模型公式,参考:大模型 ScallingLaws 的 CLM 和 MLM 中不同系数(PLM),使用 Latex 计算数值,可以使用 SymboLab 工具。

根据 PLM 的 ScalingLaw 公式计算,MLM 模型,模型规模(N)是 10.7 B 10.7B 10.7B,数据量(D)是 260 B 260B 260B,计算量( C C C) 是 1.68 × 1 0 22 1.68 \times 10^{22} 1.68×1022,即输入计算量为,输出模型规模与数据量,公式如下:

N = ( 6.19 × 1 0 − 8 ) × C 0.776 N = ( 6.19 × 1 0 − 8 ) × ( 1.68 × 1 0 22 ) 0.776 = 10.93 × 1 0 9 D = ( 2.02 × 1 0 6 ) × C 0.230 D = ( 2.02 × 1 0 6 ) × ( 1.68 × 1 0 22 ) 0.230 = 261 × 1 0 9 \begin{align} N &= (6.19 \times 10^{-8}) \times C^{0.776} \\ N &= (6.19 \times 10^{-8}) \times (1.68 \times 10^{22})^{0.776} \\ &= 10.93 \times 10^9 \\ D &= (2.02 \times 10^{6}) \times C^{0.230} \\ D &= (2.02 \times 10^{6}) \times (1.68 \times 10^{22})^{0.230} \\ &= 261 \times 10^9 \\ \end{align} NNDD=(6.19×108)×C0.776=(6.19×108)×(1.68×1022)0.776=10.93×109=(2.02×106)×C0.230=(2.02×106)×(1.68×1022)0.230=261×109

与表格的数值类似。

在 MLM 与 CLM+MLM 的对比实验中,根据 PLM 的 ScalingLaw 公式计算,MLM 模型规模(N)是 470 M 470M 470M,数据量(D)是 106 B 106B 106B,计算量( C C C) 是 3 × 1 0 20 3 \times 10^{20} 3×1020,即输入计算量为,输出模型规模与数据量,计算结果 103 × 1 0 9 ∼ 106 B 103 \times 10^9 \sim 106B 103×109106B,公式如下:

N = ( 6.19 × 1 0 − 8 ) × C 0.776 N = ( 6.19 × 1 0 − 8 ) × ( 3 × 1 0 20 ) 0.776 = 480 × 1 0 6 D = ( 2.02 × 1 0 6 ) × C 0.230 D = ( 2.02 × 1 0 6 ) × ( 3 × 1 0 20 ) 0.230 = 103 × 1 0 9 \begin{align} N &= (6.19 \times 10^{-8}) \times C^{0.776} \\ N &= (6.19 \times 10^{-8}) \times (3 \times 10^{20})^{0.776} \\ &= 480 \times 10^6 \\ D &= (2.02 \times 10^{6}) \times C^{0.230} \\ D &= (2.02 \times 10^{6}) \times (3 \times 10^{20})^{0.230} \\ &= 103 \times 10^9 \\ \end{align} NNDD=(6.19×108)×C0.776=(6.19×108)×(3×1020)0.776=480×106=(2.02×106)×C0.230=(2.02×106)×(3×1020)0.230=103×109
在 CLM+MLM 模型中,MLM 模型规模(N)是 470 M 470M 470M,计算量( C C C) 是 3 × 1 0 20 3 \times 10^{20} 3×1020 一致,数据量(D)是 106 B 106B 106B 不同,计算结果 18.83 × 1 0 9 ∼ 21 B 18.83 \times 10^9 \sim 21B 18.83×10921B,公式如下:

D t = k × 1 D f α × 1 N β = 3.65 × 1 0 5 × 1 D f − 0.137 × 1 N − 0.369 D t = 3.65 × 1 0 5 × 1 ( 85 × 102 4 3 ) − 0.137 × 1 ( 480 × 102 4 2 ) − 0.369 = 18.83 × 1 0 9 \begin{align} D_{t} &= k \times \frac{1}{D_{f}^{\alpha}} \times \frac{1}{N^{\beta}} \\ &= 3.65 \times 10^5 \times \frac{1}{D_{f}^{-0.137}} \times \frac{1}{N^{-0.369}} \\ D_{t} &= 3.65 \times 10^5 \times \frac{1}{(85 \times 1024^3)^{-0.137}} \times \frac{1}{(480 \times 1024^2)^{-0.369}} \\ &= 18.83 \times 10^9 \end{align} DtDt=k×Dfα1×Nβ1=3.65×105×Df0.1371×N0.3691=3.65×105×(85×10243)0.1371×(480×10242)0.3691=18.83×109

与表格的数值类似。

2. ScalingLaws 模型效果

在 CLM 模型中,PROGEN2-xlarge(6.4B) 与 Our-7.2B 对比,在 序列生成的困惑度(Perplexity)、结构预测的 pLDDT、FoldSeek 搜索的 TM-Score、聚类(Cluster) 的分布 中,这 4 个领域的实验结果,Our-7.2B 都优于 PROGEN2-xlarge(6.4B)。如图:
CLM

在 MLM 模型中,ESM-2 (3B) 与 Ours-10.7B 对比,使用 LoRA 进行微调下游任务,包括 接触预测(Contact Prediction)、折叠分类(Fold Classification)、荧光蛋白(Fluorescence) 的 Spearman 相似度,这 3 个领域的实验结果,Our-10.7B 都优于 ESM-2(3B),同时,470M 模型的迁移学习优于从头训练。如图:
MLM

3. 实验参数

核心的实验参数,包括 大规模数据集(UniMeta200B)、MLM的掩码率(Mask Ratios)、MLM的下游任务(Downstream)。

3.1 大规模数据(UniMeta200B)

验证 大规模数据集(UniMeta200B) 的有效性,优于小批量数据的过采样(UR50/S),采样方法包括 Bootstrap、Local Shuffle、Global Shuffle,即:

  • Bootstrap:从 UR50/S 数据集中有放回地处理了200B Tokens,在每个训练周期中,随机抽取数据集的 65%。
  • Local Shuffle:每个 Epoch 都使用全部的 UR50/S Tokens,进行 Shuffle。
  • Global Shuffle:将重复的全部 UR50/S Tokens,进行 Shuffle,分配至每个 Epoch。

UniMeta200B

3.2 掩码率(Mask Ratios)

验证 掩码率(Mask Ratios) 的超参,掩码率 10%~20% 的效果最好,最终选择 15% 的掩码率,同时,满足80-10-10 策略,在 15% 的掩码部分,其中 80% 替换成掩码,10% 随机替换、10% 保持不变,同时验证,下游任务中,也是 15% 掩码率最好,即:

Mask Ratios

3.3 下游任务(Downstream)

验证 MLM 与 CLM 在下游任务(downstream) 的效果,即接触预测(Contact Prediction),显示相同计算量和相同的 Loss 情况下,MLM 优于 CLM,微调方法 LoRA 优于 Probing,即:

Downstream

P@L/5Precision at L/5,其中 L 代表序列长度,计算的是在前 L/5 最高预测概率中,预测正常的比例。

4. ScalingLaws 实验环境

实验环境包括:

  1. 设备 带有 NVLink 的 Ampere A100 GPU (80G),GLM 框架,训练 1M(Million) 小时的 GPU,即 768 卡,训练 ( 1 × 1 0 6 h ) / ( 768 ) / ( 24 h / D ) ≈ 55 D (1 \times 10^{6}h) / (768) / (24h/D) \approx 55D (1×106h)/(768)/(24h/D)55D
  2. 小模型(<2B) 只使用 数据并行(Data Parallelism),没有使用 模型并行(Model Parallelism) 和 流水线并行(Pipeline Parallelism)。
  3. 改进的 Transformer 架构:DeepNorm + LayerNorm、激活函数 GeLU、位置编码 RoPE
  4. 其他:
    1. FlashAttention
    2. 余弦衰减策略(Cosine Decay Strategy) + 预热(Warm-Up) 2.5%
    3. 序列长度1024 + <EOS>分隔符(Delimiter)
    4. AdamW
    5. BFloat16(Brain Floating Point 16-bit)
    6. 迁移学习:忽略预训练优化状态、预热 5%。

使用带有 NVLink 的 Ampere A100 GPU (80G) 完成所有实验,基于 DeepSpeed 和 Megatron 开发的 GLM 框架,总共使用大约 1M(Million) 小时的 GPU 计算时间,小模型(<2B) 主要使用 数据并行(Data Parallelism),没有使用 模型并行(Model Parallelism) 和 流水线并行(Pipeline Parallelism),简化部署。

使用改进的 Transformer 架构:

(1) 使用 DeepNorm + LayerNorm,即:

D e e p N o r m ( x ) = L a y e r N o r m ( α ⋅ x + N e t w o r k ( x ) ) DeepNorm(x) = LayerNorm(\alpha \cdot x + Network(x)) DeepNorm(x)=LayerNorm(αx+Network(x))

其中,缩放因子 α \alpha α 的值为 ( 2 N ) 1 2 (2N)^{\frac{1}{2}} (2N)21 N N N 是模型的层数,即层数越深,原始输入的权重越高,例如 ( 2 × 70 ) 1 2 = 11.83 (2 \times 70)^{\frac{1}{2}}=11.83 (2×70)21=11.83

(2) 使用 激活函数 GeLU,即:

G e L U ( x ) = x ⋅ P ( X < = x ) = x ⋅ Φ ( x ) G e L U ( x ) = x ⋅ 1 + e r f ( x 2 ) 2 \begin{align} GeLU(x) &= x \cdot P(X<=x) = x \cdot \Phi(x) \\ GeLU(x) &= x \cdot \frac{1+erf(\frac{x}{\sqrt{2}})}{2} \end{align} GeLU(x)GeLU(x)=xP(X<=x)=xΦ(x)=x21+erf(2 x)

其中, Φ ( x ) \Phi(x) Φ(x) 是标准正态分布的累积分布函数(CDF), e r f ( x ) erf(x) erf(x) 是高斯误差函数。

基于 Sigmoid 的近似公式,即:

G e L U ( x ) ≈ x ⋅ σ ( 1.702 x ) GeLU(x) \approx x \cdot \sigma(1.702x) GeLU(x)xσ(1.702x)

PyTorch 源码:

def gelu(x):
  return x * 0.5 * (1.0 + torch.erf(x / torch.sqrt(2.0)))

GeLU 图示:

GeLU

(3) 使用 位置编码 RoPE,即:

P E ( p o s , k ) = c o s ( p o s 50000 0 k d m ) + i ⋅ s i n ( p o s 50000 0 k d m ) θ k = 1 50000 0 k d m P E ( p o s , k ) = c o s ( p o s ⋅ θ k ) + i ⋅ s i n ( p o s ⋅ θ k ) = e i ⋅ p o s ⋅ θ k PE_{(pos,k)} = cos(\frac{pos}{500000^{\frac{k}{d_{m}}}})+i\cdot sin(\frac{pos}{500000^{\frac{k}{d_{m}}}}) \\ \theta_{k} = \frac{1}{500000^{\frac{k}{d_{m}}}} \\ PE_{(pos,k)} = cos(pos \cdot \theta_{k})+i\cdot sin(pos \cdot \theta_{k})=e^{i \cdot pos \cdot \theta_{k}} PE(pos,k)=cos(500000dmkpos)+isin(500000dmkpos)θk=500000dmk1PE(pos,k)=cos(posθk)+isin(posθk)=eiposθk

RoPE 参考:理解 旋转位置编码(RoPE)

(4) 使用 FlashAttention 加速训练过程,参考 FlashAttention 的 Safe-Softmax 与 One-Pass Tiling 计算

(5) 使用 余弦衰减策略(Cosine Decay Strategy),最大学习率(LR) 经验范围是 6 × 1 0 − 4 ∼ 1.2 × 1 0 − 4 6 \times 10^{-4} \sim 1.2 \times 10^{-4} 6×1041.2×104,衰减至 最大LR 的 0.1 倍,预热步数(warm-up) 是 2.5%。

(6) 序列长度设置为 1024,序列通过 <EOS>分隔符(delimiter) 进行拼接。

(7) 优化器使用 AdamW,参数更新,即:

θ t + 1 = θ t − α v t + ϵ m t − λ θ t m t = β 1 m t − 1 + ( 1 − β 1 ) ∇ L ( θ t − 1 ) v t = β 2 v t − 1 + ( 1 − β 2 ) ∇ L ( θ t − 1 ) 2 \begin{align} \theta_{t+1} &= \theta_{t} - \frac{\alpha}{\sqrt{v_{t}}+\epsilon} m_{t} - \lambda\theta_{t} \\ m_{t} &= \beta_{1}m_{t-1} + (1-\beta_{1}) \nabla L(\theta_{t-1}) \\ v_{t} &= \beta_{2}v_{t-1} + (1-\beta_{2}) \nabla L(\theta_{t-1})^{2} \\ \end{align} θt+1mtvt=θtvt +ϵαmtλθt=β1mt1+(1β1)L(θt1)=β2vt1+(1β2)L(θt1)2

其中, m t m_{t} mt 是一阶矩估计(Mean), v t v_{t} vt 是二阶距估计(Variance), α \alpha α 是学习率。

超参数包括 4 个,即 β 1 \beta_{1} β1 是一阶矩衰减率(0.9), β 2 \beta_{2} β2 是二阶距衰减率(0.95), ϵ \epsilon ϵ 是小常数( 1 × 1 0 − 8 1 \times 10^{-8} 1×108), λ \lambda λ 是权重衰减系数(0.01)。

(8) 省略 Dropout,使用 BFloat16(Brain Floating Point 16-bit) 数据格式,即1位符号位、8位指数位、7位尾数位,FP16 是 1-5-10。BFloat16 比 FP16 的数值范围更大,精度降低,数值范围 − 3.4 × 1 0 38 ∼ 3.4 × 1 0 38 -3.4 \times 10^{38} \sim 3.4 \times 10^{38} 3.4×10383.4×1038,即:

B F 1 6 m a x = 2 127 × ( 1 + 127 128 ) = 2 127 × 1.9921875 ≈ 3.4 × 1 0 38 B F 1 6 m i n = 2 − 126 × 1 128 = 2 − 133 ≈ 9.2 × 1 0 − 41 \begin{align} BF16_{max} &= 2^{127} \times (1 + \frac{127}{128}) = 2^{127} \times 1.9921875 \approx 3.4 \times 10^{38} \\ BF16_{min} &= 2^{-126} \times \frac{1}{128} = 2^{-133} \approx 9.2 \times 10^{-41} \end{align} BF16maxBF16min=2127×(1+128127)=2127×1.99218753.4×1038=2126×1281=21339.2×1041

(9) 迁移学习,只使用模型,忽略预训练的优化状态,预热使用最大LR的 5% 总步数,学习剩余的 Tokens。

模型参数:

模型

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

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

相关文章

【Linux网络编程】传输层协议

目录 一&#xff0c;传输层的介绍 二&#xff0c;UDP协议 2-1&#xff0c;UDP的特点 2-2&#xff0c;UDP协议端格式 三&#xff0c;TCP协议 3-1&#xff0c;TCP报文格式 3-2&#xff0c;TCP三次握手 3-3&#xff0c;TCP四次挥手 3-4&#xff0c;滑动窗口 3-5&#xf…

FreeRtos的使用教程

定义&#xff1a; RTOS实时操作系统, (Real Time Operating System), 指的是当外界事件发生时, 能够有够快的响应速度,调度一切可利用的资源, 控制实时任务协调一致的运行。 特点&#xff1a; 支持多任务管理&#xff0c; 处理多个事件&#xff0c; 实现更复杂的逻辑。 与计算…

基于Ubuntu交叉编译ZLMediaKit

一、确保基于虚拟机VMVare的Ubuntu能正常上网 1、设置WIFI硬件无线网卡上网 菜单栏的“编辑”->选择“虚拟网络编辑器”&#xff0c;在弹出的窗口中&#xff0c;点击桥接模式的VMnet0&#xff0c;然后在下方选择“桥接模式”&#xff0c;网卡下拉栏&#xff0c;选择你目前…

【PyTorch][chapter 29][李宏毅深度学习]Fine-tuning LLM

参考&#xff1a; https://www.youtube.com/watch?veC6Hd1hFvos 目录&#xff1a; 什么是 Fine-tune 为什么需要Fine-tuning 如何进行Fine-tune Fine-tuning- Supervised Fine-tuning 流程 Fine-tuning参数训练的常用方案 LORA 简介 示例代码 一 什么是 Fine-tune …

数字图像处理:实验七

uu们&#xff01;这是我们目前数字图像系列的最后一张&#xff0c;之后有关人工智能结合的数字图像处理咸鱼哥正在学习和创作中&#xff0c;所以还请大家给咸鱼哥点时间&#xff0c;同时也提前预祝大家2025年新春快乐&#xff01;&#xff08;咸鱼哥真诚的祝愿每一个人&#xf…

通义灵码插件保姆级教学-IDEA(安装及使用)

一、JetBrains IDEA 中安装指南 官方下载指南&#xff1a;通义灵码安装教程-阿里云 步骤 1&#xff1a;准备工作 操作系统&#xff1a;Windows 7 及以上、macOS、Linux&#xff1b; 下载并安装兼容的 JetBrains IDEs 2020.3 及以上版本&#xff0c;通义灵码与以下 IDE 兼容&…

利用双指针一次遍历实现”找到“并”删除“单链表倒数第K个节点(力扣题目为例)

Problem: 19. 删除链表的倒数第 N 个结点 文章目录 题目描述思路复杂度Code 题目描述 思路 1.欲找到倒数第k个节点&#xff0c;即是找到正数的第n-k1、其中n为单链表中节点的个数个节点。 2.为实现只遍历一次单链表&#xff0c;我们先可以使一个指针p1指向链表头部再让其先走k步…

2025美赛倒计时,数学建模五类模型40+常用算法及算法手册汇总

数学建模美赛倒计时&#xff0c;对于第一次参加竞赛且没有相关基础知识的同学来讲&#xff0c;掌握数学建模常用经典的模型算法知识&#xff0c;并熟练使用相关软件进行建模是关键。本文将介绍一些常用的模型算法&#xff0c;以及软件操作教程。 数学建模常用模型包括&#xf…

前端【10】jQuery DOM 操作

目录 jquery捕获查取 获得内容 - text()、html() 以及 val() 获取属性 - attr() ​编辑 jQuery 修改/设置内容和属性 设置内容 - text()、html() 以及 val() 设置属性 - attr() jQuery添加元素 jQuery - 删除元素 前端【9】初识jQuery&#xff1a;让JavaScript变得更简…

汇编的使用总结

一、汇编的组成 1、汇编指令&#xff08;指令集&#xff09; 数据处理指令: 数据搬移指令 数据移位指令 位运算指令 算术运算指令 比较指令 跳转指令 内存读写指令 状态寄存器传送指令 异常产生指令等 2、伪指令 不是汇编指令&#xff0c;但是可以起到指令的作用&#xff0c;伪…

想品客老师的第七天:闭包和作用域

闭包之前的内容写在这里 环境、作用域、回收 首先还是数据的回收问题&#xff0c;全局变量一般都是通过关闭页面回收的&#xff1b;而局部变量的值不用了&#xff0c;会被自动回收掉 像这种写在全局里的就不会被主动回收捏&#xff1a; let title 荷叶饭function fn() {ale…

速通Docker === Docker 镜像分层存储机制

目录 分层存储的概念 分层存储的实现 镜像层 容器层 分层存储的优势 1. 镜像轻量化 2. 快速构建与部署 3. 高效的镜像共享 4. 版本控制 分层存储的示例 容器层的临时性与数据持久化 总结 Docker 的分层存储机制是其核心特性之一&#xff0c;它使得镜像的构建、共享和…

开源智慧园区管理系统对比五款主流产品探索智能运营新模式

内容概要 在这个数字化迅速发展的时代&#xff0c;园区管理也迎来了全新的机遇和挑战。众所周知&#xff0c;开源智慧园区管理系统作为一种创新解决方案&#xff0c;正逐步打破传统管理的局限性。它的开放性不仅使得系统可以根据具体需求进行灵活调整&#xff0c;也为用户提供…

非根目录部署 nextjs 项目,资源文件 请求404 的问题

最近在学习next项目编写的代码放到服务器上静态资源404 先分析问题 到服务器上查看是有资源目录的是不是项目配置有问题是不是nginx配置有问题 经过排查1和2是没有问题的目前来看只有3 检查一下nginx配置 尝试着把静态资源的配置禁用 问题解决 我的next项目用的是pm2管理…

mysql 学习5 mysql图形化界面DataGrip下载 安装 使用

一、下载和安装 下载&#xff1a; 其他版本 - DataGrip PS&#xff1a;安装目录最好不要有中文。 C:\Program Files\JetBrains\DataGrip 2023.3.4 二、 夸克网盘分享 当前电脑是下载到 &#xff1a;D:\Ctool\mysql\datagrip2023_3_4\datagrip2024\jetbra-datagrip\scripts …

读写和解析简单的 nc 文件

NetCDF 文件格式在气象数据工程领域占据着举足轻重的地位&#xff0c;其结构灵活、强兼容性等优势使其成为该领域的一个标准。无论是从事学术研究还是工程实践&#xff0c;掌握这种数据格式变得越发重要。其次&#xff0c;我注意到目前社区中气象编程大多数课程都聚焦于某个特定…

LLM:BERT or BART 之BERT

文章目录 前言一、BERT1. Decoder-only2. Encoder-only3. Use of Bidirectional Context4. Masked Language Model (MLM)5. Next Sentence Prediction (NSP)6. Fine-tune1、情感分析2、句对分析3、命名实体识别&#xff08;NER&#xff09; 7. BERT总结 总结 前言 NLP选手对这…

【力扣:新动计划,编程入门 —— 题解 ③】

—— 25.1.26 231. 2 的幂 给你一个整数 n&#xff0c;请你判断该整数是否是 2 的幂次方。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 如果存在一个整数 x 使得 n 2x &#xff0c;则认为 n 是 2 的幂次方。 示例 1&#xff1a; 输入&#xff1a;…

Centos7系统php8编译安装ImageMagick/Imagick扩展教程整理

Centos7系统php8编译安装ImageMagick/Imagick扩展教程整理 安装php8安装ImageMagick1、下载ImageMagick2、解压并安装3、查看是否安装成功 安装imagick扩展包 安装php8 点我安装php8 安装ImageMagick 1、下载ImageMagick wget https://www.imagemagick.org/download/ImageMa…

android的gradle

Gradle User Manual gradle官网 这里有个gradlew很有用&#xff0c;因为这个可以在窗口中运行gradlew脚本 gradlew 和 gradlew.bat 都是 Gradle Wrapper&#xff08;Gradle 包装器&#xff09; 的一部分&#xff0c;它们的作用是让项目可以使用 Gradle 而无需提前在系统中…