微调Llama2自我认知

一、概述

最近在学习了解大模型微调相关的内容,在学习的过程中也遇到了很多问题,所以将自己的学习过程记录下来,希望对大模型微调感兴趣的小伙伴提供一点帮助,本文主要介绍一下如何通过SFT微调Llama2的自我认知,先看一下微调前后的效果比对:

微调前:

微调后:

通过本文的学习,你将了解如下内容:

  • 如何使用SFT微调Llama2
  • 如何导出微调后的大模型
  • 如何使用FastChat实现 OpenAI 兼容的 RESTful API 接口

二、环境与模型选择

环境配置

使用 nvidia-smi 命令查看 GPU 的配置,微调的GPU配置如下:

$nvidia-smi     
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 470.161.03   Driver Version: 470.161.03   CUDA Version: 11.7     |
|-------------------------------+----------------------+----------------------+
| GPU  Name        Persistence-M| Bus-Id        Disp.A | Volatile Uncorr. ECC |
| Fan  Temp  Perf  Pwr:Usage/Cap|         Memory-Usage | GPU-Util  Compute M. |
|                               |                      |               MIG M. |
|===============================+======================+======================|
|   0  NVIDIA A800-SXM...  Off  | 00000000:8E:00.0 Off |                    0 |
| N/A   30C    P0    69W / 400W |  17320MiB / 81251MiB |      0%      Default |
|                               |                      |             Disabled |
+-------------------------------+----------------------+----------------------+
                                                                               
+-----------------------------------------------------------------------------+
| Processes:                                                                  |
|  GPU   GI   CI        PID   Type   Process name                  GPU Memory |
|        ID   ID                                                   Usage      |
|=============================================================================|
+-----------------------------------------------------------------------------+

微调 Llama2 需要 1 个GPU,24G 内存,较低的内存会导致加载模型较慢。

