落地领域大模型应知必会 (1) :主要微调方法总览

在如今高速发展的人工智能领域,高效地利用大语言模型(LLMs)已经变得越来越重要。但是,利用大语言模型的方式太多了,如果你才刚刚开始接触它,可能会感到不知所措。

实质上,我们可以通过两种主要方式将预训练大语言模型用于新任务:上下文学习(in-context learning)以及微调(finetuning)

本文我们将简要介绍上下文学习(in-context learning)的含义,并介绍对LLMs进行微调的各种可行方式。

01 In-Context Learning和Indexing

自从GPT-2(Radford等人[1])和GPT-3(Brown等人[2])问世以来,我们发现,在通用文本语料库上进行预训练的生成式大语言模型(LLMs)可以进行上下文学习。这意味着,如果我们想要执行新的特定任务,我们无需对预训练的LLM进行进一步的训练或微调,可以通过输入Prompt直接提供一些目标任务的示例,如下面的例子所示。

图片

上下文学习的例子

如果我们不能直接访问模型(例如如果我们通过API使用模型),那么上下文学习就用处非常大。

与上下文学习相关的是hard prompt tuning,即试图通过修改输入改善输出,如下图所示。

图片

An illustration of (hard) prompt tuning顺便说一下,我们称这种方法为hard prompt tuning,因为在这种方法中,我们直接修改了输入的单词或tokens。稍后我们将讨论另外一种版本的方法,称为soft prompt tuning(或通常称为prompt tuning)。

刚刚提到的prompt tuning方法为参数微调(parameter finetuning)提供了一种替代方案(且这种方案更节省资源)。然而,它的性能通常不及微调(finetuning),因为这种方法不会针对特定任务更新模型的参数,这可能会限制它对不同特定任务间细微差别的适应能力。此外,prompt tuning可能需要进行大量工作,耗费大量人力财力,因为这种方法需要人工参与比较不同prompt的质量。

在我们更进一步地讨论微调之前,先来了解另一种利用纯粹的上下文学习的方法——indexing。在大语言模型领域中,indexing可以被视为一种上下文学习的变通方法,其使得LLMs能够转变为信息检索系统(information retrieval systems),从外部资源和网站中提取数据。在这个过程中,indexing模块将文档或网站分解成较小的片段,并将它们转换为可以存储在向量数据库中的向量(vectors) 。然后,当用户提交查询(query)时,indexing模块计算嵌入查询(embedded query)与数据库中每个向量之间的向量相似度(vector similarity)。最终,indexing模块检索出与查询最相似的前k个嵌入(embeddings),生成响应。

图片

An illustration of indexing.

02 常规的基于特征的方法和微调方法

如果我们无法直接访问大型语言模型(LLM),例如通过API或使用用户界面与LLM进行交互,那么上下文学习是一种有价值且用户友好的方法。

然而,如果我们可以直接接触到LLM,使用目标领域的数据对其进行调整(adapting)和微调(finetuning)通常会获得更好的结果。那么,如何使一个模型适应目标任务呢?下图概述了三种常见的方法:

图片

3种常规的基于特征的方法和微调的方法

下文中,我们将以对编码器类型(encoder-style)的大型语言模型(例如BERT)微调为例,解析具体的微调方式原理和示例代码。下述示例微调任务为分类器任务,在这个任务中,我们试图预测电影评论是正面情感还是负面情感。需要注意的是,除了对编码器类型(encoder-style)的LLM进行微调外,同样的方法也适用于类似GPT的解码器类型(decoder-style)的LLM。在后续的文章中,我将会举例说明这一点。

此外,我们还可以对解码器类型(decoder-style)的LLM进行微调,以生成对特定指令的多句子回答(multiple-sentence answers),而不仅仅是进行文本分类。关于这个问题,我会在未来的文章中提供实战案例,敬请期待。

2.1 基于特征的方法

在基于特征的方法(feature-based approach)中,我们需要加载一个预训练LLM,并将其应用于目标数据集。在这种方法中,我对生成训练集的输出嵌入(output embeddings)特别感兴趣,这些嵌入可以作为输入特征(input features)用于训练分类模型(classification model)。虽然这种方法在像BERT这样以嵌入为重点的模型中非常常见,但我们也可以从生成式的 GPT-style 模型中提取嵌入。

