代码结构
所有的代码写到cs336_basics/* 下面,在adapters.py里调用自己的.py,通过所有的test。
作业资料参考
karpathy视频+仓库:
视频
github仓库
测试项目运行环境
下载uv
uv官网仓库
使用命令:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
我直接运行pip install uv
会报错
进入项目文件夹下目录:
uv self update # optional
uv sync
uv self-update
命令专门用于维护 uv
可执行文件本身。它的主要且唯一目的是检查并安装最新可用的 uv
版本。uv sync
命令在项目级别运行,专注于项目所依赖的 Python 包。其核心功能是确保虚拟环境中安装的包与项目锁文件( uv.lock
或 requirements.lock
)中指定的版本完全一致(项目文件夹中有uv.lock文件)。
运行这两条命令后,会看到文件夹下多出了.venv
文件夹
激活虚拟环境
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
.venv\Scripts\Activate # windows命令
切换到虚拟环境后,运行命令
uv run pytest
由于是windows环境,我出现了报错,原因是:tests/test_tokenizer.py 文件尝试导入 resource 模块,但该模块在 Windows 系统上不可用。最开始我以为必须切换到linux环境,或者用云服务器跑,但是我只是需要在windows上测试,注释掉test_tokenizer.py 文件中的import resource
即可。kaggle和google colab还有AWS都提供了云服务器,可以白嫖。
再次运行命令后:
报错: NotImplementedError
最初,所有测试应该 NotImplementedError
失败。要将代码实现连接到测试,要完成./tests/adapters.py 中的函数。
adapters.py 中的函数包括:
- run_linear
- run_embedding
- run_swiglu
- run_scaled_dot_product_attention
- run_multihead_self_attention
- run_multihead_self_attention_with_rope
- run_rope
- run_transformer_block
- run_transformer_lm
- run_rmsnorm
- run_silu
- run_get_batch
- run_softmax
- run_cross_entropy
- run_gradient_clipping
- get_adamw_cls
- run_get_lr_cosine_schedule
- run_save_checkpoint
- run_load_checkpoint
- get_tokenizer
- run_train_bpe
数据集下载
需要下载这两个数据集:
- TinyStories
- OpenWebText
由于windows不方便下载,所以我在wsl下下载。踩坑:连接不到https://huggingface.co
后续发现可以镜像站下载:https://hf-mirror.com/
用vscode连接wsl,然后新建一个文件download_data.sh,写入命令
完整的命令如下:
#!/bin/bash# 创建数据目录并进入echo "Creating data directory..."mkdir -p datacd data# 下载 TinyStories 数据集echo "Downloading TinyStoriesV2-GPT4-train.txt.gz... (This may take a while)"# 使用 curl -L 来正确处理重定向,并用 -o 指定输出文件名curl -L -o TinyStoriesV2-GPT4-train.txt.gz "https://hf-mirror.com/datasets/roneneldan/TinyStories/resolve/main/TinyStoriesV2-GPT4-train.txt"echo "Downloading TinyStoriesV2-GPT4-valid.txt.gz..."curl -L -o TinyStoriesV2-GPT4-valid.txt.gz "https://hf-mirror.com/datasets/roneneldan/TinyStories/resolve/main/TinyStoriesV2-GPT4-valid.txt"# 下载并解压 OWT sample 数据集echo "Downloading OWT sample dataset..."curl -L -o owt_train.txt.gz "https://hf-mirror.com/datasets/stanford-cs336/owt-sample/resolve/main/owt_train.txt.gz"gunzip -f owt_train.txt.gzcurl -L -o owt_valid.txt.gz "https://hf-mirror.com/datasets/stanford-cs336/owt-sample/resolve/main/owt_valid.txt.gz"gunzip -f owt_valid.txt.gz# 返回上级目录echo "All files downloaded and processed successfully."cd ..
owt的文件下好后看似是压缩包,实际已经解压好了,只需要把后缀名改成txt就好。
已经下载好的文件长这个样子:
现在我们已经做好前期所有准备了!