从零开始训练语言大模型5——全唐诗5.2万首step=10000训练
创作不易,请多多点赞收藏!!
#全唐诗训练流程
和三百首是同一套代码,差别在 数据量放大 100 倍、模型放大 10 倍、参数要调 。
1:拿全唐诗数据
1.1 说明
由于网上存在开源且完整可用的全唐诗数据,所以直接拉取,不进行数据清洗,如要学习数据清洗,可收藏本专栏 ,详细查看第3篇文章,专栏永久免费

1.2 git clone 或者下载zip
1.2.1打开powershell(记住不是cmd)

1.2.2 git clone 方式
每当重开界面,切记环境要切到 llm

执行:
cd E:\模型训练 (注意,小白在这里改成你文件夹的地址)
git clone --depth 1 https://github.com/chinese-poetry/chinese-poetry.git

1.2.3:下载ZIP包的方式
网站:https://github.com/chinese-poetry/chinese-poetry.git
下载后解压到项目文件夹便可

1.2.4确认目录与数据
PowerShell
Get-ChildItem chinese-poetry\御定全唐詩

2:数据修正
2.1 装繁简转换
powershell 执行:pip install opencc-python-reimplemented

2.2 转换脚本
在`E:\模型训练\原生预训练\数据清洗` 下新建`prepare_tang_all.py` :
代码:
import glob
import json
import os
import re
from opencc import OpenCC
cc = OpenCC("t2s")
SRC = r"E:\模型训练\chinese-poetry\御定全唐詩\json"
OUT = "tang_all.txt"
files = sorted(glob.glob(os.path.join(SRC, "*.json")))
print("文件数:", len(files))
lines, skip_lianju, skip_short = [], 0, 0
for fp in files:
with open(fp, encoding="utf-8") as f:
poems = json.load(f)
for p in poems:
body = re.sub(r"\s+", "", "".join(p.get("paragraphs") or []))
if "——" in body: # 联句:正文里混了参与者姓名
skip_lianju += 1
continue
if len(body) < 10: # 残句
skip_short += 1
continue
title = cc.convert(p.get("title") or "无题").replace("|", ",")
author = cc.convert(p.get("author") or "佚名").replace("|", ",")
body = cc.convert(body).replace("|", ",")
lines.append(f"{title}|{author}|{body}<eos>")
with open(OUT, "w", encoding="utf-8") as f:
f.write("\n".join(lines))
print("诗数:", len(lines))
print("跳过联句:", skip_lianju, " 跳过残句:", skip_short)
print("总字符:", sum(len(l) for l in lines))
print("唯一汉字:", len({c for l in lines for c in l if "\u4e00" <= c <= "\u9fff"}))
2.3 运行prepare_tang_all.py:
cd E:\模型训练\原生预训练\数据清洗
python prepare_tang_all.py
![]()
2.4期望输出:
文件数: 900
诗数: 42800 左右
跳过联句: 159 跳过残句: 67
总字符: 270 万左右
唯一汉字: 6500 左右

判断标准:
- `诗数` 在 42,000~43,000 之间
- `唯一汉字` 在 6,000~7,000 之间; 如果超过 9,000,说明繁转简没生效
- 打开`tang_all.txt` 抽查几行,应该是简体
3:建词表和二进制
3.1 依次执行
cd E:\模型训练\nanoGPT
mkdir data\tang_all
copy "E:\模型训练\原生预训练\数据清洗\tang_all.txt" data\tang_all\input.txt
copy data\poems_char\prepare.py data\tang_all\prepare.py
python data\tang_all\prepare.py
3.2 期望
length of dataset in characters: 3,374,915
vocab size: 7,100 左右 ← 7090 汉字 + 标点 + | + <eos>
train has 3,030,000 tokens, val has 340,000 tokens`
实际:

3.3 检查文件

4:开始训练
新开一个powershell
执行如下命令:
conda activate llm
chcp 65001
cd E:\模型训练\nanoGPT
python -u train.py --dataset=tang_all --out_dir=out-tang_all `
--device=cuda --dtype=bfloat16 `
--n_layer=6 --n_head=8 --n_embd=256 --block_size=512 `
--batch_size=16 --gradient_accumulation_steps=2 --dropout=0.1 `
--learning_rate=1e-3 --min_lr=1e-4 --warmup_iters=500 `
--max_iters=10000 --lr_decay_iters=10000 `
--eval_interval=250 --eval_iters=100 --log_interval=50 `
--compile=False 2>&1 | Tee-Object -FilePath train_tang_all.log

warnning 不用管,目前设置的是训练10000步,接下来就是漫长的等待时间了
更多推荐
所有评论(0)