LLM之Colossal-LLaMA-2:Colossal-LLaMA-2的简介、安装、使用方法之详细攻略

LLM之Colossal-LLaMA-2:Colossal-LLaMA-2的简介、安装、使用方法之详细攻略

导读:2023年9月25日,Colossal-AI团队推出了开源模型Colossal-LLaMA-2-7B-base。Colossal-LLaMA-2项目的技术细节,主要核心要点总结如下:
>> 数据处理阶段。文章提到利用多种中文和英文数据集构建语料库,然后对语料进行预处理,将其转化为jsonl格式进行数据增强。
>> 词汇表扩充。文章提到将LLaMA-2原有3.2万词汇扩充至6.9万词汇,增加中文词汇覆盖率。同时初始化新的词嵌入矩阵
>> 训练策略。文章提出采取分阶段训练策略,第一阶段基于LLaMA-2的预训练,第二阶段注入中文知识,第三阶段对知识进行重复训练。同时提出采用“桶式训练”更均匀划分数据集。
>> 命令行参数与模型导入使用。文章给出了Colossal-LLaMA-2训练与模型导入Transforms中的详细命令行参数与代码示例。
>> 评估结果。文章给出了Colossal-LLaMA-2在多个中文和英文任务上的智能化测评结果,与其他模型进行了性能对比。
>> 技术细节。文章从数据、词汇表、训练策略、任意域知识迁移四个角度阐述了项目的技术实现细节。

目录

Colossal-LLaMA-2的简介

0、技术特点

(1)、数据

(2)、分词器

(3)、训练策略

(3.1)、多阶段训练

(3.2)、基于桶的训练

(4)、跨领域大模型的桥接

1、性能评估

2、应用示例

3、训练日志

Colossal-LLaMA-2的安装

0、环境配置

1、安装软件包

2、运行使用

LLM之Colossal-LLaMA-2:源码解读(init_tokenizer.py文件)实现基于源词表的扩展(中文标记的新词汇)进而实现持续预训练、(init_model.py文件)实现过计算均值来扩展模型的嵌入层以适应新的词汇表,然后保存扩展后的模型、(prepare_pretrain_dataset.py文件)将原始数据集进行处理和切片并保存为JSONL格式和 Arrow格式

(1)、初始化标记器准备

(2)、初始化模型准备

(3)、数据准备

(4)、训练的命令行参数

(5)、运行命令

Colossal-LLaMA-2的使用方法

1、模型推理:从Transformers(推断)导入


Colossal-LLaMA-2的简介

       2023年9月25日,Colossal-AI团队推出了开源模型Colossal-LLaMA-2-7B-base。这个模型是LLaMA-2的一个衍生版本,在15小时内使用64个A800 GPU进行了约85亿个标记的持续预训练。以不到1000美元的成本,您可以获得与从头开始预训练需要数百万美元的模型类似的结果。它在LLaMA-2许可证和Apache 2.0许可证下授权,没有额外的商业使用限制。这个解决方案还可以用来构建特定领域知识或任务的模型。
       Colossal-LLaMA-2-7B-base旨在适应中文和英文,具有4096个标记的广泛上下文窗口。值得注意的是,与标准中文和英文评估指标(包括C-Eval和MMLU等)等规模相当的模型相比,它在基准测试中表现出色。

地址

GitHub地址:https://github.com/hpcaitech/ColossalAI/tree/main/applications/Colossal-LLaMA-2

时间

2023年9月25日

作者

Colossal-AI

0、技术特点

为了增强LLaMA-2在理解和生成中文内容方面的能力,Colossal-AI团队提出了继续使用中英文语料库对LLaMA-2模型进行预训练的方案。总体流程如下:

(1)、数据

简介

像LLaMA-2这样的大型语言模型已经使用了多种高质量数据集进行训练,取得了令人鼓舞的成果。提升LLaMA-2在中文语料库中的性能,同时保持其在英语中的熟练度,关键取决于两个关键因素:数据集的组成,涵盖了英语和中文内容,以及每个组成数据集的质量。

以下图表显示了用于Colossal-LLaMA-2的数据处理流程。

