主要是 Karpathy 的相关实现,通过简单的示例、资源介绍 LLM 相关的概念。
简介
这里基本都是 Karpathy 仓库的实现介绍,基于 TinyStories 数据集,原始数据可以从 HuggingFace 下载。
评估一个大模型时,会有如下的参数:
Parameters
参数数量,一般是以 Billion, B 十亿为单位,可以简单理解为模型神经元的数量,数量越多模型的处理信息能力越强,对数据中复杂关系的把握也越精准,同时训练和推理的成本也越高。
llama2.c
简单的 llama2.c 模型,会通过 Llama2
架构进行训练、推理,也包含了脚本转换 llama2 的参数,可以通过如下方式调整。
示例
包括了推理以及训练阶段。
推理
按照文档的介绍,直接从 HuggingFace 上下载已经训练好的参数模型,包括了常用的 stories15M 和 stories42M 两个,也包括了一些其它的参数,然后通过如下命令运行。
make run
./run stories15M.bin
其中常用的参数有:
-t 1.0
热度 (Temperature) 用来控制语言模型输出的随机度,高热度生成更难预料且富有创造性的结果,而第热度则更保守。-p 0.9
Top-p 核心采样 (Nucleus Sampling) 累积阈值超过该参数的最佳词汇,模型会从这组词汇中随即抽取以生成输出。-i "Your Prompt"
不同的提示语,会生成不同的文档内容。
训练
主要是通过 Python 实现。
----- 会从 HuggingFace 上下载并解压 TinyStories 数据集
python tinystories.py download
----- 进行分词
python tinystories.py pretokenize
----- 开始训练
python train.py
源码解析
其推理阶段很简单,会循环调用 forward()
sample()
decode()
生成,其中核心在 forward()
阶段。
llm.c
相同作者的 llm.c 实现,相比之前的 nanoGPT 要更加简单,用来训练模型,实现相当简单,只有 1K 左右的 C 代码。
示例
提供了 Shakespeare
和 TinyStories
两个测试数据集 ,会首先尝试前者。
----- 下载一些已经提前准备好的数据集,或者进行预处理和分词
bash dev/download_starter_pack.sh
----- 生成 dev/data/tinystories/TinyStories_{train/val}.bin 文件
python dev/data/tinystories.py
----- 生成 dev/data/tinyshakespeare/tiny_shakespeare_{train/val}.bin 文件
python dev/data/tinyshakespeare.py
----- 然后编译训练
make train_gpt2
OMP_NUM_THREADS=8 ./train_gpt2
----- 用来测试 C 和 PyTorch 结果相同
make test_gpt2
./test_gpt2
源码解析
nanoGPT
纯 Python 实现。
其它
tiktoken
tiktoken 是由 OpenAI 开源的 Python 库,主要实现了 Byte Pair Encoding, BPE 算法,并对性能作了极大的优化,相比其它库要快很多。
参考
- Zero To Hero 作者录制的相当不错的入门视频,极力推荐。