Initial commit
This commit is contained in:
commit
8641464a6c
44 files changed
+2192
No files matched your search
@@ -0,0 +1,61 @@
|
||||
#!/usr/bin/env bash
|
||||
# Baut in einem neuen Verzeichnis. Kein Ersetzen von /usr/bin oder laufenden Builds.
|
||||
set -Eeuo pipefail
|
||||
umask 077
|
||||
revision=""
|
||||
jobs=4
|
||||
cuda_arch=86
|
||||
base_dir="$HOME/.local/opt/llama.cpp"
|
||||
usage() {
|
||||
printf 'Aufruf: %s --ref TAG_ODER_COMMIT [--jobs N] [--cuda-arch 86] [--prefix ABSOLUTER_PFAD]\n' "$0"
|
||||
printf 'Explizit --ref master für aktuellen Stand; aufgelöster Commit wird gespeichert.\n'
|
||||
}
|
||||
while (($#)); do
|
||||
case "$1" in
|
||||
--ref) [[ $# -ge 2 ]] || exit 2; revision="$2"; shift ;;
|
||||
--jobs) [[ $# -ge 2 ]] || exit 2; jobs="$2"; shift ;;
|
||||
--cuda-arch) [[ $# -ge 2 ]] || exit 2; cuda_arch="$2"; shift ;;
|
||||
--prefix) [[ $# -ge 2 ]] || exit 2; base_dir="$2"; shift ;;
|
||||
-h|--help) usage; exit 0 ;;
|
||||
*) usage >&2; exit 2 ;;
|
||||
esac
|
||||
shift
|
||||
done
|
||||
[[ "$revision" =~ ^[A-Za-z0-9][A-Za-z0-9._/-]*$ ]] || { usage >&2; exit 2; }
|
||||
[[ "$jobs" =~ ^[1-9][0-9]*$ && "$cuda_arch" =~ ^[1-9][0-9]*$ ]] || exit 2
|
||||
[[ "$base_dir" == /* && "$base_dir" != / && "$base_dir" != "$HOME" ]] || exit 2
|
||||
for dependency in git cmake ninja c++ nvidia-smi; do
|
||||
command -v "$dependency" >/dev/null || {
|
||||
printf '%s fehlt. Siehe docs/LLAMA_INSTALL.md.\n' "$dependency" >&2; exit 1;
|
||||
}
|
||||
done
|
||||
nvidia-smi >/dev/null
|
||||
nvcc_path="${CUDACXX:-/opt/cuda/bin/nvcc}"
|
||||
[[ -x "$nvcc_path" ]] || { printf 'CUDA nvcc fehlt: %s\n' "$nvcc_path" >&2; exit 1; }
|
||||
mkdir -p "$base_dir"
|
||||
exec 9>"$base_dir/build.lock"
|
||||
flock -n 9 || { printf 'Ein CUDA-Build läuft bereits.\n' >&2; exit 1; }
|
||||
build_dir="$(mktemp -d "$base_dir/build.XXXXXXXX")"
|
||||
printf 'Neuer Build unter %s (bleibt auch bei Fehler zur Diagnose erhalten).\n' "$build_dir"
|
||||
git init -q "$build_dir/source"
|
||||
git -C "$build_dir/source" remote add origin https://github.com/ggml-org/llama.cpp.git
|
||||
GIT_TERMINAL_PROMPT=0 timeout 300 git -C "$build_dir/source" fetch --depth 1 origin "$revision"
|
||||
git -C "$build_dir/source" checkout --detach FETCH_HEAD
|
||||
commit="$(git -C "$build_dir/source" rev-parse HEAD)"
|
||||
cmake -S "$build_dir/source" -B "$build_dir/build" -G Ninja \
|
||||
-DCMAKE_BUILD_TYPE=Release -DGGML_CUDA=ON -DBUILD_SHARED_LIBS=OFF \
|
||||
-DCMAKE_CUDA_COMPILER="$nvcc_path" -DCMAKE_CUDA_ARCHITECTURES="$cuda_arch"
|
||||
cmake --build "$build_dir/build" --parallel "$jobs" --target llama-server llama-cli llama-bench
|
||||
cp -a -- "$build_dir/build/bin" "$build_dir/bin"
|
||||
"$build_dir/bin/llama-server" --version
|
||||
"$build_dir/bin/llama-cli" --version
|
||||
printf 'upstream=https://github.com/ggml-org/llama.cpp.git\nref=%s\ncommit=%s\ncuda_arch=%s\nbuilt=%s\n' \
|
||||
"$revision" "$commit" "$cuda_arch" "$(date --iso-8601=seconds)" >"$build_dir/BUILD-INFO.txt"
|
||||
if [[ ! -e "$base_dir/current" && ! -L "$base_dir/current" ]]; then
|
||||
ln -s -- "$build_dir" "$base_dir/current"
|
||||
printf 'Erster verwalteter Build ausgewählt; noch kein Dienst gestartet.\n'
|
||||
else
|
||||
printf 'Bestehender current-Build bleibt unverändert.\n'
|
||||
fi
|
||||
printf 'Neue Binary: %s/bin/llama-server\nCommit: %s\n' "$build_dir" "$commit"
|
||||
printf 'Zur bewussten Auswahl LLAMA_SERVER_BIN in llama.env setzen. Keine automatische Aktualisierung.\n'
|
||||
Reference in new issue
Block a user