| """ |
| Project EDEN - Hugging Face Upload Master Script |
| Applies all 6 refinements: |
| 1. Hardware transparency (1080 Ti / Xeon W-2125) |
| 2. E2AM Phase mapping per model |
| 3. Phase 1 Zero-Overhead Initialization highlight |
| 4. Standardized Green Delta table in every README |
| 5. YAML tags with co2_eq_emissions + dataset_size |
| 6. Citation section in Main Repo |
| """ |
|
|
| import os |
| import json |
| import glob |
| import math |
| from huggingface_hub import HfApi, create_repo, upload_file |
|
|
| |
| HF_TOKEN = os.environ.get("HF_TOKEN", "") |
| HF_USER = "Shanmuk4622" |
| HF_ORG = HF_USER |
| BASE_DIR = os.path.dirname(os.path.abspath(__file__)) |
| DRY_RUN = False |
|
|
| api = HfApi(token=HF_TOKEN) |
|
|
| |
| HARDWARE = { |
| "gpu": "NVIDIA GeForce GTX 1080 Ti (11 GB VRAM, 250 W TDP)", |
| "cpu": "Intel Xeon W-2125 (4 cores / 8 threads @ 4.00 GHz)", |
| "ram": "63.66 GB System RAM", |
| "os": "Windows 10", |
| } |
|
|
| |
| |
| PHASE_MAP = { |
| "test1": "Phase 2 β Progressive Unfreezing + AMP (E2AM SOTA)", |
| "test2": "Baseline β Standard Full Training (Reference Study)", |
| "test3": "Phase 2 β EDEN Classic Energy-Aware Sparse Training", |
| } |
|
|
| PHASE_DETAIL = { |
| "test1": ( |
| "**Phase 1 β Zero-Overhead Initialization:** Dataset pre-loaded into pinned " |
| "System RAM to eliminate disk I/O power spikes.\n\n" |
| "**Phase 2 β Progressive Unfreezing:** Backbone frozen for the first " |
| "`E_unfreeze` epochs (only the classification head trains). At `E_unfreeze`, " |
| "all layers are unfrozen and the learning rate is decayed. " |
| "Gradient accumulation over N micro-batches simulates large batch sizes " |
| "without proportional VRAM cost, slashing power-draw spikes.\n\n" |
| "**AMP (Automated Mixed Precision):** `torch.cuda.amp.autocast()` halves " |
| "GPU memory bandwidth, reducing energy per backward pass.\n\n" |
| "**Sparse Regularisation:** L1 penalty `λ·Σ|W|` applied to trainable " |
| "weights, driving dead neurons to zero and enabling future pruning." |
| ), |
| "test2": ( |
| "Standard full fine-tuning used as the **Brute-Force Baseline** for " |
| "energy comparison. All layers trained from epoch 1 with a fixed learning " |
| "rate and no gradient accumulation. Included for transparent EAG benchmarking." |
| ), |
| "test3": ( |
| "**Phase 1 β Zero-Overhead Initialization:** Dataset cached in System RAM.\n\n" |
| "**Phase 2 β EDEN Classic:** Energy-aware training loop on classic CNN " |
| "architectures. Applies the same EAG early-exit criterion " |
| "(`EAG < Ξ³_EAG` for 3 consecutive epochs β terminate), L1 sparsity " |
| "penalty, and AMP to architectures like ResNet, VGG, AlexNet, DenseNet, " |
| "InceptionV3, and UNet." |
| ), |
| } |
|
|
| |
| DATASET_META = { |
| "CIFAR-10": {"size": "60,000 images β 10 classes (32Γ32 px)", "hf_name": "cifar10"}, |
| "CIFAR-100": {"size": "60,000 images β 100 classes (32Γ32 px)", "hf_name": "cifar100"}, |
| "Custom-ImageNet300": {"size": "~450,000 images β 300 classes (224 px)", "hf_name": "imagenet"}, |
| "unknown": {"size": "N/A", "hf_name": "unknown"}, |
| } |
|
|
| |
| KG_CO2_PER_KWH = 0.000000475 |
|
|
| |
| def parse_name(filename): |
| fn = filename.lower().replace("\\", "/") |
| dataset = "unknown" |
| arch = "unknown" |
| if "cifar100" in fn: dataset = "CIFAR-100" |
| elif "cifar10" in fn: dataset = "CIFAR-10" |
| elif "imagenet" in fn: dataset = "Custom-ImageNet300" |
| if "efficientnet" in fn: arch = "EfficientNetV2" |
| elif "convnext" in fn: arch = "ConvNeXtV2" |
| elif "mobilevit" in fn: arch = "MobileViTv3" |
| elif "resnet50" in fn: arch = "ResNet50" |
| elif "resnet18" in fn: arch = "ResNet18" |
| elif "vgg16" in fn: arch = "VGG16" |
| elif "alexnet" in fn: arch = "AlexNet" |
| elif "inception" in fn: arch = "InceptionV3" |
| elif "densenet" in fn: arch = "DenseNet121" |
| elif "unet" in fn: arch = "UNet" |
| return arch, dataset |
|
|
| def joules_to_co2(joules): |
| kwh = joules / 3_600_000 |
| return kwh * 0.475 |
|
|
| def folder_to_phase_label(folder): |
| return {"test1": "SOTA Optimized", "test2": "Baseline", "test3": "EDEN Classic"}.get(folder, folder) |
|
|
| |
| with open(os.path.join(BASE_DIR, "results_summary.json")) as f: |
| results = json.load(f) |
|
|
| stats_map = {} |
| for r in results: |
| arch, dataset = parse_name(r["file"]) |
| folder = r["folder"] |
| key = f"{folder}_{arch}_{dataset}" |
| if key not in stats_map or (r["energy"] > 0 and stats_map[key]["energy"] == 0): |
| stats_map[key] = r |
|
|
| |
| baselines = {} |
| for key, v in stats_map.items(): |
| folder, *rest = key.split("_") |
| arch = v.get("arch") or parse_name(v["file"])[0] |
| if folder == "test2": |
| _, ds = parse_name(v["file"]) |
| if ds not in baselines: |
| baselines[ds] = v |
| |
| if parse_name(v["file"])[0] == "ResNet50": |
| baselines[ds] = v |
|
|
| |
| pth_files = glob.glob(os.path.join(BASE_DIR, "**/*.pth"), recursive=True) |
| models = [] |
| for pth in pth_files: |
| rel = os.path.relpath(pth, BASE_DIR) |
| parts = rel.split(os.sep) |
| folder = parts[0] |
| arch, dataset = parse_name(rel) |
| key = f"{folder}_{arch}_{dataset}" |
| stat = stats_map.get(key, {}) |
| models.append({ |
| "pth": rel, "arch": arch, "dataset": dataset, |
| "folder": folder, |
| "accuracy": stat.get("accuracy", 0), |
| "energy": stat.get("energy", 0), |
| "time": stat.get("time", 0), |
| "csv": stat.get("file", "N/A"), |
| }) |
|
|
| |
| def build_readme(model): |
| arch = model["arch"] |
| dataset = model["dataset"] |
| folder = model["folder"] |
| acc = model["accuracy"] |
| energy = model["energy"] |
| t = model["time"] |
| phase = folder_to_phase_label(folder) |
| ds_meta = DATASET_META.get(dataset, DATASET_META["unknown"]) |
| co2 = joules_to_co2(energy) if energy else 0 |
|
|
| baseline = baselines.get(dataset, {}) |
| b_acc = baseline.get("accuracy", 0) |
| b_energy = baseline.get("energy", 0) |
| b_arch = parse_name(baseline.get("file",""))[0] if baseline else "Baseline" |
|
|
| |
| if b_energy and energy: |
| energy_savings_pct = (b_energy - energy) / b_energy * 100 |
| d_acc = acc - b_acc |
| d_j = energy - b_energy |
| eag = d_acc / d_j if d_j != 0 else float("nan") |
| eag_str = f"{eag:.4e}" |
| savings_str = f"{energy_savings_pct:.2f}%" |
| acc_delta = f"{d_acc*100:+.2f}%" |
| else: |
| energy_savings_pct = 0 |
| eag_str = "N/A" |
| savings_str = "N/A" |
| acc_delta = "N/A" |
|
|
| |
| arch_tag = arch.lower().replace(" ","") |
| yaml_co2 = f"{co2:.4f}" if co2 else "0" |
|
|
| yaml = f"""--- |
| language: en |
| license: apache-2.0 |
| tags: |
| - image-classification |
| - green-ai |
| - energy-efficiency |
| - computer-vision |
| - {arch_tag} |
| - eden-framework |
| - e2am |
| - sustainable-ai |
| datasets: |
| - {ds_meta['hf_name']} |
| metrics: |
| - accuracy |
| co2_eq_emissions: |
| emissions: {yaml_co2} |
| unit: kg |
| source: Estimated via CodeCarbon (grid factor 0.475 kg CO2e/kWh) |
| hardware_used: NVIDIA GeForce GTX 1080 Ti |
| dataset_info: |
| dataset_size: "{ds_meta['size']}" |
| ---""" |
|
|
| |
| technique = PHASE_DETAIL.get(folder, "Standard training.") |
|
|
| |
| green_table = f"""| Metric | {b_arch} Baseline | **{arch} (EDEN)** | Ξ | |
| |---|---|---|---| |
| | Accuracy | {b_acc:.4f} | **{acc:.4f}** | `{acc_delta}` | |
| | Total Energy (J) | {b_energy:,.0f} | **{energy:,.0f}** | `{savings_str} saved` | |
| | COβ Emissions (kg) | {joules_to_co2(b_energy):.4f} | **{co2:.4f}** | β | |
| | **EAG Score** | β | **{eag_str}** | ΞAcc/ΞJoules |""" |
|
|
| cite = f"""## Cite This Research |
| If you use this model, please cite the **EDEN / E2AM Framework**: |
| |
| ```bibtex |
| @misc{{eden2025, |
| title = {{Project EDEN: Energy-Driven Evolution of Networks}}, |
| author = {{EDEN Research Team}}, |
| year = {{2025}}, |
| note = {{Hugging Face Organization: ProjectEDEN}}, |
| url = {{https://huggingface.co/{HF_ORG}}} |
| }} |
| ```""" |
|
|
| readme = f"""{yaml} |
| |
| # EDEN-{arch}-{dataset} β *{phase}* |
| |
| > **Primary KPI:** EAG (Energy-to-Accuracy Gradient) = `{eag_str}` ΞAcc/ΞJoules |
| |
| ## Abstract |
| This model is part of **Project EDEN (Energy-Driven Evolution of Networks)**, implementing the **E2AM (Energy Efficient Advanced Model)** Framework. The goal is to shift AI benchmarking from pure accuracy to *Green SOTA* β maximizing predictive power per Joule consumed. |
| |
| **Applied Technique:** {PHASE_MAP.get(folder, phase)} |
| |
| ## Profiling Environment |
| | Component | Specification | |
| |---|---| |
| | **GPU** | {HARDWARE['gpu']} | |
| | **CPU** | {HARDWARE['cpu']} | |
| | **RAM** | {HARDWARE['ram']} | |
| | **OS** | {HARDWARE['os']} | |
| | **Dataset** | {dataset} β {ds_meta['size']} | |
| |
| ## π’ Green Delta Table |
| *Comparing this model against the reference baseline (ResNet-50 equivalent)* |
| |
| {green_table} |
| |
| > A **positive EAG** means this model learns more per Joule than the baseline. |
| > A **negative EAG** indicates a trade-off where higher accuracy required more energy investment. |
| |
| ## E2AM Algorithm β Applied Phases |
| |
| {technique} |
| |
| ## Training Statistics |
| | Metric | Value | |
| |---|---| |
| | Final Accuracy | {acc:.4f} ({acc*100:.2f}%) | |
| | Total Energy Consumed | {energy:,.0f} J ({energy/3_600_000:.4f} kWh) | |
| | Training Time | {t:,.0f} s ({t/3600:.2f} hrs) | |
| | Estimated COβ | {co2:.4f} kg COβe | |
| | Training Log | `{model['csv']}` | |
| |
| {cite} |
| """ |
| return readme |
|
|
| |
| def build_main_repo_readme(): |
| py_scripts = [os.path.relpath(p, BASE_DIR) for p in |
| glob.glob(os.path.join(BASE_DIR, "**/*.py"), recursive=True) |
| if any(k in p for k in ["Algo_", "eden_", "mobilevit_model"])] |
|
|
| scripts_md = "\n".join(f"- `{s}`" for s in sorted(py_scripts)) |
|
|
| return f"""--- |
| language: en |
| license: apache-2.0 |
| tags: |
| - green-ai |
| - energy-efficiency |
| - e2am |
| - eden-framework |
| - sustainable-ai |
| - image-classification |
| --- |
| |
| # EDEN-Core-Scripts β E2AM Framework Repository |
| |
| > **Project EDEN (Energy-Driven Evolution of Networks)** β The complete algorithmic |
| > toolkit for Green SOTA image classification research. |
| |
| ## Why EDEN? |
| As deep learning models scale exponentially, the carbon footprint of training has |
| reached unsustainable levels. Project EDEN introduces the **EAG |
| (Energy-to-Accuracy Gradient)** as the primary KPI β shifting the paradigm from |
| chasing raw accuracy to optimising *Green SOTA*. |
| |
| ## Profiling Environment |
| | Component | Specification | |
| |---|---| |
| | **GPU** | {HARDWARE['gpu']} | |
| | **CPU** | {HARDWARE['cpu']} | |
| | **RAM** | {HARDWARE['ram']} | |
| | **OS** | {HARDWARE['os']} | |
| |
| ## The E2AM Algorithm β All Three Phases |
| |
| ### Phase 1 β Zero-Overhead Initialization |
| Dataset pre-loaded into **pinned System RAM** before training begins. |
| This eliminates disk I/O power spikes that would otherwise inflate energy readings |
| and distort EAG comparisons between architectures. |
| |
| ### Phase 2 β Two-Stage Energy-Aware Training |
| 1. **Frozen Head Training** β Only the classification head trains for the first |
| `E_unfreeze` epochs. The backbone consumes no backward-pass energy. |
| 2. **Progressive Unfreezing** β At epoch `E_unfreeze`, all layers unlock. |
| Learning rate is decayed (`LR Γ 0.1`) for stable fine-tuning. |
| 3. **Gradient Accumulation** β Gradients accumulated over N micro-batches, |
| simulating large batch sizes without VRAM spikes. |
| 4. **AMP (Automated Mixed Precision)** β `torch.cuda.amp.autocast()` halves |
| bandwidth per backward pass. |
| 5. **Sparse L1 Penalty** β `L_total = CrossEntropy + λ·Σ|W_trainable|` |
| 6. **EAG Early-Exit** β Training terminates if `EAG < Ξ³_EAG` for 3 consecutive |
| epochs, preventing wasted compute. |
| |
| ### Phase 3 β Hardware-Aware Deployment *(Post-Training)* |
| - **Saliency-Energy Pruning** β Filters with lowest `βAccuracy/βW Γ· Energy_cost` |
| are pruned. |
| - **INT8 Quantization** β Weights converted for edge-deployment readiness. |
| - **Dynamic Depth Routing** β Simple images bypass the middle 50 % of layers |
| via residual skip connections, slashing inference energy. |
| |
| ## EAG β The Expert KPI |
| ``` |
| EAG = ΞAccuracy / ΞJoules |
| ``` |
| EAG allows apples-to-apples comparison of any two models regardless of |
| architecture family. A higher EAG = more learning per unit of carbon footprint. |
| |
| ## Scripts in This Repository |
| {scripts_md} |
| |
| ## Cite This Research |
| ```bibtex |
| @misc{{eden2025, |
| title = {{Project EDEN: Energy-Driven Evolution of Networks}}, |
| author = {{EDEN Research Team}}, |
| year = {{2025}}, |
| note = {{Hugging Face Organization: ProjectEDEN}}, |
| url = {{https://huggingface.co/{HF_ORG}}} |
| }} |
| ``` |
| """ |
|
|
| |
| OUT_DIR = os.path.join(BASE_DIR, "hf_readmes") |
| os.makedirs(OUT_DIR, exist_ok=True) |
|
|
| |
| main_readme = build_main_repo_readme() |
| main_readme_path = os.path.join(OUT_DIR, "EDEN-Core-Scripts_README.md") |
| with open(main_readme_path, "w", encoding="utf-8") as f: |
| f.write(main_readme) |
| print("β Main repo README written.") |
|
|
| |
| generated_repos = set() |
| repo_model_map = {} |
|
|
| for m in models: |
| if m["arch"] == "unknown" or m["dataset"] == "unknown": continue |
| repo_name = f"EDEN-{m['arch']}-{m['dataset'].replace(' ','-')}" |
| |
| if repo_name not in repo_model_map or m["accuracy"] > repo_model_map[repo_name][0]["accuracy"]: |
| readme_text = build_readme(m) |
| repo_model_map[repo_name] = (m, readme_text) |
|
|
| for repo_name, (m, readme_text) in repo_model_map.items(): |
| path = os.path.join(OUT_DIR, f"{repo_name}_README.md") |
| with open(path, "w", encoding="utf-8") as f: |
| f.write(readme_text) |
| print(f"β {repo_name} README written.") |
|
|
| print(f"\n{'='*60}") |
| print(f"Generated {len(repo_model_map)+1} README files in: {OUT_DIR}") |
|
|
| if not DRY_RUN: |
| print("\nStarting HF upload...") |
|
|
| |
| try: |
| create_repo(repo_id=f"{HF_ORG}/EDEN-Core-Scripts", token=HF_TOKEN, |
| repo_type="model", exist_ok=True, private=False) |
| upload_file(path_or_fileobj=main_readme_path, |
| path_in_repo="README.md", |
| repo_id=f"{HF_ORG}/EDEN-Core-Scripts", |
| token=HF_TOKEN, repo_type="model") |
| |
| for py in glob.glob(os.path.join(BASE_DIR, "**/*.py"), recursive=True): |
| rel = os.path.relpath(py, BASE_DIR) |
| if any(k in rel for k in ["Algo_","eden_","mobilevit_model"]): |
| upload_file(path_or_fileobj=py, |
| path_in_repo=rel.replace("\\","/"), |
| repo_id=f"{HF_ORG}/EDEN-Core-Scripts", |
| token=HF_TOKEN, repo_type="model") |
| print("β Uploaded EDEN-Core-Scripts") |
| except Exception as e: |
| print(f"β Core-Scripts error: {e}") |
|
|
| |
| for repo_name, (m, readme_text) in repo_model_map.items(): |
| try: |
| create_repo(repo_id=f"{HF_ORG}/{repo_name}", token=HF_TOKEN, |
| repo_type="model", exist_ok=True, private=False) |
| readme_path = os.path.join(OUT_DIR, f"{repo_name}_README.md") |
| upload_file(path_or_fileobj=readme_path, |
| path_in_repo="README.md", |
| repo_id=f"{HF_ORG}/{repo_name}", |
| token=HF_TOKEN, repo_type="model") |
| |
| pth_abs = os.path.join(BASE_DIR, m["pth"]) |
| if os.path.exists(pth_abs): |
| upload_file(path_or_fileobj=pth_abs, |
| path_in_repo=os.path.basename(m["pth"]), |
| repo_id=f"{HF_ORG}/{repo_name}", |
| token=HF_TOKEN, repo_type="model") |
| |
| if m["csv"] != "N/A": |
| csv_abs = os.path.join(BASE_DIR, m["csv"]) |
| if os.path.exists(csv_abs): |
| upload_file(path_or_fileobj=csv_abs, |
| path_in_repo=os.path.basename(m["csv"]), |
| repo_id=f"{HF_ORG}/{repo_name}", |
| token=HF_TOKEN, repo_type="model") |
| print(f"β Uploaded {repo_name}") |
| except Exception as e: |
| print(f"β {repo_name} error: {e}") |
|
|
| print("\nAll uploads complete.") |
| else: |
| print("\n[DRY RUN] Set DRY_RUN=False to execute HF uploads.") |
|
|