开源框架和模型

  • 微调的模型: [Chinese-Llama-2-7b]
  • 微调框架: [LLaMA-Efficient-Tuning]
  • 提供openai兼容的RESTful API框架: [FastChat
  • 本地知识库问答应用框架: [LangChain-Chatchat]

由于Llama2本身的中文对齐较弱,这里没有直接使用 meta-llama/Llama-2-7b而是使用 LinkSoul/Chinese-Llama-2-7b进行微调,微调方法是类似的,感兴趣的可以基于 meta-llama/Llama-2-7b 进行微调。下面详细介绍一下微调的步骤。

三、SFT微调

1、下载预训练模型

在 huggingface上面搜索模型名称,可以看到下载模型的方式如下:

新建一个 models 文件夹用来存放下载的大模型,使用下面的命令下载预训练模型:

# 在当前目录新建一个 models 文件夹用来存放大模型
mkdir models
# 使用下面的命令下载模型,模型比较大,下载过程较缓慢,
git lfs install
git clone https://huggingface.co/LinkSoul/Chinese-Llama-2-7b

# 设置下面的环境变量,则不会下载大文件,只会下载小文件
GIT_LFS_SKIP_SMUDGE=1

2、下载微调框架

使用如下命令,在当前目录下载微调框架 [LLaMA-Efficient-Tuning]**

git clone https://github.com/hiyouga/LLaMA-Efficient-Tuning.git

进入 LLaMA-Efficient-Tuning 目录:

cd LLaMA-Efficient-Tuning

3、准备微调数据

进入微调框架LLaMA-Efficient-Tuning目录后,找到存放微调数据的data目录,如下所示:

我们可以查看一下 self_cognition.json自我认知文件内容如下:

可以看到 <NAME><AUTHOR>是占位符,我们只需要复制一份文件,将对应的占位符替换为需要的名称即可,复制一份文件是为了自我认知的模版文件可复用,我替换后的文件内容如下,你可以改成自己的名字:

微调数据准备好了后,需要在 dataset_info.json 中配置如下:

{
	"self_cognition": {
    "file_name": "self_cognition.json",
    "file_sha1": "6287a730ada924fc5d9eadc6d8f865e01b7a6f67"
  }
}

dataset_info.json文件会被转换为 python 的字典,self_cognition就是字典的 key,在微调的时候需要指定的数据集名称就是该 key,file_sha1 文件的摘要可以不填,file_name就是微调文件的名称,如果该微调文件在data目录中,则直接指定名称即可,如果在data目录的子目录中,则需要指定子目录的名字,举例如下:

4、开始SFT微调

微调数据准备好后就可以开始执行微调了,使用如下命令进行微调:

CUDA_VISIBLE_DEVICES=0 python src/train_bash.py \
    --stage sft \
    --do_train \
    --dataset self_cognition \
    --model_name_or_path /ossfs/workspace/models/Chinese-Llama-2-7b \
    --output_dir /ossfs/workspace/llama2-sft/checkpoint-01 \
    --template default \
    --finetuning_type lora \
    --lora_target q_proj,v_proj \
    --overwrite_cache \
    --per_device_train_batch_size 4 \
    --gradient_accumulation_steps 4 \
    --lr_scheduler_type cosine \
    --logging_steps 10 \
    --save_steps 2000 \
    --learning_rate 1e-3 \
    --num_train_epochs 10.0 \
    --plot_loss \
    --fp16

下面是对这个大模型训练命令中各个参数的详细解释:

--stage sft: 训练阶段。这里指定为sft,表示进行模型的微调(self-supervised fine-tuning)阶段。

--do_train: 是否进行训练,设置为True表示进行训练。还可以设置为(--do_eval:表示评估,--do_predict:表示预测)

--dataset self_cognition: 数据集名称。这里指定为self_cognition,表示使用自我认知数据集。

--model_name_or_path /ossfs/workspace/models/Chinese-Llama-2-7b: 预训练模型的名称或路径。这里指定为/ossfs/workspace/models/Chinese-Llama-2-7b,表示加载路径下的预训练模型。

--output_dir /ossfs/workspace/llama2-sft/checkpoint-01: 训练输出目录。训练过程中生成的模型和日志将保存在该目录下。

--template default: 模板名称。这里指定为default,表示使用默认模板。

--finetuning_type lora: 微调类型。这里指定为lora,表示使用LoRA(Language Representation with Additive Transformation)微调方法。

--lora_target q_proj,v_proj: LoRA微调的目标层。这里指定为q_proj,v_proj,表示只对q_proj和v_proj两个层进行微调。

--overwrite_cache: 是否覆盖缓存。设置为True表示覆盖缓存。

--per_device_train_batch_size 4: 每个设备的训练批次大小。这里指定为4,表示每个设备上的训练批次大小为4。

--gradient_accumulation_steps 4: 梯度累积步数。这里指定为4,表示每4个步骤累积一次梯度。

--lr_scheduler_type cosine: 学习率调度器类型。这里指定为cosine,表示使用余弦学习率调度器。

--logging_steps 10: 日志记录步数。每训练多少步记录一次训练日志。

--save_steps 2000: 模型保存步数。每训练多少步保存一次模型。

--learning_rate 1e-3: 学习率。这里指定为1e-3,表示初始学习率为0.001。

--num_train_epochs 10.0: 训练轮数。这里指定为10.0,表示进行10轮训练。

--plot_loss: 是否绘制损失曲线。设置为True表示绘制损失曲线。

--fp16: 是否使用混合精度(half-precision)训练。设置为True表示使用混合精度训练。

以上是对该大模型训练命令中各个参数的解释。根据需求,可以根据实际情况进行相应参数的修改。不同的参数设置会对训练过程和结果产生影响,需要根据具体任务和数据集进行调整。

微调过程比较耗时,需要耐心等待

启动微调命令后,输出日志如下,需要用户输入是否需要 wandb (一个深度学习轻量级可视化工具)将训练结果可视化,我这里选择不可视化训练结果。

微调命令结束后可以看到如下日志输出,从日志中可以看到微调后的模型 checkpoint 的位置、损失曲线的信息以及训练的汇总信息:

查看损失曲线:

损失曲线图像解读:

在大模型训练过程中,train loss 图像是指每个训练批次的损失值随训练轮次的变化情况。这个图像可以用来解读训练过程中模型的收敛情况和学习进展。

train loss 图像的纵轴表示损失值,横轴表示训练轮次或训练批次。通常,初始阶段的损失值较高,随着训练的进行,损失值会逐渐下降。如果损失值趋向于稳定,说明模型已经收敛,训练效果良好。如果损失值下降很慢,可能需要更多的训练轮次或调整模型超参数。如果损失值波动较大,可能存在过拟合或其他问题,需要进一步调整模型或数据。

解读train loss 图像时,可以观察以下几个方面:

  1. 初始阶段的损失值高低,较高的初始损失值可能表明模型初始化不合适,需要调整初始化方法。
  2. 损失值下降的速率,较快的下降速率可能表明模型对数据的学习能力较强,但也可能存在过拟合的风险。
  3. 损失值的稳定性,稳定的损失值说明模型已经收敛,训练效果较好。如果损失值在一定范围内波动,可以考虑增加训练轮次或使用正则化等方法进一步优化模型。
  4. 训练过程中的异常情况,如损失值突然上升或跳跃,可能表明出现了问题,需要检查模型或数据是否存在异常。

总之,train loss 图像可以提供对模型训练过程的直观理解,帮助调整模型和优化训练策略,以达到更好的训练效果。

train loss 的值下降到什么范围表示模型的训练效果较好?

train loss 的值下降到一个较低的范围可以表示模型的训练效果较好。具体的判断标准可以根据具体的任务和数据集来确定,没有一个统一的阈值。

一种常见的做法是观察 train loss 图像的趋势,如果随着训练的进行,train loss 不断下降并趋于稳定,说明模型对训练数据的拟合效果较好,训练效果较好。

此外,可以根据验证集的表现来评估模型的训练效果。如果验证集的损失值也在下降并趋于稳定,且与训练集的损失值相近,说明模型在训练集和验证集上都能取得较好的效果,训练效果较好。

需要注意的是,train loss 仅仅是一个指标,不能完全代表模型的训练效果。还需要综合考虑模型在其他指标上的表现,如准确率、精确率、召回率等,以及在实际应用场景中的效果。

5、测试微调后的模型

微调框架 LLaMA-Efficient-Tuning中提供了三种测试使用微调模型的方式,如下所示:

  • api_demo.py:使用api的方式调用微调模型
  • cli_demo.py:在命令行中调用微调模型
  • web_demo.py:在web页面中调用微调模型

由于我这里的服务器没有外网访问的地址,所以使用 cli_demo.py命令行的方式手动测试微调后的模型,启动命令如下:

CUDA_VISIBLE_DEVICES=0 python src/cli_demo.py \
    --model_name_or_path /ossfs/workspace/models/Chinese-Llama-2-7b \
    --checkpoint_dir /ossfs/workspace/llama2-sft/checkpoint-01\
    --template llama2

查看 cli_demo.py 源码,调用了 ChatModel.stream_chat(query, history)ChatModel的构造方法中调用了 get_infer_args(args),如下所示:

get_infer_args(args)如下所示,可以看到只有 LoRA 的微调支持指定多个 checkpoint

在模型参数中可以看到指定 checkpoint_dir 时可以使用 分隔多个 checkpoint:

所以如果你使用 LoRA 进行微调,那么当有多个微调任务,生成多个 checkpoint 时,多个 checkpoint 可以使用 分隔,假设你微调了两个checkpoint:/ossfs/workspace/llama2-sft/checkpoint-01/ossfs/workspace/llama2-sft/checkpoint-02,那么你可以使用下面的命令测试两个微调后的模型,如下所示:

CUDA_VISIBLE_DEVICES=0 python src/cli_demo.py \
    --model_name_or_path /ossfs/workspace/models/Chinese-Llama-2-7b \
    --checkpoint_dir /ossfs/workspace/llama2-sft/checkpoint-01,/ossfs/workspace/llama2-sft/checkpoint-02\
    --template default


因为我这里只微调了自我认知,并且将在微调的时候指定 --output_dir /ossfs/workspace/llama2-sft/checkpoint-01,所以使用下面的命令来测试微调后的模型即可:

CUDA_VISIBLE_DEVICES=0 python src/cli_demo.py \
    --model_name_or_path /ossfs/workspace/models/Chinese-Llama-2-7b \
    --checkpoint_dir /ossfs/workspace/llama2-sft/checkpoint-01\
    --template default


运行测试命令需要再次加载模型,比较耗时,需要耐心等待,运行成功后可以看到如下输出:

接下来就可以问一些自我认知的问题进行验证了,如下所示:

6、导出微调后的模型

经过前面的微调,如果微调后的模型通过了测试就可以将微调后的模型导出,使用如下命令即可:

CUDA_VISIBLE_DEVICES=0 python src/export_model.py \
    --model_name_or_path /ossfs/workspace/models/Chinese-Llama-2-7b \
    --checkpoint_dir /ossfs/workspace/llama2-sft/checkpoint-01\
    --output_dir /ossfs/workspace/sft-models/my-llama5 \
    --template default


我这里使用 --output_dir 将模型导出到 /ossfs/workspace/sft-models/my-llama5目录中,可以看到目录中包括如下内容:

7、微调模型提供RESTful API接口

经过前面的步骤,我们已经将自己微调后的模型导出了,现在我们可以使用 FastChat 将模型发布为 [openai 兼容的RESTful API]以便外部服务使用。

FastChat 为其支持的模型提供与 OpenAI 兼容的 API,因此您可以使用 FastChat 作为 OpenAI API 的本地直接替代品。[FastChat 服务器与openai-python]库和 cURL 命令兼容。

支持以下 OpenAI API:

  • Chat Completions
  • Completions
  • Embeddings

RESTful API 服务器

首先,启动控制器

python3 -m fastchat.serve.controller


运行命令输出内容如下:

然后,启动模型,通过 --model-path 指定模型的路径,这里我们指定前面微调后的模型路径 /ossfs/workspace/sft-models/my-llama5

python3 -m fastchat.serve.model_worker --model-path /ossfs/workspace/sft-models/my-llama5


运行命令输出内容如下:

最后,启动 RESTful API 服务器

python3 -m fastchat.serve.openai_api_server --host localhost --port 8000


运行命令输出内容如下:

现在,让我们测试 API 服务器。

OpenAI官方SDK

目标openai_api_server.py是实现一个完全兼容 OpenAI 的 API 服务器,因此模型可以直接与[openai-python]库一起使用。

首先,安装openai-python:

pip install --upgrade openai


然后使用下面的代码与模型进行测试:

import openai
# to get proper authentication, make sure to use a valid key that's listed in
# the --api-keys flag. if no flag value is provided, the `api_key` will be ignored.
openai.api_key = "EMPTY"
openai.api_base = "http://localhost:8000/v1"

# 这里指定微调的模型名字,也就是保存模型文件的文件夹名称
model = "my-llama5"

# create a chat completion
completion = openai.ChatCompletion.create(
  model=model,
  messages=[{"role": "user", "content": "你是谁"}]
)
# print the completion
print(completion.choices[0].message.content)


在jupyterlab中运行上面的代码,输出结果如下:

8、微调模型和本地知识库整合

因为后面打算学习了解一下将大模型和知识库整合,所以我这里先使用本地知识库问答应用框架: [LangChain-Chatchat] ****和微调后的模型整合。下面我先简单介绍一下整合的步骤,后面会再写一篇文章详细介绍一下大模型和本地知识库相关的内容。

首先下载 Langchain-Chatchat,使用如下命令:

git clone https://github.com/chatchat-space/Langchain-Chatchat.git


进入 Langchain-Chatchat,使用下面的命令安装 python 依赖库:

cd Langchain-Chatchat

pip install -r requirements.txt

pip install -r requirements_api.txt


使用下面的命令复制一份配置文件:

cp configs/model_config.py.example configs/model_config.py


如下所示:

model_config.py 配置文件需要修改如下内容,在llm_model_dict指定模型的地址,并且设置LLM_MODEL的名称和 llm_model_dict的 key 对应,如下所示:

llm_model_dict = {
    "llama2": {
        "local_model_path": "/ossfs/workspace/sft-models/my-llama5",
        "api_base_url": "http://localhost:8888/v1",  # 修改为fastchat服务中的"api_base_url"
        "api_key": "EMPTY"
    }
}

# LLM 名称
LLM_MODEL = "llama2"


接下来就可以使用下面的命令启动 llm_api.py

python server/llm_api.py


启动成功后可以使用下面的代码在 jupyterlab 中进行验证:

# 服务启动后接口调用示例:
import openai
openai.api_key = "EMPTY" # Not support yet
openai.api_base = "http://localhost:8888/v1"

model = "llama2"

def get_answer(content):
    # create a chat completion
    completion = openai.ChatCompletion.create(
      model=model,
      messages=[{"role": "user", "content": content}]
    )
    print('用户:', content)
    # print the completion
    print('模型:',completion.choices[0].message.content)

get_answer('你是谁')
get_answer('你叫什么名字')


验证输出结果如下:


如何学习AI大模型?

我在一线互联网企业工作十余年里,指导过不少同行后辈。帮助很多人得到了学习和成长。

我意识到有很多经验和知识值得分享给大家,也可以通过我们的能力和经验解答大家在人工智能学习中的很多困惑,所以在工作繁忙的情况下还是坚持各种整理和分享。但苦于知识传播途径有限,很多互联网行业朋友无法获得正确的资料得到学习提升,故此将并将重要的AI大模型资料包括AI大模型入门学习思维导图、精品AI大模型学习书籍手册、视频教程、实战学习等录播视频免费分享出来。

在这里插入图片描述

第一阶段: 从大模型系统设计入手,讲解大模型的主要方法;

第二阶段: 在通过大模型提示词工程从Prompts角度入手更好发挥模型的作用;

第三阶段: 大模型平台应用开发借助阿里云PAI平台构建电商领域虚拟试衣系统;

第四阶段: 大模型知识库应用开发以LangChain框架为例,构建物流行业咨询智能问答系统;

第五阶段: 大模型微调开发借助以大健康、新零售、新媒体领域构建适合当前领域大模型;

第六阶段: 以SD多模态大模型为主,搭建了文生图小程序案例;

第七阶段: 以大模型平台应用与开发为主,通过星火大模型,文心大模型等成熟大模型构建大模型行业应用。

在这里插入图片描述

👉学会后的收获:👈
• 基于大模型全栈工程实现(前端、后端、产品经理、设计、数据分析等),通过这门课可获得不同能力;

• 能够利用大模型解决相关实际项目需求: 大数据时代,越来越多的企业和机构需要处理海量数据,利用大模型技术可以更好地处理这些数据,提高数据分析和决策的准确性。因此,掌握大模型应用开发技能,可以让程序员更好地应对实际项目需求;

• 基于大模型和企业数据AI应用开发,实现大模型理论、掌握GPU算力、硬件、LangChain开发框架和项目实战技能, 学会Fine-tuning垂直训练大模型(数据准备、数据蒸馏、大模型部署)一站式掌握;

• 能够完成时下热门大模型垂直领域模型训练能力,提高程序员的编码能力: 大模型应用开发需要掌握机器学习算法、深度学习框架等技术,这些技术的掌握可以提高程序员的编码能力和分析能力,让程序员更加熟练地编写高质量的代码。

在这里插入图片描述

1.AI大模型学习路线图
2.100套AI大模型商业化落地方案
3.100集大模型视频教程
4.200本大模型PDF书籍
5.LLM面试题合集
6.AI产品经理资源合集

👉获取方式:
😝有需要的小伙伴,可以保存图片到wx扫描二v码免费领取【保证100%免费】🆓

在这里插入图片描述

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

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

相关文章

使用Java实现通用树形结构转换工具类:深入解析TreeUtil和TreeNode接口

文章目录 一、TreeNode接口设计二、TreeUtil工具类设计三、示例&#xff1a;实现TreeNode接口的节点类四、示例&#xff1a;使用TreeUtil构建树形结构五、总结 &#x1f389;欢迎来到Java学习路线专栏~探索Java中的静态变量与实例变量 ☆* o(≧▽≦)o *☆嗨~我是IT陈寒&#x1…

three.js - MeshStandardMaterial(标准网格材质)- 金属贴图、粗糙贴图

金属贴图、粗糙贴图 金属贴图&#xff1a;metalnessMap 和 粗糙贴图&#xff1a;roughnessMap&#xff0c;是用于模拟物体表面属性的两种重要贴图技术&#xff0c;这两种贴图&#xff0c;通常与基于物理的渲染&#xff08;PBR&#xff09;材质&#xff08;如&#xff1a;MeshSt…

工业数据分析要用FusionInsight MRS IoTDB ?

随着工业互联网逐步兴起&#xff0c;在加速工业自动化、智能化的同时&#xff0c;也进一步加速工业生产时间序列数据的产生速度。但对于工业生产中的数据分析&#xff0c;仍然存在重复样本多&#xff0c;数据膨胀率大&#xff0c;缺乏专业易用的平台&#xff0c;这些问题成为阻…

UE5的安装与基本操作(一)

文章目录 前言安装UE5新建第一个游戏项目基本游览方式对目标进行变换各种变换对齐 快速定位目标 总结 前言 Unreal Engine 5 (UE5) 是一款由 Epic Games 开发的实时 3D 创作平台&#xff0c;用于制作游戏、电影、动画、建筑可视化和其他类型的交互式体验。UE5 提供了一系列强大…

实验 1 图像基本操作

1. 实验目的 ①熟悉 Photoshop 基本操作&#xff1b; ②掌握 Matlab 、PythonOpenCV 中处理图像的基本方法&#xff1b; ③掌握图像的半调转换和抖动转换。 2. 实验内容 ①Photoshop 基本操作&#xff1a;打开图像文件&#xff0c;选择区域&#xff0c;旋转、裁剪图像、图层…

Redis 缓存预热、缓存雪崩、缓存击穿、缓存穿透业务实践

0、前言 本文所有代码可见 > 【gitee code demo】 本文会涉及 缓存预热、缓存雪崩、缓存击穿、缓存穿透介绍和解决方案业务实践 1、缓存预热 1.1、描述 提前将热点数据加载到缓存&#xff0c;提前响应&#xff0c;降低后端数据源访问压力 1.2、实践 Autowiredprivate R…

Perl入门学习

Perl是一种强大的脚本语言&#xff0c;以其灵活性和文本处理能力而闻名&#xff0c;常用于系统管理、Web开发、生物信息学以及数据处理等领域。以下是Perl语言入门学习的一些关键点&#xff1a; ### 1. Perl简介 - **起源与特点**&#xff1a;Perl由Larry Wall在1987年创建&am…

springboot+vue+mybatis奶茶管理系统+PPT+论文+讲解+售后

由于科学技术的快速发展&#xff0c;人们的生活也与信息时代的发展相关。同时&#xff0c;随着市场化和经济化的发展&#xff0c;国内很多行业已经意识到了这一点&#xff0c;为了提升行业的竞争力&#xff0c;就应当率先把握机会。于是在互联网的默化潜移影响下&#xff0c;餐…

ctfshow-web入门-命令执行(web56、web57、web58)

目录 1、web56 2、web57 3、web58 1、web56 命令执行&#xff0c;需要严格的过滤 新增过滤数字&#xff0c;只能采用上一题临时文件上传的方法&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><…

MySQL高级-事务-并发事务演示及隔离级别

文章目录 0、四种隔离级别1、创建表 account2、修改当前会话隔离级别为 read uncommitted2.1、会出现脏读 3、修改当前会话隔离级别为 read committed3.1、可以解决脏读3.2、会出现不可重复读 4、修改当前会话隔离级别为 repeatable read&#xff08;默认&#xff09;4.1、解决…

计算机网络之体系结构

上节内容&#xff1a;数据通信原理 1.计算机网络体系结构 体系结构: 研究系统中各组成成分及其关系的一门学科。 计算机网络体系结构: 定义和描述一组用于计算机及其通信设施之间互连的标准和规范的集合&#xff0c;遵循这组规范可以很方便地实现计算机设备之间的通信。 相互…

2024百度之星第一场-110串

补题链接&#xff1a; 码蹄集 三个状态转移的计数dp 先确定状态 n个数至多修改k次&#xff0c;保证不出现字串“110” 常规想法先把状态确定为dp[n][k][0/1]&#xff0c;前n个数&#xff0c;修改k次后&#xff0c;末尾数为0/1&#xff0c;不能转移再换思路。 初始状态设定如…

[Cloud Networking] BGP

1. AS (Autonomous System) 由于互联网规模庞大&#xff0c;所以网络会被分为许多 自治系统&#xff08;AS-Autonomous system&#xff09;。 所属类型ASN名称IPv4 数量IPv6数量运营商ISPAS3356LEVEL3 - Level 3 Parent, LLC, US29,798,83273,301,954,048互联网企业AS15169GO…

自适应IT互联网营销企业网站pbootcms模板

模板介绍 一款蓝色自适应IT互联网营销企业网站pbootcms模板&#xff0c;该模板采用响应式设计&#xff0c;可自适应手机端&#xff0c;适合一切网络技术公司、互联网IT行业&#xff0c;源码下载&#xff0c;为您提供了便捷哦。 模板截图 源码下载 自适应IT互联网营销企业网站…

【PyQt】20-QTimer(动态显示时间、定时关闭)

QTimer 前言一、QTimer介绍二、动态时间展示2.1 代码2.2 运行结果 三、定时关闭3.1 介绍他的两种用法1、使用函数或Lambda表达式2、带有定时器类型&#xff08;高级&#xff09; 3.2 代码3.3 运行结果 总结 前言 好久没学习了。 一、QTimer介绍 pyqt里面的多线程可以有两种实…

Windows系统开启自带虚拟机功能Hyper-V

前言 最近有小伙伴咨询&#xff1a;Windows系统上有自带的虚拟机软件吗&#xff1f; 答案肯定是有的。它就是Hyper-V&#xff0c;但很多小伙伴都不知道怎么打开这个功能。 今天小白就带大家来看看如何正确打开这个Windows自带的虚拟机功能Hyper-V。 开始之前&#xff0c;你…

统计分析利器:深入解读卡方检验与单因素方差分析的应用案例【练习题】

一、卡方检验 1.对400人进行问卷调查&#xff0c;询问对于教学改革的看法&#xff0c;调查结果如下表所示&#xff0c;请问不同学科不同性别的人意见是否相同。 学科 男生 女生 工科 80 40 理科 120 160 &#xff08;性别&#xff0c;学科均无序分类>卡方检验&am…

音视频开发32 FFmpeg 编码- 视频编码 h264 参数相关

1. ffmpeg -h 这个命令总不会忘记&#xff0c;用这个先将ffmpeg所有的help信息都list出来 C:\Users\Administrator>ffmpeg -h ffmpeg version 6.0-full_build-www.gyan.dev Copyright (c) 2000-2023 the FFmpeg developersbuilt with gcc 12.2.0 (Rev10, Built by MSYS2 pro…

万字长文详解数据结构:树 | 第6章 | Java版大话数据结构 | 二叉树 | 哈夫曼树 | 二叉树遍历 | 构造二叉树 | LeetCode练习

&#x1f4cc;本篇分享的大话数据结构中&#x1f384;树&#x1f384;这一章的知识点&#xff0c;在此基础上&#xff0c;增加了练习题帮助大家理解一些重要的概念✅&#xff1b;同时&#xff0c;由于原文使用的C语言代码&#xff0c;不利于学习Java语言的同学实践&#xff0c;…

JS(JavaScript)事件处理(事件绑定)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…