02|收拾行李,准备上路

你好,我是李锟。

我们即将踏上一段困难但充满惊喜的旅程。这段旅程意义重大,所以在出发之前,我们需要做好准备。以免因为仓促上路,没有携带必要的工具,导致半途而废。

首先我们需要掌握一些 LLM 应用开发的基础知识。对于部署在云端的商业 LLM,我们只需要学会其 API 和客户端库的使用方法即可。对于部署在本地机器上的开源 LLM,我们需要亲自来部署、调优。因此需要掌握的知识会多很多,但是这些努力的回报也会更大。

LLM 应用开发必备基础知识

首先我们需要理解与基础 LLM 相关的几个术语。

  • 训练 training:在训练数据集上构建复杂的模型,以捕捉更多的数据特征和模式,从而提高预测准确性。

  • 评估 evaluation:对模型的性能进行定量和定性的评估,以确定模型的准确性和效率。

  • 微调 fine-tuning:在预训练模型的基础上,使用少量数据进行精细调整,以适应特定任务的需求。

  • 部署 deployment:将训练好的模型部署到生产环境中,以便实时处理用户请求或进行实时分析。

  • 推理 inference:使用已训练好的模型进行预测或分类,以及解释模型输出的过程。

大致理解了上述 5 个术语,我们可以把 LLM 开发划分成两个层次。

  1. 基础 LLM 的研发
  • 包括了训练、评估、微调、部署、推理所有 5 类工作。

  • 成本高昂,需要万块高端显卡,耗时漫长。其中训练的成本最为高昂,只有投资上亿元的大公司才能负担得起。

  1. 基于基础 LLM 的应用开发
  • 不包括训练、评估,仅包括微调(可选)、部署(可选)、推理。

  • 因为不做训练,成本比训练小得多。仅做微调,成本只有训练的约千分之一。

  • 如果微调也不做,成本比微调还要小得多,只有微调的约十分之一。

    • 使用普通消费级显卡即可,例如 Nvidia GeForce 系列的 RTX 3070、RTX 4090 等。

    • 将训练好的模型进一步优化瘦身之后,甚至可以部署在嵌入设备内,例如树莓派、智能手机。

LLM 的诞生,特别是 OpenAI API(RESTful API + 客户端库)所确立的一套 LLM 应用开发的行业事实标准,彻底改变了传统 NLP(Natural Language Processing)应用开发的经济学。

开发传统的 NLP 应用时,开发者需要从底层基础语言模型开始开发,必须非常熟悉 CNN、RNN、Transformer 等各种 AI 算法和架构。同时还需要非常熟悉特定领域的业务需求,然后为该领域量身定制相应的语言模型。这样对开发者的技能要求非常之高,学习曲线非常陡峭。因此传统 NLP 应用的开发周期很长、成本很高。即使 NLP 应用开发完成,在上线之后的很长时间内,仍然需要投入很多人力来做手工标注,以改善 NLP 应用的准确性和性能。

所以在传统 NLP 行业有一句流行的话:“有多少人工,就有多少智能”。这句话确实很搞笑,也很无奈。我把传统 NLP 应用的开发模式称作“气宗模式”(可参阅金庸小说《笑傲江湖》),因为按照华山派气宗的观点,在你没有多年练气获得深厚的内力之前,完全不应该练剑。

与之相对应,今天我们做 LLM 应用的开发,学习掌握大量基础 LLM 研发的知识并非是必要的。OpenAI API 实现了清晰的关注点分离,大幅降低 LLM 应用的开发成本,引爆了 LLM 应用开发的庞大市场。我把 LLM 应用的开发模式称作“剑宗模式”,即使你只专心练剑,同样也可以成为武林高手,而且成效更快。以后如果你能同时练气,当然也会很有帮助。专业的事交给专业的人去做,随着各种基础 LLM 的迅速进步,更适于大规模工业化的剑宗开发模式未来必然会大行其道。

