Files
MOVZXandHinata d6062059b4 docs: Add the Indonesian README and sync the guide with the code
Rename the default model from Scarlet to Hinata in the Dockerfile
environment, the healthcheck, and the file that
scripts/install-as-service.sh writes to /etc/default/vllm. Compose
already defaults to Hinata.

Sync README.md with the code. Section 6 paired port 8000 with the
Compose model name, so that request fails. Document vllm-logs.sh, the
abliteration, guard, and counter variables, and the new folders, so the
patch count reaches 103. Add section 10 for benchmarks/bench.sh, with
the defaults, the example runs, and what DEPTH changes. Drop the
duplicate CUDA_VISIBLE_DEVICES and PLE_HOME rows.

Add README-ID.md, the full Indonesian translation. README.md stays the
source, and both files say so.

Co-Authored-By: Hinata <hinata@idihore.id>
Signed-off-by: MOVZX <movzx@yahoo.com>
2026-10-15 07:52:20 +00:00

94 lines
3.8 KiB
Bash
Executable File

#!/usr/bin/env bash
# One entry point for the bare-metal systemd service: install, start, stop, status, logs,
# update, uninstall. Run from anywhere; the script uses the repo it lives in.
#
# scripts/install-as-service.sh <command>
#
# install write /etc/systemd/system/vllm.service for THIS repo directory,
# write /etc/default/vllm (checkpoint path, model name) when missing,
# install the logrotate policy, daemon-reload, enable
# start|stop|restart|status|logs systemctl for the service
# update ./build.sh in this repo, then restart the service
# uninstall disable + remove the unit, the EnvironmentFile and the logrotate file
#
# Needs root (the log goes to /var/log, the unit goes to /etc/systemd/system).
# The service runs the repo where it lives: no copy, no /opt, no second build tree.
# Env: CKPT MODEL_NAME PORT override what the EnvironmentFile sets.
set -euo pipefail
HERE="$(cd "$(dirname "$0")/.." && pwd)"
UNIT=vllm
UNIT_PATH=/etc/systemd/system/$UNIT.service
DEFAULT=/etc/default/$UNIT
LOGROTATE=/etc/logrotate.d/$UNIT
LOG="${LOG:-/var/log/vllm.log}"
[ "$(id -u)" = 0 ] || { echo "run as root: sudo $0 $*"; exit 1; }
command -v systemctl >/dev/null || { echo "no systemd on this host"; exit 1; }
cmd="${1:-}"; shift || true
case "$cmd" in
install)
ckpt="${CKPT:-$(sed -n 's/^MODEL_DIR=//p' "$HERE/.env" 2>/dev/null | head -1)}"
ckpt="${ckpt:-/data/models/halt95/Swift1.5-Qwen3.8-Flash-Next-W4A16-Merlin}"
[ -f "$HERE/start.sh" ] || { echo "not the repo root: $HERE"; exit 1; }
# 1. the unit: the shipped template, with /opt/vllm replaced by this directory
sed "s|/opt/vllm|$HERE|g" "$HERE/systemd/$UNIT.service" > "$UNIT_PATH"
echo "==> unit: $UNIT_PATH (WorkingDirectory=$HERE)"
# 2. the EnvironmentFile: create once, never overwrite an edited one
if [ ! -f "$DEFAULT" ]; then
{ echo "# Read by $UNIT.service. Uncomment and edit, then: systemctl restart $UNIT"
echo "CKPT=$ckpt"
echo "MODEL_NAME=Hinata"
echo "# LOG=/var/log/vllm.log"
echo "# CACHE_ROOT=$HERE/.vllm-cache"
echo "# CUDA_VISIBLE_DEVICES=0,1,2,3"
echo "# VLLM_LOG_STATS_INTERVAL=1"
} > "$DEFAULT"
echo "==> wrote $DEFAULT: set CKPT to the checkpoint directory"
else
echo "==> kept $DEFAULT (it exists; CKPT=$(. "$DEFAULT" 2>/dev/null && echo "${CKPT:-unset}" || echo unset))"
fi
# 3. log rotation for $LOG (same policy as the shipped systemd/vllm.logrotate)
sed "s|/var/log/vllm.log|$LOG|g" "$HERE/systemd/$UNIT.logrotate" > "$LOGROTATE"
chmod 644 "$LOGROTATE"
echo "==> logrotate: $LOGROTATE"
systemctl daemon-reload
systemctl enable "$UNIT"
ck="$( . "$DEFAULT" 2>/dev/null && echo "${CKPT:-}" )"
[ -n "$ck" ] && [ -d "$ck" ] || echo "==> next: edit CKPT in $DEFAULT (the checkpoint directory), then sudo $0 start"
echo "==> installed and enabled. Start with: sudo $0 start"
;;
start) systemctl start "$UNIT"; echo "==> started; a cold start takes ~6 min: sudo $0 logs" ;;
stop) systemctl stop "$UNIT" ;;
restart) systemctl restart "$UNIT" ;;
status)
systemctl status "$UNIT" --no-pager -l | head -12 || :
echo "==> engine log: tail -f $LOG (healthy line: GPU KV cache size)"
;;
logs) exec tail -n 100 -f "$LOG" ;;
update)
echo "==> build, then restart"
( cd "$HERE" && ./build.sh )
systemctl restart "$UNIT"
echo "==> update done"
;;
uninstall)
printf 'remove the unit, the EnvironmentFile and the logrotate file? [y/N] '
read -r a
case "$a" in
[yY]*) systemctl disable --now "$UNIT" 2>/dev/null || :
rm -f "$UNIT_PATH" "$DEFAULT" "$LOGROTATE"
systemctl daemon-reload
echo "==> removed (the repo, .venv, .vllm-cache and $LOG are kept)" ;;
*) echo "cancelled" ;;
esac
;;
*)
sed -n '3,18p' "$0"
exit 1
;;
esac