Enhancer / tools /cleanup_disk.py
supli6669
style: move utility and test scripts into tools/ folder to clean up root directory
d965ff5
Raw
History Blame Contribute Delete
4.9 kB
import os
import shutil
import glob
def get_dir_size(path):
total = 0
try:
for entry in os.scandir(path):
if entry.is_file():
total += entry.stat().st_size
elif entry.is_dir():
total += get_dir_size(entry.path)
except Exception:
pass
return total
def main():
project_dir = os.path.dirname(os.path.abspath(__file__))
experiments_dir = os.path.join(project_dir, "models", "CodeFormer", "experiments")
if not os.path.exists(experiments_dir):
print("Experiments directory not found.")
return
print("=== Disk Cleanup Script ===")
# Active run folder
active_folder = "20260708_201102_CodeFormer_stage3_custom"
active_path = os.path.join(experiments_dir, active_folder)
total_freed = 0
# 1. Delete old/abandoned experiment folders
for entry in os.scandir(experiments_dir):
if entry.is_dir() and entry.name != active_folder and entry.name != "pretrained_models":
dir_size = get_dir_size(entry.path)
print(f"Deleting old run: {entry.name} ({dir_size / 1024 / 1024 / 1024:.2f} GB)...")
try:
shutil.rmtree(entry.path)
total_freed += dir_size
print("Deleted.")
except Exception as e:
print(f"Error deleting {entry.name}: {e}")
# 2. Clean intermediate checkpoints in the active folder
if os.path.exists(active_path):
print(f"\nCleaning intermediate checkpoints in active run: {active_folder}...")
# Scan models directory
models_dir = os.path.join(active_path, "models")
if os.path.exists(models_dir):
pth_files = glob.glob(os.path.join(models_dir, "*.pth"))
# Find the highest iteration index in models
indices = []
for filepath in pth_files:
basename = os.path.basename(filepath)
if "latest" in basename:
continue
# format is net_g_XX.pth or net_d_XX.pth
try:
parts = basename.replace(".pth", "").split("_")
idx = int(parts[-1])
indices.append(idx)
except ValueError:
continue
if indices:
highest_idx = max(indices)
print(f"Active run highest iteration index: {highest_idx}")
# We want to keep:
# - files with "latest" in their name
# - files matching highest_idx
# - files matching highest_idx - 5 (as backup)
keep_indices = {highest_idx, highest_idx - 5}
for filepath in pth_files:
basename = os.path.basename(filepath)
if "latest" in basename:
continue
try:
parts = basename.replace(".pth", "").split("_")
idx = int(parts[-1])
if idx not in keep_indices:
file_size = os.path.getsize(filepath)
os.remove(filepath)
total_freed += file_size
except Exception as e:
print(f"Error removing {basename}: {e}")
# Scan training_states directory
states_dir = os.path.join(active_path, "training_states")
if os.path.exists(states_dir):
state_files = glob.glob(os.path.join(states_dir, "*.state"))
state_indices = []
for filepath in state_files:
basename = os.path.basename(filepath)
try:
idx = int(basename.replace(".state", ""))
state_indices.append(idx)
except ValueError:
continue
if state_indices:
highest_state_idx = max(state_indices)
keep_state_indices = {highest_state_idx, highest_state_idx - 5}
for filepath in state_files:
basename = os.path.basename(filepath)
try:
idx = int(basename.replace(".state", ""))
if idx not in keep_state_indices:
file_size = os.path.getsize(filepath)
os.remove(filepath)
total_freed += file_size
except Exception as e:
print(f"Error removing {basename}: {e}")
print(f"\nSUCCESS: Cleanup completed! Freed up {total_freed / 1024 / 1024 / 1024:.2f} GB of disk space.")
if __name__ == "__main__":
main()