❗️重要提示:我们将很快开源我们的数据处理工具包,敬请关注!

重要通知:
本项目使用的所有训练数据均来自公开的知名数据集。
我们不使用评估基准的测试数据进行训练。

(2)、分词器

简介

原始LLaMA-2词汇表包含不到一千个汉字,因此在有效编码全面的中文文本方面表现不佳。其次,使用字节标记对于变压器编码器来捕捉汉字的语义细微差别构成了挑战。

为了解决上述问题,我们将LLaMA-2词汇表从32,000扩展到69,104。为了使LLaMA-2模型适用于Colossal-LLaMA-2分词器,我们通过计算原始LLaMA-2嵌入的均值来初始化新的单词嵌入,然后将这些新行附加到原始嵌入矩阵的末尾

扩展词汇表大小的优势

扩展词汇表大小的优势:

>> 提高字符串序列编码的压缩率

>> 增强信息的完整性

>> 使编码的序列包含更多有价值的信息,从而在理论上提高了章节级编码的能力

在资源有限的情况下,大词汇量大小的优势:

>> 训练数据集有限,存在大量未使用的标记,这些标记可能没有被有效地学习

>> 过多的词汇扩展会导致嵌入相关参数增加,导致内存使用增加,从而影响训练过程的效率。

为了平衡两方面的需求,我们最终将词汇表构建为69,104个大小。下表比较了7B级别的各种模型。

ModelVocabulary SizeCompression RateAverage Length of Samples (token-level)
Colossal-LLaMA-2691040.65973.682
LLaMA-2-7B320001.205134.689
Atom-7B650000.63470.915
Baichuan-7B640000.67875.857
Baichuan2-7B-base1256960.57063.761
Chatglm2-6B647890.64572.178
InternLM-7B1031680.56663.349
Qwen-7B1516430.57864.703
Tigerbot-7B-base605150.63070.515
Yayi-7B-llama2320051.214135.689
Chinese-llama-2-7b552960.66874.690
Chinese-Falcon-7B900460.66974.858
LinkSoul-Chinese-Llama-2-7b400760.958107.089
Ziya-LLaMA-13B-v1.1394100.958107.074

(3)、训练策略

(3.1)、多阶段训练

简介

为了增强模型的性能并充分发挥原始LLaMA-2的潜力,我们开发了多阶段训练策略。此策略旨在在一系列阶段中系统地释放模型的能力。

三阶段

因此,我们将训练过程分为三个阶段:

>> 大规模预训练阶段(由LLaMA-2进行):这个初始阶段旨在从头开始建立模型的基本能力。它需要使用包含不少于1万亿标记的大型数据集。

>> 注入中文知识阶段:在这个阶段,我们将中文知识引入模型。它需要访问一个包含与中文语言相关的全面知识的高质量数据集。

>> 知识重播阶段:通过问答(QA)机制重播知识,包括中文和英文领域。

完成这个多阶段训练过程后,模型在英语和中文基准测试中表现出了显著的改进。

下图说明了训练Colossal-LLaMA-2的三个阶段。

(3.2)、基于桶的训练

背景

我们的实验表明,训练数据集中的分布以及各种与主题相关的数据点的排列,显著影响了模型的整体性能,特别是在持续预训练LLaMA-2的情况下。

简介

为了实现更平衡的分布并控制数据集的排序,我们采用了一种方法,将每个子数据集划分为离散的箱。然后将这些箱组合在一起,构建单独的数据桶,其中每个子数据集贡献一个箱。

(4)、跨领域大模型的桥接

将上述过程应用于任何领域的知识转移,可以实现成本效益的轻量级领域特定基础大模型的构建。

1、性能评估

我们在4个数据集上进行了全面评估,并将我们的Colossal-Llama-2-7b-base模型与各种模型进行了比较。

>> 我们对MMLU使用了5-shot,并基于第一个预测的标记的逻辑值计算分数。

>> 我们对CMMLU使用了5-shot,并基于第一个预测的标记的逻辑值计算分数。

>> 我们对AGIEval使用了5-shot,只计算了4个选择题的得分,使用了精确匹配和第一个预测的标记的逻辑值的组合指标。如果精确匹配或第一个预测的标记中的任何一个是正确的,模型将获得分数。

