深度学习大模型如何进行有效训练和微调?

摘要:在文章大语言模型基础知识里,模型训练与微调作为大语言模型(Large Language Model,LLM)应用构建的主要方式被简要提及,本系列文章将从技术原理、实施流程及应用场景等维度展开深度解析。相关知识的进一步参考见:LLM训练理论和
在文章大语言模型基础知识里,模型训练与微调作为大语言模型(Large Language Model,LLM)应用构建的主要方式被简要提及,本系列文章将从技术原理、实施流程及应用场景等维度展开深度解析。相关知识的进一步参考见:LLM训练理论和实战。本文作为该系列的下半部分,包含第3章并聚焦于大语言模型构建的实操细节与技术要点。上半部分,即文章大模型学习3上-模型训练与微调已系统阐述了大语言模型的基础理论与核心结构。 目录3 大语言模型构建3.1 数据预处理3.2 Chat Template3.2.1 什么是Chat Template3.2.2 Chat Template实现3.3 大语言模型训练路径选择3.4 训练方式介绍3.4.1 预训练训练过程介绍3.4.2 指令微调训练过程介绍3.4.3 LoRA介绍4 参考 3 大语言模型构建 本章涉及相关代码的介绍,且代码运行需要GPU支持。 3.1 数据预处理 在模型训练中,数据预处理至关重要。如今训练流程已较为成熟,数据集的质量往往成为训练成败的关键。模型训练的一个核心环节是将文本转换为索引,这一过程依赖于分词器 (Tokenizer)。不同模型的分词器虽有差异,但其核心处理逻辑基本一致。 分词器如同“文本剪刀”,将句子切分为有意义的token(如单字或词语),再将每个token映射为一个唯一的数字索引,以供模型处理。不同模型的分词器差异主要体现在分词粒度(如子词、字符、词级)、词汇表构建方式与规模,以及文本标准化规则(如大小写、标点处理)和特殊符号设计等方面。文本到索引的转换过程如下: 分词 (Tokenization):分词器首先将句子切分为token(例如,“我爱月亮”被切分为“我”、“爱”、“月亮”) 索引映射 (Index Mapping):然后为每个token分配一个唯一的数字标识,即索引(例如,“我”对应索引 1,“爱”对应索引 2,“月亮”对应索引 3) 序列生成 (Sequence Generation):最终,句子“我爱月亮”就被转换为token索引序列 [1, 2, 3] 以下代码展示了如何使用unsloth库调用DeepSeek-R1-Distill-Qwen-1.5B模型及其分词器,将输入文本快速转换为模型所需的token序列。unsloth是一个专注于优化大语言模型推理的库,而 DeepSeek-R1-Distill-Qwen-1.5B是轻量级大语言模型,也是DeepSeek-R1系列中最小的模型。若想具体了解DeepSeek-R1系列模型,可参考: 一张图彻底拆解DeepSeek V3和R1双模型。 unsloth的安装方法见其官方仓库unsloth和unsloth微调环境搭建。unsloth预置了多种常见的大语言模型,且所有模型均托管于Hugging Face。示例代码如下,为加快模型加载速度,代码中提供了从modelScope或镜像网站加载的选项。 from unsloth import FastLanguageModel # torch2.5版本以下防止unsloth加载出问题 from transformers import modeling_utils if not hasattr(modeling_utils, "ALL_PARALLEL_STYLES") or modeling_utils.ALL_PARALLEL_STYLES is None: modeling_utils.ALL_PARALLEL_STYLES = ["tp", "none","colwise",'rowwise'] # 原始模型地址:https://huggingface.co/unsloth/DeepSeek-R1-Distill-Qwen-1.5B # 1. 利用modelscope库下载模型到本体,然后通过unsloth加载模型 from modelscope import snapshot_download # 加载预训练模型 ,利用modelscope库 model_name = "deepseek-ai/DeepSeek-R1-Distill-Qwen-1.5B" # 假设这是支持分词的模型名称 # 下载模型 model_dir = snapshot_download(model_name) # 从huggingface的镜像https://hf-mirror.com/中下载模型到本地 # model_dir= "./DeepSeek-R1-Distill-Qwen-1.5B" # 设置最大序列长度,表示模型在一次前向传递中可以处理的最大令牌数量。
阅读全文