如何从零开始训练一个LLM大模型

从零开始训练一个大型语言模型(LLM)是一个复杂且资源消耗巨大的过程,涉及多个步骤和阶段。以下是详细步骤:

1. 预训练模型基座选择

  • 选择模型架构:根据需求选择合适的模型架构,如Transformer。

  • 确定模型规模:根据可用的计算资源确定模型的大小,包括层数、隐藏单元数、注意力头数等。

2. 数据收集和预处理

  • 数据收集:从互联网或其他来源收集大量的文本数据。

  • 数据清洗:去除低质量、重复或无关的内容。

  • 中文适应性处理:如果目标是训练适用于中文的模型,需要确保数据中包含足够的中文语料。

3. 词表扩充与Tokenizer训练

  • 词表构建:选择合适的分词方法,如WordPiece或BPE(Byte Pair Encoding)。

  • 训练Tokenizer:使用预处理过的数据来训练Tokenizer,以便它能有效地将文本切分成模型可理解的单元。

4. 模型预训练

  • 语言建模:最常见的预训练任务是语言建模,即预测下一个token。

  • 多任务学习:也可以在预训练中加入其他任务,如遮蔽语言模型(MLM)等。

  • 使用中文语料进行预训练:如果基座模型主要在英文语料上训练,需要使用中文语料进行二次预训练,以提升模型对中文的理解能力。

5. 指令微调(Instruction Tuning)

  • 收集指令数据:收集包含用户指令和回复的数据。

  • 微调模型:在预训练模型的基础上,使用指令数据对模型进行微调,使其更好地理解和执行指令。

6. 特定领域适配(如果需要)

  • 领域数据集成:在特定领域(如金融、法律)提升模型表现,需要将领域特定的数据加入训练集。

  • 继续微调:用领域数据对模型进行进一步的微调。

7. 奖励模型和强化学习(可选)

  • 训练奖励模型:训练一个额外的模型来评价生成文本的质量。

  • 强化学习:利用奖励模型来指导模型的进一步优化,提升生成文本的质量。

8. 模型评估和迭代

  • 性能评估:通过定量和定性评估标准来评估模型表现。

  • 迭代优化:根据评估结果调整训练策略或数据,进行多轮训练和优化。

9. 模型部署和应用

  • 模型压缩:通过剪枝、量化等技术减少模型大小,便于部署。

  • 服务部署:将训练好的模型部署到服务器或边缘设备上,提供给用户使用。

以GPT-2模型训练为例,从零开始训练一个大型语言模型涉及以下步骤:

1. 数据集构造

数据集的选择对于模型训练至关重要。我们通常选择大规模、高质量的文本数据进行预训练。

示例数据集:假设我们使用维基百科英文语料库作为数据源。

`   <table width="866"><tbody><tr style="background-color: transparent;border-top: none;"><td data-line-number="1" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="1" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;"><span style="color: rgb(166, 38, 164);line-height: 23px;">from</span> datasets <span style="color: rgb(166, 38, 164);line-height: 23px;">import</span> load_dataset</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="2" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="2" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="3" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="3" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 15px;"># 加载数据集</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="4" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="4" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">dataset = load_dataset(<span style="color: rgb(80, 161, 79);line-height: 23px;">'wikipedia'</span>, <span style="color: rgb(80, 161, 79);line-height: 23px;">'20200501.en'</span>)</span></td></tr></tbody></table>   `

python复制代码


数据预处理:对文本进行清理、分词等操作。

`  <table width="866"><tbody><tr style="background-color: transparent;border-top: none;"><td data-line-number="1" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="1" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;"><span style="color: rgb(166, 38, 164);line-height: 23px;">import</span> re</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="2" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="2" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="3" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="3" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;"><span style="color: rgb(166, 38, 164);line-height: 23px;">def</span> <span style="color: rgb(64, 120, 242);line-height: 23px;">preprocess_text</span>(<span style="color: rgb(247, 205, 122);line-height: 23px;">text</span>):</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="4" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="4" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 15px;"># 清理文本:去除非字母字符,转换为小写</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="5" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="5" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">text = re.sub(<span style="color: rgb(80, 161, 79);line-height: 23px;">r'[^a-zA-Z]'</span>, <span style="color: rgb(80, 161, 79);line-height: 23px;">' '</span>, text)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="6" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="6" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">text = text.lower()</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="7" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="7" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;"><span style="color: rgb(166, 38, 164);line-height: 23px;">return</span> text</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="8" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="8" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="9" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="9" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 15px;"># 预处理数据集</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="10" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="10" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">dataset = dataset.<span style="color: rgb(193, 132, 1);line-height: 23px;">map</span>(<span style="color: rgb(166, 38, 164);line-height: 23px;">lambda</span> examples: {<span style="color: rgb(80, 161, 79);line-height: 23px;">'text'</span>: preprocess_text(examples[<span style="color: rgb(80, 161, 79);line-height: 23px;">'text'</span>])})</span></td></tr></tbody></table>  python`

