Ollama 离线运行 DeepSeek 的原理
Ollama 是一款轻量级的本地大模型运行框架,允许用户快速离线运行各种模型。在本文中,我们将分析 Ollama 如何离线运行 DeepSeek 模型,并介绍 Ollama 依赖的主要库,如 llama.cpp,同时对比它们的特点和适用场景。
Ollama 是什么?
Ollama 是一个简单易用的本地 LLM 运行框架,它的主要目标是提供一个高性能但优雅的接口,让开发者可以无障碍地运行模型,无论是在客户端还是服务器上。
开源地址:https://github.com/ollama/ollama
Ollama 的主要特点包括:
支持多种模型,包括 LLaMA、DeepSeek 等应用优选的模型。 简单的 CLI 和 API 接口,可以快速集成到开发环境。 通过数据流加速模型运行,优化性能。 支持完全离线运行,无需依赖云端服务。 模块化设计,便于扩展和集成其他推理引擎。
DeepSeek 模型介绍
DeepSeek 是一系列高性能的自然语言模型,如 DeepSeek-R1,其在各种 NLP 任务中的表现优异。Ollama 很快就支持上了运行 DeepSeek-R1 模型,让开发者可以快速离线使用。
Ollama 如何离线运行 DeepSeek
要离线运行 DeepSeek-R1,可以按照以下步骤:
1. 安装 Ollama
curl -fsSL https://ollama.ai/install.sh | sh
2. 下载 DeepSeek-R1 运行模型
ollama run deepseek:latest
此时,DeepSeek-R1 已经在本地启动,可以通过 CLI 进行交互。
更多介绍可以看公众号的上一篇文章 《离线运行大模型这么简单?手把手本地部署 DeepSeek》
Ollama 依赖的主要库
Ollama 由 Go 语言开发,具备高效的并发处理能力和良好的跨平台支持。
Ollama 的核心是通过一些关键的库来执行模型推理,其中最关键的依赖库可以按类别归类如下:
1. 推理引擎
2. 计算与优化
ggml:用于优化张量计算,提高 CPU 和轻量级 GPU 的推理性能。 CUDA/cuBLAS:在 NVIDIA GPU 上进行高效矩阵运算。 Metal:在 macOS 上加速推理。 gonum:提供数值计算支持。 gorgonia:用于深度学习计算。
3. 模型管理
Go runtime:Ollama 采用 Go 语言开发,利用其高效并发能力进行模型管理。 Blob storage:用于存储和管理模型数据,支持本地缓存以减少重复下载。 gopickle:用于处理 Python 序列化数据。
4. API 和交互
gRPC & RESTful API:提供跨平台的 API 访问,支持 Web 服务和桌面应用的集成。 WebSocket:支持实时交互式推理,提高用户体验。 Gin:用于构建高效的 Web 服务器。 Cobra:用于 CLI 命令管理。
5. 工具与辅助库
uuid:用于生成唯一标识符。 tablewriter:格式化表格输出。 float16 & bfloat16:支持低精度计算。 sync:提供并发支持。 protobuf & flatbuffers:支持高效数据序列化。
这些依赖共同构成了 Ollama 的核心架构,使其能够高效地在不同设备和场景中运行 LLM。
llama.cpp vs vLLM
| 特性 | llama.cpp | vLLM |
|---|---|---|
| 运行场景 | 本地和轻量级服务器 | 大型服务器 |
| 性能 | 高效支持 CPU/GPU | 针对 GPU 优化 |
| 适用场景 | 本地开发和实验 | 大规模推理服务 |
| 主要特点 | 轻量级,易集成 | 使用 PagedAttention 提高吞吐量 |
如果你需要一个简单易用的本地解决方案,Ollama 基于 llama.cpp 是一个很好的选择;Ollama 提供了更友好的 API 和 CLI,简化了模型的管理和推理过程。而 llama.cpp 适用于更底层的定制化需求,如特定硬件优化或轻量级本地推理。另一方面,如果你需要在大规模服务器上运行并提升 GPU 资源利用率,vLLM 是更合适的选项(截止目前,目前ollama并没有支持),它的 PagedAttention 技术可以有效提高吞吐量,适用于高并发推理任务。
各自的开源地址为:
https://github.com/ggerganov/llama.cpp
https://github.com/vllm-project/vllm
Ollama 项目文件结构
Ollama 源代码结构如下,每个目录和文件都有其特定的用途:
核心代码
llama/:核心推理代码,包含模型加载和计算逻辑。ml/:机器学习相关的计算实现。model/:模型管理和加载逻辑。parser/:处理文本输入和模型解析的逻辑。server/:Ollama 的 API 服务器实现。构建与配置
CMakeLists.txt:CMake 构建配置文件。Makefile.sync:Make 构建系统的同步文件。Dockerfile:用于构建 Ollama 的 Docker 镜像。go.mod&go.sum:Go 语言的模块依赖管理文件。envconfig/:环境变量管理和配置。命令行与 API
cmd/:CLI 入口点,包含 Ollama 的命令行工具实现。api/:API 相关逻辑,支持 gRPC 和 RESTful 访问。app/:应用逻辑,集成 CLI、API 和模型推理功能。auth/:身份验证相关逻辑。文档与社区
README.md:项目概览和使用指南。CONTRIBUTING.md:贡献指南。SECURITY.md:安全相关的说明。docs/:详细文档,包含 API 说明和架构设计。工具与脚本
scripts/:自动化脚本。integration/:集成测试相关代码。discover/:模型发现和加载工具。util/:通用工具函数。progress/:推理进度显示。format/:数据格式化工具。其他
template/:用于生成配置文件的模板。readline/:交互式命令行支持。version/:版本信息。openai/:与 OpenAI 相关的代码。
这套结构使得 Ollama 既具备良好的模块化特性,又方便维护和扩展。
llama.cpp项目介绍
llama.cpp 是由 Georgi Gerganov 开发的一个开源项目,旨在用 C/C++ 实现高效的 LLaMA 模型推理。下面是对该项目的详细介绍:
1. 项目背景
LLaMA 模型:LLaMA(Large Language Model Meta AI)是 Meta(Facebook)发布的大型语言模型,因其在自然语言处理任务上的出色表现而受到广泛关注。 llama.cpp 的诞生:在 LLaMA 模型发布后,许多开发者希望能在资源有限(如没有 GPU)的设备上运行该模型。llama.cpp 正是在这种需求背景下诞生的,它专注于在 CPU 上高效地运行 LLaMA 模型。
2. 主要特点
高效的 CPU 推理:项目采用纯 C/C++ 编写,通过利用现代 CPU 的 SIMD 指令(如 AVX、AVX2)和其他优化技术,使得在没有 GPU 的设备上也能实现较高的推理速度。 低资源消耗:由于针对 CPU 进行了大量优化,llama.cpp 能在较低的内存和计算资源条件下运行,这对于边缘设备或者开发者的个人电脑来说非常友好。 开源与社区驱动:项目完全开源,并且得到了全球开发者社区的广泛支持。很多用户和开发者为该项目贡献代码、优化性能和添加新功能,使其不断完善和进步。 易于部署与使用:项目提供了详细的文档和编译指南,用户可以比较方便地在本地编译和运行模型。此外,社区中还存在不少关于模型转换、参数调整和使用技巧的讨论,帮助新手快速上手。
3. 应用场景
本地模型推理:对于那些希望在本地测试或部署 LLaMA 模型的用户,llama.cpp 提供了一种不依赖 GPU 的解决方案。 轻量级部署:由于其优化后的低资源占用,适合在边缘设备、嵌入式系统或其它资源受限的环境中运行。 研究与开发:对于学术研究或开发者来说,llama.cpp 提供了一个便捷的实验平台,方便大家测试和修改模型推理代码。
结论
llama.cpp 是由 Georgi Gerganov 开发的一个开源项目,旨在用 C/C++ 实现高效的 LLaMA 模型推理。下面是对该项目的详细介绍:
1. 项目背景
LLaMA 模型:LLaMA(Large Language Model Meta AI)是 Meta(Facebook)发布的大型语言模型,因其在自然语言处理任务上的出色表现而受到广泛关注。 llama.cpp 的诞生:在 LLaMA 模型发布后,许多开发者希望能在资源有限(如没有 GPU)的设备上运行该模型。 llama.cpp正是在这种需求背景下诞生的,它专注于在 CPU 上高效地运行 LLaMA 模型。
2. 主要特点
高效的 CPU 推理:项目采用纯 C/C++ 编写,通过利用现代 CPU 的 SIMD 指令(如 AVX、AVX2)和其他优化技术,使得在没有 GPU 的设备上也能实现较高的推理速度。 低资源消耗:由于针对 CPU 进行了大量优化, llama.cpp能在较低的内存和计算资源条件下运行,这对于边缘设备或者开发者的个人电脑来说非常友好。开源与社区驱动:项目完全开源,并且得到了全球开发者社区的广泛支持。很多用户和开发者为该项目贡献代码、优化性能和添加新功能,使其不断完善和进步。 易于部署与使用:项目提供了详细的文档和编译指南,用户可以比较方便地在本地编译和运行模型。此外,社区中还存在不少关于模型转换、参数调整和使用技巧的讨论,帮助新手快速上手。
3. 应用场景
本地模型推理:对于那些希望在本地测试或部署 LLaMA 模型的用户, llama.cpp提供了一种不依赖 GPU 的解决方案。轻量级部署:由于其优化后的低资源占用,适合在边缘设备、嵌入式系统或其它资源受限的环境中运行。 研究与开发:对于学术研究或开发者来说, llama.cpp提供了一个便捷的实验平台,方便大家测试和修改模型推理代码。
Ollama 是一个非常适合本地开发者使用的 LLM 运行框架,特别是对于希望离线运行 DeepSeek-R1 的用户。它依赖 llama.cpp 来实现高效推理。无论是轻量级实验还是大规模推理,Ollama 都提供了灵活的解决方案。
最后,我创建了一个AI菜鸟学习群,如果有兴趣一起成长,可以加群一起交流,公众号聊天中发送“加群”或者“AI”即可获取加群方式。