跳过至正文

开发

安装先决条件
  • Go
  • C/C++ 编译器,例如 macOS 上的 Clang、TDM-GCC (Windows amd64) 或 llvm-mingw (Windows arm64),以及 Linux 上的 GCC/Clang。
然后在仓库的根目录下构建并运行 Ollama
go run . serve
[!NOTE] Ollama 包含使用 CGO 编译的原生代码。这些数据结构会不时发生变化,CGO 可能会同步失效,导致意外崩溃。你可以先运行 go clean -cache 来强制重新构建原生代码。

macOS (Apple Silicon)

macOS Apple Silicon 支持 Metal,它已内置于 Ollama 二进制文件中。无需额外步骤。

macOS (Intel)

安装先决条件
  • CMakebrew install cmake
然后,配置并构建项目
cmake -B build
cmake --build build
最后,运行 Ollama
go run . serve

Windows

安装先决条件 然后,配置并构建项目
cmake -B build
cmake --build build --config Release
为 Vulkan 构建需要 VULKAN_SDK 环境变量: PowerShell
$env:VULKAN_SDK="C:\VulkanSDK\<version>"
CMD
set VULKAN_SDK=C:\VulkanSDK\<version>
[!IMPORTANT] 为 ROCm 构建需要额外的标志 (flags)
cmake -B build -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++
cmake --build build --config Release
最后,运行 Ollama
go run . serve

Windows (ARM)

目前 Windows ARM 不支持额外的加速库。请勿使用 cmake,只需运行 go rungo build

Linux

安装先决条件
  • CMakesudo apt install cmakesudo dnf install cmake
  • (可选) AMD GPU 支持
  • (可选) NVIDIA GPU 支持
  • (可选) VULKAN GPU 支持
    • VULKAN SDK - 适用于 AMD/Intel GPU
    • 或通过包管理器安装:sudo apt install vulkan-sdk (Ubuntu/Debian) 或 sudo dnf install vulkan-sdk (Fedora/CentOS)
  • (可选) MLX 引擎支持
    • CUDA 13+ SDK
    • cuDNN 9+
    • OpenBLAS/LAPACK:sudo apt install libopenblas-dev liblapack-dev liblapacke-dev (Ubuntu/Debian)
[!IMPORTANT] 在运行 CMake 之前,请确保先决条件已包含在 PATH 中。
然后,配置并构建项目
cmake -B build
cmake --build build
最后,运行 Ollama
go run . serve

MLX 引擎 (可选)

MLX 引擎支持运行基于 safetensor 的模型。它需要通过 CMake 单独构建 MLXMLX-C 共享库。在 MacOS 上,MLX 利用 Metal 库在 GPU 上运行;在 Windows 和 Linux 上,则通过 CUDA v13 在 NVIDIA GPU 上运行。

macOS (Apple Silicon)

需要 Metal 工具链。请先安装 Xcode,然后
xcodebuild -downloadComponent MetalToolchain
验证是否正确安装(应打印 “no input files”)
xcrun metal
然后构建
cmake -B build --preset MLX
cmake --build build --preset MLX --parallel
cmake --install build --component MLX
[!NOTE] 如果没有 Metal 工具链,cmake 将在禁用 Metal 的情况下静默完成。检查 cmake 输出是否包含 Setting MLX_BUILD_METAL=OFF,这表示缺少该工具链。

Windows / Linux (CUDA)

需要 CUDA 13+ 和 cuDNN 9+。
cmake -B build --preset "MLX CUDA 13"
cmake --build build --target mlx --target mlxc --config Release --parallel
cmake --install build --component MLX --strip

本地 MLX 源码覆盖

要针对本地检出的 MLX 和/或 MLX-C 进行构建(对开发很有用),请在运行 CMake 之前设置环境变量
export OLLAMA_MLX_SOURCE=/path/to/mlx
export OLLAMA_MLX_C_SOURCE=/path/to/mlx-c
例如,在本地 mlx 和 mlx-c 仓库中使用辅助脚本
OLLAMA_MLX_SOURCE=../mlx OLLAMA_MLX_C_SOURCE=../mlx-c ./scripts/build_linux.sh

OLLAMA_MLX_SOURCE=../mlx OLLAMA_MLX_C_SOURCE=../mlx-c ./scripts/build_darwin.sh
$env:OLLAMA_MLX_SOURCE="../mlx"
$env:OLLAMA_MLX_C_SOURCE="../mlx-c"
./scripts/build_darwin.ps1

Docker

docker build .

ROCm

docker build --build-arg FLAVOR=rocm .

运行测试

要运行测试,请使用 go test
go test ./...
注意:在极少数情况下,你可能需要修改使用 go1.24 中新 “synctest” 包的包。 如果你没有启用 “synctest” 包,本地修改将不会显示构建或测试失败(如果有的话),但 CI 会报错。 如果 CI 失败,你可以继续推送更改以观察 CI 构建是否通过,或者在本地启用 “synctest” 包以在推送前查看失败详情。 要启用 “synctest” 包进行测试,请运行以下命令:
GOEXPERIMENT=synctest go test ./...
如果你希望为所有 go 命令启用 synctest,可以在 shell 配置(profile)中设置 GOEXPERIMENT 环境变量,或者使用:
go env -w GOEXPERIMENT=synctest
这将为所有 go 命令启用 “synctest” 包,而无需为所有 shell 会话进行设置。 生产构建不需要 synctest 包。

库检测

Ollama 在相对于 ollama 可执行文件的以下路径中寻找加速库:
  • ./lib/ollama (Windows)
  • ../lib/ollama (Linux)
  • . (macOS)
  • build/lib/ollama (用于开发)
如果未找到这些库,Ollama 运行时将不会启用任何加速库。