微调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-Chatchatpip install -r requirements.txtpip 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 completioncompletion = openai.ChatCompletion.create(model=model,messages=[{"role": "user", "content": content}])print('用户:', content)# print the completionprint('模型:',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%免费】🆓

在这里插入图片描述

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

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

相关文章

Summaries

摘要是网格项&#xff0c;它利用聚合函数来显示有关所显示数据的摘要信息&#xff1a;总记录计数、最小值等。 GridControl-Grid View Summary Types 汇总 汇总总数&#xff08;GridSummaryItem&#xff09;是根据所有数据网格记录计算的&#xff0c;并显示在视图页脚中。启…

学懂C#编程:常用高级技术——学会泛型与集合(一)

C# 中的泛型和集合是两个非常重要的概念&#xff0c;它们极大地增强了代码的灵活性和可重用性。下面我将详细讲解这两个概念。 一、泛型 (Generics) 泛型允许你在定义类、接口、方法或委托时使用类型参数&#xff0c;从而使这些类型或方法可以在不指定具体类型的情况下…

【ACM出版-EI稳检索】第三届金融创新、金融科技与信息技术国际学术会议(FFIT 2024,7月26-28)

第三届金融创新、科技与信息技术国际学术会议&#xff08;FFIT 2024&#xff09;将于2024年07月26-28日于重庆举行。 FFIT2024 将围绕“金融创新”、"金融科技”与“信息技术”等相关最新研究领域&#xff0c;为来自国内外高等院校、科学研究所、企事业单位的专家、教授、…

第三阶段Spark

Spark和PySpark的介绍 PySpark的相关设置 安装PySpark库 pip install pyspark pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyspark 构建PySpark执行环境入口对象 # 导包 from pyspark import SparkConf, SparkContext# 创建SparkConf类对象 conf SparkConf()…

【代码随想录算法训练营第五十三天|739.每日温度、496.下一个更大元素I、503.下一个更大元素II】

文章目录 739.每日温度496.下一个更大元素I503.下一个更大元素II 739.每日温度 在这里单调栈相当于是在遍历数组的同时记录下了额外的大小关系的信息。因为这里需要的是每个数组元素右边第一个比他大的元素的间隔&#xff0c;因此单调栈是用来在遍历数组的时候存放还没有找到比…

算法题--华为od机试考试(整数对最小和、素数之积、找城市)

目录 整数对最小和 题目描述 注意 输出描述 示例1 输入 输出 说明 解析 答案 素数之积 题目描述 输入描述 输出描述 示例1 输入 输出 说明 示例2 输入 输出 说明 解析 找城市 题目描述 输入 输出 示例1 输入 输出 示例2 输入 输出 说明 解析…

PyTorch学习之torch.nn.functional.conv2d函数

PyTorch学习之torch.nn.functional.conv2d函数 一、简介 torch.nn.functional.conv2d 是 PyTorch 中用于进行二维卷积操作的函数。卷积操作是深度学习中卷积神经网络&#xff08;CNN&#xff09;的核心部分&#xff0c;用于提取图像特征&#xff0c;常见于图像分类、目标检测和…

Nvidia显卡GeForce Experience录屏操作流程

安装软件 首先我们从英伟达官网下载GeForce Experience程序&#xff0c;安装在电脑中GeForce Experience&#xff08;简称 GFE&#xff09;自动更新驱动并优化游戏设置 | NVIDIA 登录软件 安装完成后登录 开启录屏功能 登录后点击右上角的设置&#xff08;小齿轮图标&#x…

MT1595 点到矩形

题目 用下面的数据类型分别表示点和矩形&#xff1a; struct POINT { //点 int x, y; //坐标值x和y } ; struct RECT { //矩形 POINT lt, rb; //矩形的左上角和右下角 } ; 输入矩形两个点的坐标值x和y&#xff0c;再输入第3个点的坐标&#xff0c;计算第3个点距这个矩形的最近…

SQL面试真题解答 数据统计分析,求“同比、环比”等(SQL窗口函数使用)

