Initial import: bare-metal stacks, Server UI, GPU fan, tutorials.
Infrastructure configs for GMKtec K11 (Docker, vLLM, LocalAI, ComfyUI, control-plane, gpu-fan agent, Server UI with CLI/file explorer/GPU fan curve). Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Executable
+114
@@ -0,0 +1,114 @@
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
STACK_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
|
||||
|
||||
# shellcheck disable=SC1091
|
||||
source "${SCRIPT_DIR}/catalog-lib.sh"
|
||||
|
||||
cd "${STACK_DIR}"
|
||||
|
||||
if [[ $# -lt 1 ]]; then
|
||||
echo "Usage: $0 <catalog-model-id>"
|
||||
echo ""
|
||||
echo "Available models:"
|
||||
catalog_list_ids | sed 's/^/ /'
|
||||
exit 1
|
||||
fi
|
||||
|
||||
MODEL_ID="$1"
|
||||
|
||||
if ! catalog_list_ids | grep -qx "${MODEL_ID}"; then
|
||||
echo "ERROR: Unknown model id: ${MODEL_ID}"
|
||||
echo "Run: ./scripts/list-models.sh"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
if [[ -f .env ]]; then
|
||||
set -a
|
||||
# shellcheck disable=SC1091
|
||||
source .env
|
||||
set +a
|
||||
fi
|
||||
|
||||
DATA_ROOT="${DATA_ROOT:-/data}"
|
||||
catalog_ensure_dirs "${DATA_ROOT}"
|
||||
|
||||
RUNTIME="$(catalog_get_field "${MODEL_ID}" runtime)"
|
||||
NAME="$(catalog_get_field "${MODEL_ID}" name)"
|
||||
|
||||
echo "=== Download: ${NAME} (${MODEL_ID}) ==="
|
||||
echo "Runtime: ${RUNTIME}"
|
||||
echo ""
|
||||
|
||||
case "${RUNTIME}" in
|
||||
vllm)
|
||||
HF_MODEL="$(catalog_get_field "${MODEL_ID}" hf_model)"
|
||||
echo "Target: Hugging Face cache at ${DATA_ROOT}/apps/vllm/huggingface"
|
||||
echo "Model: ${HF_MODEL}"
|
||||
echo ""
|
||||
|
||||
HF_ENV=()
|
||||
if [[ -n "${HF_TOKEN:-}" ]]; then
|
||||
HF_ENV=(-e "HF_TOKEN=${HF_TOKEN}")
|
||||
fi
|
||||
|
||||
docker run --rm \
|
||||
"${HF_ENV[@]}" \
|
||||
-v "${DATA_ROOT}/apps/vllm/huggingface:/root/.cache/huggingface" \
|
||||
ghcr.io/huggingface/huggingface-cli:latest \
|
||||
download "${HF_MODEL}"
|
||||
;;
|
||||
llamacpp)
|
||||
DOWNLOAD_URL="$(catalog_get_field "${MODEL_ID}" download_url)"
|
||||
LOCAL_PATH="$(catalog_get_field "${MODEL_ID}" local_path)"
|
||||
LOCAL_DIR="$(catalog_get_field "${MODEL_ID}" local_dir)"
|
||||
GGUF_FILE="$(catalog_get_field "${MODEL_ID}" gguf_file)"
|
||||
MMPROJ_URL="$(catalog_get_field "${MODEL_ID}" mmproj_url)"
|
||||
MMPROJ_FILE="$(catalog_get_field "${MODEL_ID}" mmproj_file)"
|
||||
|
||||
if [[ -n "${LOCAL_PATH}" ]]; then
|
||||
DEST="${LOCAL_PATH}"
|
||||
mkdir -p "$(dirname "${DEST}")"
|
||||
if [[ -f "${DEST}" ]]; then
|
||||
echo "Already exists: ${DEST}"
|
||||
else
|
||||
echo "Downloading ${DEST} ..."
|
||||
wget -c -O "${DEST}" "${DOWNLOAD_URL}"
|
||||
fi
|
||||
elif [[ -n "${LOCAL_DIR}" && -n "${GGUF_FILE}" ]]; then
|
||||
mkdir -p "${LOCAL_DIR}"
|
||||
DEST="${LOCAL_DIR}/${GGUF_FILE}"
|
||||
if [[ -f "${DEST}" ]]; then
|
||||
echo "Already exists: ${DEST}"
|
||||
else
|
||||
echo "Downloading ${DEST} ..."
|
||||
wget -c -O "${DEST}" "${DOWNLOAD_URL}"
|
||||
fi
|
||||
if [[ -n "${MMPROJ_URL}" && -n "${MMPROJ_FILE}" ]]; then
|
||||
MMPROJ_DEST="${LOCAL_DIR}/${MMPROJ_FILE}"
|
||||
if [[ -f "${MMPROJ_DEST}" ]]; then
|
||||
echo "Already exists: ${MMPROJ_DEST}"
|
||||
else
|
||||
echo "Downloading ${MMPROJ_DEST} ..."
|
||||
wget -c -O "${MMPROJ_DEST}" "${MMPROJ_URL}"
|
||||
fi
|
||||
fi
|
||||
else
|
||||
echo "ERROR: Catalog entry missing local_path or local_dir/gguf_file"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "GGUF saved for future llama.cpp stack (stacks/llamacpp/README.md)."
|
||||
echo "Standard vLLM cannot load .gguf files."
|
||||
;;
|
||||
*)
|
||||
echo "ERROR: Unknown runtime: ${RUNTIME}"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
echo ""
|
||||
echo "Done."
|
||||
Reference in New Issue
Block a user