Skip to content

Desarrollo

Instalar prerequisitos:

  • Go
  • CMake 3.24 o superior
  • Compilador de C/C++: Clang en macOS, herramientas de C++ de Visual Studio 2022 en Windows, o GCC/Clang en Linux
  • Se recomienda tener Ninja en la variable PATH, especialmente en Windows

Para iterar únicamente con Go contra un payload nativo existente, ejecuta Ollama desde la raíz del repositorio:

shell
go run . serve

NOTE

Ollama incluye código nativo compilado con CGO. De vez en cuando estas estructuras de datos pueden cambiar y CGO puede desincronizarse, lo que provoca fallos inesperados. Puedes forzar una compilación completa del código nativo ejecutando primero go clean -cache.

Modelo de compilación nativa

Para una clonación nueva, o después de modificar código nativo, compila desde la raíz del repositorio. En macOS arm64, esto compila la inferencia Metal. En todas las demás plataformas, compila una inferencia solo para CPU. Genera el binario de Go en la raíz del repositorio e instala el payload de runtime nativo en build/lib/ollama.

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

Para instalar en un esquema de prefijo estándar:

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

En todas las plataformas excepto macOS arm64, para compilar backends de GPU selecciónalos explícitamente:

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

Los valores de backend compatibles son cuda_v12, cuda_v13, rocm_v7_1, rocm_v7_2, vulkan, cuda_jetpack5 y cuda_jetpack6.

Usa las anulaciones de arquitectura estándar de CMake para limitar las compilaciones de GPU al 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

Puedes ajustar las opciones de compilación de GGML estableciendo valores GGML_* durante la configuración. Por ejemplo, para deshabilitar los kernels de flash attention de CUDA para depuración local:

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

macOS (Apple Silicon)

Prerequisitos adicionales:

MLX Metal requiere la cadena de herramientas Metal. Instala primero Xcode y luego:

shell
xcodebuild -downloadComponent MetalToolchain

Windows

Prerequisitos adicionales:

Para compilaciones con Ninja, ejecuta CMake desde un PowerShell de Desarrollador o Símbolo del sistema de Desarrollador, o desde otra terminal donde el compilador de Visual Studio esté disponible.

La compilación para Vulkan requiere la variable de entorno VULKAN_SDK:

PowerShell

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

CMD

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

Windows (ARM)

Windows ARM no admite bibliotecas de aceleración adicionales en este momento.

Linux

Prerequisitos adicionales:

  • (Opcional) Soporte para GPU AMD
  • (Opcional) Soporte para GPU NVIDIA
  • (Opcional) Soporte para GPU Vulkan
    • Vulkan SDK - útil para GPUs AMD/Intel
    • O instálalo mediante el gestor de paquetes: sudo apt install vulkan-sdk (Ubuntu/Debian) o sudo dnf install vulkan-sdk (Fedora/CentOS)
  • (Opcional) Soporte para el motor MLX
    • CUDA 13+ SDK
    • cuDNN 9+
    • OpenBLAS/LAPACK: sudo apt install libopenblas-dev liblapack-dev liblapacke-dev (Ubuntu/Debian)

IMPORTANT

Asegúrate de que los prerequisitos estén en la variable PATH antes de ejecutar CMake.

Motor MLX (Opcional)

El motor MLX permite ejecutar modelos basados en safetensor. En macOS arm64, MLX está habilitado de forma predeterminada. En otras plataformas, los backends de MLX se seleccionan con OLLAMA_MLX_BACKENDS.

CUDA

Requiere CUDA 13+ y cuDNN 9+.

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

Anulaciones de fuente local de MLX

Para compilar contra una clonación local de MLX y/o MLX-C (útil para desarrollo), establece variables de entorno antes de ejecutar CMake:

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

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

Ejecución de pruebas

Para ejecutar las pruebas, usa go test:

shell
go test ./...

Detección de bibliotecas

Ollama busca binarios de ayuda nativos y bibliotecas de aceleración en instalaciones y esquemas de desarrollo local:

  • ../lib/ollama para instalaciones estándar donde ollama está en bin/
  • ./lib/ollama para payloads de estilo release de Windows y salida de dist local
  • . para artefactos de release de macOS que colocan los ayudantes junto a ollama
  • build/lib/ollama y dist/<platform>/lib/ollama para compilaciones de desarrollo local

Si no se encuentran las bibliotecas, Ollama no se ejecutará con ninguna biblioteca de aceleración.