接下来,我们可以使用逻辑回归模型(logistic regression model)、随机森林(random forest)或XGBoost等任何我们想要使用的模型作为分类模型。(然而,根据我的经验,在这种情况下,像逻辑回归(logistic regression)这样的线性分类器(linear classifiers)表现最佳

理论上,我们可以用下面这段代码来解释基于特征的方法:

python
复制代码
model = AutoModel.from_pretrained("distilbert-base-uncased")

# ...
# tokenize dataset
# ...

# generate embeddings
@torch.inference_mode()
def get_output_embeddings(batch):
output = model(
batch["input_ids"],
attention_mask=batch["attention_mask"]
).last_hidden_state[:, 0]
return {"features": output}

dataset_features = dataset_tokenized.map(
get_output_embeddings, batched=True, batch_size=10)

X_train = np.array(imdb_features["train"]["features"])
y_train = np.array(imdb_features["train"]["label"])

X_val = np.array(imdb_features["validation"]["features"])
y_val = np.array(imdb_features["validation"]["label"])

X_test = np.array(imdb_features["test"]["features"])
y_test = np.array(imdb_features["test"]["label"])

# train classifier
from sklearn.linear_model import LogisticRegression

clf = LogisticRegression()
clf.fit(X_train, y_train)

print("Training accuracy", clf.score(X_train, y_train))
print("Validation accuracy", clf.score(X_val, y_val))
print("test accuracy", clf.score(X_test, y_test))

(对此感兴趣的读者可以在此处[4]找到完整的代码)

2.2 微调方法 I —— 更新输出层(Output Layers)

有一种方法与上述基于特征的方法比较相关,叫做微调输出层(本文称之为微调方法 I)。与基于特征的方法类似,这种方法不改变预训练LLM的参数,只会训练新增加的输出层,类似于在嵌入特征(embedded features)上训练逻辑回归分类器(logistic regression classifier)或小型多层感知器(small multilayer perceptron)。

相关代码如下:

python
复制代码
model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-uncased",
     num_labels=2
) 

# freeze all layers
for param in model.parameters():
    param.requires_grad = False
    
# then unfreeze the two last layers (output layers)
for param in model.pre_classifier.parameters():
    param.requires_grad = True

for param in model.classifier.parameters():
    param.requires_grad = True
    
# finetune model
lightning_model = CustomLightningModule(model)

trainer = L.Trainer(
    max_epochs=3,
    ...
)

trainer.fit(
  model=lightning_model,
  train_dataloaders=train_loader,
  val_dataloaders=val_loader)

# evaluate model
trainer.test(lightning_model, dataloaders=test_loader)

(对此感兴趣的读者可以在此处[4]找到完整的代码)

从理论上讲,这种方法的建模性能和速度(modeling performance and speed)应该与基于特征的方法差不多,因为都会去冻结骨干模型(frozen backbone model)(译者注:通过冻结骨干模型,我们可以保持其模型权重不变,仅对任务模块进行训练。这样可以减少需要更新的参数数量,提高训练效率,并在一定程度上保留原始骨干模型的特征提取能力)。然而,由于基于特征的方法使得预计算(pre-compute)和存储训练数据集的嵌入特征(embedded features)稍微更容易一些,所以在具体场景中,基于特征的方法可能更加方便

2.3 微调方法 II - 更新所有层(All Layers)

虽然BERT那篇论文(Devlin等人)说过,仅微调输出层(output layer)可以实现与微调所有层相当的模型性能,但由于后者涉及的参数更多,所以成本要高得多。 例如,BERT基础模型约有1.1亿个参数。然而,用于二元分类的BERT基础模型最后一层仅包含1500个参数。此外,BERT基础模型的最后两层共有6万个参数,这仅占总模型大小的0.6%左右。

我们选择走哪条路径会根据目标任务和目标领域与模型预训练的数据集的相似程度而有所不同。但是在具体实践中,微调所有层几乎总是能获得更优的模型性能。

因此,在优化模型性能时,使用预训练LLM的黄金标准(the gold standard)是更新所有层(本文称之为微调方法 II)。从理论上讲,微调方法 II 与微调方法 I 非常相似。唯一的区别是方法II不会冻结预训练LLM的参数,而是对其进行微调

ini
复制代码
model = AutoModelForSequenceClassification.from_pretrained(
    "distilbert-base-uncased",
     num_labels=2
) 

