掘金 人工智能 05月21日 13:58
借助DeepSeek之东风扬帆AI海洋(二):无GPU服务器部署DeepSeek
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

本文介绍如何使用llama.cpp在无GPU的消费级硬件上部署DeepSeek大模型。Llama.cpp是一个用C/C++编写的高效推理框架,它摆脱了对Python和CUDA等重型依赖,通过量化技术降低了模型对硬件的需求。即使在只有CPU的服务器上,也能流畅运行大模型。文章详细讲解了llama.cpp的原理、量化技术,以及如何在Ubuntu服务器上配置和部署DeepSeek模型,并将其发布为HTTP服务,方便用户通过API访问。

💡Llama.cpp是一个基于C/C++实现的轻量级大模型推理框架,无需依赖PyTorch、TensorFlow等框架,可直接编译为可执行文件,降低了部署的复杂度。

⚙️通过量化技术,例如将模型权重从FP16降低到4位,可以显著减少模型体积,使得原本需要大量显存才能运行的大模型,可以在消费级硬件甚至CPU上运行。

🖥️在Ubuntu 22.04服务器上,可以通过源码编译或直接使用预编译版本配置llama.cpp,下载适配GGUF格式的DeepSeek模型,并使用命令行工具或HTTP服务的方式启动模型。

🌐 可以通过官方命令`llama-server --model xxx.gguf` 将模型发布成HTTP服务, 也可以使用第三方库, 兼容OpenAI数据格式,通过API访问。

借助DeepSeek之东风扬帆AI海洋(一):快速入门AI必备技术

大模型通常拥有数十亿甚至上百亿的参数,这对运行设备的内存提出了极高的要求——毕竟,只有将模型权重加载到内存中,推理才能顺利进行。而模型加载到内存后,推理的流畅度又与CPU、GPU等计算单元的性能密切相关。要知道,许多大语言模型是在顶级GPU集群上训练的,换到普通个人电脑上,可能五秒才能蹦出一个词,这样的体验显然难以称得上“实用”。

今天,我要介绍一种非常有趣的方式,让你在没有GPU的情况下也能部署DeepSeek模型。这得益于社区大神开发的模型推理框架——llama.cpp。

llama.cpp:让大模型在消费级硬件上运行

llama.cpp的诞生背景可以追溯到2023年,当时Meta开源了Llama系列大语言模型,技术社区随即掀起了一股模型轻量化部署的热潮。保加利亚天才程序员Georgi Gerganov用纯C/C++实现了Llama模型的推理引擎,开创了在消费级硬件上运行大模型的新范式。

与传统的基于Python的AI框架(如PyTorch、TensorFlow)不同,llama.cpp选择了回归底层语言的实现策略。这种设计让它摆脱了Python解释器、CUDA驱动等重型依赖,通过静态编译生成单一可执行文件,在资源受限的环境中展现出独特的优势。项目开源仅三个月,GitHub星标就超过了3万,足以证明其技术路线的成功。

llama.cpp的极简主义设计理念是其最引人注目的特点之一。它完全基于C/C++编写,无需依赖PyTorch、TensorFlow等重型框架,直接编译为可执行文件。这种设计不仅避免了复杂的依赖环境配置,还跳过了不同硬件平台的适配难题,真正实现了“开箱即用”。

在性能优化方面,llama.cpp充分挖掘了硬件的潜力。对于Apple Silicon设备,它利用ARM NEON指令集实现高效的并行计算;而在x86平台上,则通过AVX2指令集加速运算。同时,它还支持F16和F32混合精度计算,既保证了计算效率,又兼顾了模型精度。更值得一提的是,llama.cpp引入了4-bit量化技术,使得模型体积大幅缩减,甚至可以在没有GPU的情况下,仅靠CPU就能流畅地运行大模型。

根据开发者提供的数据,在M1 MacBook Pro上运行Llama-7B模型时,每个token的推理时间仅需60毫秒,相当于每秒处理十多个token。这样的速度对于本地化部署的大模型来说,已经相当可观。得益于纯C/C++实现的高效性,llama.cpp不仅能在MacBook Pro上运行,甚至可以在Android设备上流畅执行。

量化技术:降低硬件门槛的关键

在深度神经网络模型的开发流程中,结构设计完成后,训练阶段的核心任务是通过大量数据调整模型的权重参数。这些权重通常以浮点数的形式存储,常见的精度包括16位(FP16)、32位(FP32)和64位(FP64)。

训练过程通常依赖GPU的强大算力来加速计算,但这也带来了较高的硬件需求。为了降低这些需求,量化技术应运而生。量化的原理可以概括为:通过降低权重参数的精度,减少模型对计算资源和存储空间的要求,从而使其能够在更多设备上运行。

以Llama模型为例,其原始版本采用16位浮点精度(FP16)。一个包含70亿参数的7B模型,完整大小约为14 GB。这意味着用户至少需要14 GB的显存才能加载和使用该模型。而对于更大的13B版本,模型大小更是达到26 GB,这对普通用户来说无疑是巨大的负担。