在做 LLM 应用开发时,我们用到的语言模型可以划分为两大类:

  1. Chat 模型
  • 包括 LLM 和一些优化后的小模型,自带聊天(Chat)能力。

  • 开源 Chat 模型举例(Hugging Face Hub 上的名称)

    • meta-llama/Meta-Llama-3.2-8B

    • Qwen/Qwen2.5-7B-Instruct

    • THUDM/glm-4-9b-chat

  1. Embedding 模型
  • 用来实现文本的向量化,即所谓的嵌入,用来实现知识库类应用。

  • 开源 Embedding 模型举例(Hugging Face Hub 上的名称)

    • BAAI/bge-large-zh-v1.5

    • nomic-ai/nomic-embed-text-v1.5

除了这两大类语言模型,还有一类不支持聊天,仅能做文本补全的模型,例如 OpenAI 早期发布的 text-davinci-003。不过单纯的文本补全模型现在用的已经很少了,因为 Chat 模型具有文本补全模型的所有功能。

接下来我们还需要理解一个非常重要的概念——模型的量化。

什么是量化(Quantization)?

量化在 AI 模型中,特别是在深度学习模型中,通常指的是将模型中的参数(例如权重和偏置)从浮点数转换为低位宽度的整数,例如从 32 位的浮点数转换为 8 位整数。

量化的优缺点是什么?

  • 优点:减少存储需求、加速计算、减少能耗。

  • 缺点:会导致模型的精度下降。因为你实际上是在用较低的精度来表示原始的浮点数,可能会损失一些信息,这意味着模型的能力会变差。

量化与语言模型文件的格式:

  • 不同的语言模型文件格式,对应着不同的量化方法。

  • 模型文件名中的 fp32、fp16、int8、int4 字样表示模型的量化精度。fp32为全精度,量化精度从高到低排列顺序是:fp32>fp16>int8>int4,量化的精度越低,模型的大小和推理所需的显存就越小,但模型的能力也会越差。

开源语言模型的发布平台和文件格式

目前开源语言模型主要有以下几个发布平台:

先介绍一下 Hugging Face Hub,这是世界最大的开源 AI 模型发布平台。

Hugging Face Hub 是一个协作平台,其中托管了大量的用于机器学习的开源模型和数据集,可以将其视为 ML 的 GitHub。该平台让你可以轻松地找到、学习开源社区中有用的 ML 资产并与之交互,从而促进共享和协作。该平台已经与 Transformers 库(Hugging Face Transformers)深度集成,使用 Transformers 库部署的模型都是从该平台下载的。

接下来我们了解一下 Ollama。

Ollama 是一个开源的 LLM 服务,提供了类似 OpenAI 的 API 和聊天界面,可以非常方便地部署最新版本的 GPT 模型并通过 API 使用。支持热加载模型文件,无需重新启动即可切换不同的模型。Ollama 由 Meta 推出,系出名门,但不限于支持自家的 Llama 系列开源 LLM。底层代码基于著名的开源项目 llama.cpp,因此可完全跨平台(支持 Linux、macOS、Windows)。

Ollama 包括两个部分:

  • Ollama 网站:类似 Hugging Face Hub,也是一个开源 LLM 的发布平台,规模远小于 Hugging Face Hub,且仅包括语言模型。

  • Ollama 工具:ollama 命令行工具;ollama daemon 服务,提供了与 OpenAI API 兼容的 Ollama API。

ModelScope 比较简单,可以简单理解为中国版的 Hugging Face Hub。

