feat: initial commit
This commit is contained in:
Executable
+60
@@ -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
|
||||
Reference in New Issue
Block a user