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、运行使用

(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、运行使用

(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.rhkb.cn/news/142343.html

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

相关文章

最新ChatGPT网站系统源码+支持GPT4.0+支持AI绘画Midjourney绘画+支持国内全AI模型

一、SparkAI创作系统 SparkAi系统是基于很火的GPT提问进行开发的Ai智能问答系统。本期针对源码系统整体测试下来非常完美&#xff0c;可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI创作ChatGPT系统&#xff1f;小编这里写一个详细图文教程吧&a…

Learn Prompt- Midjourney案例:动漫设计

使用 Midjourney 生成动漫有两种方法&#xff1a;使用Niji模式或使用标准的 Midjourney 模型。Niji V5 是 Midjourney 的动漫专用模型。它建立在标准 Midjourney 模型的全新架构之上&#xff0c;更擅长生成命名的动漫角色。Niji V4于2023年12月发布&#xff0c;Niji V5于2023年…

数据结构--快速排序

文章目录 快速排序的概念Hoare版本挖坑法前后指针法快速排序的优化三数取中法小区间用插入排序 非递归的快速排序 快速排序的概念 快速排序是通过二叉树的思想&#xff0c;先设定一个值&#xff0c;通过比较&#xff0c;比它大的放在它的右边&#xff0c;比它小的放在它的左边…

希望杯、希望数学系列竞赛辨析和希望数学超1G的真题和学习资源

中国的中小学数学竞赛种类非常多&#xff0c;但是说到全国性的数学竞赛&#xff0c;影响力最大的之一就是“希望杯”&#xff0c;在2017年国家喊停学科竞赛后&#xff0c;“希望杯”逐步停止了&#xff0c;但是鉴于希望杯的巨大影响力&#xff0c;以及背后的利益纠葛&#xff0…

LESS的叶绿素荧光模拟实现与操作

LESS的叶绿素荧光模拟实现与操作 前情提要FLUSPECT模型荧光的三维面元冠层辐射传输过程日光诱导叶绿素荧光模拟 前情提要 本文默认您对LESS (LargE-Scale remote sensing data and image Simulation framework) 模型和叶绿素荧光(Sun-Induced chlorophyll Fluorescence, SIF)有…

使用 Python 函数callable和isinstance的意义

一、说明 在这篇博客中&#xff0c;我们将探讨两个python函数&#xff1a;1 callable 中的函数及其有趣的应用程序。该callable函数用于检查对象是否可调用&#xff0c;这意味着它可以作为函数调用。2 isinstance这个内置函数允许我们比较两种不同的数据类型并确定它们是否相…

面试:Spring中单例模式用的是哪种?

你好&#xff0c;我是田哥 需要简历优化、模拟面试、面试辅导、技术辅导......请联系我。10年码农24小时在线为你服务。 面试中被问到设计模式的概率还是蛮高的&#xff0c;尤其是问&#xff1a;你在项目中用过设计模式吗&#xff1f; 面对这个问题&#xff0c;我也在做模拟面试…

蓝桥杯每日一题2023.9.22

4960. 子串简写 - AcWing题库 题目描述 题目分析 原本为纯暴力但是发现会超时&#xff0c;可以加入前缀和&#xff0c;从前往后先记录一下每个位置c1出现的次数 再从前往后扫一遍&#xff0c;如果遇到c2就将答案加上此位置前的所有c1的个数&#xff08;直接加上此位置的前缀…

React 全栈体系(十六)

第八章 React 扩展 五、Context 1. 代码 /* index.jsx */ import React, { Component } from react import ./index.css//创建Context对象 const MyContext React.createContext() const {Provider,Consumer} MyContext export default class A extends Component {state …

构建卓越语言模型应用的利器:LangChain | 开源日报 No.39

langchain-ai/langchain Stars: 61.3k License: MIT LangChain 是一个用于通过组合性构建 LLMs 应用程序的库。 LLMs 和 Prompts&#xff1a;包括 prompt 管理、prompt 优化、所有 LLM 的通用接口以及与 LLMs 一起使用的常见工具。Chains&#xff1a;超越单个 LLM 调用&…

Logic Pro X10.7.9(mac乐曲制作软件)

Logic Pro X是由苹果公司开发的一款专业音频制作软件&#xff0c;主要用于音乐制作、录音、混音和母带处理等方面。以下是Logic Pro X的特点&#xff1a; 强大的音频编辑功能&#xff1a;Logic Pro X提供了丰富的音频编辑工具&#xff0c;包括波形编辑器、音频自动化、时间拉伸…

W5100S_EVB_PICO快速入门之MQTT篇(十二)

目录 1. 前言 2. MQTT介绍 2.1 什么是mqtt&#xff1f; 2.2 特点 2.3 应用场景 2.4 MQTT协议实现方式 3. 硬件及接线方式 3.1 硬件准备 3.2 硬件介绍 3.3 接线图 4. 测试 4.1 MQTT测试流程图 4.2 相关代码 4.3 测试现象 5. 相关链接&#xff1a; 1. 前言 随着物…

ArduPilot开源飞控之GCS显示DPS310异常问题

ArduPilot开源飞控之GCS显示DPS310异常问题 1. 源由2. 现象3. 分析3.1 Mission Planner3.2 Ardupilot3.3 AP_Baro分析3.4 AP_Baro定位 4. 修复5. 效果6. 参考资料7. 补充7.1 Ardupilot提交PR注意事项7.2 修复主要使用到的命令 1. 源由 2020年Ardupilot官网论坛就有开始讨论DPS…

邮件功能-python中的SMTP协议邮件发送

文章目录 一、SMTP协议邮件准备二、smtplib模块1.使用smtplib封装一个邮件类2.发送邮件 补充 一、SMTP协议邮件准备 需要一个smtp服务器 二、smtplib模块 smtplib模块是python自带的模块 1.使用smtplib封装一个邮件类 import smtplib import logging # 加入日志&#xff…

ORACLE 内存结构之系统全局区(SGA)

每个 Oracle 数据库实例都会在内存中分配一个很大的内存结构&#xff0c; 称为系统全局区(System Global Area), 这是一个大型的共享内存结构,每个Oracle进程都会访问它。 在Linux/Unix操作系统上,SGA是一个物理实体&#xff0c;使用操作系统命令能“看到它”。 它被操作系…

一维卷积神经网络

假设输入数据维度为8&#xff0c;filter维度为5&#xff1b; 不加padding时&#xff0c;输出维度为4&#xff0c;如果filter的数量为16&#xff0c;那么输出数据的shape就是4*16. 一维卷积不代表卷积核只有一维&#xff0c;也不代表被卷积的feature也是一维。一维的意思是说卷…

RIP路由

目录 RIP路由 1、什么是RIP路由 2、RIP的工作原理是什么 3、RIP v1 和 RIP v2的区别 4、RIP的常用场景 5、RIP的通信流程 6、RIP的优缺点 优点&#xff1a; 缺点&#xff1a; 7、扩展部分 1.RIP路由的作用与应用场景 2.与其他路由协议的区别 3.RIP路由协议的工作原…

OpenCV显示10bit Raw数据

参考&#xff1a;10 12 14bit图像存储格式&#xff0c;利用Opencv显示10bit Raw数据,并根据鼠标的移动显示对应位置的灰度值。其他bit位数的Raw数据方法类似。 代码实现&#xff1a; #include<opencv2/opencv.hpp> #include<iostream> #include<opencv/highgu…

2023年毫米波行业研究报告

第一章 行业概况 1.1 定义 毫米波是一种电磁波&#xff0c;其波长范围在1毫米至10毫米之间&#xff0c;频率介于30GHz至300GHz。与sub-6G (6GHz以下频段&#xff09;的5G系统相比&#xff0c;5G毫米波通信在带宽、时延和灵活弹性空口配置方面具有明显优势。这使其能够有效地满…

【C语言练习】DOS黑框框通讯录(使用结构体、动态内存管理联系人信息,函数指针等)

文章目录 1. contacts.h 头文件、函数/常量/结构体声明2. test.c 主界面菜单打印、菜单功能选项选择3. contacts.c 函数实现4. 使用结构体、动态内存&#xff0c;函数指针实现时的注意点5. 运行演示 1. contacts.h 头文件、函数/常量/结构体声明 #pragma once#include <std…