近期 Meta 开源的 Llama 2 大模型火遍了 整个 AI 社区。甚至有报道称: 如果将 GPT 的诞生比作大模型的 “iPhone 时刻”,那么这次 Meta Llama 2 的开源无疑将成为大模型的“安卓时刻”。
特斯拉前 AI 总监,年初重回 OpenAI 的 联合创始人 Andrej Karpathy 也按捺不住了,他利用周末的时间,用纯 C 语言打造了一个轻量版的 Llama 2 模型。
GitHub 地址:https://github.com/karpathy/llama2.c
他表示,这个项目能够让你在 PyTorch 中训练一个轻量版 Llama 2 模型,然后通过一个仅有 500 行且无需其他依赖的纯 C 代码文件进行推理。并且该预训练模型(在 TinyStories 数据集上训练)能够在 MacBook Air M1 CPU 上以 fp32 的浮点精度、18 tok/s 的速度对故事进行采样。
这个项目的主要目标是实现一个简单的推理引擎,因此并不打算作为一个生产级别的库。项目的灵感来源于 llama.cpp,但他希望打造一个更简洁的版本,因此选择硬编码 Llama 2 架构,坚持使用 fp32,并且只使用纯 C 语言编写一个无依赖的推理文件。
到目前为止,llama2.c 项目在 GitHub 上已经揽获 4.3K stars,还在不断增长。
下面是项目的运行步骤:
为了使用纯 C 语言运行一个轻量级 Llama2 模型,你需要以下的模型检查点。下载 TinyStories 数据集上训练的一个 15M 参数的模型(大约 58MB),并将它放入默认检查点目录(out)中。
wget https://karpathy.ai/llama2c/model.bin -P out
然后编译并运行 C 代码。
gcc -O3 -o run run.c -lm./run out/model.bin
最后,你将看到文本流。在 Karpathy 的 M1 MacBook Air 上,运行速度约 100 tok/s,对于超级原生的 fp32 单线程 C 代码来说还不错。
示例输出如下所示。
Once upon a time, there was a boy named Timmy. Timmy loved to play sports with his friends. He was very good at throwing and catching balls. One day, Timmy’s mom gave him a new shirt to wear to a party. Timmy thought it was impressive and asked his mom to explain what a shirt could be for. “A shirt is like a special suit for a basketball game,” his mom said. Timmy was happy to hear that and put on his new shirt. He felt like a soldier going to the army and shouting. From that day on, Timmy wore his new shirt every time he played sports with his friends at the party. Once upon a time, there was a little girl named Lily. She loved to play outside with her friends. One day, Lily and her friend Emma were playing with a ball. Emma threw the ball too hard and it hit Lily’s face. Lily felt embarrassed and didn’t want to play anymore. Emma asked Lily what was wrong, and Lily told her about her memory. Emma told Lily that she was embarrassed because she had thrown the ball too hard. Lily felt bad achieved tok/s: 98.746993347843922
Karpathy 在讨论区中表示,自己很开心看到这个项目登上 Hacker News (一个受欢迎的技术新闻网站和论坛)。原来我的原始检查点在 MacBook Air M1 上用 -O3 编译时跑得比我预期的快得多(100 tok/s),所以现在正在训练一个更大的 44M 模型,应该还能实时运行。也许 7B 的 Llama 模型近在咫尺…
有网友表示,自己使用了一个改进过的 nanoGPT 在 TinyStories 上进行预训练,生成了一个 12M 的模型(由 GPT-4 生成的 2G 字节),结果非常惊人。然后稍微调整了一下在维基百科上的应用,看起来像是一个非常不错的废话生成器,比任何平滑的 n-gram 模型要聪明得多,并且大小明显更小。他坚信小型 LLM (大语言模型)将主导多个领域。他的下一个目标是在不降低太多智能的情况下将 7B 的 llama2 缩小到 10-100M 大小。
还有网友希望让作者分享更多 nanoGPT 的训练经验。他最近也在使用 nanoGPT,但目前输出的内容并不理想。
你认为轻量版的大语言模型未来会占主导地位吗?欢迎在评论区留言讨论。