复制代码


2. 模型构造

基于GPT-2的模型结构,我们可以使用Hugging Face的Transformers库来构造模型。

`   <table width="866"><tbody><tr style="background-color: transparent;border-top: none;"><td data-line-number="1" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="1" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;"><span style="color: rgb(166, 38, 164);line-height: 23px;">from</span> transformers <span style="color: rgb(166, 38, 164);line-height: 23px;">import</span> GPT2LMHeadModel, GPT2Config</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="2" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="2" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="3" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="3" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 15px;"># 配置模型参数</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="4" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="4" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">config = GPT2Config(</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="5" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="5" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">vocab_size=<span style="color: rgb(152, 104, 1);line-height: 23px;">50257</span>,  <span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;"># GPT-2词汇表大小</span></span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="6" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="6" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">n_positions=<span style="color: rgb(152, 104, 1);line-height: 23px;">1024</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="7" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="7" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">n_ctx=<span style="color: rgb(152, 104, 1);line-height: 23px;">1024</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="8" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="8" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">n_embd=<span style="color: rgb(152, 104, 1);line-height: 23px;">768</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="9" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="9" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">n_layer=<span style="color: rgb(152, 104, 1);line-height: 23px;">12</span>,  <span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;"># 层数</span></span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="10" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="10" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">n_head=<span style="color: rgb(152, 104, 1);line-height: 23px;">12</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="11" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="11" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 15px;"># 更多配置...</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="12" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="12" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="13" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="13" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="14" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="14" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 15px;"># 构造模型</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="15" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="15" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">model = GPT2LMHeadModel(config)</span></td></tr></tbody></table>   `

python复制代码


3. 模型训练

使用PyTorch或TensorFlow进行模型训练。

`   <table width="866"><tbody><tr style="background-color: transparent;border-top: none;"><td data-line-number="1" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="1" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;"><span style="color: rgb(166, 38, 164);line-height: 23px;">from</span> transformers <span style="color: rgb(166, 38, 164);line-height: 23px;">import</span> Trainer, TrainingArguments</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="2" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="2" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="3" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="3" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 15px;"># 训练参数</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="4" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="4" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">training_args = TrainingArguments(</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="5" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="5" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">output_dir=<span style="color: rgb(80, 161, 79);line-height: 23px;">"./results"</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="6" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="6" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">num_train_epochs=<span style="color: rgb(152, 104, 1);line-height: 23px;">5</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="7" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="7" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">per_device_train_batch_size=<span style="color: rgb(152, 104, 1);line-height: 23px;">4</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="8" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="8" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">per_device_eval_batch_size=<span style="color: rgb(152, 104, 1);line-height: 23px;">4</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="9" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="9" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">warmup_steps=<span style="color: rgb(152, 104, 1);line-height: 23px;">500</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="10" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="10" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">weight_decay=<span style="color: rgb(152, 104, 1);line-height: 23px;">0.01</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="11" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="11" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">logging_dir=<span style="color: rgb(80, 161, 79);line-height: 23px;">'./logs'</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="12" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="12" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">logging_steps=<span style="color: rgb(152, 104, 1);line-height: 23px;">10</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="13" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="13" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 15px;"># 更多参数...</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="14" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="14" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="15" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="15" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="16" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="16" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 15px;"># 初始化Trainer</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="17" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="17" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">trainer = Trainer(</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="18" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="18" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">model=model,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="19" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="19" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">args=training_args,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="20" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="20" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">data_collator=<span style="color: rgb(166, 38, 164);line-height: 23px;">lambda</span> data: {<span style="color: rgb(80, 161, 79);line-height: 23px;">"input_ids"</span>: torch.stack([f.input_ids <span style="color: rgb(166, 38, 164);line-height: 23px;">for</span> f <span style="color: rgb(166, 38, 164);line-height: 23px;">in</span> data])},</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="21" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="21" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">)</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="22" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="22" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="23" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="23" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 15px;"># 训练模型</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="24" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="24" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">trainer.train(dataset[<span style="color: rgb(80, 161, 79);line-height: 23px;">'train'</span>])</span></td></tr></tbody></table>   `

python复制代码


4. 模型评估

