Add QUANT_PREFERENCE and PERF_PROFILE (low_latency/balanced/throughput) with server defaults
Browse files- download_model.py +25 -27
- start.sh +30 -3
download_model.py
CHANGED
|
@@ -16,33 +16,31 @@ def require_env(name: str) -> str:
|
|
| 16 |
|
| 17 |
def quant_rank(file_name: str) -> tuple[int, str]:
|
| 18 |
name = file_name.lower()
|
| 19 |
-
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
|
| 25 |
-
|
| 26 |
-
|
| 27 |
-
|
| 28 |
-
|
| 29 |
-
|
| 30 |
-
|
| 31 |
-
|
| 32 |
-
|
| 33 |
-
|
| 34 |
-
|
| 35 |
-
|
| 36 |
-
|
| 37 |
-
|
| 38 |
-
|
| 39 |
-
|
| 40 |
-
|
| 41 |
-
|
| 42 |
-
|
| 43 |
-
|
| 44 |
-
|
| 45 |
-
return (8, file_name)
|
| 46 |
|
| 47 |
|
| 48 |
def main() -> None:
|
|
|
|
| 16 |
|
| 17 |
def quant_rank(file_name: str) -> tuple[int, str]:
|
| 18 |
name = file_name.lower()
|
| 19 |
+
# Allow user-specified preference list via QUANT_PREFERENCE env (comma-separated)
|
| 20 |
+
pref = os.environ.get("QUANT_PREFERENCE", "q4_k_m").split(",")
|
| 21 |
+
pref = [p.strip().lower() for p in pref if p.strip()]
|
| 22 |
+
for idx, token in enumerate(pref):
|
| 23 |
+
if token in name:
|
| 24 |
+
return (idx, file_name)
|
| 25 |
+
|
| 26 |
+
# fallback groups (lower priority than explicit preference)
|
| 27 |
+
groups = [
|
| 28 |
+
("q8_k_l", "q8_k_m", "q8_k_s", "q8_k", "q8_0", "q8_1"),
|
| 29 |
+
("f16", "bf16"),
|
| 30 |
+
("q6_k", "q6_0", "q6_1", "q6"),
|
| 31 |
+
("q5_k_m", "q5_k_s", "q5_k", "q5_0", "q5_1", "q5"),
|
| 32 |
+
("q4_k_m", "q4_k_s", "q4_k", "q4_0", "q4_1", "q4"),
|
| 33 |
+
("q3_k_m", "q3_k_s", "q3_k", "q3_0", "q3_1", "q3"),
|
| 34 |
+
("q2_k", "q2_0", "q2_1", "q2"),
|
| 35 |
+
("f32",),
|
| 36 |
+
]
|
| 37 |
+
base = len(pref)
|
| 38 |
+
for gi, tokens in enumerate(groups):
|
| 39 |
+
for token in tokens:
|
| 40 |
+
if token in name:
|
| 41 |
+
return (base + gi, file_name)
|
| 42 |
+
|
| 43 |
+
return (base + len(groups), file_name)
|
|
|
|
|
|
|
| 44 |
|
| 45 |
|
| 46 |
def main() -> None:
|
start.sh
CHANGED
|
@@ -11,6 +11,8 @@ export HF_HOME="${HF_HOME:-/data/hf-cache}"
|
|
| 11 |
export MODEL_DIR="${MODEL_DIR:-/data/models}"
|
| 12 |
export MODEL_PATH="${MODEL_PATH:-/data/models/model.gguf}"
|
| 13 |
export CTX_SIZE="${CONTEXT_LENGTH:-${CTX_SIZE:-4096}}"
|
|
|
|
|
|
|
| 14 |
|
| 15 |
# Ensure data directories exist and are writable. Run as root in container startup.
|
| 16 |
echo "preparing storage: $HF_HOME and $MODEL_DIR"
|
|
@@ -27,6 +29,30 @@ fi
|
|
| 27 |
|
| 28 |
LLAMA_SERVER_BIN="${LLAMA_SERVER_BIN:-/usr/local/bin/llama-server}"
|
| 29 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 30 |
server_args=(
|
| 31 |
--model "$MODEL_PATH"
|
| 32 |
--host 0.0.0.0
|
|
@@ -35,9 +61,9 @@ server_args=(
|
|
| 35 |
--mmap
|
| 36 |
-ngl 0
|
| 37 |
-t "$THREADS"
|
| 38 |
-
--threads-batch "${THREADS_BATCH:-$
|
| 39 |
-
--batch-size "${BATCH_SIZE:-
|
| 40 |
-
--ubatch-size "${UBATCH_SIZE:-
|
| 41 |
--ctx-size "${CTX_SIZE:-4096}"
|
| 42 |
--cache-type-k "${CACHE_TYPE_K:-f16}"
|
| 43 |
--cache-type-v "${CACHE_TYPE_V:-f16}"
|
|
@@ -49,5 +75,6 @@ if [[ -n "${PARALLEL:-}" ]]; then
|
|
| 49 |
fi
|
| 50 |
|
| 51 |
server_cmd=("$LLAMA_SERVER_BIN" "${server_args[@]}")
|
|
|
|
| 52 |
echo "starting llama-server"
|
| 53 |
exec su -s /bin/sh appuser -c "$(printf '%q ' "${server_cmd[@]}")"
|
|
|
|
| 11 |
export MODEL_DIR="${MODEL_DIR:-/data/models}"
|
| 12 |
export MODEL_PATH="${MODEL_PATH:-/data/models/model.gguf}"
|
| 13 |
export CTX_SIZE="${CONTEXT_LENGTH:-${CTX_SIZE:-4096}}"
|
| 14 |
+
export QUANT_PREFERENCE="${QUANT_PREFERENCE:-q4_k_m,q4_k_s,q4_k,q4_0,q4_1}"
|
| 15 |
+
export PERF_PROFILE="${PERF_PROFILE:-balanced}"
|
| 16 |
|
| 17 |
# Ensure data directories exist and are writable. Run as root in container startup.
|
| 18 |
echo "preparing storage: $HF_HOME and $MODEL_DIR"
|
|
|
|
| 29 |
|
| 30 |
LLAMA_SERVER_BIN="${LLAMA_SERVER_BIN:-/usr/local/bin/llama-server}"
|
| 31 |
|
| 32 |
+
# set server profile defaults
|
| 33 |
+
case "$PERF_PROFILE" in
|
| 34 |
+
low_latency)
|
| 35 |
+
DEFAULT_BATCH=1
|
| 36 |
+
DEFAULT_UBATCH=1
|
| 37 |
+
DEFAULT_THREADS_BATCH=1
|
| 38 |
+
;;
|
| 39 |
+
balanced)
|
| 40 |
+
DEFAULT_BATCH=8
|
| 41 |
+
DEFAULT_UBATCH=8
|
| 42 |
+
DEFAULT_THREADS_BATCH=${THREADS}
|
| 43 |
+
;;
|
| 44 |
+
throughput)
|
| 45 |
+
DEFAULT_BATCH=512
|
| 46 |
+
DEFAULT_UBATCH=512
|
| 47 |
+
DEFAULT_THREADS_BATCH=${THREADS}
|
| 48 |
+
;;
|
| 49 |
+
*)
|
| 50 |
+
DEFAULT_BATCH=8
|
| 51 |
+
DEFAULT_UBATCH=8
|
| 52 |
+
DEFAULT_THREADS_BATCH=${THREADS}
|
| 53 |
+
;;
|
| 54 |
+
esac
|
| 55 |
+
|
| 56 |
server_args=(
|
| 57 |
--model "$MODEL_PATH"
|
| 58 |
--host 0.0.0.0
|
|
|
|
| 61 |
--mmap
|
| 62 |
-ngl 0
|
| 63 |
-t "$THREADS"
|
| 64 |
+
--threads-batch "${THREADS_BATCH:-$DEFAULT_THREADS_BATCH}"
|
| 65 |
+
--batch-size "${BATCH_SIZE:-$DEFAULT_BATCH}"
|
| 66 |
+
--ubatch-size "${UBATCH_SIZE:-$DEFAULT_UBATCH}"
|
| 67 |
--ctx-size "${CTX_SIZE:-4096}"
|
| 68 |
--cache-type-k "${CACHE_TYPE_K:-f16}"
|
| 69 |
--cache-type-v "${CACHE_TYPE_V:-f16}"
|
|
|
|
| 75 |
fi
|
| 76 |
|
| 77 |
server_cmd=("$LLAMA_SERVER_BIN" "${server_args[@]}")
|
| 78 |
+
echo "server command: $LLAMA_SERVER_BIN ${server_args[*]}"
|
| 79 |
echo "starting llama-server"
|
| 80 |
exec su -s /bin/sh appuser -c "$(printf '%q ' "${server_cmd[@]}")"
|