Skip to content

Sviluppo

Installa i prerequisiti:

  • Go
  • CMake 3.24 o successivo
  • Compilatore C/C++: Clang su macOS, strumenti C++ di Visual Studio 2022 su Windows, o GCC/Clang su Linux
  • Ninja nel PATH è consigliato, soprattutto su Windows

Per iterazioni pure in Go su un payload nativo esistente, esegui Ollama dalla radice del repository:

shell
go run . serve

NOTE

Ollama include codice nativo compilato con CGO. Di tanto in tanto queste strutture dati possono cambiare e CGO può andare fuori sincronia causando crash imprevisti. Puoi forzare una compilazione completa del codice nativo eseguendo prima go clean -cache.

Modello di compilazione nativa

Per un checkout nuovo, o dopo aver modificato codice nativo, esegui la compilazione dalla radice del repository. Su macOS arm64, questa compilazione genera l'inferenza Metal. Su tutte le altre piattaforme genera un'inferenza solo CPU. Compila il binario Go nella radice del repository e installa il payload di runtime nativo in build/lib/ollama.

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

Per installare in un layout di prefisso standard:

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

Su tutte le piattaforme tranne macOS arm64, per compilare i backend GPU selezionali esplicitamente:

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

I valori di backend supportati sono cuda_v12, cuda_v13, rocm_v7_1, rocm_v7_2, vulkan, cuda_jetpack5 e cuda_jetpack6.

Usa gli override di architettura standard di CMake per restringere le compilazioni GPU per l'hardware locale:

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

Puoi regolare le opzioni di compilazione di GGML impostando i valori GGML_* durante la configurazione. Ad esempio, per disabilitare i kernel CUDA flash attention per il debug locale:

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

macOS (Apple Silicon)

Prerequisiti aggiuntivi:

MLX Metal richiede la toolchain Metal. Installa prima Xcode, poi:

shell
xcodebuild -downloadComponent MetalToolchain

Windows

Prerequisiti aggiuntivi:

Per le compilazioni con Ninja, esegui CMake da un Prompt di PowerShell/Command Prompt per sviluppatori o da un'altra shell in cui il compilatore Visual Studio è disponibile.

La build per Vulkan richiede la variabile d'ambiente VULKAN_SDK:

PowerShell

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

CMD

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

Windows (ARM)

Al momento, Windows ARM non supporta librerie di accelerazione aggiuntive.

Linux

Prerequisiti aggiuntivi:

  • (Opzionale) Supporto GPU AMD
  • (Opzionale) Supporto GPU NVIDIA
  • (Opzionale) Supporto GPU Vulkan
    • Vulkan SDK - utile per GPU AMD/Intel
    • Oppure installa tramite gestore di pacchetti: sudo apt install vulkan-sdk (Ubuntu/Debian) o sudo dnf install vulkan-sdk (Fedora/CentOS)
  • (Opzionale) Supporto motore MLX
    • CUDA 13+ SDK
    • cuDNN 9+
    • OpenBLAS/LAPACK: sudo apt install libopenblas-dev liblapack-dev liblapacke-dev (Ubuntu/Debian)

IMPORTANT

Assicurati che i prerequisiti siano nel PATH prima di eseguire CMake.

Motore MLX (Opzionale)

Il motore MLX consente l'esecuzione di modelli basati su safetensor. Su macOS arm64, MLX è abilitato per impostazione predefinita. Su altre piattaforme, i backend MLX sono selezionati con OLLAMA_MLX_BACKENDS.

CUDA

Richiede CUDA 13+ e cuDNN 9+.

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

Override del sorgente MLX locale

Per compilare rispetto a un checkout locale di MLX e/o MLX-C (utile per lo sviluppo), imposta le variabili d'ambiente prima di eseguire CMake:

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

Su macOS arm64:

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

Per 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 .

Esecuzione dei test

Per eseguire i test, usa go test:

shell
go test ./...

Rilevamento delle librerie

Ollama cerca i binari helper nativi e le librerie di accelerazione nei layout di installazione e di sviluppo locale:

  • ../lib/ollama per le installazioni standard in cui ollama si trova in bin/
  • ./lib/ollama per i payload in stile release di Windows e l'output dist locale
  • . per gli artifact di release di macOS che affiancano gli helper a ollama
  • build/lib/ollama e dist/<platform>/lib/ollama per le compilazioni di sviluppo locale

Se le librerie non vengono trovate, Ollama non verrà eseguito con nessuna libreria di accelerazione.