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.
123 lines
3.0 KiB
Bash
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 "$@"
|