在过去一个月里,作者开始探索快速发展的大型语言模型(Large Language Models,LLM)领域。如今,技术进步已让LLM变得相当易用——现在一个比原版ChatGPT(2022年11月)的模型甚至能运行在树莓派上,而更高性能的AI则可以在普通台式机或笔记本电脑上轻松运行。这不仅更私密,还可以离线使用,无需注册,且使用无限制。技术正在以飞快的速度进步,几个月的时间信息就可能过时。本文总结了作者的实践经验,分享了他在入门时希望自己能掌握的知识。需要注意的是,作者是LLM领域的“外行”,并不具备独到的见解,且很可能误解了某些内容。不过,文章本身仍为探索这项技术的快照,有望在一年后成为历史上的一个小注脚。
LLM即大型语言模型,如果说对其功能不太了解,那只需知道这类神经网络在2022年因训练成对话型“聊天”模式而取得重大突破。用户可以与一个极具创造力的人工智能对话,该技术不仅轻松通过了图灵测试,还能展现惊人的创造性。与之初次互动的感觉往往让人不安,这种不安会持续几天。试想购买一台普通家用电脑时,大多数人绝不会期待它具备对话能力。
这种体验令人回想起上世纪90年代的桌面计算机革命,当时,刚买的新电脑还没带回家就已经有了更新换代的款式。现在的技术也是如此,每周都有新进展,导致对一年以上的旧信息大多可以忽略。作者习惯在r/LocalLLaMa社区跟进最新动态,但每条信息都被极度夸大,因此作者保持着谨慎的怀疑态度。
作者对“厂商锁定”格外警惕,因为之前因服务关闭、变化或不再支持而导致他必须放弃原有的使用模式。因此,他曾一度忽略LLM,仅仅是因为那些“闭源”模型只能以服务形式访问,且容易受到厂商锁定的影响,甚至服务质量会悄然下降。但当得知可以在自己的硬件上运行接近前沿的模型时,这种情况发生了根本改变,这种方式完全避免了厂商锁定的问题。
本文关注如何运行LLM,不涉及微调训练,甚至没有涉及其他“多模态”功能如视觉或语音等。这些功能并不适合作者的个人需求。
运行LLM时需准备软件和模型:
软件
作者主要使用了令人惊叹的llama.cpp
。该软件适合基本的CPU推理,即使用CPU生成token,而非GPU。特别之处在于,它仅需一个C++工具链,避开了常见的Python依赖问题。在Windows上,仅需一个5MB大小的可执行文件llama-server.exe
,无需额外运行时依赖文件。只需两个文件,EXE和GGUF(模型),就能利用内存映射来加载模型,未来25年后甚至还能在新版Windows系统上“开箱即用”。
作者特别推荐CPU推理,但前提是GPU推理无法实现。CPU推理适用于10B以下参数的模型,但相对较慢。而在GPU推理方面,瓶颈在于显存(VRAM)。对于8GB以下VRAM配置,使用CPU推理反而更简单入门。
在llama.cpp
工具集中,作者主要使用llama-server
程序,这是一个HTTP服务器,默认端口为8080,带有聊天UI和API接口,适合在其他用户界面中使用。
模型
Hugging Face是LLM的“GitHub”,存储了大量模型。“小”模型在几个GB左右,而“大”模型则达上百GB,且大多数模型免费下载。就llama.cpp
而言,作者建议下载GGUF格式的模型。Meta的旗舰模型Llama 3.2目前仅支持1B和3B的参数,在实际使用中并不十分有用,而3.1的8B模型会是更佳选择。
不同的模型具备不同的权衡取舍,强项和弱项也有所不同。作者的台式机配备了RTX 3050 Ti显卡和8GB显存,这一限制形塑了他的选择。作者的“每秒token生成数”(t/s)均在此硬件配置上运行。
最喜欢的模型
- Mistral-Nemo-2407 (12B):[Apache 2.0] 这是作者默认的模型,能达到约30t/s的推理速度。它擅长写作和校对,甚至能较好地审查代码。
- Qwen2.5-14B和Qwen2.5-72B:来自阿里云,这些模型在所有规模上表现出色。14B的推理速度可达11 t/s,几乎能与Mistral Nemo媲美。
- Gemma-2-2B:这是一个极佳的翻译模型,几乎已经使Google Translate过时。
其他模型还包括用于程序生成的FIM(Fill-in-the-Middle,填充中间)模型。作者发现代码生成目前仍存在较大局限性,但他推荐了DeepSeek-Coder-V2-Lite(16B)、Qwen2.5-Coder-7B和Granite-8B-Code作为程序生成模型。
用户界面
尽管llama.cpp
提供了内置UI,作者自行构建了一个名为Illume的CLI工具,将标准输入转换为API查询,并流式输出至标准输出,特别适用于Vim。Illume允许用户在标准文本编辑器缓冲区中交替编写用户和助手输入,适合创作对话式故事。
FIM(填充中间)是LLM中一种新兴的训练方式,主要应用于代码生成。FIM训练允许LLM预测中间token,但它仍处于早期阶段,尚未广泛应用。
LLM的应用边界
LLM的实际用途仍然有限,适合特定任务,比如校对、创作短篇小说、生成有趣的互动对话或语言翻译。相比之下,LLM在正确性要求较高的任务中并不理想。代码生成也面临不小的局限,LLM编写代码的能力仍处于本科水平,在软件工程中的实际适用性很低。
总结
尽管LLM的实用性有限,但作者仍对这一技术的未来发展充满期待。这是近年来令他最激动的科技进步之一。