2024 年 11 月 10 日,作者在过去一个月探索了快速发展的大型语言模型(LLM)世界。LLM 可在树莓派上运行且比 2022 年 11 月的原始 ChatGPT 更智能,普通桌面或笔记本支持更智能的 AI,且私人、离线、无限制、免注册。技术进步迅速,信息数月就过时,本文记录实践知识和经验,作者是 LLM 门外汉,可能有误解,一年后可能成为历史注脚。
LLM 是 2022 年训练用于对话“聊天”的神经网络,首次与之一互动令人不安,像 90 年代桌面计算革命,每周有新进展,最好通过[r/LocalLLaMa]跟上,要警惕供应商锁定,后得知可在自己硬件上运行接近最先进的模型,与供应商锁定相反。
运行 LLM 需要软件和模型:
- 软件: exclusively 使用llama.cpp,在 Windows 是 5MB 的
llama-server.exe,无运行时依赖,仅需 C++工具链,可通过内存映射加载,可在未来 Windows 系统中运行,CPU 推理在桌面或笔记本上可处理约 10B 参数模型,GPU 推理的瓶颈是视频内存(VRAM),低于 8GB 不值得,llama.cpp 中有很多工具,重点是llama-server,是带有聊天界面的 HTTP 服务器,默认端口 8080,典型调用$ llama-server --flash-attn --ctx-size 0 --model MODEL.gguf,--flash-attn可降低内存需求,服务器启动后可访问尝试。 - 模型:Hugging Face是“LLM 的 GitHub”,免费托管各种大小模型,除少数例外无需注册即可下载,llama.cpp 使用GGUF,Meta 的模型是合理起点,最新的 Llama 3.2 目前只有 1B 和 3B 模型在 llama.cpp 中可用,Llama 3.1 8B 是更好选择,搜索时要注意区分“instruct”模型(用于聊天)和“base”模型(只能继续文本),在 instruct 模型的“Files”中找不到 GGUF,需添加 GGUF 搜索,如[bartowski/Meta-Llama-3.1-8B-Instruct-GGUF],一般推荐使用
Q4_K_M4 位量化,可减少资源需求。
作者喜欢的模型:
- Mistral-Nemo-2407(12B)[Apache 2.0]:与 Nvidia 合作,最全面的~10B 模型,默认使用,推理速度 30 t/s,擅长写作和校对,代码审查能力接近 70B 模型,训练上下文长度 128K,但有效上下文长度接近 16K。
- Qwen2.5-14B[Apache 2.0]:Alibaba Cloud 模型,各尺寸表现出色,14B 推理速度 11 t/s,能力与 Mistral Nemo 相当,若能在自己硬件上运行 72B 可能是默认模型。
- Gemma-2-2B:Google 模型,擅长快速翻译,可在家庭电脑上运行,资源需求较大,拒绝翻译它认为冒犯的文本,在翻译脚本中可保留 HTML 标记,9B 模型更好但更慢。
- Phi3.5-Mini(4B)[MIT]:Microsoft 模型,擅长文档评估,可加载 40K 令牌文档进行查询。
- SmolLM2-360M[Apache 2.0]:Hugging Face 托管,在小尺寸模型中表现出色,可在老旧设备上运行,有创意、快速、对话能力强。
- Mixtral-8x7B(48B)[Apache 2.0]:Mistral AI 模型,是混合专家(MoE)模型,推理时仅使用 13B 参数,适合至少 32G RAM 的机器进行 CPU 推理,保留更多训练输入类似数据库,但实际使用不如预期。
- Llama-3.1-70B 和 Llama-3.1-Nemotron-70B:作者无法在自己设备上运行,通过第三方主机访问,后者是 Nvidia 微调模型。
还有“coder”模型用于编程,训练用于填充中间(FIM)生成代码,推荐 DeepSeek-Coder-V2-Lite(16B)、Qwen2.5-Coder-7B[Apache 2.0]、Granite-8B-Code[Apache 2.0],评价其他如 CodeLlama 等模型的 FIM 输出不佳。
用户界面:llama.cpp 有内置 UI,作者创建了Illume,可将标准输入转换为 API 查询,在 Vim 中使用,通过指令!控制,可设置 HTTP 和 JSON 参数,支持不同 API,llama.cpp 有/infill端点用于 FIM,Illume 可通过配置访问其他模型的 FIM 训练。
FIM 令牌:通过特殊令牌在训练语料中分隔前缀、后缀和中间来实现 FIM,一些模型使用特定令牌,Illume 接受各种模板,使用 FIM 时最大问题是 LLM 不知道何时停止,推荐的三个 coder 模型表现较好,FIM 仍处于早期阶段,很少有人通过 FIM 生成代码。
LLM 的用途:
- Proofreading(校对):给文档进行语法等检查和建议修改,对本文这样长的文档也适用,在代码审查中效果不明显。
- Writing short fiction(写短篇小说):幻觉是特点,上下文长度是限制因素,可通过提供章节总结扩展,不同体裁效果不同。
- Generative fun(生成乐趣):与历史人物互动等,学习新知识。
- Language translation(语言翻译):通过 Gemma-2-2B 翻译浏览外语子版块,有启发作用。
尽管实用应用列表较短,但作者对这一新技术很兴奋。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。