bitsandbytes peak RAM ~54GB (bf16 load before quantize) — kills 40GB OptiPlex. llama.cpp Q4_K_M GGUF loads pre-quantized: peak RAM ~15.5GB, fits cleanly. Changes: - serve.yml: build llama.cpp with CUDA, download Q4_K_M GGUF from bartowski, disable vllm-serve, deploy llama-server.service - llama-server.service.j2: OpenAI-compatible server on same port 8000, --n-gpu-layers 99 (full GPU offload), --parallel 4, gemma chat template - defaults: llm_gguf_dir, llm_gguf_path, llm_gpu_layers, llm_parallel_slots - handlers: restart llama-server, vllm-serve failed_when=false (may not exist) GGUF: bartowski/gemma-2-27b-it-Q4_K_M.gguf (15.5GB, 24GB VRAM fits w/ ~8GB headroom)
28 lines
762 B
Django/Jinja
28 lines
762 B
Django/Jinja
[Unit]
|
|
Description=llama-server — Gemma 2 27B-it Q4_K_M (OpenAI-compatible inference)
|
|
After=network.target nvidia-persistenced.service
|
|
Wants=nvidia-persistenced.service
|
|
|
|
[Service]
|
|
Type=simple
|
|
User={{ llm_venv_owner }}
|
|
Group={{ llm_venv_owner }}
|
|
Environment="HOME=/home/{{ llm_venv_owner }}"
|
|
ExecStart=/opt/llama.cpp/build/bin/llama-server \
|
|
--model {{ llm_gguf_path }} \
|
|
--host {{ llm_serve_host }} \
|
|
--port {{ llm_serve_port }} \
|
|
--ctx-size {{ llm_max_model_len }} \
|
|
--n-gpu-layers {{ llm_gpu_layers }} \
|
|
--parallel {{ llm_parallel_slots }} \
|
|
--chat-template gemma
|
|
Restart=on-failure
|
|
RestartSec=10
|
|
TimeoutStartSec=120
|
|
StandardOutput=journal
|
|
StandardError=journal
|
|
SyslogIdentifier=llama-server
|
|
|
|
[Install]
|
|
WantedBy=multi-user.target
|