# freeze layers (which we don't do here)
# for param in model.parameters():
#    param.requires_grad = False
    

# finetune model
lightning_model = LightningModel(model)

trainer = L.Trainer(
    max_epochs=3,
    ...
)

trainer.fit(
  model=lightning_model,
  train_dataloaders=train_loader,
  val_dataloaders=val_loader)

# evaluate model
trainer.test(lightning_model, dataloaders=test_loader)

(对此感兴趣的读者可以在此处[4]找到完整的代码)

上面的这段代码被用来训练一个基于DistilBERT基础模型的电影评论分类器(你可以去the code notebooks看一看[4])

1)基于特征的方法与逻辑回归:83%的测试准确率(accuracy);

2)微调方法 I,更新最后两层:87%准确率(accuracy);

3)微调方法 II,更新所有层:92%准确率(accuracy)。

这些准确率结果符合预期,即微调更多层通常会获得更好的性能,但也需要花费更高的成本。

图片

本文3种方法的训练效率和模型性能权衡经验之谈

上述场景强调了微调的三种最不同或最极端的情况:即仅训练最后一层(或几层)与训练所有层。当然,具体效果可能会因模型和数据集而异,但在探索两者之间的各种情况也是值得的。 例如,有时候我们只需训练一半的模型,就能获得与训练完成的模型相同的性能(更多关于轻量化微调(parameter-efficient finetuning)的内容将在下一节介绍)。如果你是一个好奇宝宝,下图描述了在IMDB电影评论数据集(IMDB movie review dataset)的2万个训练实例上进行微调的DistilBERT模型的预测性能(predictive performances)和训练时间。

图片

在IMDB电影评论数据集上微调的预训练DistilBERT模型的性能。相关代码可以在GitHub上找到[5]

正如我们可以看到的,仅训练最后一层是最快速的,但模型性能也最差。 符合预期的是,训练更多层会提高模型性能,但也会增加计算成本。 有一件事情非常有趣,可以看到当训练两个全连接的输出层(fully connected output layers)和最后两个transformer blocks(从左边数起的第三个block)时,预测性能(predictive performance)就已经趋于饱和。因此,在这种特定情况下(即对于这个特定的模型和数据集组合),训练超过这些层(layers)似乎是一种计算资源的浪费。

03 轻量化微调(Parameter-Efficient Fine-Tuning)

轻量化微调让我们能够重复使用预训练的模型,同时最大限度地减少算力和资源的占用。总体来说,轻量化微调具有以下五个优点:

1. 能够降低计算成本(需要更少的GPU和GPU运行时间);

2. 拥有更快的训练时间(更快地完成训练);

3. 具备更低的硬件要求(适用于较小显存的GPU和较小的内存);

4. 具有更好的模型性能(降低过拟合);

5. 需要更少的存储空间(大部分weights可以在不同任务(tasks)之间共享)。

在之前的章节中,我们了解到微调更多的层通常会带来更好的结果。上面的实验是基于一个相对较小的DistilBERT模型。但是,如果我们想微调那些几乎无法容纳在GPU显存中的较大模型(例如最新的生成式LLM模型),我们该怎么办呢?当然,我们可以使用上述基于特征的方法或者微调方法I。但假设我们想要获得与微调方法II类似的模型质量呢?

这些年来,研究人员们开发了几种技术(Lialin等人[6])来微调LLM,使其只需要训练少量的参数,也能具有较高的模型性能。这些方法通常被称为参数高效微调技术(parameter-efficient finetuning techniques,PEFT,本文亦译作轻量化微调)。

一些目前最受欢迎的PEFT技术在下图中可见。

图片

最受欢迎的轻量化微调(PEFT)技术可选择项

那么,这些技术是如何工作的呢?简单来说,都涉及到引入少量额外的参数进行微调(而不是像我们在上面的微调方法 II中那样对所有层进行微调)。从某种意义上说,微调方法 I(只微调最后一层)也可以被认为是一种轻量化微调(PEFT)技术。然而,像前缀微调(prefix tuning)、adapters和Low-Rank Adaptation (LoRA,低秩自适应))等技术,它们都“修改”了多个层(layers),以极低的成本实现了更好的预测性能(predictive performance)。

