You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
DroneDetector/install_all_train.sh

123 lines
3.0 KiB
Bash

#!/usr/bin/env bash
set -Eeuo pipefail
PROJECT_ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
VENV_PATH="${PROJECT_ROOT}/.venv-train"
PYTHON_BIN="${PYTHON_BIN:-python3}"
KERNEL_NAME="${KERNEL_NAME:-dronedetector-train}"
KERNEL_DISPLAY="${KERNEL_DISPLAY:-DroneDetector Train}"
log() {
printf '[install_all_train] %s\n' "$*"
}
die() {
printf '[install_all_train] ERROR: %s\n' "$*" >&2
exit 1
}
run_as_root() {
if [[ "${EUID}" -eq 0 ]]; then
"$@"
elif command -v sudo >/dev/null 2>&1; then
sudo "$@"
else
die "Root privileges are required to install host packages."
fi
}
preflight() {
[[ -f "${PROJECT_ROOT}/deploy/requirements/nn_gpu_pinned.txt" ]] || die "Missing deploy/requirements/nn_gpu_pinned.txt"
[[ -f "${PROJECT_ROOT}/requirements-train.txt" ]] || die "Missing train_scripts/requirements-train.txt"
[[ -f "${PROJECT_ROOT}/torchsig/pyproject.toml" ]] || die "Missing local torchsig package"
command -v "${PYTHON_BIN}" >/dev/null 2>&1 || die "${PYTHON_BIN} not found"
}
install_host_deps() {
if ! command -v apt-get >/dev/null 2>&1; then
log "apt-get not found; skipping host package installation"
return
fi
log "Installing host packages"
run_as_root apt-get update
run_as_root env DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
python3 \
python3-pip \
python3-venv \
python3-dev \
build-essential \
pkg-config \
libgl1 \
libglib2.0-0 \
libsm6 \
libxext6 \
libxrender-dev
}
setup_venv() {
log "Creating/updating ${VENV_PATH}"
if [[ ! -d "${VENV_PATH}" ]]; then
"${PYTHON_BIN}" -m venv "${VENV_PATH}"
fi
# shellcheck disable=SC1090
source "${VENV_PATH}/bin/activate"
python -m pip install --upgrade pip setuptools wheel
}
install_python_deps() {
log "Installing CUDA-enabled torch stack"
python -m pip install -r "${PROJECT_ROOT}/deploy/requirements/nn_gpu_pinned.txt"
log "Installing train notebook dependencies"
python -m pip install -r "${PROJECT_ROOT}/train_scripts/requirements-train.txt"
log "Installing local torchsig from repo"
python -m pip install -e "${PROJECT_ROOT}/torchsig" --no-deps
log "Registering Jupyter kernel ${KERNEL_NAME}"
python -m ipykernel install --user --name "${KERNEL_NAME}" --display-name "${KERNEL_DISPLAY}"
}
verify_install() {
log "Verifying imports"
python - <<'PY'
import cv2
import ipykernel
import matplotlib
import mlconfig
import numpy
import pandas
import scipy
import sklearn
import torch
import torchvision
import torchsig
print('python_ok', True)
print('torch', torch.__version__)
print('torchvision', torchvision.__version__)
print('cuda_available', torch.cuda.is_available())
print('torch_cuda', torch.version.cuda)
print('torchsig', getattr(torchsig, '__version__', 'unknown'))
PY
}
main() {
preflight
if [[ "${1:-}" != "--skip-apt" ]]; then
install_host_deps
else
log "Skipping host package installation (--skip-apt)"
fi
setup_venv
install_python_deps
verify_install
log "SUCCESS: .venv-train is ready"
}
main "$@"