# 开始使用
## 1. 安装uv
```bash
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env
```
## 2. 克隆项目
```bash
git clone https://github.com/wingAGI/clean-llm.git
cd clean-llm
```
## 3. 下载预训练数据
```bash
cd data
bash download_ts.sh  # 下载TinyStories数据集（较小），默认配置下使用该数据集
bash download_owt.sh # 下载OpenWebText数据集（较大），如果你需要的话
```
## 4. [可选] 修改Tokenizer的配置文件
根据你的需要修改训练Tokenizer的配置文件`scripts/configs/tokenizer.yaml`中的`dataset_name`和`dataset_split`字段。
默认情况下，它将使用TinyStories数据集的训练集进行训练，并将得到的Tokenizer保存到`tokenizers/TinyStories_train/`目录中。
## 5. 训练Tokenizer
```bash
cd ..
uv run python -m scripts.train_tokenizer
```
运行后，`uv`会自动创建虚拟环境并安装所需的依赖项，然后运行训练Tokenizer的脚本。
## 6. 将文本数据编码成Token并保存，以便后续训练LLM
```bash
uv run python -m scripts.tokenize
```
默认情况下，会编码TinyStories数据集的训练集和验证集，，并保存到`data/TinyStories/dat/`目录下。
## 7. 开始预训练
```bash
uv run python -m scripts.pretrain
```
默认会训练cs336的语言模型，你可以根据需要修改`scripts/configs/pretrain.yaml`中的配置。  
训练时间参考：mac上36分钟，单卡4090上10分钟。
## 8. 观察训练日志
```bash
uv run mlflow server
```
运行后，打开浏览器访问`http://127.0.0.1:5000`，查看训练日志。可以看到如下图所示的内容：
![cs336_lm_pretrain](assets/pretrain_mlflow_log.png)  
可以看到，验证集损失在1.26左右。大家可以在`scripts/configs/pretrain.yaml`中调整训练配置，比如训练更多步数。
## 9. 测试预训练模型
```bash
uv run python -m scripts.eval_pretrain
```
运行后，会输出模型生成的样本：
```
输入： Once upon a time, there is a little boy
生成结果： Once upon a time, there is a little boy named Tim. Tim loved to play outside in his sun in the summer cold. One day, he heard a sound coming from outside his house. Tim looked up and saw
```