Previously, developers without the synctest experiment enabled would see build failures when running tests in some server/internal/internal packages using the synctest package. This change makes the transition to use of the package less painful but guards the use of the synctest package with build tags. synctest is enabled in CI. If a new change will break a synctest package, it will break in CI, even if it does not break locally. The developer docs have been updated to help with any confusion about why package tests pass locally but fail in CI.
3.7 KiB
Development
Install prerequisites:
- Go
- C/C++ Compiler e.g. Clang on macOS, TDM-GCC (Windows amd64) or llvm-mingw (Windows arm64), GCC/Clang on Linux.
Then build and run Ollama from the root directory of the repository:
go run . serve
macOS (Apple Silicon)
macOS Apple Silicon supports Metal which is built-in to the Ollama binary. No additional steps are required.
macOS (Intel)
Install prerequisites:
- CMake or
brew install cmake
Then, configure and build the project:
cmake -B build
cmake --build build
Lastly, run Ollama:
go run . serve
Windows
Install prerequisites:
- CMake
- Visual Studio 2022 including the Native Desktop Workload
- (Optional) AMD GPU support
- (Optional) NVIDIA GPU support
Then, configure and build the project:
cmake -B build
cmake --build build --config Release
Important
Building for ROCm requires additional flags:
cmake -B build -G Ninja -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ cmake --build build --config Release
Lastly, run Ollama:
go run . serve
Windows (ARM)
Windows ARM does not support additional acceleration libraries at this time. Do not use cmake, simply go run
or go build
.
Linux
Install prerequisites:
- CMake or
sudo apt install cmake
orsudo dnf install cmake
- (Optional) AMD GPU support
- (Optional) NVIDIA GPU support
Important
Ensure prerequisites are in
PATH
before running CMake.
Then, configure and build the project:
cmake -B build
cmake --build build
Lastly, run Ollama:
go run . serve
Docker
docker build .
ROCm
docker build --build-arg FLAVOR=rocm .
Running tests
To run tests, use go test
:
go test ./...
NOTE: In rare cirumstances, you may nedd to change a package using the new "synctest" package in go1.24.
If you do not have the "synctest" package enabled, you will not see build or test failures resulting from your change(s), if any, locally, but CI will break.
If you see failures in CI, you can either keep pushing changes to see if the CI build passes, or you can enable the "synctest" package locally to see the failures before pushing.
To enable the "synctest" package for testing, run the following command:
GOEXPERIMENT=synctest go test ./...
If you wish to enable synctest for all go commands, you can set the
GOEXPERIMENT
environment variable in your shell profile or by using:go env -w GOEXPERIMENT=synctest
Which will enable the "synctest" package for all go commands without needing to set it for all shell sessions.
The synctest package is not required for production builds.
Library detection
Ollama looks for acceleration libraries in the following paths relative to the ollama
executable:
./lib/ollama
(Windows)../lib/ollama
(Linux).
(macOS)build/lib/ollama
(for development)
If the libraries are not found, Ollama will not run with any acceleration libraries.