>> 我们对GAOKAO-Bench使用了0-shot,只基于第一个预测的标记的逻辑值计算4个选择题的得分。所有数据集的生成配置都是贪婪搜索。

>> 我们还提供了CEval分数,这些分数来自其最新的排行榜或模型的官方存储库。

括号中的分数对应于模型的官方存储库中的分数。

>> 我们对ChatGLM模型使用zero-shot。

>> Qwen-7B现在在Hugging Face中无法访问,我们使用的是它在无法访问之前的最新版本。仅对于数据集MMLU,提示将是"xxx Answer:"(去掉冒号后的空格),并且我们会计算Qwen-7B的"A"、"B"、"C"和"D"的逻辑值。与其他模型相比,Qwen-7B更具确定性。例如,"A"上的逻辑值可以为-inf,softmax将精确为0。

>> 对于其他模型和其他数据集,我们计算"A"、"B"、"C"和"D"的逻辑值。

❗️有关评估方法的更多详细信息和结果的再现,请参阅ColossalEval。

BackboneTokens ConsumedMMLUCMMLUAGIEvalGAOKAOCEval
-5-shot5-shot5-shot0-shot5-shot
Baichuan-7B-1.2T42.32 (42.30)44.53 (44.02)38.7236.7442.80
Baichuan-13B-Base-1.4T50.51 (51.60)55.73 (55.30)47.2051.4153.60
Baichuan2-7B-Base-2.6T46.97 (54.16)57.67 (57.07)45.7652.6054.00
Baichuan2-13B-Base-2.6T54.84 (59.17)62.62 (61.97)52.0858.2558.10
ChatGLM-6B-1.0T39.67 (40.63)41.17 (-)40.1036.5338.90
ChatGLM2-6B-1.4T44.74 (45.46)49.40 (-)46.3645.4951.70
InternLM-7B-1.6T46.70 (51.00)52.00 (-)44.7761.6452.80
Qwen-7B-2.2T54.29 (56.70)56.03 (58.80)52.4756.4259.60
Llama-2-7B-2.0T44.47 (45.30)32.97 (-)32.6025.46-
Linly-AI/Chinese-LLaMA-2-7B-hfLlama-2-7B1.0T37.4329.9232.0027.57-
wenge-research/yayi-7b-llama2Llama-2-7B-38.5631.5230.9925.95-
ziqingyang/chinese-llama-2-7bLlama-2-7B-33.8634.6934.5225.1834.2
TigerResearch/tigerbot-7b-baseLlama-2-7B0.3T43.7342.0437.6430.61-
LinkSoul/Chinese-Llama-2-7bLlama-2-7B-48.4138.3138.4527.72-
FlagAlpha/Atom-7BLlama-2-7B0.1T49.9641.1039.8333.00-
IDEA-CCNL/Ziya-LLaMA-13B-v1.1Llama-13B0.11T50.2540.9940.0430.54-
Colossal-LLaMA-2-7b-baseLlama-2-7B0.0085T53.0649.8951.4858.8250.2


 

2、应用示例

有关更多问答示例,请参阅Colossal-LLaMA-2-7B-base示例。

