UPCYCLED_CLOUD
Pilot Study Active

EDGE AI ON
REFURBISHED
HARDWARE.

Quantifying the carbon offset of running modern Large Language Models on "obsolete" smartphones. A sustainable alternative to the cloud.

1.1B
Parameters
2016
Hardware
0$
Cost
root@moto-g5-plus:~

Pilot Data: The "Burn Test"

Real telemetry from the Moto G5 Plus running TinyLlama-1.1B-Chat. This chart captures the exact moment of inference ("Roman Empire" prompt), showing the massive jump from idle to active processing.

Inference Efficiency
0.53 J/t
Joules per Token
Peak Power
3.05 Watts
During Generation
Baseline Idle
0.20 Watts
Active Idle (Top)
CRITICAL FINDING

The "Hallucination" Bug

During the pilot study on the Moto G5 Plus, modern "K-Quant" models failed, producing gibberish output. Investigation revealed a hardware constraint in pre-2017 processors.

  • Issue: Snapdragon 625 (ARMv8.0) lacks dotprod instructions.
  • Result: Emulation fallbacks caused floating-point rounding errors -> Model Hallucination.
  • Fix: Standardized on legacy Q4_0 Quantization for all e-waste hardware.
Simulation: Output Comparison
ARMv8.0 (K-Quant) Failed

User: "Hello"
AI: "65.625 63.5 55.375 <|im_end|> ... [Looping Error]"

ARMv8.0 (Legacy Q4_0) Stable

User: "Hello"
AI: "Hello! How can I help you today?"

This finding dictates our donation acceptance criteria.

Open Source Stack

We believe in transparent science. The entire experimentation stack runs on open-source software (Termux, Llama.cpp, Python). Here are the core scripts powering the "Upcycled Cloud."

Research Questions

  • RQ1: Can 2016-era smartphones run modern LLMs without hallucination?
  • RQ2: What is the Joules-per-Token efficiency compared to Cloud APIs?
  • RQ3: Does the "Right to Repair" offset the carbon cost of manufacturing new AI chips?
eco_logger.py Python 3
import time
import os

# Access Kernel Power Nodes directly
BATTERY_PATH = "/sys/class/power_supply/battery"

while True:
    with open(f"{BATTERY_PATH}/current_now", "r") as f:
        current = f.read().strip() # Microamps
    with open(f"{BATTERY_PATH}/voltage_now", "r") as f:
        voltage = f.read().strip() # Microvolts

    print(f"{time.time()},{current},{voltage}")
    time.sleep(1)
build_legacy.sh Bash
# CMake flags for Snapdragon 625 (ARMv8.0)
cmake .. -G Ninja \
    -DGGML_OPENCL=OFF \
    -DCMAKE_C_FLAGS="-O3 -march=armv8-a" \
    -DCMAKE_CXX_FLAGS="-O3 -march=armv8-a" \
    -DGGML_NATIVE=OFF

Project Hardware Guide

We categorize donated devices into tiers based on their ability to run modern AI vs. legacy configurations.

THE DEAL

Free Repair

If you donate one of the first 10 phones, we will fix the screen/battery to run our tests.

YOU GET IT BACK.
($0 Cost)

* Limited to first 10 donors

Drop-Off Location
ATTENDANCE OFFICE

Research Milestones

Phase 1: Pilot Study (Complete)

Validated Q4_0 on Snapdragon 625. Established Wake Lock protocol.

2

Phase 2: Sourcing & Restoration (Current)

Collecting 10 devices. Performing hardware triage and repairs.

3

Phase 3: Benchmarking

Measuring J/t (Joules per Token) and comparing vs. Cloud API.