评估模型性能通常使用困惑度(Perplexity)等指标。

`   <table width="866"><tbody><tr style="background-color: transparent;border-top: none;"><td data-line-number="1" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="1" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;"><span style="color: rgb(166, 38, 164);line-height: 23px;">from</span> transformers <span style="color: rgb(166, 38, 164);line-height: 23px;">import</span> evaluate</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="2" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="2" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="3" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="3" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 15px;"># 评估模型</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="4" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="4" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">eval_results = evaluate(</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="5" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="5" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">model=model,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="6" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="6" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">tokenizer=model.tokenizer,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="7" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="7" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">data_collator=<span style="color: rgb(166, 38, 164);line-height: 23px;">lambda</span> data: {<span style="color: rgb(80, 161, 79);line-height: 23px;">"input_ids"</span>: torch.stack([f.input_ids <span style="color: rgb(166, 38, 164);line-height: 23px;">for</span> f <span style="color: rgb(166, 38, 164);line-height: 23px;">in</span> data])},</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="8" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="8" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">eval_dataset=dataset[<span style="color: rgb(80, 161, 79);line-height: 23px;">'validation'</span>],</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="9" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="9" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">metric_key_prefix=<span style="color: rgb(80, 161, 79);line-height: 23px;">'eval'</span>,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="10" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="10" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">output_dir=training_args.output_dir,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="11" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="11" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">)</span></td></tr></tbody></table>   `

python复制代码


5. 模型测试

测试模型在特定任务上的表现。

`   <table width="866"><tbody><tr style="background-color: transparent;border-top: none;"><td data-line-number="1" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="1" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;"><span style="color: rgb(166, 38, 164);line-height: 23px;">from</span> transformers <span style="color: rgb(166, 38, 164);line-height: 23px;">import</span> predict</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="2" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="2" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><br></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="3" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="3" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="color: rgb(160, 161, 167);font-style: italic;line-height: 23px;font-size: 15px;"># 测试模型</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="4" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="4" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">test_results = predict(</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="5" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="5" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">model=model,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="6" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="6" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">tokenizer=model.tokenizer,</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="7" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="7" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">data_collator=<span style="color: rgb(166, 38, 164);line-height: 23px;">lambda</span> data: {<span style="color: rgb(80, 161, 79);line-height: 23px;">"input_ids"</span>: torch.stack([f.input_ids <span style="color: rgb(166, 38, 164);line-height: 23px;">for</span> f <span style="color: rgb(166, 38, 164);line-height: 23px;">in</span> data])},</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="8" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="8" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">test_dataset=dataset[<span style="color: rgb(80, 161, 79);line-height: 23px;">'test'</span>],</span></td></tr><tr style="background-color: transparent;border-top: none;"><td data-line-number="9" style="padding: 0px;color: rgb(110, 110, 127);border-width: initial;border-style: none;border-color: initial;vertical-align: top;text-align: right;"><br></td><td data-line-number="9" style="padding: 0px;border-width: initial;border-style: none;border-color: initial;"><span style="font-size: 15px;">)</span></td></tr></tbody></table>   `

python复制代码


注意:

  1. 实际操作中,上述代码仅为示意,需要根据具体情况进行调整。

  2. 训练大型模型(如GPT-2)需要大量计算资源(如多个GPU或TPU)。

  3. 数据集加载、预处理、模型训练等步骤都需要消耗大量时间和资源。

  4. 由于篇幅限制,这里只展示了关键代码片段,实际应用中还需要包含错误处理、日志记录等更多细节。

以上步骤和代码仅作为参考,具体实现时需要根据数据集和任务需求进行调整。

读者福利:如果大家对大模型感兴趣,这套大模型学习资料一定对你有用

对于0基础小白入门:

如果你是零基础小白,想快速入门大模型是可以考虑的。

一方面是学习时间相对较短,学习内容更全面更集中。
二方面是可以根据这些资料规划好学习计划和方向。

包括:大模型学习线路汇总、学习阶段,大模型实战案例,大模型学习视频,人工智能、机器学习、大模型书籍PDF。带你从零基础系统性的学好大模型!

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

👉AI大模型学习路线汇总👈

大模型学习路线图,整体分为7个大的阶段:(全套教程文末领取哈)

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

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

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

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

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

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

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

👉大模型实战案例👈

光学理论是没用的,要学会跟着一起做,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。

在这里插入图片描述

👉大模型视频和PDF合集👈

观看零基础学习书籍和视频,看书籍和视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。

在这里插入图片描述

在这里插入图片描述

👉学会后的收获:👈

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

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

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

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

👉获取方式:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值