架构技术评论

Ollama 离线运行 DeepSeek 的原理

Image

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. 推理引擎

llama.cpp:Ollama 的主要模型运行库,适用于高效地在 CPU 和 GPU 上运行 LLaMA 系列模型。

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.cppvLLM
运行场景本地和轻量级服务器大型服务器
性能高效支持 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 提供了一个便捷的实验平台,方便大家测试和修改模型推理代码。

结论

Ollama 是一个非常适合本地开发者使用的 LLM 运行框架,特别是对于希望离线运行 DeepSeek-R1 的用户。它依赖 llama.cpp 来实现高效推理。无论是轻量级实验还是大规模推理,Ollama 都提供了灵活的解决方案。


最后,我创建了一个AI菜鸟学习群,如果有兴趣一起成长,可以加群一起交流,公众号聊天中发送“加群”或者“AI”即可获取加群方式。