ggaaooppeenngg

为什么计算机科学是无限的但生命是有限的

参考Pytorch版本的llama-from-scratch。原文中的RmsNorm的平均值多算了一个维度,这里改成了正确的版本。

首先需要下载TinyShakespeare数据集,这是一个莎士比亚文字数据集。本文档将大致遵循论文的布局,并跳过一些明显的步骤,比如设置虚拟环境和安装依赖项。

我们最终将实现的内容预览:

1
2
3
4
5
6
7
8
9
10
11
12
13
14

println!(generate(llama, MASTER_CONFIG, 500, device)[0])

ZELBETH:
Sey solmenter! 'tis tonguerered if berryishdd, and What his stabe, you, and, but all I pilJefals, mode with,
Vurint as steolated have loven OlD the queen'd refore
Are been, good plmp:

Proforne, wift'es swleen, was no bunderes'd a a quain beath!
Tybell is my gateer stalk smen'd as be matious dazest brink thou
lord
Enves were cIUll, afe and whwas seath This a is, an tale hoice his his onety Meall-tearn not murkawn, fase bettizen'd her,
To belacquesterer? baxewed wupl usweggs yet tall
An

实现过程中可能涉及一些 Rust 的使用方法,与 Python 有所不同,这里不做过多说明,具体的 Rust 语法可以参考其他文档。

阅读全文 »

vLLM的一个主要贡献就是PagedAttention,可以实现更高效的推理。

高效的语言模型服务系统(LLM)需要批量处理多个请求。然而,现有系统存在以下问题:

  • 每个请求的key-value缓存(KV缓存)内存巨大,动态增长和减少。
  • 容易因为碎片化和冗余复制导致内存浪费,限制了批量大小。

为了解决这些问题,提出了PagedAttention,一个基于虚拟内存和分页技术的注意力算法。基于此,开发了vLLM,一个LLM服务系统,实现了以下两个目标:

  1. KV缓存显存的几乎零浪费,减少了显存碎片。
  2. KV缓存在请求之间和请求内共享,进一步减少显存使用。

论文包含了他早期设计。

一次调用的示例如博客中展示的。

阅读全文 »