SQL面试真题解答 数据统计分析&#xff0c;求“同比、环比”等&#xff08;SQL窗口函数使用&#xff09; 环比、环比增长率、同比、同比增长率&#xff0c;根据百度百科上的 说明&#xff1a; 环比增长率 环比增长率&#xff0c;一般是指和上期相比较的增长率。 环比增长率&a…

【linux】vim的使用

目录 一、Vim的基本模式 二、Vim的常见命令 三、Vim的高级用法 四、Vim的进阶使用技巧 在Linux系统中&#xff0c;Vim是一款功能强大的文本编辑器&#xff0c;特别适用于程序员的代码编辑和修改。以下是Vim的详细使用教程&#xff0c;包括其基本模式、常见命令和高级用法。…

什么是区块链与去中心化技术?

区块链和去中心化技术代表了当今数字世界中最前沿的创新。这些技术不仅重新定义了数据的管理和交换方式&#xff0c;还开启了全新的应用场景。本文将详细介绍区块链和去中心化技术&#xff0c;探讨它们的原理、特点以及应用。 一、区块链技术概述 1. 区块链的定义 区块链是一…

隐藏Python运行产生的缓存文件(__pycache__)

不少同学使用VScode 提交或运行python代码的时候&#xff0c;出现一些缓存文件 类似于(__pycache__) 这种&#xff0c;对于我这种有一丢丢强迫症的人来说&#xff0c;运行一次就得删除一次&#xff0c;那有没有什么办法将其隐藏的&#xff1f; 在vscode编辑器中打开设置&#…

HarmonyOS Next开发学习手册——创建轮播 (Swiper)

Swiper 组件提供滑动轮播显示的能力。Swiper本身是一个容器组件&#xff0c;当设置了多个子组件后&#xff0c;可以对这些子组件进行轮播显示。通常&#xff0c;在一些应用首页显示推荐的内容时&#xff0c;需要用到轮播显示的能力。 针对复杂页面场景&#xff0c;可以使用 Sw…

lua5.3.4的Linux的库文件下载地址

从这个链接选lua5.3.4 Lua Binaries (sourceforge.net) 进入-> 这个页面 LuaBinaries - Browse /5.3.4/Linux Libraries at SourceForge.net 之后就可以下载了。

第2章_开发板使用

文章目录 第2章 开发板使用2.1 硬件连接2.1.1 连接 ST-Link2.1.2 连接 USB 串口2.1.3 连接 SPI 屏 2.2 运行测试程序验证硬件2.2.1 硬件接线&#xff08;RS485、CAN&#xff09;2.2.2 编译工程2.2.3 配置调试器2.2.4 烧录运行 2.3 创建第 1 个工程2.3.1 创建工程2.3.2 选择调试…

深入理解Spring Boot中的自动配置原理

深入理解Spring Boot中的自动配置原理 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; Spring Boot 的自动配置是其核心特性之一&#xff0c;它极大地简化了 S…

动态规划基础练习

我们需要先从数组较大的开始进行处理&#xff0c;每次考察上下左右的&#xff0c;比较当前存储的最大值和转移来的值&#xff0c;哪一个大一点 #define _CRT_SECURE_NO_WARNINGS #include<bits/stdc.h> using namespace std;int n, m; int a[105][105]; int addx[] { 0,…

linux下docker安装与镜像容器管理

linux下docker安装与镜像容器管理 原文链接&#xff1a;linux下docker安装与镜像容器管理 导言 ubuntu22.04-docker engine安装&#xff0c;以及镜像容器管理 docker非常简单介绍 docker就是一个虚拟化容器&#xff0c;image是镜像&#xff0c;就是一个dockerfile指明这个镜…

【面试系列】系统管理员 高频面试题及详细解答

欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;欢迎订阅相关专栏&#xff1a; ⭐️ 全网最全IT互联网公司面试宝典&#xff1a;收集整理全网各大IT互联网公司技术、项目、HR面试真题. ⭐️ AIGC时代的创新与未来&#xff1a;详细讲解AIGC的概念、核心技术、…