经过六年的开发,WebGPU 即将在大多数主要网络浏览器上推出。这是巨大的:Web 应用程序现在可以近乎本机地访问 GPU,并增加了计算着色器的容量。
WebGPT 是转换器模型的普通 JS 和 HTML 实现,旨在作为概念验证和教育资源。 WebGPT 已经过测试,可与高达 500 M 参数的模型一起使用,但通过进一步的测试/优化可能会支持更多参数。
2020 M1 Mac:3ms/token,5M 参数,f32 精度。
2020 M1 Mac:30 毫秒/令牌,117M 参数,f32 精度。
2020 M1 Mac:70ms/token,377M 参数,f32 精度。
2020 M1 Mac:120ms/token,775M 参数,f32 精度。
1.5B 可以工作,但不稳定,由于效率低下,每个令牌大约 1000 毫秒。
运行 WebGPT 非常简单,因为它只是一组 HTML + JS 文件。由于 WebGPU 仍处于发布过程中,您需要使用兼容的浏览器打开。 WebGPU 目前可在 Chrome v113 上使用,但确保功能正常的最直接方法是安装 Chrome Canary 或 Edge Canary。
我包含了两个不同的模型:玩具 GPT-莎士比亚模型(严重缺乏训练哈哈)和 GPT-2 117M。有关如何运行这些模型的更多信息,请参阅 main.js。如果您想导入自定义模型,请查看misc/conversion_scripts。
如果您想尝试 WebGPT,请访问此处的演示网站 KMeans.org。我通常建议克隆存储库并在本地运行,因为远程加载权重要慢得多。
注意:克隆存储库后,您需要使用 Git LFS下载模型文件。
当我开始这个项目时,我不知道 Transformer 是如何工作的,也不知道如何实现它们(或者 GPU 或 matmul 内核或 WebGPU 或与此相关的标记化),因此 Andrej Karpathy 关于神经网络和从头开始构建 GPT 的系列非常宝贵:Andrej 的 Youtube。我还使用了 nanoGPT 存储库中的一些代码:nanoGPT。
我从 LatitudeGames 在 Javascript 中实现 OpenAI 的 GPT-3 分词器:GPT-3-Encoder 进行了复制。