从上述发布平台下载的开源语言模型文件有以下 5 种常见格式:

  1. Safetensors 格式
  • Hugging Face Hub 上最常见的模型格式。

  • Hugging Face 推出的一种可靠、易移植的机器学习模型存储格式,用于安全地存储 Tensor,而且速度很快(零拷贝)。

  1. GPTQ 格式(Generalized Post-Training Quantization)
  • Hugging Face Hub 上常见的模型格式

  • GPTQ 是一种针对 4 位量化的训练后量化(PTQ)方法,主要关注GPU推理和性能。

  • 该方法的思想是通过将所有权重压缩到4位量化中,通过最小化与该权重的均方误差来实现。在推理过程中,它将动态地将权重解量化为 float16,以提高性能,同时保持内存较低。

  1. GGUF 格式(GPT-Generated Unified Format,前身叫 GGML)
  • Ollama 网站上大多数模型的格式。

  • 由开发者Georgi Gerganov提出,是专为大型语言模型设计的二进制文件格式,旨在解决当前 LLM 在实际应用中遇到的存储效率、加载速度、兼容性和扩展性等问题。

  1. AWQ 格式(Activation-aware Weight Quantization)
  • 一种类似于GPTQ的量化方法。AWQ和GPTQ作为方法有几个不同之处,但最重要的是AWQ假设并非所有权重对LLM的性能都同等重要。也就是说在量化过程中会跳过一小部分权重,这有助于减轻量化损失。所以他们的论文提到了与GPTQ相比,AWQ可以有显著加速,同时保持了相似的、有时甚至更好的性能。
  1. AQLM 格式(Additive Quantization of Language Models)
  • 于2024年2月发布,已经集成到了 Hugging Face 中。

  • 现有的仅权重量化算法在技术上可以将模型权重量化到2位范围。然而,它们未能有效地保持模型的准确性。AQLM是一种新的仅权重后训练量化(PTQ)算法,为2比特/每参数范围设定了新的技术水平。与现有方法相比,它还提供了更小的基准改进,适用于3位和4位范围。具体来说,AQLM 优于流行的算法如 GPTQ,以及更近期但较不知名的方法如 SpQR 和 QuIP。

上述这 5 种文件格式不是固定的,随着开源语言模型的迅速发展,未来还会诞生新的文件格式。

了解了必备基础知识,那么在基于开源 LLM 做 LLM 应用开发之前,我们还需要准备一台适合的机器。

准备开发机器和系统

你需要准备一台配置较高的 Linux 主机或虚拟机,可参考以下配置:

  • 内存:32G

  • CPU:酷睿 8 核 i7 以上

  • 显卡:Nvidia GeForce RTX 3070 以上,至少 8G显存

  • 操作系统:Ubuntu Linux 22.04 或 24.04,Server 版或 Desktop 版都可以

如果不额外说明,本课程以后的所有操作均在 Linux 主机上执行。在 Windows 10 以上版本中,可以通过安装 WSL2 + Ubuntu 来使用 Linux,具体安装方法请查阅微软的官方文档。

在满足上述要求的 Linux 主机上,还需要安装好 Nvidia 的 CUDA 开发工具集。

CUDA(Compute Unified Device Architecture)是 Nvidia 推出的运算平台。是一种通用的并行计算架构,该架构使得 GPU 能够解决复杂的计算问题。

对于独立的 Linux 环境:

对于通过 Windows 的 WSL2 使用的 Linux 环境:

接下来我们在 Linux 主机上部署一些开源 LLM。

开源 LLM 的部署工具——Ollama

开源语言模型的部署工具有很多,目前主流的有三个:

  • Hugging Face Hub 命令行工具 huggingface-cli

  • Ollama

  • vLLM

Hugging Face Hub 和 Ollama 前面已经做过介绍了,这里介绍一下 vLLM。

vLLM 是加州大学伯克利分校 LMSYS 组织开源的大语言模型高速推理框架。它利用了全新的注意力算法 “PagedAttention”,提供了易用、快速、便宜的 LLM 服务。项目地址:https://github.com/vllm-project/vllm

vLLM 并没有自己的开源语言模型发布平台,它可以直接使用 Hugging Face Hub 或 Ollama 网站下载的开源语言模型,并且提供量化和加速支持。参考文档:

Hugging Face Hub 上的开源语言模型文件大多数都是 Safetensors 格式,基于 Hugging Face Transformers 库开发,依赖 PyTorch,因此需要配备很好的显卡才能流畅运行。上节课已经提到,我们希望开源 LLM 能够在硬件配置较低的机器上运行,那么 huggingface-cli 就无法满足我们的期望了。