Question TypeQuestionColossal-LLaMA-2-7b-base
Knowledge Quiz
(Tourism)
请问武汉的最佳的旅行季节是什么时候?3-4月份到武汉赏樱,10月份到武汉看黄陂枫树。武汉的最佳的旅行季节是春秋,3-4月份到武汉赏樱,10月份到武汉看黄陂枫树。武汉,简称“汉”别称江城,是湖北省省会,中部六省唯一的副省级市,特大城市,中国中部地区的中心城市,全国重要的工业基地、科教基地和综合交通枢纽。
Knowledge Quiz
(Computer Science)
在计算机中,什么是RAM?与ROM有什么区别?RAM是随机存取内存,可以随时读写,但是断电之后会丢失数据。存储数据比较快,但是需要不断的进行通电供电。ROM是只读内存,只能读取数据,不能写入数据。断电之后,存储的数据也不会丢失,但是需要不断进行通电。两者的价格和性能上会有区别,而且在使用的时候,RAM需要不断的供电,而ROM断电数据不丢失。
Knowledge Quiz
(Literature)
古代文学与现代文学有哪些区别和共通之处?古代文学与现代文学有三点区别,现代文学更加通俗易懂,具有可读性,而古代文学相对来说更加注重形式,缺乏可读性。现代文学和古代文学,同属于中华文学大花园中的一枝花蕾。但是它们由于历史的原因,有着不同的特点,具体表现在,现代文学有更丰富的描写方法,更强烈的主观色彩和更突出的抒情色彩,而古代文学的主要特征是在创作风格上的多样化。
Emotional Analysis请判断这个句子的情绪是否正面:我迫不及待想见到她!!!”。这一句是情绪是正向的。是在期待见面的喜悦情绪。
Translation将以下句子翻译成英语。 我喜欢看电影和读书。I like watching movies and reading books.
Logical ReasoningAll books have the same weight, 10 books weigh 5kg, what is the weight of 2 books?To find the weight of 2 books, we can use the following steps:

1. Determine the weight of 1 book.
2. Multiply the weight of 1 book by the number of books.

Step 1: Determine the weight of 1 book.
Since 10 books weigh 5kg, we can divide 5kg by 10 to find the weight of 1 book.
5kg ÷ 10 = 0.5kg

Step 2: Multiply the weight of 1 book by the number of books.
To find the weight of 2 books, we multiply the weight of 1 book by 2.
0.5kg × 2 = 1kg

So, the weight of 2 books is 1kg.
Information ExtractionThe company's annual conference, featuring keynote speakers and exclusive product launches, will be held at the Los Angeles Convention Center from October 20th to October 23rd, 2021. Extract the date mentioned in the above sentence.The date mentioned in the sentence is October 20th to October 23rd, 2021.
Error CorrectionPlease correct the syntax error and restructure the sentence: "Went to the store me and my friend."The given sentence "Went to the store me and my friend." is incorrect due to a syntax error and it lacks a subject. The corrected version with proper grammar and sentence structure would be: "My friend and I went to the store."

3、训练日志

我们还记录了实验的训练日志。

Colossal-LLaMA-2的安装

0、环境配置

硬件配置

此实验在总共8台计算节点上执行,配有64个A800 GPU,用于LLaMA-2-7B(约1000美元成本)。节点之间使用RDMA连接,节点内的GPU通过NVLink完全连接。此脚本在CUDA 11.7上进行了测试,CUDA版本要求11.7或更高。

您还可以在8个A100/A800服务器上完成大约5天的工作。

框架版本

PyTorch。PyTorch版本应低于2.0.0且高于1.12.1。

1、安装软件包

所需的软件包

cd Colossal-LLaMA-2
pip install -r requirements.txt

其它包

安装xentropy、layer_norm和rotary

git clone git@github.com:Dao-AILab/flash-attention.git
# At the root folder
cd csrc/xentropy && pip install .
# At the root folder
cd csrc/layer_norm && pip install .
# At the root folder
cd csrc/rotary && pip install .

2、运行使用

LLM之Colossal-LLaMA-2:源码解读(init_tokenizer.py文件)实现基于源词表的扩展(中文标记的新词汇)进而实现持续预训练、(init_model.py文件)实现过计算均值来扩展模型的嵌入层以适应新的词汇表,然后保存扩展后的模型、(prepare_pretrain_dataset.py文件)将原始数据集进行处理和切片并保存为JSONL格式和 Arrow格式

