Skip to content

Desenvolvimento

Instale os pré-requisitos:

  • Go
  • CMake 3.24 ou mais novo
  • Compilador C/C++: Clang no macOS, ferramentas C++ do Visual Studio 2022 no Windows, ou GCC/Clang no Linux
  • Ninja no PATH é recomendado, especialmente no Windows

Para iteração pura em Go contra um payload nativo existente, execute o Ollama a partir da raiz do repositório:

shell
go run . serve

NOTE

O Ollama inclui código nativo compilado com CGO. De tempos em tempos, essas estruturas de dados podem mudar e o CGO pode ficar dessincronizado, resultando em falhas inesperadas. Você pode forçar uma compilação completa do código nativo executando go clean -cache primeiro.

Modelo de compilação nativa

Para um checkout novo, ou após alterar código nativo, compile a partir da raiz do repositório. No macOS arm64, isso compila a inferência Metal. Em todas as outras plataformas, isso compila apenas inferência por CPU. Ele compila o binário Go na raiz do repositório e instala o payload de tempo de execução nativo em build/lib/ollama.

shell
cmake -B build .
cmake --build build --parallel 8
./ollama serve

Para instalar em um layout de prefixo padrão:

shell
cmake --install build --prefix /path/to/install

Em todas as plataformas exceto macOS arm64, para compilar backends de GPU, selecione os backends explicitamente:

shell
cmake -B build . -DOLLAMA_LLAMA_BACKENDS="cuda_v13;vulkan"
cmake --build build --parallel 8

Os valores de backend suportados são cuda_v12, cuda_v13, rocm_v7_1, rocm_v7_2, vulkan, cuda_jetpack5 e cuda_jetpack6.

Use substituições de arquitetura padrão do CMake para limitar as compilações de GPU ao hardware local:

shell
# CUDA
cmake -B build . -DOLLAMA_LLAMA_BACKENDS=cuda_v13 -DCMAKE_CUDA_ARCHITECTURES=native

# ROCm / HIP
cmake -B build . -DOLLAMA_LLAMA_BACKENDS=rocm_v7_2 -DCMAKE_HIP_ARCHITECTURES=gfx1100

Você pode ajustar as opções de compilação do GGML definindo valores GGML_* durante a configuração. Por exemplo, para desativar os kernels de flash attention CUDA para depuração local:

shell
cmake -B build . -DOLLAMA_LLAMA_BACKENDS=cuda_v12 -DGGML_CUDA_FA=OFF

macOS (Apple Silicon)

Pré-requisitos adicionais:

O MLX Metal requer o conjunto de ferramentas Metal. Instale o Xcode primeiro, depois:

shell
xcodebuild -downloadComponent MetalToolchain

Windows

Pré-requisitos adicionais:

Para compilações com Ninja, execute o CMake a partir de um PowerShell/Command Prompt de Desenvolvedor ou outro shell onde o compilador do Visual Studio esteja disponível.

A compilação para Vulkan requer a variável de ambiente VULKAN_SDK:

PowerShell

powershell
$env:VULKAN_SDK="C:\VulkanSDK\<version>"

CMD

cmd
set VULKAN_SDK=C:\VulkanSDK\<version>

Windows (ARM)

O Windows ARM não suporta bibliotecas de aceleração adicionais no momento.

Linux

Pré-requisitos adicionais:

  • (Opcional) Suporte a GPU AMD
  • (Opcional) Suporte a GPU NVIDIA
  • (Opcional) Suporte a GPU Vulkan
    • Vulkan SDK - útil para GPUs AMD/Intel
    • Ou instale via gerenciador de pacotes: sudo apt install vulkan-sdk (Ubuntu/Debian) ou sudo dnf install vulkan-sdk (Fedora/CentOS)
  • (Opcional) Suporte ao motor MLX
    • CUDA 13+ SDK
    • cuDNN 9+
    • OpenBLAS/LAPACK: sudo apt install libopenblas-dev liblapack-dev liblapacke-dev (Ubuntu/Debian)

IMPORTANT

Certifique-se de que os pré-requisitos estão no PATH antes de executar o CMake.

Motor MLX (Opcional)

O motor MLX permite executar modelos baseados em safetensor. No macOS arm64, o MLX é habilitado por padrão. Em outras plataformas, os backends do MLX são selecionados com OLLAMA_MLX_BACKENDS.

CUDA

Requer CUDA 13+ e cuDNN 9+.

shell
cmake -B build . -DOLLAMA_MLX_BACKENDS=cuda_v13
cmake --build build --parallel 8

Substituições de fonte local do MLX

Para compilar usando um checkout local do MLX e/ou MLX-C (útil para desenvolvimento), defina as variáveis de ambiente antes de executar o CMake:

shell
export OLLAMA_MLX_SOURCE=/path/to/mlx
export OLLAMA_MLX_C_SOURCE=/path/to/mlx-c

No macOS arm64:

shell
OLLAMA_MLX_SOURCE=../mlx OLLAMA_MLX_C_SOURCE=../mlx-c cmake -B build .
cmake --build build --parallel 8

Para CUDA:

powershell
$env:OLLAMA_MLX_SOURCE="../mlx"
$env:OLLAMA_MLX_C_SOURCE="../mlx-c"
cmake -B build . -DOLLAMA_MLX_BACKENDS=cuda_v13
cmake --build build --parallel 8

Docker

shell
docker build .

ROCm

shell
docker build --build-arg FLAVOR=rocm .

Execução de testes

Para executar os testes, use go test:

shell
go test ./...

Detecção de bibliotecas

O Ollama procura por binários auxiliares nativos e bibliotecas de aceleração em layouts de instalação e de desenvolvimento local:

  • ../lib/ollama para instalações padrão onde o ollama está em bin/
  • ./lib/ollama para payloads de estilo de release do Windows e saída de distribuição local
  • . para artefatos de release do macOS que colocam os auxiliares junto com o ollama
  • build/lib/ollama e dist/<platform>/lib/ollama para compilações de desenvolvimento local

Se as bibliotecas não forem encontradas, o Ollama não será executado com nenhuma biblioteca de aceleração.