LLM 使用简介

2023-12-08 ai linux

主要是 Karpathy 的相关实现,通过简单的示例、资源介绍 LLM 相关的概念。

简介

这里基本都是 Karpathy 仓库的实现介绍,基于 TinyStories 数据集,原始数据可以从 HuggingFace 下载。

评估一个大模型时,会有如下的参数:

  • Parameters 参数数量,一般是以 Billion, B 十亿为单位,可以简单理解为模型神经元的数量,数量越多模型的处理信息能力越强,对数据中复杂关系的把握也越精准,同时训练和推理的成本也越高。

llama2.c

简单的 llama2.c 模型,会通过 Llama2 架构进行训练、推理,也包含了脚本转换 llama2 的参数,可以通过如下方式调整。

示例

包括了推理以及训练阶段。

推理

按照文档的介绍,直接从 HuggingFace 上下载已经训练好的参数模型,包括了常用的 stories15Mstories42M 两个,也包括了一些其它的参数,然后通过如下命令运行。

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 代码。

示例

提供了 ShakespeareTinyStories 两个测试数据集 ,会首先尝试前者。

----- 下载一些已经提前准备好的数据集,或者进行预处理和分词
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 作者录制的相当不错的入门视频,极力推荐。