由于本文的篇幅目前已经很长了,而且这些都是超级有趣的技术,我将在未来单独介绍这些技术。

04 基于人类反馈的强化学习(Reinforcement Learning with Human Feedback)

在基于人类反馈的强化学习(Reinforcement Learning with Human Feedback,RLHF)中,使用一种结合了监督学习(supervised learning)和强化学习(reinforcement learning)的方法对预训练模型进行微调——这一方法被 ChatGPT 使用而得到大力推广,而 ChatGPT 又是基于InstructGPT(Ouyang等人[7])的。

在RLHF中,通过让人类对不同的模型输出进行排序或评分来收集人类反馈,从而提供奖励信号(reward signal) 。收集到的奖励标签(reward labels) 可以用来训练奖励模型(reward model) ,进而反过来指导LLM(Language Model)适应人类的喜好。

奖励模型本身是通过监督学习(supervised learning)来学习的(通常使用预训练的LLM作为基础模型)。接下来,使用奖励模型来更新预训练的LLM,使其适应人类偏好——训练过程使用一种被称为近端策略优化(proximal policy optimization,Schulman等人[8])的强化学习方法。

图片

InstructGPT相关论文的截图,概述了RLHF的过程

为什么要使用奖励模型而不是直接在人类反馈的基础上训练预训练模型?这是因为让人类参与模型的学习过程会产生瓶颈(bottleneck),因为我们无法实时获取反馈。

这篇文章的篇幅已经很长了,所以我把更详细的解释推迟到以后的文章中,敬请期待!

05 总结

对预训练LLM的所有层(layers)进行微调仍然是适应新目标任务(new target tasks)的黄金标准(the gold standard),但是对于预训练的Transformer模型,有几种有效的替代方法。诸如基于特征的方法、上下文学习和轻量化微调等这些方法能够有效地将LLM应用于新的任务,同时还能最大限度地减少计算成本和计算资源

此外,基于人类反馈的强化学习(RLHF)作为监督微调(supervised finetuning,SFT)的一种替代方法,可以提升模型性能。

如何系统的去学习大模型LLM ?

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。

但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的 AI大模型资料 包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来

😝有需要的小伙伴,可以V扫描下方二维码免费领取🆓

在这里插入图片描述

AI大模型系统学习路线图

在这里插入图片描述

阶段1:AI大模型时代的基础理解

  • 目标:了解AI大模型的基本概念、发展历程和核心原理。
  • 内容
    • L1.1 人工智能简述与大模型起源
    • L1.2 大模型与通用人工智能
    • L1.3 GPT模型的发展历程
    • L1.4 模型工程
      - L1.4.1 知识大模型
      - L1.4.2 生产大模型
      - L1.4.3 模型工程方法论
      - L1.4.4 模型工程实践
    • L1.5 GPT应用案例

阶段2:AI大模型API应用开发工程

  • 目标:掌握AI大模型API的使用和开发,以及相关的编程技能。
  • 内容
    • L2.1 API接口
      - L2.1.1 OpenAI API接口
      - L2.1.2 Python接口接入
      - L2.1.3 BOT工具类框架
      - L2.1.4 代码示例
    • L2.2 Prompt框架
      - L2.2.1 什么是Prompt
      - L2.2.2 Prompt框架应用现状
      - L2.2.3 基于GPTAS的Prompt框架
      - L2.2.4 Prompt框架与Thought
      - L2.2.5 Prompt框架与提示词
    • L2.3 流水线工程
      - L2.3.1 流水线工程的概念
      - L2.3.2 流水线工程的优点
      - L2.3.3 流水线工程的应用
    • L2.4 总结与展望

阶段3:AI大模型应用架构实践

  • 目标:深入理解AI大模型的应用架构,并能够进行私有化部署。
  • 内容
    • L3.1 Agent模型框架
      - L3.1.1 Agent模型框架的设计理念
      - L3.1.2 Agent模型框架的核心组件
      - L3.1.3 Agent模型框架的实现细节
    • L3.2 MetaGPT
      - L3.2.1 MetaGPT的基本概念
      - L3.2.2 MetaGPT的工作原理
      - L3.2.3 MetaGPT的应用场景
    • L3.3 ChatGLM
      - L3.3.1 ChatGLM的特点
      - L3.3.2 ChatGLM的开发环境
      - L3.3.3 ChatGLM的使用示例
    • L3.4 LLAMA
      - L3.4.1 LLAMA的特点
      - L3.4.2 LLAMA的开发环境
      - L3.4.3 LLAMA的使用示例
    • L3.5 其他大模型介绍

