53 lines
1.7 KiB
Bash
Executable File
53 lines
1.7 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Serve the FastFlowLM (FLM) NPU endpoint on Dankclaw — frank-default-small.
|
|
#
|
|
# Runs flm serve with the model tag in frank-default-small.env. The NPU
|
|
# (XDNA2, 50 TOPS) is a single-lane device: generations serialize in FIFO
|
|
# order, so this is a background/triage endpoint, not an interactive
|
|
# multi-user chat backend. The NPU shares the 30 GiB unified pool with the
|
|
# frank-default-large PP head; see docs/FastFlowLM NPU Inference.md for the
|
|
# memory budget and the measured model matrix.
|
|
#
|
|
# NOTE: FLM requires unlimited memlock. The unit sets LimitMEMLOCK=infinity.
|
|
# Running this script by hand from a login shell needs the pam_limits rule
|
|
# in /etc/security/limits.d/99-flm-memlock.conf.
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
|
ENV_FILE="${FLM_SMALL_ENV_FILE:-$SCRIPT_DIR/frank-default-small.env}"
|
|
if [[ -f "$ENV_FILE" ]]; then
|
|
set -a
|
|
# shellcheck disable=SC1090
|
|
source "$ENV_FILE"
|
|
set +a
|
|
fi
|
|
|
|
# --- defaults (used when the env file does not set them) -------------------
|
|
: "${FLM_BIN:=/usr/bin/flm}"
|
|
: "${FLM_MODEL:=gemma4-it:e4b}"
|
|
: "${FLM_HOST:=0.0.0.0}"
|
|
: "${FLM_PORT:=52625}"
|
|
: "${FLM_PMODE:=performance}"
|
|
: "${FLM_ASR:=0}"
|
|
: "${FLM_CTX_LEN:=-1}"
|
|
|
|
if [[ ! -x "$FLM_BIN" ]]; then
|
|
echo "missing flm binary: $FLM_BIN" >&2
|
|
exit 1
|
|
fi
|
|
|
|
# --- optional flags ----------------------------------------------------------
|
|
OPT_ARGS=()
|
|
if [[ "${FLM_ASR}" != "0" ]]; then
|
|
OPT_ARGS+=(-a "${FLM_ASR}")
|
|
fi
|
|
if [[ "${FLM_CTX_LEN}" != "-1" ]]; then
|
|
OPT_ARGS+=(-c "${FLM_CTX_LEN}")
|
|
fi
|
|
|
|
exec "$FLM_BIN" serve "$FLM_MODEL" \
|
|
--host "$FLM_HOST" \
|
|
-p "$FLM_PORT" \
|
|
--pmode "$FLM_PMODE" \
|
|
"${OPT_ARGS[@]}"
|