Spaces:
Paused
Paused
Update installpi.sh
Browse files- installpi.sh +41 -14
installpi.sh
CHANGED
|
@@ -2,20 +2,22 @@
|
|
| 2 |
set -euo pipefail
|
| 3 |
|
| 4 |
# ==============================================================================
|
| 5 |
-
# installpi.sh - 一键全自动安装 pi + llama.cpp (源码编译) +
|
| 6 |
# 特性:无 sudo、无互动、全自动、可断点续传、安装后自动验证
|
| 7 |
-
# 模型:
|
| 8 |
# 启动:taskset -c 0-14 llama-server ... -t 15 --jinja --load-mode mlock -c 65536 (64K上下文)
|
| 9 |
# ==============================================================================
|
| 10 |
|
| 11 |
HOME_DIR="$HOME"
|
|
|
|
|
|
|
| 12 |
LLAMA_SRC_DIR="$HOME_DIR/llama.cpp" # 源码目录
|
| 13 |
LLAMA_BIN="$LLAMA_SRC_DIR/build/bin" # 编译后二进制目录
|
| 14 |
MODEL_DIR="$HOME_DIR/models"
|
| 15 |
PI_MODELS_JSON="$HOME_DIR/.pi/agent/models.json"
|
| 16 |
LLAMA_PORT=8080
|
| 17 |
REPO="unsloth/GLM-4.7-Flash-GGUF"
|
| 18 |
-
MODEL_FILE="
|
| 19 |
MODEL_ID="glm-4.7-flash-q4_k_m"
|
| 20 |
PROVIDER_ID="llama-cpp-local"
|
| 21 |
CONTEXT_SIZE=65536 # 上下文 64K
|
|
@@ -107,20 +109,27 @@ info "npm 版本: $(npm --version)"
|
|
| 107 |
# ==============================================================================
|
| 108 |
info "1) 编译 llama.cpp (源码)..."
|
| 109 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 110 |
if [[ ! -x "$LLAMA_BIN/llama-server" ]]; then
|
| 111 |
info "克隆 llama.cpp 仓库 (深度1)..."
|
| 112 |
if [[ -d "$LLAMA_SRC_DIR/.git" ]]; then
|
| 113 |
info "源码目录已存在,更新..."
|
| 114 |
cd "$LLAMA_SRC_DIR"
|
| 115 |
-
git pull
|
| 116 |
else
|
| 117 |
git clone --depth 1 https://github.com/ggml-org/llama.cpp "$LLAMA_SRC_DIR"
|
| 118 |
fi
|
| 119 |
|
| 120 |
cd "$LLAMA_SRC_DIR"
|
| 121 |
-
info "执行 cmake 配置..."
|
|
|
|
| 122 |
cmake -B build \
|
| 123 |
-
-DGGML_NATIVE=
|
|
|
|
| 124 |
-DGGML_BACKEND_DL=OFF \
|
| 125 |
-DLLAMA_BUILD_TESTS=OFF \
|
| 126 |
-DCMAKE_BUILD_TYPE=Release
|
|
@@ -135,7 +144,7 @@ if [[ ! -x "$LLAMA_BIN/llama-server" ]]; then
|
|
| 135 |
error "编译失败,找不到 llama-server"
|
| 136 |
fi
|
| 137 |
else
|
| 138 |
-
ok "llama-server 已存在,跳过编译"
|
| 139 |
fi
|
| 140 |
|
| 141 |
# 更新 PATH
|
|
@@ -153,7 +162,7 @@ done
|
|
| 153 |
info "2) 下载模型 ${REPO} -> ${MODEL_FILE} ..."
|
| 154 |
|
| 155 |
MODEL_URL="https://huggingface.co/${REPO}/resolve/main/${MODEL_FILE}"
|
| 156 |
-
MODEL_PATH="$MODEL_DIR/$MODEL_FILE"
|
| 157 |
|
| 158 |
if [[ ! -f "$MODEL_PATH" ]]; then
|
| 159 |
info "开始下载模型 (支持断点续传)..."
|
|
@@ -169,7 +178,7 @@ else
|
|
| 169 |
fi
|
| 170 |
|
| 171 |
# ==============================================================================
|
| 172 |
-
# 3. 启动 llama-server (使用 taskset 和指定参数,上下文
|
| 173 |
# ==============================================================================
|
| 174 |
info "3) 启动 llama-server (port $LLAMA_PORT, taskset 0-14, context $CONTEXT_SIZE)..."
|
| 175 |
|
|
@@ -186,20 +195,38 @@ fi
|
|
| 186 |
pkill -f "llama-server.*${LLAMA_PORT}" 2>/dev/null || true
|
| 187 |
sleep 1
|
| 188 |
|
| 189 |
-
#
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 190 |
CMD=(
|
| 191 |
-
taskset
|
| 192 |
prlimit --as=34359738368
|
| 193 |
"$LLAMA_BIN/llama-server"
|
| 194 |
-m "$MODEL_PATH"
|
| 195 |
--alias "$MODEL_ID"
|
| 196 |
-
-t
|
| 197 |
--jinja
|
| 198 |
--load-mode mlock
|
| 199 |
-c "$CONTEXT_SIZE"
|
| 200 |
--host 127.0.0.1
|
| 201 |
--port "$LLAMA_PORT"
|
| 202 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
| 203 |
|
| 204 |
info "启动命令: ${CMD[*]}"
|
| 205 |
touch "$HOME_DIR/llama-server.log" 2>/dev/null || true
|
|
@@ -333,7 +360,7 @@ cfg["providers"][provider] = {
|
|
| 333 |
"compat": {"supportsDeveloperRole": True, "supportsReasoningEffort": False},
|
| 334 |
"models": [{
|
| 335 |
"id": model_id,
|
| 336 |
-
"name": "
|
| 337 |
"reasoning": True,
|
| 338 |
"input": ["text"],
|
| 339 |
"contextWindow": ctx_size,
|
|
@@ -465,7 +492,7 @@ else
|
|
| 465 |
echo -e "\033[33m⚠️ 安装完成,但部分验证未通过,请查看上方警告\033[0m"
|
| 466 |
fi
|
| 467 |
echo "================================================================"
|
| 468 |
-
echo "- 模型: $REPO"
|
| 469 |
echo " 模型文件: $MODEL_PATH"
|
| 470 |
echo "- 内存限制: 32GB"
|
| 471 |
echo "- llama-server (编译自源码): $LLAMA_BIN/llama-server"
|
|
|
|
| 2 |
set -euo pipefail
|
| 3 |
|
| 4 |
# ==============================================================================
|
| 5 |
+
# installpi.sh - 一键全自动安装 pi + llama.cpp (源码编译) + Qwen2.5 模型
|
| 6 |
# 特性:无 sudo、无互动、全自动、可断点续传、安装后自动验证
|
| 7 |
+
# 模型:unsloth/GLM-4.7-Flash-GGUF (GLM-4.7-Flash-Q4_K_M.gguf)
|
| 8 |
# 启动:taskset -c 0-14 llama-server ... -t 15 --jinja --load-mode mlock -c 65536 (64K上下文)
|
| 9 |
# ==============================================================================
|
| 10 |
|
| 11 |
HOME_DIR="$HOME"
|
| 12 |
+
# 脚本一开始就把之前安装的 node / pi / llama 路径放进 PATH,避免每次重复装 node
|
| 13 |
+
export PATH="${XDG_DATA_HOME:-$HOME/.local/share}/pi-node/current/bin:$HOME/.local/bin:$HOME/.pi/bin:$PATH"
|
| 14 |
LLAMA_SRC_DIR="$HOME_DIR/llama.cpp" # 源码目录
|
| 15 |
LLAMA_BIN="$LLAMA_SRC_DIR/build/bin" # 编译后二进制目录
|
| 16 |
MODEL_DIR="$HOME_DIR/models"
|
| 17 |
PI_MODELS_JSON="$HOME_DIR/.pi/agent/models.json"
|
| 18 |
LLAMA_PORT=8080
|
| 19 |
REPO="unsloth/GLM-4.7-Flash-GGUF"
|
| 20 |
+
MODEL_FILE="GLM-4.7-Flash-Q4_K_M.gguf"
|
| 21 |
MODEL_ID="glm-4.7-flash-q4_k_m"
|
| 22 |
PROVIDER_ID="llama-cpp-local"
|
| 23 |
CONTEXT_SIZE=65536 # 上下文 64K
|
|
|
|
| 109 |
# ==============================================================================
|
| 110 |
info "1) 编译 llama.cpp (源码)..."
|
| 111 |
|
| 112 |
+
if [[ "${LLAMA_FORCE_REBUILD:-0}" == "1" ]]; then
|
| 113 |
+
info "LLAMA_FORCE_REBUILD=1,清理旧 build 目录强制重编..."
|
| 114 |
+
rm -rf "$LLAMA_SRC_DIR/build"
|
| 115 |
+
fi
|
| 116 |
+
|
| 117 |
if [[ ! -x "$LLAMA_BIN/llama-server" ]]; then
|
| 118 |
info "克隆 llama.cpp 仓库 (深度1)..."
|
| 119 |
if [[ -d "$LLAMA_SRC_DIR/.git" ]]; then
|
| 120 |
info "源码目录已存在,更新..."
|
| 121 |
cd "$LLAMA_SRC_DIR"
|
| 122 |
+
git pull || warn "git pull 失败,继续使用现有源码"
|
| 123 |
else
|
| 124 |
git clone --depth 1 https://github.com/ggml-org/llama.cpp "$LLAMA_SRC_DIR"
|
| 125 |
fi
|
| 126 |
|
| 127 |
cd "$LLAMA_SRC_DIR"
|
| 128 |
+
info "执行 cmake 配置 (纯 CPU,不开 NATIVE/DL,避免 MoE/多变体后端在纯 CPU 上崩)..."
|
| 129 |
+
rm -rf build
|
| 130 |
cmake -B build \
|
| 131 |
+
-DGGML_NATIVE=OFF \
|
| 132 |
+
-DGGML_CPU=ON \
|
| 133 |
-DGGML_BACKEND_DL=OFF \
|
| 134 |
-DLLAMA_BUILD_TESTS=OFF \
|
| 135 |
-DCMAKE_BUILD_TYPE=Release
|
|
|
|
| 144 |
error "编译失败,找不到 llama-server"
|
| 145 |
fi
|
| 146 |
else
|
| 147 |
+
ok "llama-server 已存在,跳过编译 (如需重编: LLAMA_FORCE_REBUILD=1 ./installpi.sh)"
|
| 148 |
fi
|
| 149 |
|
| 150 |
# 更新 PATH
|
|
|
|
| 162 |
info "2) 下载模型 ${REPO} -> ${MODEL_FILE} ..."
|
| 163 |
|
| 164 |
MODEL_URL="https://huggingface.co/${REPO}/resolve/main/${MODEL_FILE}"
|
| 165 |
+
MODEL_PATH="$MODEL_DIR/${MODEL_FILE}"
|
| 166 |
|
| 167 |
if [[ ! -f "$MODEL_PATH" ]]; then
|
| 168 |
info "开始下载模型 (支持断点续传)..."
|
|
|
|
| 178 |
fi
|
| 179 |
|
| 180 |
# ==============================================================================
|
| 181 |
+
# 3. 启动 llama-server (使用 taskset 和指定参数,上下文 64K)
|
| 182 |
# ==============================================================================
|
| 183 |
info "3) 启动 llama-server (port $LLAMA_PORT, taskset 0-14, context $CONTEXT_SIZE)..."
|
| 184 |
|
|
|
|
| 195 |
pkill -f "llama-server.*${LLAMA_PORT}" 2>/dev/null || true
|
| 196 |
sleep 1
|
| 197 |
|
| 198 |
+
# 按实际 CPU 数决定 taskset 范围 / 线程数 (避免机器核数不足时 taskset 报错)
|
| 199 |
+
NPROC=$(nproc 2>/dev/null || echo 16)
|
| 200 |
+
if [[ "$NPROC" -ge 15 ]]; then
|
| 201 |
+
TASKSET_ARGS=(-c 0-14)
|
| 202 |
+
NTHREADS=15
|
| 203 |
+
else
|
| 204 |
+
TASKSET_ARGS=(-c "0-$((NPROC-1))")
|
| 205 |
+
NTHREADS="$NPROC"
|
| 206 |
+
fi
|
| 207 |
+
if ! taskset "${TASKSET_ARGS[@]}" true 2>/dev/null; then
|
| 208 |
+
warn "taskset ${TASKSET_ARGS[*]} 不可用,改用不绑核启动"
|
| 209 |
+
TASKSET_ARGS=()
|
| 210 |
+
fi
|
| 211 |
+
|
| 212 |
+
# 构建命令(prlimit 限制内存 32GB;LD_LIBRARY_PATH 已在前面 export,prlimit 会继承)
|
| 213 |
CMD=(
|
| 214 |
+
taskset "${TASKSET_ARGS[@]}"
|
| 215 |
prlimit --as=34359738368
|
| 216 |
"$LLAMA_BIN/llama-server"
|
| 217 |
-m "$MODEL_PATH"
|
| 218 |
--alias "$MODEL_ID"
|
| 219 |
+
-t "$NTHREADS"
|
| 220 |
--jinja
|
| 221 |
--load-mode mlock
|
| 222 |
-c "$CONTEXT_SIZE"
|
| 223 |
--host 127.0.0.1
|
| 224 |
--port "$LLAMA_PORT"
|
| 225 |
)
|
| 226 |
+
# taskset 参数为空时去掉 taskset 本体
|
| 227 |
+
if [[ "${#TASKSET_ARGS[@]}" -eq 0 ]]; then
|
| 228 |
+
CMD=(prlimit --as=34359738368 "$LLAMA_BIN/llama-server" -m "$MODEL_PATH" --alias "$MODEL_ID" -t "$NTHREADS" --jinja --load-mode mlock -c "$CONTEXT_SIZE" --host 127.0.0.1 --port "$LLAMA_PORT")
|
| 229 |
+
fi
|
| 230 |
|
| 231 |
info "启动命令: ${CMD[*]}"
|
| 232 |
touch "$HOME_DIR/llama-server.log" 2>/dev/null || true
|
|
|
|
| 360 |
"compat": {"supportsDeveloperRole": True, "supportsReasoningEffort": False},
|
| 361 |
"models": [{
|
| 362 |
"id": model_id,
|
| 363 |
+
"name": "GLM-4.7-Flash Q4_K_M (Local)",
|
| 364 |
"reasoning": True,
|
| 365 |
"input": ["text"],
|
| 366 |
"contextWindow": ctx_size,
|
|
|
|
| 492 |
echo -e "\033[33m⚠️ 安装完成,但部分验证未通过,请查看上方警告\033[0m"
|
| 493 |
fi
|
| 494 |
echo "================================================================"
|
| 495 |
+
echo "- 模型: $REPO ($MODEL_FILE)"
|
| 496 |
echo " 模型文件: $MODEL_PATH"
|
| 497 |
echo "- 内存限制: 32GB"
|
| 498 |
echo "- llama-server (编译自源码): $LLAMA_BIN/llama-server"
|