feat: initial commit

This commit is contained in:
2026-08-29 13:17:59 +02:00
commit 142f5f5759
91 changed files with 6155 additions and 0 deletions
+60
View File
@@ -0,0 +1,60 @@
#!/usr/bin/env bash
# vLLM na Apple Silicon przez plugin vllm-project/vllm-metal (backend MLX).
#
# Docker na macOS nie ma dostępu do Metala, więc to jedyna ścieżka z akceleracją.
# Plugin instaluje się do własnego venva (~/.venv-vllm-metal) i wymaga natywnego
# arm64 Pythona 3.12 oraz Xcode Command Line Tools.
#
# Użycie: vllm-metal.sh up <model> <port> <log> <pid> | down <pid> | install
set -euo pipefail
VENV="${VLLM_METAL_VENV:-$HOME/.venv-vllm-metal}"
INSTALLER_URL="https://raw.githubusercontent.com/vllm-project/vllm-metal/main/install.sh"
fail() { echo "błąd: $*" >&2; exit 1; }
check_platform() {
[ "$(uname -s)" = "Darwin" ] || fail "ten backend działa wyłącznie na macOS (wykryto $(uname -s))"
[ "$(uname -m)" = "arm64" ] || fail "wymagany Apple Silicon (wykryto $(uname -m))"
xcode-select -p >/dev/null 2>&1 || fail "brak Xcode Command Line Tools - uruchom: xcode-select --install"
}
install_plugin() {
check_platform
if [ -x "$VENV/bin/vllm" ]; then
echo "vllm-metal już zainstalowany w $VENV"
return 0
fi
echo "instaluję vllm-metal do $VENV (to potrwa kilka minut)..."
curl -fsSL "$INSTALLER_URL" | bash
[ -x "$VENV/bin/vllm" ] || fail "instalacja nie powiodła się - sprawdź https://github.com/vllm-project/vllm-metal"
}
case "${1:-}" in
install)
install_plugin
;;
up)
model="${2:?podaj model}"; port="${3:-8000}"; log="${4:-.runs/llm/vllm-metal.log}"; pidfile="${5:-.runs/llm/vllm-metal.pid}"
install_plugin
mkdir -p "$(dirname "$log")" "$(dirname "$pidfile")"
if [ -f "$pidfile" ] && kill -0 "$(cat "$pidfile")" 2>/dev/null; then
echo "vllm-metal już działa (pid $(cat "$pidfile"))"; exit 0
fi
echo "startuję vllm serve $model na porcie $port (log: $log)"
python3 "$(dirname "$0")/daemonize.py" --pidfile "$pidfile" --log "$log" -- \
"$VENV/bin/vllm" serve "$model" \
--port "$port" \
--max-model-len 16384 \
--enable-auto-tool-choice \
--tool-call-parser hermes
echo "pierwsze uruchomienie pobiera model - to może potrwać (log: $log)"
;;
down)
pidfile="${2:-.runs/llm/vllm-metal.pid}"
python3 "$(dirname "$0")/daemonize.py" --pidfile "$pidfile" --log /dev/null --stop
;;
*)
fail "użycie: $0 {install|up <model> <port> <log> <pid>|down <pid>}"
;;
esac