Ollama 是基于 llama.cpp 的,即使没有安装 Nvidia 独立显卡,只要 CPU 足够强大,内存足够多,就能运行开源 LLM。而 vLLM 是基于 CUDA 库的,必须安装 Nvidia 独立显卡,对硬件配置的要求高于 Ollama。因此我们会优先选择使用 Ollama 来部署开源 LLM。从简化教学的角度,vLLM 我们就不做展开了,感兴趣的学员们可以自行学习。

Ollama 的基本用法如下。

  • 下载安装 Ollama:

  • Ollama 命令行工具的使用方法

    • ollama pull qwen2.5:7b  下载通义千问 Qwen2.5-7B

    • ollama run qwen2.5:7b  测试通义千问 Qwen2.5-7B

    • ollama rm qwen2.5:7b 删除通义千问 Qwen2.5-7B

    • ollama pull znbang/bge:large-zh-v1.5-f16 下载开源Embedding模型

    • ollama list 查看已下载的模型列表

在上面的 ollama 命令行工具的使用例子中,下载部署了开源 Chat 模型阿里巴巴 qwen2.5、Embedding 模型 bge:large-zh-v1.5-f16。在后续课程中,我们还会使用更多的开源语言模型。

总结时刻

大多数 LLM 应用开发的图书、教程都只介绍了调用云端部署的商业 LLM 的 API。然而调用云端 LLM 的 API 有很多限制,除了会产生一些费用外,访问的频率、响应速度也有很多限制。

本课程中的实战环节将会以本地部署的开源 LLM 为主来开展教学,以避免上述问题。同时开源 LLM 也给了开发者极大的自由度,可以自由尝试各种奇思妙想。

既然决定基于开源 LLM 开展教学,我们就需要先学习掌握一些与开源 LLM 相关的基础知识和工具,以便顺利部署、使用开源 LLM,甚至以后对 LLM 做性能调优。我们优先选择的开源 LLM 部署工具是 Ollama,使用的开源 LLM 文件是来自 Ollama 网站的 GGUF 格式的文件。

在选择了 Ollama 之后,我们优先选择的开源 LLM 是由阿里巴巴开发的 qwen-2.5,也是目前最为强大的国产开源 LLM。当然,优秀的开源 LLM 还有不少,后续我们会根据教学需要,引入其他开源 LLM。本课程中的代码,稍作修改,同样可以使用云端商业 LLM,例如 OpenAI 的 GPT-4o 或者阿里巴巴的通义千问。

下节课我们将进入实战环节,开始学习第一个 Autonomous Agent 开发框架——MetaGPT 的基础知识。

思考题

  1. 开发 LLM 应用有哪些自己的关注点,与做基础 LLM 研发的关注点有何区别?为何我们必须做关注点分离?

  2. 开源语言模型有哪些文件格式?它们各自有何特点?

期待你的分享。如果今天的内容对你有所帮助,也期待你转发给你的同事或者朋友,大家一起学习,共同进步。我们下节课再见!