然而,通过量化技术,例如将权重精度从16位降至4位,7B模型的大小可以压缩至约4 GB,13B模型则压缩至8 GB左右。这种显著的体积缩减使得这些大模型能够在消费级硬件上运行,普通用户也能在个人电脑上体验大模型的强大能力。

llama.cpp的量化实现依赖于作者Georgi Gerganov开发的另一个库——ggml。ggml是一个用C/C++实现的机器学习库,专注于高效处理神经网络中的核心数据结构——张量(tensor)。张量是多维数组的泛化形式,广泛用于TensorFlow、PyTorch等主流深度学习框架中。通过改用C/C++实现,ggml不仅支持更广泛的硬件平台,还显著提升了计算效率。这种高效的设计为llama.cpp的诞生提供了坚实的基础,使其能够在资源受限的环境中实现高性能的模型推理。

量化技术的核心在于权衡精度与效率。通过降低权重参数的精度,模型的计算量和存储需求大幅减少,但同时也可能引入一定的精度损失。因此,量化算法的设计需要在压缩率和模型性能之间找到最佳平衡点。ggml库通过创新的量化策略和高效的张量计算实现,在成功保持较高模型性能的同时,也显著降低了硬件门槛。这种技术突破不仅让大模型得以在普通设备上运行,也为边缘计算和移动端AI应用开辟了新的可能性。

使用 llama.cpp 部署 DeepSeek

要使用llama.cpp部署DeepSeek模型,首先需要准备一台只有CPU的服务器。这里以一台4核16G规格的Ubuntu 22.04服务器为例。硬件准备好后,接下来就是配置llama.cpp工具。

llama.cpp的使用可以通过源码编译,也可以直接使用作者编译好的release版本。作者更新版本的速度非常快,有时几乎一天就更新好几个版本。你可以根据自己的系统选择合适的版本。以llama-b4707-bin-ubuntu-x64.zip为例,下载后将其解压到环境变量目录(如/usr/local/llama),然后在/etc/profile文件中配置环境变量,确保llama.cpp的二进制工具可以在任意地方执行。

如果你的系统没有安装gcc,还需要安装一下,否则可能会报找不到库的错误。最后,配置一下lib库的环境变量:

LD_LIBRARY_PATH=$(pwd):$LD_LIBRARY_PATH

这是因为llama.cpp自带了一堆.so文件,需要能被引用到。

接下来是模型下载。你需要下载适配llama.cpp的GGUF版本,而不是DeepSeek的原版本。以DeepSeek的7B模型为例,有多个量化版本可以选择,通常推荐使用Q6或Q8版本的模型。下载完成后,将模型上传到服务器。

启动模型的命令如下:

llama-cli -m ./DeepSeek-R1-Distill-Qwen-7B-Q6_K_M.gguf -co -cnv -p "你 是 一 个 python编 程 专 家 " -n 512

既然服务器没有显存,那模型就只能占用内存了。看一下,这个模型占了多少内存。使用命令:

ps aux --sort=%mem

发布成 HTTP 服务

llama.cpp是否也能像Ollama或vLLM一样,将模型发布成HTTP服务,让用户通过API访问呢?答案是肯定的。这里推荐两种方法。

第一种方法:使用官方的服务启动

在终端输入下面的命令。

llama-server --model DeepSeek-R1-Distill-Qwen-7B-Q6_K_M.gguf

测试一下效果:

curl http://localhost:8080/v1/completions \    -H "Content-Type: application/json" \    -d '{        "model": "deepseek-r1",        "prompt": "你好",        "max_tokens": 1024,        "temperature": 0    }'

第二种方法:使用第三方库

需要安装一下,命令如下。

apt install ninja-buildpip install uvicorn anyio starlette fastapi sse_starlette starlette_context pydantic_settingspip install llama-cpp-python -i https://mirrors.aliyun.com/pypi/simple/ 

安装好后运行模型:

python3 -m llama_cpp.server --model ./DeepSeek-R1-Distill-Qwen-7B-Q6_K_M.gguf

第三方库的好处在于兼容OpenAI数据格式。你可以用OpenAI方式访问:

curl http://localhost:8000/v1/chat/completions \-H "Content-Type: application/json" \-d '{        "messages": [                {"role": "system", "content": "你是一个python专家"},                {"role": "user", "content": "python的字典数据类型如何定义"}        ]}'

总结

目前GPU资源相对稀缺,像llama.cpp这样的方案在特定场景下具有很高的价值。例如,原本运行一个满血的671B DeepSeek-R1模型需要至少16张A100 GPU,但如果能使用大量内存替代显存,成本将大幅降低。最近清华大学开发的KTransformer推理引擎,用24G的4090显卡部署了满血版DeepSeek-R1,虽然使用的是Q4量化版且占用了300多G内存,但确实将普通人玩AI的门槛又降低了一大截。

llama.cpp的出现,不仅为大模型的本地化部署提供了新的可能性,也为AI技术的普及打开了新的大门。未来,随着技术的不断演进,我们或许能在更多设备上体验到AI的强大能力。

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

llama.cpp DeepSeek 大模型部署 量化技术
相关文章