阶段4:AI大模型私有化部署

  • 目标:掌握多种AI大模型的私有化部署,包括多模态和特定领域模型。
  • 内容
    • L4.1 模型私有化部署概述
    • L4.2 模型私有化部署的关键技术
    • L4.3 模型私有化部署的实施步骤
    • L4.4 模型私有化部署的应用场景

辅助学习书籍PDF资源:

在这里插入图片描述
在这里插入图片描述

学习计划:

  • 阶段1:1-2个月,建立AI大模型的基础知识体系。
  • 阶段2:2-3个月,专注于API应用开发能力的提升。
  • 阶段3:3-4个月,深入实践AI大模型的应用架构和私有化部署。
  • 阶段4:4-5个月,专注于高级模型的应用和部署。
    请根据您的个人进度和时间安排,适当调整学习计划。记得在学习过程中,理论与实践相结合,不断进行项目实践和反思,以加深理解和技能的掌握。

学习是一个过程,只要学习就会有挑战。天道酬勤,你越努力,就会成为越优秀的自己。

如果你能在15天内完成所有的任务,那你堪称天才。然而,如果你能完成 60-70% 的内容,你就已经开始具备成为一名大模型 AI 的正确特征了。

这份完整版的大模型 AI 学习资料已经上传CSDN,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

😝有需要的小伙伴,可以Vx扫描下方二维码免费领取🆓

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

中控系统智能化管理,多媒体展厅展示效果大升级!

在当今数字展厅设计的热潮中,多媒体互动理念已经崭露头角,成为各大企业竞相采纳的主流设计方式,它们通过集成的多媒体展示手段,为企业提供了一个全新的平台,来展现其形象、产品与服务,更通过互动的方式加深…

NSSCTF | [SWPUCTF 2021 新生赛]caidao

打开题目,只有一个图片,图片中间是一个一句话木马的一部分,意思是服务器可以执行通过POST的请求方式传入参数为wllm的命令,那这就是典型的命令执行,当然,也可以使用蚁剑或者菜刀连接这个木马 一句话木马的…

在Ubuntu 24.04 LTS (Noble Numbat)上安装nfs server以及nfs client

在Ubuntu 24.04 LTS (Noble Numbat)上,我使用的是最小化安装, 当然server版本的Ubuntu在安装的时候可能会有网络不通的问题,解决办法见如下文章: ubuntu 24.04 server 仅NAT模式上网设置静态IP设置-CSDN博客文章浏览阅读489次,点赞9次,收藏3次。在Ubuntu 24.04 上设置网…

Modbus TCP转CAN网关在不同行业中的应用以及其使用上的优势

倍讯科技Modbus TCP转CAN网关通常被用于工业自动化领域,特别是在需要连接现有Modbus TCP网络和CAN总线设备的场景中。以下是该网关在不同行业中的应用以及其使用上的优势: 1. 制造业: - 在制造业中,各种类型的设备和机器通常使用不…

CANape测量分析标定

CANape创建工程及标定 1 创建工程 1. 创建ape工程 打开CANape软件,创建新的ape工程 2.添加数据库文件 通过添加Device(确定信号源)的方式加载数据库文件 A2L:通过添加CCP、 XCP、VX1000的Device DBC:对总线报文检测 CAN CDD: 诊断功能 Diagnostic 如需导入MAP文件…

企业智能照明控制系统 为企业实现智能化照明管理

工厂车间传统照明的问题及智能照明系统的优势 谢继东15821713522 一、工厂传统照明存在的问题: 1、工业厂房一般建筑结构高,跨距大。灯具安装悬挂高,照明空间大,灯具回路多,而车间是厂区对照明要求较高的区域&#xf…

数据结构复习指导之树与二叉树的应用(哈夫曼和并查集)

