为了帮助开发者更好地理解机器学习在本地硬件上的推理过程,软件开发者Leonardo Russo发布了llama3pure项目,这是一个包含三个独立推理引擎的工具。
该项目提供了三种不同的实现方案:用于桌面环境的纯C语言实现、用于Node.js的纯JavaScript实现,以及无需WebAssembly的浏览器纯JavaScript版本。
Russo在接受邮件采访时解释道:"所有版本都兼容Llama和Gemma架构。项目的目标是在C语言和JavaScript环境下提供一个无依赖、独立的替代方案,能够读取GGUF文件并处理提示词。"
GGUF是GPT生成统一格式的缩写,是分发机器学习模型的通用格式。
llama3pure并非要替代广泛使用的llama.cpp推理引擎,后者在运行本地模型时响应速度更快。llama3pure主要作为教育工具使用。
Russo表示:"我将llama3pure视为llama.cpp的灵活替代方案,特别是在架构透明度和广泛硬件兼容性方面。虽然llama.cpp是高性能优化的标准,但它涉及复杂的依赖生态系统和构建配置,llama3pure采用了不同的方法。"
Russo认为开发者可以从单个可读文件中的推理引擎中受益,这使得文件解析和Token生成的逻辑变得清晰可见。
"项目的主要目的是提供一个包含在单个纯代码文件中的推理引擎,"他说。"通过移除外部依赖和抽象层,它允许开发者掌握从GGUF解析到最终Token的整个执行流程,无需在文件或库之间跳转。它是为那些需要确切了解硬件正在做什么的人构建的。"
Russo还看到了该工具在运行传统软件或硬件、客户端不支持WebAssembly,以及需要独立工具避免未来依赖冲突等情况下的实用性。
据他介绍,C语言和Node.js引擎已经在高达80亿参数的Llama模型和高达40亿参数的Gemma模型上进行了测试。主要限制因素是承载模型权重所需的物理内存。
在本地硬件上运行机器学习模型所需的内存大约是每10亿参数1GB,这是在模型以8位量化时的情况。精度加倍或减半,所需内存也会相应变化。模型通常以16位量化,因此对于10亿参数的模型,通常需要2GB内存。
根据Russo的说明,GGUF权重的计算有所不同。"GGUF权重直接加载到内存中,这通常意味着内存使用量与整个文件大小相匹配,"他解释道。"你可以通过传递特定参数来减少上下文窗口大小——这是大多数推理引擎支持的功能,包括我设计的三个引擎。虽然减少上下文窗口大小是在本地运行模型时节省内存的常见技巧,但这也意味着AI无法像最初设计时那样记住那么多内容。"
他还表示,llama3pure目前专注于单轮推理,预计稍后会实现聊天历史状态管理。
在日常工作中,Russo使用基于C语言推理引擎驱动的Gemma 3作为个人助手,确保敏感数据的私密和离线处理。
"对于编程助手,我推荐Gemma 3 27B,"他说。"关于延迟问题,虽然本地模型历来较慢,但在现代硬件上运行优化版本现在提供的体验与Claude等云端模型非常接近,而且无需为此类服务付费。"
虽然Russo预期AI辅助的常见通用用例将继续依赖云端托管模型,但他预见开发者和企业会越来越多地关注本地AI。虽然拥有32GB或48GB内存的开发者机器可能缺乏云端托管模型可用的上下文窗口,但它们提供了安全性和隐私保护,而无需依赖服务提供商。
当被问及作为开发者对AI转型的感受时,Russo表示他预计开发者最终会转变为AI监督者。
"由于AI模型即使在错误时也会以高置信度呈现答案,因此必须有人类专家在循环中验证输出,"他说。"技术知识不会过时;相反,它对于审核AI生成的工作将变得越来越重要。虽然职位名称可能会改变,但始终需要高级开发者来维护这些系统,创造比纯人工开发快得多的工作流程。对于初级和中级开发者来说,AI提供了比前几代人更快学习的机会。如果管理得当,AI可以促进行业智力进化的重大飞跃。"
Q&A
Q1:llama3pure是什么?它有什么特点?
A:llama3pure是由软件开发者Leonardo Russo发布的AI推理引擎,包含三种独立实现:纯C语言版本、Node.js JavaScript版本和浏览器JavaScript版本。它的主要特点是无外部依赖、架构透明,主要用作教育工具帮助开发者理解机器学习推理过程。
Q2:使用llama3pure需要多少内存?
A:内存需求取决于模型大小。对于GGUF格式,内存使用量通常与整个文件大小相匹配。C语言和Node.js引擎已在80亿参数的Llama模型和40亿参数的Gemma模型上测试通过,主要限制因素是承载模型权重所需的物理内存。
Q3:llama3pure与llama.cpp有什么区别?
A:llama3pure不是要替代llama.cpp,而是提供不同的方法。llama.cpp专注于高性能优化但涉及复杂依赖,而llama3pure采用单文件纯代码实现,架构更透明,便于理解整个执行流程,特别适合教育用途和需要避免依赖冲突的场景。