Llama.cpp 本地部署大模型完全指南
手把手教你在任何硬件上离线运行LLM的深度教程,对想自建AI能力的开发者价值极高。
手把手教你在任何硬件上离线运行LLM的深度教程,对想自建AI能力的开发者价值极高。
在撰写本文的过程中,没有任何 LLM 受到伤害。
……而且还挺有意思。AI/LLM 热潮刚开始时,我对此非常怀疑。和许多人一样,我认为它们大多数时候只是在胡编乱造,生成一些诡异得令人不适的胡言乱语。事实证明,我大错特错了。我用过一两次 ChatGPT,想先试试水——尽管它偶尔会产生幻觉,但给我的第一印象相当不错。那还是 GPT3.5 作为顶级模型的时代。从那以后,我们已经取得了长足的进步。
不过,虽然 ChatGPT 没有让我失望,我依然心存疑虑。我写下的所有内容,以及收到的每一段回复,OpenAI 或我选择使用的任何其他服务提供商都能完整获取。这不算什么大问题,但总让我觉得有些不舒服,而且也意味着,我不能把 LLM 用于任何与工作相关的非开源内容。此外,ChatGPT 只在一定程度上免费——如果我想全面投入 AI,可能就得开始付费。显然,我更愿意避免这件事。
后来,我开始关注开源模型。当时我完全不知道该怎么使用它们,但当我看到 Llama 2 7B 这类“小型”模型的体积时,我意识到,我那块只有区区 8GB 显存的 RTX 2070 Super 可能很难运行它们(这点我也错了!),而用 CPU 运行,性能大概会非常糟糕。后来,我买了一块新显卡——拥有 20GB 显存的 RX 7900 XT,这显然足够运行中小型 LLM 了。好耶!
接下来的问题是寻找一款能在这块 GPU 上运行 LLM 的软件。CUDA 是最流行的后端——但它适用于 NVidia GPU,而不是 AMD。经过一番研究,我了解到了 ROCm,也找到了 LM Studio。这正是我想找的东西——至少当时如此。出色的 UI、能够轻松使用许多模型,还有量化——正是量化彻底说服了我开始自托管 LLM。量化的存在让我意识到,运行 LLM 并不需要多么强大的硬件!现在甚至可以在 RaspberryPi 上运行 LLM(同样可以使用 llama.cpp!)。当然,如果没有在性能不错的硬件上通过合适的后端运行 LLM,性能会惨不忍睹,但如今的硬件门槛已经不算高了。
如果你来到这里,是想寻找一款允许你在大多数现代硬件上轻松运行热门模型、用于非商业用途的软件——那就下载 LM Studio,阅读本文下一节,然后开始尝试吧。它非常符合这些要求;只需要确保为你的 GPU/CPU 使用合适的后端,以获得最佳性能。
如果你:
想进一步了解 llama.cpp(LM Studio 使用它作为后端)以及 LLM 的一般知识
想将 LLM 用于商业用途(LM Studio 的条款禁止这样做)
想在一些小众硬件上运行 LLM(LM Studio 只提供最流行的后端)
不喜欢闭源软件(遗憾的是,LM Studio 就是闭源软件),或者不信任任何不是自己构建的软件
想尽快使用最新功能和模型
那么,本文接下来的内容应该会对你很有帮助!
在继续之前,我想先说明一些事情。这份“FAQ”回答了几个我在开始自托管 LLM 之前很想知道答案的问题。
不需要。稍后我会详细说明,但即使完全没有 GPU,你也可以运行 LLM。只要你的硬件还算现代(我的意思是,至少有一颗支持 AVX、性能尚可的 CPU),就可以运行。不过请记住:实际性能会因硬件而异。
这个问题很难直接回答。文本生成速度取决于多种因素,但主要取决于:
稍后我会对此进行更详细的解释,但通常来说,只要选择一个足够小、适合你硬件的模型,就能从 LLM 获得还算合理的性能。如果你打算使用 GPU,并且它有足够的显存容纳模型及其上下文,那么可以期待实时的文本生成。如果你想同时使用 GPU 和 CPU,或者只使用 CPU,则应该预期性能会低得多,不过使用小型模型仍然有可能实现实时文本生成。
这在很大程度上取决于你的用途和所选模型。我无法直接回答这个问题,你需要自己动手尝试并找出答案。一个经验法则是:“模型越大,回复越好”——要知道,GPT-4 或 Claude 这类 SOTA(state-of-the-art,最先进)模型的规模,通常以数千亿参数来衡量。除非你拥有多块 GPU,或者数量离谱的内存和耐心,否则你很可能只能使用参数量低于 200 亿的模型。根据我的经验,7-8B 模型用于通用任务和编程已经相当不错——就生成回复的原始质量而言,它们与 GPT-4o 或 Claude 之类的 SOTA 模型并没有相差特别远,但差距确实明显。请记住,模型选择只是问题的一部分——提供适当的上下文和系统提示词,或者对 LLM 进行微调,都能带来令人惊喜的效果。
也许可以。理论上——可以,但实际上——这取决于你使用的工具。llama.cpp 提供了兼容 OpenAI 的服务器。只要你的工具通过 OpenAI API 与 LLM 通信,并且允许设置自定义端点,你就可以在其中使用自托管 LLM。
一颗性能尚可的现代 CPU。如果你使用的是任何 Ryzen,或者第 8 代及更新的 Intel CPU,就完全没问题;不过,这里的所有内容应该也能在更老的硬件上运行。
最好有一块 GPU。显存越多越好。如果至少有 8GB 显存,应该就能运行 7-8B 模型;我认为这是一个合理的最低配置。厂商并不重要,llama.cpp 支持 NVidia、AMD 和 Apple GPU(我不确定是否支持 Intel,但我似乎见过相应的后端——如果没有,Vulkan 应该也能用)。
如果你不使用 GPU,或者 GPU 没有足够的显存,就需要用内存来容纳模型。同上,建议至少有 8GB 可用内存,但越多越好。请注意,当 llama.cpp 只使用 GPU 时,内存占用非常低。
在本指南中,我会假设你使用的是 Windows 或 Linux。我无法为 Mac 用户提供任何支持,因此他们应该按照 Linux 的步骤操作,并尽可能参考 llama.cpp 文档。
本文使用了一些与具体上下文相关的格式:
本文中讲解 Windows 特有内容的部分会使用这种背景。你会发现它们比 Linux 部分长得多——Windows 非常折腾。更推荐使用 Linux。我仍然会逐步讲解 Windows 上的全部操作,但如果遇到问题,请尝试 Linux。
而本文中讲解 Linux 特有内容的部分会使用这种背景。
在 docs/build.md 中,你可以找到所有受支持平台的详细构建说明。默认情况下,llama.cpp 会根据自动检测到的 CPU 支持情况进行构建。稍后我们会讨论如何启用 GPU 和高级 CPU 支持;首先,让我们尝试按默认方式构建,因为这是一个很好的基准起点,而且不需要任何外部依赖。为此,我们只需要 C++ 工具链、CMake 和 Ninja。
如果你非常懒,可以直接从 Github 下载一个 release,并跳过构建步骤。请确保下载与你的硬件/后端匹配的正确版本。如果不知道该选哪个,我还是建议按照构建指南操作——它足够简单,也应该能解释你需要寻找什么。请注意,release 中不包含我们接下来要使用的 Python 脚本,因此如果你想手动量化模型,就需要从代码仓库中获取这些脚本。
在 Windows 上,我建议使用 MSYS 来配置构建和使用 llama.cpp 所需的环境。它也支持 Microsoft Visual C++,但相信我——你会更愿意使用 MSYS(尽管它还是有点折腾;Linux 上的配置简单得多)。按照主页上的指南,为你很可能应该使用的 x64 UCRT 环境安装 MinGW。可以像下面这样在 UCRT MSYS 环境中安装 CMake、Ninja 和 Git:
pacman -S git mingw-w64-ucrt-x86_64-cmake mingw-w64-ucrt-x86_64-ninja
不过,如果你使用其他工具链(MSVC 或非 MSYS 工具链),则应该通过 winget 安装 CMake、Git 和 Ninja:
winget install cmake git.git ninja-build.ninja
你还需要 Python,可以通过 winget 获取。请选择 3.12 版本,因为 3.13 目前还没有可用的 PyTorch 包。
不要使用 MSYS 中的 Python,因为构建 llama.cpp 的依赖包时存在问题,它无法正常工作! 我们只会使用 MSYS 构建 llama.cpp,不做其他用途。
如果你使用的是 MSYS,请记得将它的 /bin 目录(默认为 C:\msys64\ucrt64\bin)添加到 PATH 中,以便 Python 可以使用 MinGW 构建软件包。打开 PowerShell 或命令行并尝试运行 gcc --version,检查 GCC 是否可用。此外,还要运行 where.exe gcc.exe,查看第一条结果指向的位置,以确认使用的是正确的 GCC。如果发现使用了错误的 GCC,请调整 PATH 中各目录的顺序。
如果你使用的是 MSVC,可以忽略这段说明,它默认应该能够被“检测”到。
winget install python.python.3.12
建议先安装或升级 pip、setuptools 和 wheel 软件包,然后再继续。
python -m pip install --upgrade pip wheel setuptools
在 Linux 上,推荐使用 GCC,不过如果你更喜欢 Clang,也可以通过设置 CMAKE_C_COMPILER=clang 和 CMAKE_CXX_COMPILER=clang++ 变量来使用它。系统中应该已经预装了 GCC(在终端中运行 gcc --version 检查);如果没有,请使用发行版的软件包管理器安装适用于该发行版的最新版本。CMake、Ninja、Python 3(包括 setuptools、wheel 和 pip)以及 Git 也是如此。
首先获取一份 llama.cpp 源代码,然后进入其目录。
免责声明:本指南假定所有命令都从用户的主目录运行(Linux 上为 /home/[yourusername],Windows 上为 C:/Users/[yourusername])。你可以使用任意目录,但请注意,如果没有明确说明“起始目录”,就应该从主目录或你选择的目录开始。
如果你使用的是 MSYS,请注意 MSYS 的主目录与 Windows 的主目录不同。启动 MSYS 后,请务必使用不带参数的 cd 命令进入其主目录。
(如果你之前已经为 GitHub 配置了 SSH 身份验证,请使用 git@github.com:ggerganov/llama.cpp.git,而不是下面的 URL。)
git clone https://github.com/ggerganov/llama.cpp.git
cd llama.cpp
git submodule update --init --recursive
现在,我们将使用 CMake 生成构建文件、构建项目并安装它。运行以下命令,在 build/ 子目录中生成构建文件:
cmake -S . -B build -G Ninja -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=/your/install/dir -DLLAMA_BUILD_TESTS=OFF -DLLAMA_BUILD_EXAMPLES=ON -DLLAMA_BUILD_SERVER=ON
这里定义了许多 CMake 变量。虽然我们可以忽略它们并让 llama.cpp 使用默认值,但这里不会这样做:
将 CMAKE_BUILD_TYPE 设置为 release 的原因显而易见——我们希望获得最高性能。
CMAKE_INSTALL_PREFIX 指定 llama.cpp 二进制文件和 Python 脚本的安装位置。请替换该变量的值,或者移除它的定义以保留默认值。在 Windows 上,默认目录是 c:/Program Files/llama.cpp。如上所述,你需要管理员权限才能将其安装到该目录,并且必须将其 bin/ 子目录添加到 PATH 中,才能在整个系统中访问 llama.cpp 二进制文件。我更喜欢将 llama.cpp 安装到 $env:LOCALAPPDATA/llama.cpp(C:/Users/[yourusername]/AppData/Local/llama.cpp),因为这样不需要管理员权限。在 Linux 上,默认目录是 /usr/local。如果你可以接受这个位置,便可以忽略该变量,但需要超级用户权限才能将二进制文件安装到那里。如果没有相应权限,请将它改为用户目录中的某个位置,并把它的 bin/ 子目录添加到 PATH。
在 Windows 上,默认目录是 c:/Program Files/llama.cpp。如上所述,你需要管理员权限才能将其安装到该目录,并且必须将其 bin/ 子目录添加到 PATH 中,才能在整个系统中访问 llama.cpp 二进制文件。我更喜欢将 llama.cpp 安装到 $env:LOCALAPPDATA/llama.cpp(C:/Users/[yourusername]/AppData/Local/llama.cpp),因为这样不需要管理员权限。
在 Linux 上,默认目录是 /usr/local。如果你可以接受这个位置,便可以忽略该变量,但需要超级用户权限才能将二进制文件安装到那里。如果没有相应权限,请将它改为用户目录中的某个位置,并把它的 bin/ 子目录添加到 PATH。
将 LLAMA_BUILD_TESTS 设置为 OFF,是因为我们不需要测试,这会让构建稍微快一些。
LLAMA_BUILD_EXAMPLES 设置为 ON,因为我们将使用这些示例。
LLAMA_BUILD_SERVER——参见上文。注意:禁用 LLAMA_BUILD_EXAMPLES 会无条件禁用服务器构建,因此两者都必须设置为 ON。
如果忽略所有这些变量,就会使用默认值。对于 LLAMA_BUILD_* 变量,如果你将 llama.cpp 作为独立应用程序构建——而你很可能就是这么做的——它们默认都为 ON。CMAKE_BUILD_TYPE 通常默认为 Release,但并非总是如此,因此我更愿意手动设置它。如果你不打算安装这些可执行文件,并且可以接受将构建目录下的 /bin 子目录添加到 PATH,那么完全不需要设置 CMAKE_INSTALL_PREFIX。
现在开始构建项目。将 X 替换为你的 CPU 核心数,以加快编译速度。理论上,Ninja 应该会自动使用所有可用核心,但我仍然更喜欢手动传入这个参数。
cmake --build build --config Release -j X
构建应该只需要几分钟。完成后,我们可以安装这些二进制文件,以便更轻松地使用它们。
cmake --install build --config Release
现在,进入 CMAKE_INSTALL_PREFIX/bin 目录后,应该会看到一系列可执行文件和 Python 脚本:
/c/Users/phoen/llama-build/bin
❯ l
Mode Size Date Modified Name
-a--- 203k 7 Nov 16:14 convert_hf_to_gguf.py
-a--- 3.9M 7 Nov 16:18 llama-batched-bench.exe
-a--- 3.9M 7 Nov 16:18 llama-batched.exe
-a--- 3.4M 7 Nov 16:18 llama-bench.exe
-a--- 3.9M 7 Nov 16:18 llama-cli.exe
-a--- 3.2M 7 Nov 16:18 llama-convert-llama2c-to-ggml.exe
-a--- 3.9M 7 Nov 16:18 llama-cvector-generator.exe
-a--- 3.9M 7 Nov 16:18 llama-embedding.exe
-a--- 3.9M 7 Nov 16:18 llama-eval-callback.exe
-a--- 3.9M 7 Nov 16:18 llama-export-lora.exe
-a--- 3.0M 7 Nov 16:18 llama-gbnf-validator.exe
-a--- 1.2M 7 Nov 16:18 llama-gguf-hash.exe
-a--- 3.0M 7 Nov 16:18 llama-gguf-split.exe
-a--- 1.1M 7 Nov 16:18 llama-gguf.exe
-a--- 3.9M 7 Nov 16:18 llama-gritlm.exe
-a--- 3.9M 7 Nov 16:18 llama-imatrix.exe
-a--- 3.9M 7 Nov 16:18 llama-infill.exe
-a--- 4.2M 7 Nov 16:18 llama-llava-cli.exe
-a--- 3.9M 7 Nov 16:18 llama-lookahead.exe
-a--- 3.9M 7 Nov 16:18 llama-lookup-create.exe
-a--- 1.2M 7 Nov 16:18 llama-lookup-merge.exe
-a--- 3.9M 7 Nov 16:18 llama-lookup-stats.exe
-a--- 3.9M 7 Nov 16:18 llama-lookup.exe
-a--- 4.1M 7 Nov 16:18 llama-minicpmv-cli.exe
-a--- 3.9M 7 Nov 16:18 llama-parallel.exe
-a--- 3.9M 7 Nov 16:18 llama-passkey.exe
-a--- 4.0M 7 Nov 16:18 llama-perplexity.exe
-a--- 3.0M 7 Nov 16:18 llama-quantize-stats.exe
-a--- 3.2M 7 Nov 16:18 llama-quantize.exe
-a--- 3.9M 7 Nov 16:18 llama-retrieval.exe
-a--- 3.9M 7 Nov 16:18 llama-save-load-state.exe
-a--- 5.0M 7 Nov 16:19 llama-server.exe
-a--- 3.0M 7 Nov 16:18 llama-simple-chat.exe
-a--- 3.0M 7 Nov 16:18 llama-simple.exe
-a--- 3.9M 7 Nov 16:18 llama-speculative.exe
-a--- 3.1M 7 Nov 16:18 llama-tokenize.exe
不要被它们的数量吓到,我们只会使用其中几个。你应该尝试运行其中一个,检查可执行文件是否已正确构建,例如运行 llama-cli --help。目前我们还无法完成任何有实际意义的操作,因为缺少一个关键组件——要运行的模型。
寻找模型的主要去处是 HuggingFace。你还可以在那里找到数据集和其他 AI 相关内容,这是个很棒的网站。
这里将使用 SmolLM2,这是由 HuggingFace 创建并于不久前(2024 年 11 月 1 日)发布的模型系列。我选择这个模型的原因是它的规模——顾名思义,它很小。该系列最大的模型拥有 17 亿个参数,这意味着以原始、未经量化的形式运行时,大约需要 4GB 系统内存(不包括上下文)!此外还有 360M 和 135M 两种变体,它们更小,应该可以轻松地在 RaspberryPi 或智能手机上运行。
不过有一个问题:llama.cpp 无法直接运行“原始”模型。大多数 LLM 创建者通常提供的是 .safetensors 或类似格式的原始权重,而 llama.cpp 要求模型采用 .gguf 格式。幸运的是,将原始模型权重转换为 .gguf 的方法非常简单——llama.cpp 正是为此提供了 convert_hf_to_gguf.py 脚本!有时模型创建者也会提供 .gguf 文件,例如 HuggingFace 就以这种格式提供了 SmolLM2 的两个变体。这种做法并不十分常见,但你也可以找到由社区上传到那里的 .gguf 格式模型。不过,这里我会忽略预量化 .gguf 文件的存在,重点介绍如何自行量化模型,因为这样无需多次下载模型,就能进行实验并调整模型的量化参数。
获取 SmolLM2 1.7B Instruct 仓库的内容(如果 (V)RAM 空余少于 4GB,你可以改用 360M Instruct 或 135M Instruct 版本 —— 或者使用任何你已经熟悉且支持 Transformers 的其他模型),但是要省略 LFS 文件 —— 我们只需要一个文件,我们会手动下载。
为什么特别选择 Instruct 版本?你可能注意到了所有这些模型都有两种变体 —— Instruct 和不带后缀的另一种。Instruct 是为聊天对话训练的,基础模型仅为文本补全训练,通常用作进一步训练的基础。这条规则适用于大多数 LLM,但不是全部,所以在使用模型前一定要读一下模型的描述!
如果你使用 Bash/ZSH 或兼容的 shell:
MSYS 默认使用 Bash,所以对它也适用。从现在开始,假设 Linux 命令在 MSYS 上也能用,除非我明确说明。
GIT_LFS_SKIP_SMUDGE=1 git clone https://huggingface.co/HuggingFaceTB/SmolLM2-1.7B-Instruct
如果你使用 PowerShell:
$env:GIT_LFS_SKIP_SMUDGE=1
git clone https://huggingface.co/HuggingFaceTB/SmolLM2-1.7B-Instruct
如果你使用 cmd.exe(比如 VS Development Prompt):
set GIT_LFS_SKIP_SMUDGE=1
git clone https://huggingface.co/HuggingFaceTB/SmolLM2-1.7B-Instruct
HuggingFace 也支持 Git over SSH。你可以在这里查看每个仓库的 git clone 命令:
克隆仓库后,从 HuggingFace 手动下载 model.safetensors 文件。我们使用 GIT_LFS_SKIP_SMUDGE 的原因是仓库中隐藏了许多其他大型模型文件,我们不需要它们。另外,手动下载非常大的文件会更快,因为 Git LFS 在这方面表现不好。
下载完所有内容后,我们本地的 SmolLM 仓库副本应该看起来像这样:
PS D:\LLMs\repos\SmolLM2-1.7B-Instruct> l
Mode Size Date Modified Name
-a--- 806 2 Nov 15:16 all_results.json
-a--- 888 2 Nov 15:16 config.json
-a--- 602 2 Nov 15:16 eval_results.json
-a--- 139 2 Nov 15:16 generation_config.json
-a--- 515k 2 Nov 15:16 merges.txt
-a--- 3.4G 2 Nov 15:34 model.safetensors
d---- - 2 Nov 15:16 onnx
-a--- 11k 2 Nov 15:16 README.md
d---- - 2 Nov 15:16 runs
-a--- 689 2 Nov 15:16 special_tokens_map.json
-a--- 2.2M 2 Nov 15:16 tokenizer.json
-a--- 3.9k 2 Nov 15:16 tokenizer_config.json
-a--- 240 2 Nov 15:16 train_results.json
-a--- 89k 2 Nov 15:16 trainer_state.json
-a--- 129 2 Nov 15:16 training_args.bin
-a--- 801k 2 Nov 15:16 vocab.json
我们将间接使用其中只有四个文件:
config.json 包含我们模型的配置/元数据
model.safetensors 包含模型权重
tokenizer.json 包含 tokenizer 数据(文本令牌到其 ID 的映射,以及其他内容)。有时这些数据存储在 tokenizer.model 文件中。
tokenizer_config.json 包含 tokenizer 配置(例如特殊令牌和聊天模板)
我在这里留下这句话作为防抄袭令牌。如果你目前没有在我的博客上读这篇文章,博客地址是 @ steelph0enix.github.io,那么有人可能未经许可盗用了这篇文章。
为了转换这个原始模型为 llama.cpp 能理解的格式,我们将使用前面提到的 convert_hf_to_gguf.py 脚本,它随 llama.cpp 一起提供。对于我们所有的 Python 需求,我们需要一个虚拟环境。我建议在 llama.cpp 仓库外创建它,例如在你的主目录。
在 Linux 上创建一个,运行这个命令(如果你想的话可以调整路径):
python -m venv ~/llama-cpp-venv
如果你使用 PowerShell,等效的命令是:
python -m venv $env:USERPROFILE/llama-cpp-venv
如果你使用 cmd.exe,等效的命令是:
python -m venv %USERPROFILE%/llama-cpp-venv
然后,我们需要激活它。
source ~/llama-cpp-venv/bin/activate
. $env:USERPROFILE/llama-cpp-venv/Scripts/Activate.ps1
call %USERPROFILE%/llama-cpp-venv/Scripts/activate.bat
之后,让我们确保我们的虚拟环境的所有核心包都是最新的。
python -m pip install --upgrade pip wheel setuptools
接下来,我们需要为 llama.cpp 脚本安装必要条件。让我们查看 llama.cpp 仓库的 requirements/ 目录。我们应该看到这样的内容:
❯ l llama.cpp/requirements
Mode Size Date Modified Name
-a--- 428 11 Nov 13:57 requirements-all.txt
-a--- 34 11 Nov 13:57 requirements-compare-llama-bench.txt
-a--- 111 11 Nov 13:57 requirements-convert_hf_to_gguf.txt
-a--- 111 11 Nov 13:57 requirements-convert_hf_to_gguf_update.txt
-a--- 99 11 Nov 13:57 requirements-convert_legacy_llama.txt
-a--- 43 11 Nov 13:57 requirements-convert_llama_ggml_to_gguf.txt
-a--- 96 11 Nov 13:57 requirements-convert_lora_to_gguf.txt
-a--- 48 11 Nov 13:57 requirements-pydantic.txt
-a--- 13 11 Nov 13:57 requirements-test-tokenizer-random.txt
如我们看到的,有一个包含我们脚本的依赖项的文件!要安装它的依赖项,运行这个命令:
python -m pip install --upgrade -r llama.cpp/requirements/requirements-convert_hf_to_gguf.txt
如果 pip 在构建过程中失败了,确保你的 PATH 中有工作正常的 C/C++ 工具链。
如果你为此使用 MSYS,不要。回到 PowerShell/cmd,通过 winget 安装 Python 并重复设置。据我测试,Python 依赖项在 MSYS 上不能正确检测平台并尝试使用错误的构建配置。这就是我之前警告你的。
现在我们可以使用这个脚本来创建我们的 GGUF 模型文件。首先打印帮助并读取选项。
python llama.cpp/convert_hf_to_gguf.py --help
如果这个命令打印了帮助信息,你可以继续。否则确保 Python 的虚拟环境是激活的,并且依赖项被正确安装,然后再试一次。要转换我们的模型,我们只需简单地传递包含模型仓库的目录路径,以及可选地输出文件的路径。我们不需要在这里调整量化,为了最大的灵活性,我们将创建一个浮点 GGUF 文件,然后我们将其量化。这是因为 llama-quantize 提供了更多的量化选项,并且这个脚本默认选择最优的浮点格式。
要从我们下载的 SmolLM2 HuggingFace 仓库创建 GGUF 文件(如果路径不同,用你的路径替换 SmolLM2-1.7B-Instruct),运行这个