文章目录 树与二叉树的应用 考纲内容 复习提示 1.哈夫曼树和哈夫曼编码 1.1哈夫曼树的定义 1.2哈夫曼树的构造 1.3哈夫曼编码 2.并查集 2.1并查集的概念 2.2并查集的存储结构 2.3并查集的基本实现 2.4并查集实现的优化 树与二叉树的应用 考纲内容 (一&…

Java Web开篇

Java Web开篇 大纲 整个内容梳理 具体案例 整个内容梳理 这是前端和后端组成的系统的框架结构

区块链的跨链交互:从学校间交流看跨链技术

区块链是一种去中心化的分布式账本技术,它通过加密学和共识机制来确保数据的安全性和不可篡改性。每个区块链就像一所独立的学校,有自己的制度、学生和重点专业。它们各自运行,有时在同一领域展开不同的活动。随着区块链技术的不断发展&#…

Java的VO,BO,PO,DO,DTO

写在前面 本文看下VO,BO,PO,DO,DTO,都是啥! 1:正文 先看一张图,看了图就能知道个大概了: 1.1:PO 全称是persistent object,对应数据的表&am…

一站式搭建交友平台-交友系统源码-支持H5小程序+带安装说明+可封装APP-交友网站系统平台搭建

简述 社交交友系统是一种比较复杂的系统,需要涉及到前端、后端、数据库等多个方面。具体实现方式因不同开发者和需求而异。 功能 1、用户注册、登录和注销功能。 2、用户资料填写和修改功能,包括头像、昵称、性别、年龄、个人介绍等信息。 3、用户之间…

你了解手机设备的dpr吗?它和CSS又有什么联系?

当我们在前端开发中涉及到devicePixelRatio时,我们实际上在谈论屏幕像素密度,即每英寸的像素数。这个属性告诉我们在一个设备上的一个CSS像素对应多少物理像素。 目录 知识点概览 dpr值的计算 dpr的用处 知识点概览 比如我们新买了一个手机&#xff0…

怎样才能不当数据泄露的下一个受害者?

在数字化时代,数据泄露成为了所有企业必须面对的难题。无论规模大小,每家公司都可能成为黑客攻击的目标,从而遭受数据泄露的风险。然而,通过采取一系列预防措施,企业可以极大地降低成为下一个受害者的可能性。 教育员…

Linux实验 vi编辑器的使用与磁盘管理

实验目的: 掌握vi编辑器的启动、保存和退出;掌握vi编辑器的三种工作模式的转换及输入模式下的操作;了解Linux文件系统类型、虚拟文件系统和存储设备的名称;掌握磁盘文件系统的挂载和卸载;掌握常用磁盘操作命令&#x…

现货黄金白银行情走高带来的投资机会分析

当现货黄金和白银行情呈现出走高的态势时,这常常被投资者解读为一个潜在的投资机会。本文旨在分析在黄金白银价格上涨时的投资机会,并指出应对策略。 一、走高行情背后的机会 行情的上升,往往代表了市场在某种程度上的认可,无论这…

(有奖调查)企业级3D模型资产管理平台,用户需求大调查!

(有奖调查)企业级3D模型文件管理平台用户需求大调查https://www.wjx.cn/vm/PpLKkmn.aspx#

深圳盐田某前沿研究所:OLED透明屏引领未来科技空间

产品:55寸OLED透明屏 项目时间:2024年04月 项目地点:深圳盐田 在科技日新月异的今天,前沿的研究机构不仅追求科研的突破,也在不断探索和尝试将最新科技融入其工作环境之中。深圳盐田的一家前沿研究所便是这一探索的先…

yum makecache执行显示Errno 14]HTTP error 404

解决方法: 修改成能访问到的路径,后面都加上x86_64,删掉$basearch,以及把$releasever改成7: 运行成功:

k8s部署最新版zookeeper集群(3.9.2),并配置prometheus监控

目录 zookeeper集群部署创建zookeeper文件夹namespace.yamlscripts-configmap.yamlserviceaccount.yamlstatefulset.yamlsvc-headless.yamlsvc.yamlmetrics-svc.yaml执行部署 接入prometheus访问prometheus查看接入情况导入zookeeper监控模版监控展示 zookeeper集群部署 复制粘…

网络安全----小程序渗透测试反编译审计漏洞

一、什么是反编译审计漏洞 微信小程序反编译渗透测试是一种针对微信小程序的安全测试方法,是在通过对小程序源代码的反编译和分析,发现潜在的安全漏洞,并对其进行渗透测试以验证其安全性的一种方法。 二、测试流程及其步骤 反编译小程序&a…