精选留言

  • 逗逼章鱼

    2025-01-06 18:47:01

    这个 MacBook Pro (M1Pro)可以胜任开发机嘛?
    作者回复

    请看前面的一条回复。macOS 内存至少 16G 以上,应该是可以的。我开发例子代码时,也是故意找配置较低的机器,最低测试过的显卡是 Nvidia RTX 2070。

    2025-01-08 11:28:19

  • zhihai.tu

    2025-01-07 08:51:57

    请问老师, MacBookPro,芯片 M4Pro(12+16核) 24G ,这个可以胜任本课程的实验环境吗?
    作者回复

    我选择使用 ollama 来部署开源 LLM,而 ollama 是跨平台的,可以在 macOS 机器上运行。这个配置我判断肯定可以胜任运行课程里的例子。

    2025-01-08 11:26:03

  • 最后的替补

    2025-01-07 00:03:33

    老师,我不会动手部署这些开源的软件到我的电脑上,我也不是程序员,我的电脑也没有那么高的配置,我是一名内部审计人员,我的诉求就是能用这些平台或者工具解决一些应用问题,不部署这些开源平台到我的电脑上可以么?
    作者回复

    前提还是你会写一些 Python 代码。如果不考虑在自己的机器上部署开源 LLM,那么我推荐你去注册一下阿里云的灵积服务: https://dashscope.aliyun.com/
    然后通过灵积服务来使用通义千问的 LLM。灵积服务提供了与 OpenAI API 兼容的在线 API,可以使用 OpenAI SDK 来访问。

    2025-01-08 11:23:31

  • 种花家

    2025-01-06 12:10:09

    开发基于大型语言模型(LLM)的应用和从事基础 LLM 研发的关注点存在显著差异,如下:

    ### 开发 LLM 应用的关注点
    - **应用需求与场景适配**:需要深入理解目标应用的具体需求和使用场景,如聊天机器人、文本生成、内容推荐等,确保 LLM 的功能与应用目标高度契合,满足用户的实际需求.
    - **模型性能优化**:在应用层面,更关注模型的推理速度、响应时间和资源消耗等性能指标,以提升用户体验,例如通过模型压缩、加速推理等技术手段来优化模型性能.
    - **数据安全与隐私**:开发应用时,必须严格遵循数据安全和隐私保护的相关法规和标准,确保用户数据的安全性和隐私性,防止数据泄露和滥用.
    - **用户界面与交互设计**:良好的用户界面和交互设计对于应用的成功至关重要,需要精心设计应用的界面布局、操作流程和交互方式,使用户能够方便、直观地使用应用.
    - **应用集成与兼容性**:在将 LLM 集成到应用中时,需要考虑与其他系统、平台和工具的兼容性,确保无缝集成和稳定运行,例如与企业内部系统、第三方服务等的集成.
    - **应用测试与质量保证**:需要进行全面的应用测试,包括功能测试、性能测试、安全测试等,确保应用的质量和稳定性,及时发现并修复问题.

    ### 基础 LLM 研发的关注点
    - **模型架构创新**:在基础研发中,重点关注模型架构的设计和创新,探索新的模型结构、注意力机制等,以提升模型的性能和能力.
    - **算法优化与理论研究**:深入研究和优化算法,包括训练算法、优化算法等,同时开展相关的理论研究,以提高模型的训练效率和效果.
    - **数据集构建与标注**:构建高质量、大规模的数据集是基础研发的重要环节,需要进行数据的收集、清洗、标注等工作,确保数据的多样性和准确性,为模型训练提供坚实的基础.
    - **模型泛化能力提升**:研究和提升模型的泛化能力,使其在不同领域、不同任务中都能表现出良好的性能,减少对特定数据集的依赖.
    - **可解释性与透明度**:提高模型的可解释性和透明度,使研究人员和开发者能够更好地理解模型的工作原理和决策过程,以便进行优化和改进.
    - **伦理与社会影响研究**:关注模型的伦理问题和社会影响,研究如何避免模型产生偏见、歧视等问题,确保模型的公平性和伦理性.

    作者回复

    没错,讲的都很到位。LLM 时代和 5 年前传统 NLP 时代的一个主要不同,就是现在有了很清晰的分层。LLM 应用开发者其实并不需要 DIY 所有层次,那样的话开发一个 LLM 应用过于复杂,学习曲线过于陡峭,也不可能出现过去两年里 LLM 应用井喷的现象。

    2025-01-08 11:31:52

  • yangchao

    2025-01-12 16:45:50

    思考题1:开发 LLM 应用有哪些自己的关注点,与做基础 LLM 研发的关注点有何区别?为何我们必须做关注点分离?
    回答:开发LLM应用主要关注点是微调、部署和推理,具体比如用户体验、应用场景适配、数据安全、成本控制等,不包括基础LLM研发中的训练和评估。这样关注点分离,术业有专攻,主要是因为模型训练成本可能会非常巨大,作为LLM应用开发不需要关心底层模型的训练,这也是LLM开发应用能够快速规模化的原因,方便我们LLM应用开发者低成本进行开发;风险隔离和可维护性提升

    思考题2:开源语言模型有哪些文件格式?它们各自有何特点?
    回答:(1)Safetensors:安全可靠、兼容性好,容易上手;(2)GPTQ:高效量化压缩,推理速度优化,广泛的量化位支持,与多数 GPU 硬件兼容;(3)GGUF:高效存储,快速加载,兼容性好,可扩展性强
  • Nim

    2025-02-17 20:45:20

    在Linux服务器上执行
    curl -fsSL https://ollama.com/install.sh | sudo sh
    进度百分比非常慢
    请问这个该怎么解决?
    作者回复

    这个跟 Linux 主机访问 ollama.com 的路由有关。如果设置国外的代理服务器,可能会快一些。

    2025-02-18 21:06:54

  • 蓝天

    2025-02-11 09:18:22

    2070 RTX 也是8GB,能胜任吗?
    作者回复

    台式机版的 RTX 2070 是我测试过的最低配置,学习这套课程是可以胜任的。

    2025-02-11 11:15:29

  • 恩惠吴疆

    2025-01-10 13:22:54

    应该告诉我们具体买一台什么样G服务器,节省学生摸索的时间,或者关于百炼灵积服务通义千问LLM的选择的大致情况
    作者回复

    只要配置达到或者高于课程中的硬件配置就可以了,略低一些也是可以的。课程中使用的是阿里巴巴开源的 qwen2.5,不是云端的通义千问。

    2025-01-21 21:14:50

  • C.

    2025-01-09 13:39:16

    我 GTX1650 4G NVIDIA-SMI 566.36 Driver Version: 566.36 CUDA Version: 12.7 32G内存 跑7b是没问题的,不知道后续的课程还行不行。
    作者回复

    这个配置确实比较低,跑 qwen2.5:7b 估计会有些卡。我测试过的最低配置的显卡是 RTX 2070。你看看对比:https://www.topcpu.net/en/gpu-c/geforce-gtx-1650-vs-geforce-rtx-2070

    2025-01-21 21:19:14

  • yangchao

    2025-01-09 11:02:11

    T3660 I7-12700 32G 256G+2T
    RTX3060 12G 500W电源 10000元 含税,老师这款是否也可以配合教程使用
    作者回复

    我看这个配置是足够了。虽然比我写的 RTX 3070 低一些,跑 qwen2.5:7b 应该问题不大。

    2025-01-21 21:22:01

  • 元气🍣 🇨🇳

    2025-01-08 22:26:49

    看来要买云服务器
    作者回复

    权衡一下性价比。如果只是短期学习用途,配置较高 GPU 的云端主机估计性价比更高。

    2025-01-21 21:23:17

  • 李二木

    2025-01-08 09:42:36

    Nvidia GeForce RTX 2060 可以不
    作者回复

    这个取决于课程中使用的开源 LLM 的要求。我首选的开源 LLM 是阿里巴巴的 qwen2.5,通过 ollama 来部署,默认版本是 qwen2.5-7b。我测试过的最低配置的显卡是台式机上的 Nvidia RTX 2070。2060 显卡的配置更低一些,不过跑课程里的例子估计也问题不大,可能会有点卡。课程里推荐的配置是 Nvidia RTX 3070 及以上的显卡,跑起来会比较流畅。

    2025-01-08 11:08:29

  • alue

    2025-01-06 22:44:12

    很想知道 员工 AI 助理 解决的是什么具体问题?
    作者回复

    核心功能是一个给企业员工使用的行事历应用。这个行事历应用可以关联到很多外部的工具,体现出高度的自动化和智能,其功能并不是普通的 ChatBot 能够胜任的。

    2025-01-08 11:19:59