@@ -41,6 +41,8 @@ OPTIONS:
4141 --setup-only Only setup environment without generating figures
4242 --no-setup Skip environment setup (assume already configured)
4343 --force-install Force reinstall of all dependencies
44+ --clean Remove environment and start fresh (removes conda env and caches)
45+ --clean-cache Clear conda and pip caches only
4446
4547EXAMPLES:
4648 $0 # Setup environment and generate all figures
@@ -49,6 +51,8 @@ EXAMPLES:
4951 $0 -t # Train models from scratch, then generate figures
5052 $0 -l # List available figures
5153 $0 --setup-only # Only setup the environment
54+ $0 --clean # Remove environment and reinstall from scratch
55+ $0 --clean-cache # Clear conda/pip caches
5256
5357FIGURES:
5458 1a - Figure 1A: Training curves (all_losses.pdf)
@@ -82,6 +86,63 @@ check_conda() {
8286 fi
8387}
8488
89+ # Function to clean environment and caches
90+ clean_environment () {
91+ print_info " Cleaning environment and caches..."
92+
93+ # Remove conda environment if it exists
94+ if conda env list | grep -q " ^$CONDA_ENV " ; then
95+ print_info " Removing conda environment '$CONDA_ENV '..."
96+ conda env remove -n " $CONDA_ENV " -y
97+ fi
98+
99+ # Clean conda caches
100+ print_info " Cleaning conda caches..."
101+ conda clean --all -y
102+
103+ # Clean pip cache
104+ print_info " Cleaning pip cache..."
105+ pip cache purge 2> /dev/null || true
106+
107+ print_success " Environment and caches cleaned"
108+ }
109+
110+ # Function to clean caches only
111+ clean_caches () {
112+ print_info " Cleaning caches only..."
113+
114+ # Clean conda caches
115+ print_info " Cleaning conda caches..."
116+ conda clean --all -y
117+
118+ # Clean pip cache
119+ print_info " Cleaning pip cache..."
120+ if conda env list | grep -q " ^$CONDA_ENV " ; then
121+ eval " $( conda shell.bash hook) "
122+ conda activate " $CONDA_ENV "
123+ pip cache purge 2> /dev/null || true
124+ else
125+ pip cache purge 2> /dev/null || true
126+ fi
127+
128+ print_success " Caches cleaned"
129+ }
130+
131+ # Function to detect CUDA availability
132+ detect_cuda () {
133+ if command -v nvidia-smi & > /dev/null; then
134+ if nvidia-smi & > /dev/null; then
135+ # Get CUDA version from nvidia-smi
136+ local cuda_version=$( nvidia-smi | grep " CUDA Version" | awk ' {print $9}' | cut -d. -f1,2)
137+ if [ -n " $cuda_version " ]; then
138+ echo " $cuda_version "
139+ return 0
140+ fi
141+ fi
142+ fi
143+ return 1
144+ }
145+
85146# Function to install conda
86147install_conda () {
87148 print_info " Conda not found. Installing Miniconda..."
@@ -169,9 +230,39 @@ setup_environment() {
169230
170231 print_info " Installing dependencies..."
171232
172- # Install PyTorch with CUDA support
173- conda install -c pytorch -c nvidia pytorch pytorch-cuda=12.1 -y 2> /dev/null || \
174- conda install -c pytorch pytorch -y
233+ # Detect CUDA and install appropriate PyTorch version
234+ if cuda_version=$( detect_cuda) ; then
235+ print_info " CUDA detected: version $cuda_version "
236+
237+ # Map CUDA version to appropriate PyTorch CUDA version
238+ # CUDA 12.x -> pytorch-cuda=12.1
239+ # CUDA 11.x -> pytorch-cuda=11.8
240+ if [[ $cuda_version == 12* ]]; then
241+ pytorch_cuda=" 12.1"
242+ elif [[ $cuda_version == 11* ]]; then
243+ pytorch_cuda=" 11.8"
244+ else
245+ print_warning " Unsupported CUDA version $cuda_version , trying default"
246+ pytorch_cuda=" 12.1"
247+ fi
248+
249+ print_info " Installing PyTorch with CUDA $pytorch_cuda support..."
250+ conda install pytorch torchvision torchaudio pytorch-cuda=$pytorch_cuda -c pytorch -c nvidia -y
251+
252+ # Verify CUDA installation
253+ if python -c " import torch; assert torch.cuda.is_available()" 2> /dev/null; then
254+ print_success " PyTorch installed with CUDA support"
255+ else
256+ print_warning " PyTorch CUDA verification failed, reinstalling..."
257+ # Try to fix by reinstalling
258+ conda uninstall pytorch torchvision torchaudio -y
259+ pip uninstall torch torchvision torchaudio -y 2> /dev/null || true
260+ conda install pytorch torchvision torchaudio pytorch-cuda=$pytorch_cuda -c pytorch -c nvidia -y
261+ fi
262+ else
263+ print_warning " CUDA not detected, installing CPU-only PyTorch"
264+ conda install pytorch torchvision torchaudio cpuonly -c pytorch -y
265+ fi
175266
176267 # Install other dependencies
177268 pip install --upgrade pip
@@ -193,6 +284,8 @@ LIST_FIGURES=false
193284SETUP_ONLY=false
194285SKIP_SETUP=false
195286FORCE_INSTALL=false
287+ CLEAN=false
288+ CLEAN_CACHE=false
196289
197290while [[ $# -gt 0 ]]; do
198291 case $1 in
@@ -232,6 +325,14 @@ while [[ $# -gt 0 ]]; do
232325 FORCE_INSTALL=true
233326 shift
234327 ;;
328+ --clean)
329+ CLEAN=true
330+ shift
331+ ;;
332+ --clean-cache)
333+ CLEAN_CACHE=true
334+ shift
335+ ;;
235336 * )
236337 print_error " Unknown option: $1 "
237338 show_help
@@ -246,6 +347,18 @@ echo "║ LLM Stylometry CLI ║"
246347echo " ╚══════════════════════════════════════════════════════════╝"
247348echo
248349
350+ # Handle clean operations first
351+ if [ " $CLEAN " = true ]; then
352+ clean_environment
353+ print_info " Environment cleaned. Run the script again to set up fresh environment."
354+ exit 0
355+ fi
356+
357+ if [ " $CLEAN_CACHE " = true ]; then
358+ clean_caches
359+ exit 0
360+ fi
361+
249362# Check and install conda if needed
250363if ! check_conda; then
251364 print_warning " Conda not found"
0 commit comments