从零训练大语言模型:环境与代码实战指南
引言
本文并非基于微调训练模型,而是从头开始训练出一个全新的大语言模型的硬核教程。看完本篇,你将了解训练出一个大模型的环境准备、数据准备、生成分词、模型训练、测试模型等环节分别需要做什么。AI 小白友好~文中代码可以直接实操运行。
全新训练的好处是训练的数据、训练的参数都是可修改的,通过调试运行我们可以更好的理解大模型训练过程。我们可以用特定类型数据的训练,来完成特定类型数据的输出。关于大模型已经有很多文章,微调模型的文章比较多,全新预训练全新模型的文章很少。个人觉得有的也讲的很复杂,代码也很难跑通。本文不会讲的很复杂,代码也很容易运行。
1. 准备训练环境
运行代码需要 Python 环境。建议使用支持 CUDA 的 GPU 机器进行加速,因为大模型训练对显存和计算能力要求较高。
依赖安装
首先安装必要的 Python 库。可以使用 pip 进行安装:
pip install transformers datasets torch tokenizers accelerate
确保已安装 PyTorch 并正确识别 GPU。可以通过以下命令检查:
import torch
print(torch.cuda.is_available())
如果返回 True,说明 GPU 环境配置成功。
2. 准备训练数据
首先我们要为训练准备数据。例如基于《三国演义》训练一个模型。数据质量直接影响模型效果,建议尽量使用纯净的文本数据。
数据下载与预处理
下载数据文件(示例):
wget https://raw.githubusercontent.com/xinzhanguo/hellollm/main/text/sanguoyanyi.txt -O text/sanguoyanyi.txt
将下载的文件放入 text 文件夹中。在实际生产中,可能需要对数据进行清洗,去除特殊符号、HTML 标签或无关字符,以确保分词器的准确性。
3. 训练分词器
分词(tokenization)是把输入文本切分成有意义的子单元(tokens)。通过以下代码,根据我们的数据生成一个新的分词器。这里使用 BPE(Byte Pair Encoding)算法,这是 GPT 系列模型常用的分词方式。
from tokenizers import Tokenizer
from tokenizers.models import BPE
from tokenizers.trainers import BpeTrainer
from tokenizers.normalizers import NFKC, Sequence
from tokenizers.pre_tokenizers import ByteLevel
from tokenizers.decoders import ByteLevel as ByteLevelDecoder
from transformers import GPT2TokenizerFast
# 构建分词器 GPT2 基于 BPE 算法实现
tokenizer = Tokenizer(BPE(unk_token=))
tokenizer.normalizer = ([NFKC()])
tokenizer.pre_tokenizer = ByteLevel()
tokenizer.decoder = ByteLevelDecoder()
special_tokens = [,,,,]
trainer = BpeTrainer(vocab_size=, show_progress=, initial_alphabet=ByteLevel.alphabet(), special_tokens=special_tokens)
files = []
tokenizer.train(files, trainer)
newtokenizer = GPT2TokenizerFast(tokenizer_object=tokenizer)
newtokenizer.save_pretrained()


