HelloSun commited on
Commit
e18ff45
·
verified ·
1 Parent(s): ec4cb1d

Update installpi.sh

Browse files
Files changed (1) hide show
  1. installpi.sh +41 -14
installpi.sh CHANGED
@@ -2,20 +2,22 @@
2
  set -euo pipefail
3
 
4
  # ==============================================================================
5
- # installpi.sh - 一键全自动安装 pi + llama.cpp (源码编译) + Huihui 模型
6
  # 特性:无 sudo、无互动、全自动、可断点续传、安装后自动验证
7
- # 模型:mradermacher/Huihui-Qwen3.5-4B-Claude-4.6-Opus-abliterated-GGUF (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
  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="https://huggingface.co/unsloth/GLM-4.7-Flash-GGUF/resolve/main/GLM-4.7-Flash-Q4_K_M.gguf"
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=ON \
 
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 和指定参数,上下文调至极限 128K)
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
- # 构建命令(注意 taskset 包裹整个 llama-server,prlimit 限制内存 32GB)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
190
  CMD=(
191
- taskset -c 0-14
192
  prlimit --as=34359738368
193
  "$LLAMA_BIN/llama-server"
194
  -m "$MODEL_PATH"
195
  --alias "$MODEL_ID"
196
- -t 15
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": "Huihui Qwen3.5 4B Claude 4.6 Opus (Local)",
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"