nanoGPT:以古诗集为例,训练自己的GPT模型
使用nanoGPT一步步训练自己的GPT模型,基于gpt2,好处也能做到。 CPU,简单快速(LLaMa模型训练gpu很费时间,很多跑不了,所以我选择这个)
最终实现:以古诗集为例,可以继续写诗的gpt模型训练
地址开源:
github.com/karpathy/nanoGPT
github.com/chinese-poetry/poetry-chinese♶♶可以在下面创建一个保存。环境是模型训练所必需的。这是小编 Build过程编译的最简单的基础环境,编译不会丢失
1 conda(python环境)
#网址:https://conda.io/en/latest/miniconda.html
wget https://repo.anaconda.com/miniconda/Miniconda3-py310_23.1.0-1-Linux-x86_64.sh #下载脚本
sh Miniconda3-py39_4.12.0-Linux-x86_64.sh # 执行
~/miniconda3/bin/conda init #初始化Shell,以便直接运行conda
conda create --name nanogpt python=3.9 #关启shell,创建虚拟环境
conda activate nanogpt #激活
2 下载代码
wget https://github.com/karpathy/nanoGPT/archive /refs /heads/master.zip
3 安装依赖项:
pip install Transformer tiktoken tqdm
4 torch 安装
https://pytorch.org❀/get-started/lo : pip3 install torch Vision torchaudio
测试:
运行demo示例
环境准备好后,进入项目目录,立即执行:
data python #Dataparepy/shakespeare.处理
python train.py config/train_shakespeare_char .py #训练,有GPU
无GPU
python train.py config/train_shakespeare_char.py --device-=cpuF_char.py --device-=eval0F - -log_interval=1 --block_size=64 - -batch_size=12 --n_layer=4 --n_head=4 --n_embd=128 --max_iters=2000 --lr_decay_iters=2000 --dropout=0.0
错误解决:
1个错误:
运行时错误:当前CUDA设备不支持bfloat16。请将 dtype 切换为 float16。
AttributeError: module 'torch' does not have attribute 'compile'
2 解决上述两个问题:
打开 train.py 文件并更改以下参数(第 73 行附近)
dtype = 'float16'
编译= False
结束标志:
最佳验证损失为1.4697;默认情况下,模型每250轮保存一次;训练过程中按ctrl+c可以立即停止
模型保存路径:
运行演示模型(采样/推理)
python example.py -- out_dir=out-shakespeare-char
.py - -out_dir=out-shakespeare-char --device=cpu ## 无gpu
成功标志:
训练自己的数据集
下面以古诗词集为例,训练可以继续写的gpt模型诗歌
数据如下,下载到根目录(/nanoGPT-master/XX)
github.com/chinese-poetry/chinese-poetry
最全的中国古代诗歌数据库,近14000位古代诗人唐宋两代唐诗近5.5万首,宋词26万首。 1564位宋代诗人,21050首诗
还下载了一本诗集所以这里我们以唐诗为例,所以第一步就是处理数据,收集所有唐诗数据(nanoGPT-master\china-poetry -master\所有唐诗)并过滤
1 数据预处理
提取相关唐诗数据
# -*- coding: utf-8 -*-
"""
目标:获取数据集中全唐诗,并提取五言诗词,两句的数据
示例:
{
"author": "郭向",
"paragraphs": [
"抱玉三朝楚,懷書十上秦。",
"年年洛陽陌,花鳥弄歸人。"
],
"title": "途中口號",
"id": "32898701-8d9c-4b4d-b192-510564f63b2f"
},
"""
import glob
import json
import os
datas_json=glob.glob("../../chinese-poetry-master/全唐诗/poet*.json") #1匹配所有唐诗json文件
# print(datas_json,"\n",len(datas_json))
if os.path.exists("tang_poet.txt"):
os.remove("tang_poet.txt")
print("已经删除原数据-tang_poet.txt")
print("总共处理文件个数:", len(datas_json))
print("预处理中,请稍后。。")
for data_json in datas_json[:]: #2处理匹配的每一个文件
with open(data_json,"r",encoding="utf-8") as f:
ts_data =json.load(f)
for each_ts in ts_data[:]: #3处理文件中每段数据,只要五言诗和2句的
paragraphs_list =each_ts["paragraphs"]
if len(paragraphs_list) == 2 and len(paragraphs_list[0])==12 and len(paragraphs_list[1]) == 12:
with open("tang_poet.txt","a",encoding="utf-8") as f2:
f2.write("".join(paragraphs_list))
f2.write("\n")
f =open("tang_poet.txt","r",encoding="utf-8")
print(len(f.readlines()))
print("success")

2 生成网络数据
修改prepare.py:
py;复制train_shakespeare_char.py的内容,大功告成 修改:out_dir = 'out-gu-char' 3 Training python train.py config/gu_char.py 检查train和val的loss,评估模型是否存在问题;如果val一开始不收敛 好吧,可能数据太少了 4推理 开始写一首古诗。
dataset = 'gu_poems'
data python/gu_poems/prepare.py
python Sample.py --out_dir=out-gu-char
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。