Skip to content

Install on macOS

Apple Silicon: MPS

Run natively on Apple Silicon to use the GPU through Metal Performance Shaders. A Linux Docker container on a Mac does not expose the MPS backend.

Install Apple's command-line tools if they are not already available:

xcode-select --install

Complete the system installation dialog. Then install uv:

curl -LsSf https://astral.sh/uv/install.sh | sh

Open a new terminal and prepare the service:

uv --version
git clone https://github.com/dzenplatform/embedder.git
cd embedder
DEVICE=mps make setup
DEVICE=mps make run

The Makefile uses Python 3.12 and a venv/ environment. Setup checks MPS availability and downloads the model. If it reports MPS is unavailable, check that Python runs natively on Apple Silicon, outside Docker, and that your macOS version is supported by the installed PyTorch release.

Apple Silicon: CPU

To run without GPU acceleration, use these commands from the repository directory:

DEVICE=cpu make setup
DEVICE=cpu make run

This is an alternative server process: stop a previous foreground instance with Ctrl+C first. To persist your choice, set device: cpu or device: mps in the root local.yaml, then run make setup and make run without DEVICE.

CPU in Docker, including Intel Macs

Install Docker Desktop for Mac for your computer's architecture and start it. In a terminal:

git clone https://github.com/dzenplatform/embedder.git
cd embedder
docker compose up -d
docker compose logs -f model-init embedder

If you already cloned the repository, use that checkout. Docker selects the amd64 or arm64 CPU image. This guide uses the container path for Intel Macs; native PyTorch wheel availability must be checked separately against the project's Python and PyTorch requirements.

This container does not use MPS or CUDA on a Mac. For acceleration on Apple Silicon, use the native MPS option above.

Verify the installation

After the model loads, the service listens at http://127.0.0.1:8091. Keep a native process running and open another terminal for the API checks.

Containers run in the background. Use docker compose stop to stop them while retaining the model volume.