LLM之Colossal-LLaMA-2:源码解读(init_tokenizer.py文件)实现基于源词表的扩展、(init_model.py文件)实现过计算均值扩展模型、(prepare_pretr-CSDN博客

(1)、初始化标记器准备

jsonl格式存储

使用附加的中文标记初始化新的标记器。附加的中文标记以jsonl格式存储,如下所示:

{"piece": "你好"}

{"piece": "人工智能"}

脚本命令

初始化新标记器的命令如下:

export PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION='python'

python colossal_llama2/tokenizer/init_tokenizer.py

--source_tokenizer_dir "<SOURCE_TOKENIZER_DIR>"

--target_tokenizer_dir "<TARGET_TOKENIZER_DIR>"

--expand_tokens_file "<NEW_TOKENS_FILE>.jsonl"

CLI参数的详细信息

以下是关于CLI参数的详细信息:

源标记器目录:--source_tokenizer_dir。源标记器的目录。它至少应包含三个文件:special_tokens_map.json、tokenizer.model和tokenizer_config.json。

目标标记器目录:--target_tokenizer_dir。目标标记器的目录。

要添加的标记:--expand_tokens_file。要添加到标记器的附加标记。

(2)、初始化模型准备

脚本命令

通过计算原始模型检查点的均值来初始化新的模型检查点。初始化新模型检查点的命令如下:

python colossal_llama2/model/init_model.py

--source_model_and_tokenizer_path "<SOURCE_MODEL_AND_TOKENIZER_DIR>"

--target_tokenizer_path "<TARGET_TOKENIZER_DIR>"

--target_model_path "<TARGET_MODEL_DIR>"

"<TARGET_MODEL_DIR>"可以与"<TARGET_TOKENIZER_DIR>"相同。

CLI参数的详细信息

以下是关于CLI参数的详细信息:

源模型和标记器路径:--source_model_and_tokenizer_path。源文件夹包含模型和标记器,例如Hugging Face格式的LLaMA-2模型。

目标标记器路径:--target_tokenizer_path。新标记器文件夹的路径,从上一步生成。

目标模型路径:--target_model_path。保存新模型的路径,以Hugging Face格式保存。

重要提示

重要提示:一旦初始化新模型检查点,复制您的新标记器文件(special_tokens_map.json、tokenizer.model和tokenizer_config.json)到新模型文件夹中。

(3)、数据准备

jsonl格式数据

原始数据应格式化为jsonl格式。每个数据点应具有以下字段:

>> source(str,必需):在计算损失时忽略此部分。默认可以为空。

>> target(str,必需):将计算损失。

>> category(str,必需):每个数据点的标签。

示例:

{"source": "", "target": "Lionel Andrés Messi(Spanish pronunciation: [ljoˈnel anˈdɾes ˈmesi] (i); born 24 June 1987), also known as Leo Messi, is an Argentine professional footballer who plays as a forward for and captains both Major League Soccer club Inter Miami and the Argentina national team.", "category": "sports"}

{"source": "猜谜语:一身卷卷细毛,吃的青青野草,过了数九寒冬,无私献出白毛。(打一动物)", "target": "白羊", "category": "riddle"}

您可以自定义类别标签或使用未知来定义类别。

脚本命令

将jsonl数据集转换为arrow格式的命令如下:

python prepare_pretrain_dataset.py

--data_input_dirs "<JOSNL_DIR_1>,<JOSNL_DIR_2>,<JOSNL_DIR_3>"

--tokenizer_dir "<TOKENIZER_DIR>"

--data_cache_dir "jsonl_to_arrow_cache"

--data_jsonl_output_dir "spliced_tokenized_output_jsonl"

--data_arrow_output_dir "spliced_tokenized_output_arrow"

--max_length 4096

--num_spliced_dataset_bins 10

CLI参数的详细信息

以下是关于CLI参数的详细信息:

源数据目录:data_input_dirs。每个<JOSNL_DIR>可以包含多个jsonl格式的文件。

标记器目录:tokenizer_dir。Hugging Face格式的标记器的路径。

数据缓存目录:data_cache_dir。用于存储Hugging Face数据缓存的目录。默认情况下将在本地创建缓存文件夹。

jsonl格式输出目录:data_jsonl_output_dir。用于存储以jsonl格式转换的数据集的输出目录。

arrow格式输出目录:data_arrow_output_dir。用于存储以arrow格式转换的数据集的输出目录,可以直接用于训练。

最大长度:max_length。切割样本的最大长度。默认值为4096。

每个类别的箱数:num_spliced_dataset_bins。每个类别的箱数,用于基于桶的训练。

(4)、训练的命令行参数

脚本命令

您可以使用colossalai run来启动多节点训练:

colossalai run --nproc_per_node 每个节点的GPU数量 --hostfile 主机文件 \

train.py --其他配置

示例主机文件

以下是一个示例主机文件:

hostname1

hostname2

hostname3

hostname4

确保主节点可以通过ssh无需密码访问所有节点(包括自身)。

CLI参数的详细信息

以下是关于CLI参数的详细信息:

预训练模型路径:--pretrained。预训练模型在Hugging Face格式中的路径。

数据集路径:--dataset。预标记数据集的路径。

Booster插件:--plugin。支持gemini、gemini_auto、zero2、zero2_cpu和3d。有关更多详情,请参阅Booster插件。

要加载的中间检查点:--load_checkpoint。中间检查点的路径。保存的检查点包含了lr_scheduler、optimizer、running_states.json和模型。如果load_checkpoint指向模型文件夹,只会加载模型权重,而不加载其他支持多阶段训练的状态。

保存间隔:--save_interval。保存检查点的间隔(步数)。默认值为1000。

检查点目录:--save_dir。保存检查点和中间状态的目录路径。中间状态包括lr_scheduler、optimizer、running_states.json和模型。

Tensorboard目录:--tensorboard_dir。保存Tensorboard日志的路径。

配置文件:--config_file。保存配置文件的路径。

训练周期数:--num_epochs。训练周期数。默认值为1。

微批量大小:--micro_batch_size。每个GPU的批量大小。默认值为1。

学习率:--lr。学习率。默认值为3e-4。

最大长度:--max_length。上下文的最大长度。默认值为4096。

混合精度:--mixed_precision。混合精度。默认值为"fp16"。支持"fp16"和"bf16"。

梯度剪裁:--gradient_clipping。梯度剪裁。默认值为1.0。

权重衰减:-w、--weight_decay。权重衰减。默认值为0.1。

热身步数:-s、--warmup_steps。热身步数。默认值由0.025的热身比例计算得出。

梯度检查点:--use_grad_checkpoint。是否使用梯度检查点。默认值为False。这会节省内存但会降低速度。建议在使用大批量大小进行训练时启用此选项。

闪存注意力:--use_flash_attn。如果要使用闪存注意力,必须安装flash-attn和相关软件包。默认值为False。这有助于加速训练并节省内存。建议始终使用闪存注意力。

冻结非嵌入参数:--freeze_non_embeds_params。冻结非嵌入参数。在扩展词汇量大小后对齐嵌入很有帮助。

张量并行规模:--tp。三维并行规模。默认值为1。

零阶段:--zero。三维并行的零阶段。默认值为1。

(5)、运行命令

实验的示例bash

还提供了一个实验的示例bash。以下是运行实验的步骤:

>> 创建您自己的主机文件:cp hostfile.example hostfile。

>> 创建您自己的bash:cp train.example.sh train.sh。

>> 将您的真实主机IP或主机名添加到主机文件中。

>> 在您的train.sh中更新全局变量和参数。

>> 使用bash train.sh运行实验。

全局变量的详细信息

以下是每个实验的全局变量的详细信息:

PROJECT_NAME:每个实验的项目名称。

PARENT_SAVE_DIR:保存模型检查点的父文件夹。

PARENT_TENSORBOARD_DIR:保存Tensorboard日志的父文件夹。

PARENT_CONFIG_FILE:保存每个实验配置的父文件夹。

PRETRAINED_MODEL_PATH:本地预训练模型检查点的路径。

dataset:所有准备好的数据的路径。通常是准备数据的输出路径、--data_arrow_output_dir的子文件夹列表,如果有多个子文件夹,请列出它们所有。例如:

declare -a dataset=(

    "<DIR_1>/part-00000"

    "<DIR_1>/part-00001"

    "<DIR_2>/part-00000"

)

Colossal-LLaMA-2的使用方法

1、模型推理:从Transformers(推断)导入

要使用Transformers加载Colossal-LLaMA-2-7B-base模型,请使用以下代码:
您还可以从���HuggingFace下载模型权重。

from transformers import AutoModelForCausalLM, AutoTokenizer
model = AutoModelForCausalLM.from_pretrained("hpcai-tech/Colossal-LLaMA-2-7b-base", device_map="auto", trust_remote_code=True)
tokenizer = AutoTokenizer.from_pretrained("hpcai-tech/Colossal-LLaMA-2-7b-base", trust_remote_code=True)
input = "离离原上草,"
inputs = tokenizer(input, return_tensors='pt')
inputs = inputs.to('cuda:0')
pred = model.generate(**inputs,max_new_tokens=256,do_sample=True,top_k=50,top_p=0.95,num_return_sequences=1)
print(tokenizer.decode(pred.cpu()[0], skip_special_tokens=True)[len(input):])

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

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

相关文章

分布式事务-TCC异常-幂等性

1、幂等性问题&#xff1a; 二阶段提交时&#xff0c;如果二阶段执行成功通知TC时出现网路或其他问题中断&#xff0c;那么TC没有收到执行成功的通知&#xff0c;TC内部有定时器不断的重试二阶段方法&#xff0c;导致接口出现幂等性问题。 2、解决方法 和空回滚问题一样也是…

Kotlin只截取Float小数点后数值DecimalFormat

Kotlin只截取Float小数点后数值DecimalFormat import java.text.DecimalFormatfun main(args: Array<String>) {val pi 3.141516Fvar p pi - pi.toInt()println(p)val decimalFormat DecimalFormat("00.0000")val format decimalFormat.format(p)println(…

UE5屏幕适配

一、本程序设计发布在手机上&#xff0c;首先确定屏幕的设计分辨率&#xff0c;这里我们选择iphone6s&#xff0c;750x1334。 二、设置DPI Scale为1.0的比例&#xff0c;点击齿轮标志 因为我们这个程序是手机竖屏使用的&#xff0c;所以DPI Scale Rule选择Shortest Side&#…

c语言常用语法,长时间不用容易忘。

关键字 auto 声明自动变量const 定义常量&#xff0c;如果一个变量被 const 修饰&#xff0c;那么它的值就不能再被改变extern 声明变量或函数是在其它文件或本文件的其他位置定义register 声明寄存器变量signed 声明有符号类型变量或函数static 声明静态变量&#xff0c;修饰…

APA技术架构与说明

1.自动泊车的硬件架构 2.APA自动泊车辅助系统 1&#xff09;APA主要包括以下典型功能 &#xff08;1&#xff09;泊车入库&#xff1a;利用超声波雷达或环视摄像头实现车位识别&#xff0c;并计算出合适行驶轨迹&#xff0c;对车辆进行横向/纵向控制使车辆驶入车位&#xff1…

在MyBatisPlus中添加分页插件

开发过程中&#xff0c;数据量大的时候&#xff0c;查询效率会有所下降&#xff0c;这时&#xff0c;我们往往会使用分页。 具体操作入下&#xff1a; 1、添加分页插件&#xff1a; package com.zhang.config;import com.baomidou.mybatisplus.extension.plugins.Pagination…

基于微信小程序的停车场预约收费小程序设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言系统主要功能&#xff1a;具体实现截图论文参考详细视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计…

CCF CSP认证历年题目自练 Day15

CCF CSP认证历年题目自练 Day15 题目一 试题编号&#xff1a; 201709-1 试题名称&#xff1a; 打酱油 时间限制&#xff1a; 1.0s 内存限制&#xff1a; 256.0MB 问题描述&#xff1a; 问题描述   小明带着N元钱去买酱油。酱油10块钱一瓶&#xff0c;商家进行促销&#xf…

【运维日常】华为云专线实现idc通过nat出网

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

04、EL和JSTL核心技术

目录 1 EL表达式&#xff08;熟悉&#xff09; 1.1 基本概念 1.2 主要功能 1.3 访问内置对象的数据 1.3.1访问方式 1.3.2 执行流程 1.4 访问请求参数的数据 1.5 访问Bean对象的属性 1.5.1 访问方式 1.5.2 主要区别 1.6 访问集合中的数据 1.7 常用的内置对象 …

JVM111

JVM1 字节码与多语言混合编程 字节码 我们平时说的java字节码&#xff0c; 指的是用java语言编译成的字节码。准确的说任何能在jvm平台上执行的字节码格式都是一样的。所以应该统称为:jvm字节码。不同的编译器&#xff0c;可以编译出相同的字节码文件&#xff0c;字节码文件…

Spring Security 简单token配置

Spring Security 简单token配置 说明&#xff1a;非表单配置 先上码&#xff1a; https://gitee.com/qkzztx_admin/security-demo/tree/master/demo-two 环境&#xff1a;win10 idea2023 springboot2.7.6 maven3.8.6 代码清单说明 依赖&#xff1a; <dependency><…

通过茶叶酒水小程序商城的作用是什么?

茶叶酒水往往会在一起经营&#xff0c;同时又具备较强的送礼属性&#xff0c;需求度较高但经营商家同样不少&#xff0c;同行竞争激烈&#xff0c;加之同城生意有限、外地客户难以拓展、销售营销不足、品牌宣传效果差等痛点&#xff0c;传统酒水茶叶门店需要线上带来增长。 那…

VBA技术资料MF61:按每行指定字符数自动换行

【分享成果&#xff0c;随喜正能量】人生的旅途&#xff0c;一时的失意&#xff0c;一时的挫折&#xff0c;跌了一跤&#xff0c;不是人生的全部&#xff0c;只是人生的一个逗点&#xff0c;未来的成就、光辉&#xff0c;还有很多的虚线有待你继续去完成。。 我给VBA的定义&am…

前端适配笔记本缩放125%,150%导致页面错乱问题

由于前端在开发时使用的都是标准ui设计图&#xff0c;基本都是按照所以1920*1080&#xff0c; 而小屏幕笔记本由于分辨率高&#xff0c;所以导致的显示元素变小&#xff0c;因此很多笔记本的默认显示都是放大125%或者150%。 如果页面比较简单就让多余的空白单边扩展&#xff0c…

iOS Swift 拍照识别数字(Recognizing Text in Images)

1.苹果官方的解决方案&#xff08;推荐&#xff09; Recognizing Text in Images - apple developer Extracting phone numbers from text in images(Sample Code) - apple developer 1.1 demo下载(亲测有效) &#xff1a;recognizeTextInImage - gitee 1.2 测试成功的代码 …

深度剖析Linux磁盘分区 | LVM逻辑卷 | VDO卷 | AutoFS存储自动挂载

深度剖析Linux磁盘分区 | LVM逻辑卷 | VDO卷 | AutoFS存储自动挂载 前言说明1. 安装操作系统分区配置2. 大磁盘分区管理3. LVM逻辑卷管理3.1. 创建LVM逻辑卷3.1.1. 创建物理卷PV3.1.2. 创建卷组VG3.1.3. 创建逻辑卷LV3.1.4. 创建并挂载文件系统3.1.5. 配置开机自动挂载 3.2. 逻…

华为云云耀云服务器L实例评测|华为云上安装etcd

文章目录 华为云云耀云服务器L实例评测&#xff5c;华为云上安装etcd一、什么是etcd官方硬件建议 二、华为云主机准备三、etcd安装1. 安装预构建的二进制文件2. 从源代码构建 四、etcd服务注册与发现1. 配置etcd2. 使用systemctl 管理启动etcd服务3. 注册服务4. 发现服务 五、其…

面试题:说一下SpringBoot的自动配置原理

文章目录 引言工作原理剖析EnableAutoConfiguration自动配置生效总结 引言 不论在工作中&#xff0c;亦或是求职面试&#xff0c;Spring Boot已经成为我们必知必会的技能项。除了某些老旧的政府项目或金融项目持有观望态度外&#xff0c;如今的各行各业都在飞速的拥抱这个已经…

【PHP】如何关闭buffer实时输出内容到前端

前言 默认情况下&#xff0c;我们在PHP里使用echo等函数输出的内容&#xff0c;是不会马上发送给前端的&#xff0c;原因是有 buffer 的存在&#xff0c;buffer又分两处&#xff0c;一处是PHP本身的buffer&#xff0c;另一处是Nginx的buffer。只有当buffer满了之后&#xff0c…