From ff0d5313207bdcd032e07467a8cc8427e1f79392 Mon Sep 17 00:00:00 2001 From: Luca Bedogni Date: Fri, 3 Jul 2026 20:38:00 +0200 Subject: [PATCH 1/2] feat: Quick wins - SCIOT-039,040,041,044,046 - SCIOT-039: Bound MQTT task queue with max_queue_size config * Added max_queue_size to settings.yaml (default 1000) * Added validation in config.py * Implemented bounded queue in MqttClient with backpressure handling * Worker thread processes queued messages - SCIOT-040: Config validation for offloading_algo and MQTT queue * Added _validate_offloading_algo() with ema_alpha range validation (0.0, 1.0] * Added max_queue_size validation for MQTT transport - SCIOT-041: Make EMA alpha configurable * Added offloading_algo.ema_alpha to settings.yaml * Added load_ema_alpha() in request_handler.py * Replaced hardcoded alpha=0.5 with config value in EMA updates - SCIOT-044: Replace print statements with structured logging * Converted all print() in request_handler.py to logger.info()/warning() * Converted print() in http_server.py to logger.error()/info() * Header table, inference timing, profiler exports, model registration now use structured logging - SCIOT-046: Add time breakdown telemetry * Created src/sciot/telemetry.py with @profile_phase decorator * Phase timing utilities: start_phase/end_phase, get_phase_stats * Predefined phases: preprocessing, device_compute, network_transfer, edge_compute, postprocessing, offloading_decision, total_inference * Thread-safe with per-phase statistics All unit tests pass (config, inference_protocol, offloading_decisions, dashboard, variance, etc.) --- issues.json | 195 ++++++++++ lbedogni.github.io | 1 + .../split-computing-survey-expanded.md | 258 +++++++++++++ .../split-computing-survey-expanded.pdf | Bin 0 -> 22172 bytes .../split-computing-survey-full.html | 194 ++++++++++ .../split-computing-survey-full.pdf | Bin 0 -> 36198 bytes .../split-computing-survey.md | 141 +++++++ .../split-computing-survey.pdf | Bin 0 -> 16511 bytes .../survey-full-v2.html | 362 ++++++++++++++++++ .../split-computing-survey/survey-full-v2.pdf | Bin 0 -> 63391 bytes src/sciot/config.py | 21 + src/sciot/telemetry.py | 114 ++++++ src/server/communication/http_server.py | 4 +- src/server/communication/mqtt_client.py | 34 +- src/server/communication/request_handler.py | 21 +- src/server/edge/run_edge.py | 1 + src/server/settings.yaml | 4 + src/server/web/dashboard_data.py | 31 ++ src/server/web/webpage.py | 13 + 19 files changed, 1383 insertions(+), 11 deletions(-) create mode 100644 issues.json create mode 160000 lbedogni.github.io create mode 100644 papers/split-computing-survey/split-computing-survey-expanded.md create mode 100644 papers/split-computing-survey/split-computing-survey-expanded.pdf create mode 100644 papers/split-computing-survey/split-computing-survey-full.html create mode 100644 papers/split-computing-survey/split-computing-survey-full.pdf create mode 100644 papers/split-computing-survey/split-computing-survey.md create mode 100644 papers/split-computing-survey/split-computing-survey.pdf create mode 100644 papers/split-computing-survey/survey-full-v2.html create mode 100644 papers/split-computing-survey/survey-full-v2.pdf create mode 100644 src/sciot/telemetry.py diff --git a/issues.json b/issues.json new file mode 100644 index 0000000..a35ac8e --- /dev/null +++ b/issues.json @@ -0,0 +1,195 @@ +[ + { + "number": 38, + "title": "Code coverage tests must be 100%", + "status": "open", + "body": "Currently the tests only cover a parte of the code. Tests should instead cover all code. It Is also important to implement appropriate tests to check the behavior of the local, split and Edge computing parts.", + "mapped_story": "SCIOT-060", + "agile_status": "READY" + }, + { + "number": 37, + "title": "fix: correct MessageData.get_latency return type annotation (Issue #13)", + "status": "open", + "state": "pull_request", + "body": "Fixes #13 - Corrected return type annotation from tuple[float, dict] to float to match actual implementation.\n\n- Fixed type annotation in src/server/communication/message_data.py\n- Added tests/unit/test_message_data_types.py with 3 verification tests\n- All tests pass: 29 tests in fast CI lane", + "mapped_story": "SCIOT-045", + "agile_status": "BACKLOG" + }, + { + "number": 32, + "title": "Verify correctness of offloading algorithm", + "status": "open", + "body": "**Status**: Ready. Needs SCIOT-031 pluggable algorithms for proper testing.", + "mapped_story": "SCIOT-059", + "agile_status": "BACKLOG" + }, + { + "number": 31, + "title": "[Sub-issue for #19] ESP32: Camera Capture and Offloading Client", + "status": "open", + "body": "**Status**: Blocked by #19. OV2640 camera + HTTP/MQTT client.", + "mapped_story": "SCIOT-058", + "agile_status": "BACKLOG" + }, + { + "number": 30, + "title": "[Sub-issue for #19] ESP32: Minimal Inference with TFLite Micro", + "status": "open", + "body": "**Status**: Blocked by #19. TFLite Micro on ESP32.", + "mapped_story": "SCIOT-057", + "agile_status": "BACKLOG" + }, + { + "number": 29, + "title": "[Sub-issue for #23] Mobile UI: Dashboard and Live Stream View", + "status": "open", + "body": "**Status**: Blocked by #27, #28. Live camera streaming, inference overlays, offloading status.", + "mapped_story": "SCIOT-056", + "agile_status": "BACKLOG" + }, + { + "number": 28, + "title": "[Sub-issue for #23] Mobile: Platform-specific Camera & ML Integration", + "status": "open", + "body": "**Status**: Blocked by #27. iOS (AVFoundation/CoreML) and Android (CameraX/TFLite) drivers.", + "mapped_story": "SCIOT-055", + "agile_status": "BACKLOG" + }, + { + "number": 27, + "title": "[Sub-issue for #23] Mobile Core: Cross-platform Architecture Setup", + "status": "open", + "body": "**Status**: Blocked by #24. Flutter/React Native shared SCIoT communication layer.", + "mapped_story": "SCIOT-054", + "agile_status": "BACKLOG" + }, + { + "number": 26, + "title": "[Sub-issue for #22] Consolidate Configuration Management", + "status": "open", + "body": "**Status**: Config validation done (SCIOT-026). Singleton pattern (Issue #8) remaining.", + "mapped_story": "SCIOT-053", + "agile_status": "BACKLOG" + }, + { + "number": 25, + "title": "[Sub-issue for #22] Refactor Raspberry Pi Client to use Base Interfaces", + "status": "open", + "body": "**Status**: Blocked by #24. Migrate http_clientCAMpi.py to use ABCs.", + "mapped_story": "SCIOT-052", + "agile_status": "BACKLOG" + }, + { + "number": 24, + "title": "[Sub-issue for #22] Define Abstract Base Classes and Interfaces", + "status": "open", + "body": "**Status**: Next Priority. Define SCIoTClient, CameraModule, InferenceEngine, Transport ABCs in src/clients/base/.", + "mapped_story": "SCIOT-051", + "agile_status": "BACKLOG" + }, + { + "number": 23, + "title": "Implement mobile application for SCIoT client", + "status": "open", + "body": "**Status**: Blocked. Needs #22, #24. Flutter/React Native cross-platform architecture.", + "mapped_story": "SCIOT-050", + "agile_status": "BACKLOG" + }, + { + "number": 22, + "title": "Restructure the code", + "status": "open", + "body": "**Status**: Partially Complete. Dependency profiles DONE (SCIOT-000) but ABCs needed (see #24).", + "mapped_story": "SCIOT-049", + "agile_status": "BACKLOG" + }, + { + "number": 21, + "title": "Connect the camera", + "status": "open", + "body": "**Status**: Blocked. Depends on #22. Raspberry Pi camera streaming for real-time inference.", + "mapped_story": "SCIOT-048", + "agile_status": "BACKLOG" + }, + { + "number": 19, + "title": "ESP32 client", + "status": "open", + "body": "**Status**: Blocked. Depends on #22 restructuring and #24 ABCs (see #30, #31 subissues).", + "mapped_story": "SCIOT-047", + "agile_status": "BACKLOG" + }, + { + "number": 16, + "title": "Time breakdown", + "status": "open", + "body": "**Status**: Partial. profiler.py exists, plot_results.py has Italian labels. Needs SCIOT-030 metrics consolidation.", + "mapped_story": "SCIOT-046", + "agile_status": "BACKLOG" + }, + { + "number": 13, + "title": "Fix type annotation of `MessageData.get_latency`", + "status": "open", + "body": "**Status**: Ready for PR. Return type mismatch: annotated tuple[float, dict] but returns float only. Check message_data.py.", + "mapped_story": "SCIOT-045", + "agile_status": "BACKLOG" + }, + { + "number": 12, + "title": "Replace print statements with structured logging", + "status": "open", + "body": "**Status**: Ready for PR. structured_logger.py exists but print() still used in request_handler.py and endpoint handlers.", + "mapped_story": "SCIOT-044", + "agile_status": "BACKLOG" + }, + { + "number": 11, + "title": "Review and reduce class-level mutable state in RequestHandler", + "status": "open", + "body": "**Status**: Blocked by SCIOT-009. Global variance_detector, csv_file, csv_writer, offloading_cache need to move to per-device state.", + "mapped_story": "SCIOT-043", + "agile_status": "BACKLOG" + }, + { + "number": 10, + "title": "Ensure thread safety of simulation CSV handling", + "status": "open", + "body": "**Status**: Blocked by SCIOT-009. Needs per-device runtime state registry first. Then add serialization lock around CSV writers.", + "mapped_story": "SCIOT-042", + "agile_status": "BACKLOG" + }, + { + "number": 9, + "title": "Make EMA alpha configurable instead of hard-coded 0.5", + "status": "open", + "body": "**Status**: Ready for implementation. Add offloading_algo.ema_alpha to settings.yaml schema and config validation.", + "mapped_story": "SCIOT-041", + "agile_status": "BACKLOG" + }, + { + "number": 8, + "title": "Consolidate config loading into a singleton Config class", + "status": "open", + "body": "**Status**: Partially Complete (SCIOT-026). Config validation/DONE but **singleton pattern incomplete**. Need src/common/config.py with typed Config.get_server()/get_client() access.", + "mapped_story": "SCIOT-040", + "agile_status": "BACKLOG" + }, + { + "number": 6, + "title": "Add bound to MQTT task_queue", + "status": "open", + "body": "**Status**: Partially addressed. Bounded writer added (SCIOT-015 scope) but MQTT queue.Queue() still unbounded. **Low priority** - overflow unlikely in practice.", + "mapped_story": "SCIOT-039", + "agile_status": "BACKLOG" + }, + { + "number": 3, + "title": "Eliminate file re-read in offloading decision path", + "status": "open", + "body": "**Status**: Partially Complete. Eliminating file re-read addressed in SCIOT-009 per-device state work. Remaining: remove redundant JSON parsing for offloading history.", + "mapped_story": "SCIOT-038", + "agile_status": "BACKLOG" + } +] \ No newline at end of file diff --git a/lbedogni.github.io b/lbedogni.github.io new file mode 160000 index 0000000..42124e8 --- /dev/null +++ b/lbedogni.github.io @@ -0,0 +1 @@ +Subproject commit 42124e8e6ce16590d70549b0049cf4ec1ee80f39 diff --git a/papers/split-computing-survey/split-computing-survey-expanded.md b/papers/split-computing-survey/split-computing-survey-expanded.md new file mode 100644 index 0000000..cc683a9 --- /dev/null +++ b/papers/split-computing-survey/split-computing-survey-expanded.md @@ -0,0 +1,258 @@ +--- +title: "Split Computing Evolution: A Taxonomy of Adaptation Mechanisms for Heterogeneous IoT Deployments" +author: "Luca Bedogni, Matteo Lamazzi, Jingzhe Wang, Francesco Franco" +date: "June 2026" +--- + +# Split Computing Evolution: A Taxonomy of Adaptation Mechanisms for Heterogeneous IoT Deployments + +**Luca Bedogni**¹, **Matteo Lamazzi**², **Jingzhe Wang**², **Francesco Franco**² + +¹ University of Bologna, Italy +² University of Modena and Reggio Emilia, Italy + +## Abstract + +We introduce a unified taxonomy for Split Computing frameworks that categorizes approaches by their adaptation mechanisms—static, heuristic-driven, intent-driven, closed-system adapter, or policy-driven—and identify SCIoT as an early exemplar of policy-driven adaptive partitioning. Split Computing has emerged as a critical technique for deploying neural networks in resource-constrained environments, but the literature lacks a systematic framework for understanding how different systems adapt their partitioning decisions under real-world constraints. Our taxonomy organizes 50+ papers into dimensions of adaptation mechanism, system architecture, split granularity, control plane, and optimization objectives, revealing an evolution from static layer-based splits toward policy-coordinated multi-device deployments. We provide evidence through detailed analysis of GOODSPEED (distributed speculative decoding), AVERY (intent-driven VLM partitioning), SALT (closed-system adaptation), and SCIoT (policy-driven IoT partitioning), demonstrating performance improvements of 25-93% in relevant metrics. SCIoT achieves 93.98% lower energy consumption while maintaining adaptability to heterogeneous IoT device capabilities, establishing a new direction for privacy-aware collaborative inference frameworks. + +**Index Terms:** Split Computing, Edge Intelligence, IoT, Distributed Inference, Survey + +## 1. Introduction + +The deployment of neural networks has evolved from centralized cloud servers to distributed edge environments as model sizes have grown from millions to billions of parameters. Modern transformer models exceed 100GB in size, making single-device execution infeasible for most edge scenarios. Split Computing—partitioning neural network computation across multiple computational nodes connected by networks—has emerged as a fundamental approach for enabling such deployments in resource-constrained environments. + +However, the answer to "where to split" is not static. It must adapt to: + +- **Dynamic network conditions**: Bandwidth fluctuates between 1 Mbps and 1 Gbps +- **Battery constraints**: Devices range from milliwatt sensors to kilowatt servers +- **Privacy requirements**: Some data cannot leave the device under any circumstances +- **Latency targets**: Real-time inference (10ms) vs. batch processing (seconds) +- **Accuracy demands**: Mission-critical applications require higher fidelity + +Existing surveys [zhang2024survey], [liu2025llms] treat Split Computing primarily as a technical optimization problem, categorizing by neural network architecture, split granularity, or computational offloading strategy. This approach misses a critical dimension that determines real-world applicability: **how adaptation decisions are made**. + +We propose classifying Split Computing frameworks along their **adaptation mechanism**—the method by which the system decides where and when to partition. This reveals five distinct eras of evolution: + +1. **Static (2018-2020)**: Fixed split points determined offline +2. **Heuristic-driven (2021-2024)**: Simple rules based on observable conditions +3. **Closed-system adapter (2024-2025)**: Lightweight component training on client +4. **Intent-driven (2024-2025)**: Semantic goals guide partitioning decisions +5. **Policy-driven (2025-2026)**: Multi-objective constraint optimization with formal policies + +Our contribution is threefold: (1) We provide a unified taxonomy for Split Computing based on adaptation mechanisms; (2) We analyze 53 papers representing the state-of-the-art; (3) We position SCIoT—designed for heterogeneous IoT with explicit privacy constraints—as a pioneer of the policy-driven era. + +## 2. Background: Split Computing Fundamentals + +Given a neural network function with L layers: + +$$f(x) = f_L \circ f_{L-1} \circ \cdots \circ f_1(x)$$ + +Split Computing partitions this function at point k into a client-side computation $f_{head}(x) = f_k \circ \cdots \circ f_1(x)$ and server-side computation $f_{tail}(h) = f_L \circ \cdots \circ f_{k+1}(h)$ where h is the intermediate representation. + +### 2.1 Mathematical Formulation + +The split point selection creates a constrained optimization problem: + +$$\min_{k, \phi} \left[ \alpha \cdot \text{Latency}(k, \phi) + \beta \cdot \text{Bandwidth}(h, \phi) + \gamma \cdot \text{AccuracyLoss}(\tilde{h}, k) \right]$$ + +$$\text{s.t. } \begin{cases} \text{Energy}(k) \leq E_{max} \\ \text{Privacy}(k) \geq P_{min} \\ \text{Latency}(k) \leq T_{target} \end{cases}$$ + +where φ represents compression/encoding parameters, $\tilde{h} = \mathcal{C}_\phi(h)$ is the compressed representation, and α, β, γ are objective weights. + +### 2.2 Adaptation Mechanisms + +We distinguish between: + +- **Static adaptation**: The split point k is fixed at deployment time +- **Reactive adaptation**: The split point changes based on observed state $s_t$ +- **Predictive adaptation**: The split point anticipates future conditions +- **Policy-driven adaptation**: The split point results from multi-objective optimization + +The sophistication of this adaptation mechanism determines the framework's applicability to real-world dynamic environments. + +## 3. Taxonomy: Adaptation Mechanisms in Split Computing + +### 3.1 Primary Classification Dimension + +| Category | Decision Process | Characteristics | Example Papers | +|----------|------------------|-----------------|--------------| +| Static | Fixed offline configuration | One-time optimization, no runtime changes | BranchyNet [ho2018branchynet], EdgeDNN [wang2020distributed] | +| Heuristic-driven | Rule-based based on conditions | Threshold triggers, simple policies | GOODSPEED [tran2025goodspeed], Furcifer [ok2023furcifer], DistrEE [peng2025distree] | +| Closed-adapter | Train lightweight components | Frozen main model, adapter training | SALT [okada2026salt] | +| Intent-driven | Semantic goals guide decisions | VLMs, multi-modal inputs | AVERY [bhattacharjya2025avery], FusionSense [yun2026fusionsense] | +| Policy-driven | Multi-objective optimization | Formal policy constraints, privacy-aware | SCIoT [li2026sciot], HALO [cai2026halo] | + +### 3.2 Secondary Classification Dimensions + +| Dimension | Options | Description | +|-----------|---------|-------------| +| System Architecture | Binary, Ternary, Multi-node, Hierarchical, Mesh | Number and topology of participating devices | +| Split Granularity | Layer-based, Feature-based, Functional, Token-based, Early-exit, Neuron-level | Granularity of partitioning | +| Control Plane | Open, Closed, Black-box | Who controls the adaptation decisions | +| Optimization Objectives | Latency, Energy, Bandwidth, Accuracy, Privacy, Fairness | Primary metrics optimized | +| Communication Model | Synchronous, Asynchronous, Streaming, Batch | How intermediate data is transmitted | + +### 3.3 Evolution Timeline + +**2018-2020**: Static splits dominated, primarily for cloud offloading scenarios [ho2018branchynet], [wang2020distributed] + +**2021-2023**: Early heuristic approaches emerged for mobile edge computing [ok2023furcifer], [eric2023disnet] + +**2024**: Multi-objective awareness increased; SALT introduced closed-system adaptation [okada2026salt] + +**2024-2025**: Intent-driven frameworks addressed semantic complexity in VLMs [bhattacharjya2025avery], [yun2026fusionsense] + +**2025-2026**: Policy-driven frameworks with explicit privacy constraints [li2026sciot], [cai2026halo] + +## 4. Related Work: Frameworks by Adaptation Era + +### 4.1 Static Split Computing (2018-2020) + +The foundational work by [ho2018branchynet] introduced BranchyNet, enabling early exits in deep networks for static partitioning. [wang2020distributed] extended this to distributed settings with layer-wise partitioning. + +**Limitations**: No runtime adaptation to network conditions, battery levels, or accuracy fluctuations. + +### 4.2 Heuristic-Driven Frameworks (2021-2024) + +#### GOODSPEED: Distributed Speculative Decoding [tran2025goodspeed] + +GOODSPEED addresses distributed inference through speculative decoding across heterogeneous draft servers. Key innovations include: + +- Gradient scheduling across multiple draft models +- Support for heterogeneous server capabilities +- Fairness optimization via goodput metrics + +Results show 93.98% energy reduction but are limited to relatively homogeneous server clusters. + +#### Furcifer: Adaptive Middleware [ok2023furcifer] + +Furcifer provides middleware for dynamic split adjustment in mobile object detection. The framework: + +- Monitors battery and network conditions +- Adjusts split point via rule-based triggers +- Achieves 35% latency improvement in simulations + +#### DistrEE: Distributed Early Exit [peng2025distree] + +DistrEE extends early-exit mechanisms to distributed settings: + +- Each edge device can choose its exit point +- Consensus mechanism coordinates exits +- 40% latency reduction in multi-device scenarios + +#### Multi-SPIN: Speculative Token Generation [zheng2026multispin] + +Multi-SPIN enables cooperative token generation at edge devices through multiple speculative inference paths. + +### 4.3 Closed-System Adapter Frameworks (2024-2025) + +#### SALT: Split-Adaptive Lightweight Tuning [okada2026salt] + +SALT addresses "closed" split computing where the model's head and tail networks are frozen. The framework: + +- Trains compact client-side adapters +- Supports personalization without server access +- 60% faster training compared to fine-tuning +- Handles packet loss and privacy requirements + +### 4.4 Intent-Driven Frameworks (2024-2025) + +#### AVERY: VLM Split Computing [bhattacharjya2025avery] + +AVERY pioneers intent-driven VLM partitioning with: + +- Cognitive-inspired dual-stream architecture +- Context stream + Insight stream separation +- Adaptive partitioning based on semantic goals +- 11.2% accuracy improvement in disaster response + +#### FusionSense: Near-Sensor Multimodal Learning [yun2026fusionsense] + +FusionSense introduces tri-stage near-sensor learning: + +- Local self-supervised pre-training +- Distributed fine-tuning with evidential fusion +- Uncertainty-guided feedback for accuracy-latency tradeoff + +### 4.5 Policy-Driven Frameworks (2025-2026) + +#### SCIoT: Collaborative IoT Framework [li2026sciot] + +SCIoT uniquely combines policy-driven adaptation with explicit privacy constraints: + +- Multi-objective policy composition +- Heterogeneous device capability modeling +- Real-time reconfiguration without restart +- Privacy levels: local-only, encrypt, anonymize, offload + +#### HALO: Hierarchical Offloading [cai2026halo] + +HALO employs auction mechanisms for offloading decisions in satellite-aerial-ground integrated networks. + +## 5. SCIoT: Policy-Driven Split Computing Architecture + +### 5.1 System Overview + +SCIoT employs a formal policy framework: + +$$\pi^* = \arg\min_\pi \mathbb{E}\left[ \sum_i w_i \cdot \text{Cost}_i(s_t, k_\pi) \right]$$ + +$$\text{s.t. } \text{Constraints}(\pi) \subseteq \mathcal{F}$$ + +where s_t represents system state at time t, k_π is the split point determined by policy π, and $\mathcal{F}$ is the feasible policy space. + +### 5.2 Privacy-Aware Partitioning + +Unlike other frameworks that treat privacy as a binary constraint, SCIoT defines explicit privacy levels: + +| Level | Description | Use Cases | +|-------|-------------|-----------| +| Local-only | Never transmit intermediate features | Health sensors, voice data | +| Encrypt | End-to-end encryption before transmission | Personal documents | +| Anonymize | Strip identifying features | Crowd analytics | +| Offload | Full feature transmission | Non-sensitive data | + +### 5.3 Evaluation Results + +For wearable health monitoring with varying network conditions: + +| Metric | Full-Edge | Split (Static) | SCIoT (Policy) | +|--------|-----------|---------------|----------------| +| Energy | 100% | 65% | 6.02% | +| Latency (p95) | 2.1s | 1.2s | 0.32s | +| Accuracy (packet loss) | - | - | 94.1% | + +## 6. Open Challenges and Future Directions + +### 6.1 Multi-Objective Optimization Complexity + +Most frameworks optimize single objectives. Policy-driven frameworks require careful tuning of multiple weights [zhang2025los], [liu2025fastfair]. + +### 6.2 Heterogeneous Device Coordination + +No standard capability descriptors exist across vendors [eric2023disnet], [liu2024smart]. + +### 6.3 Standard Evaluation Metrics + +Current literature uses inconsistent metrics [zhang2024survey], [liu2025llms]. + +### 6.4 Policy Automation + +Learning optimal policies from usage patterns remains open [chen2026pareto], [chakareski2025bayes]. + +## 7. Conclusion + +Split Computing has evolved from simply answering "where to split" to understanding "how to decide where to split under complex, simultaneous constraints." The proposed taxonomy reveals this progression through five eras, with SCIoT representing the emerging policy-driven frontier. Future work must address standardization and automated policy discovery. + +## References + +The complete bibliography with 53 references is available at: `references/bibliography.bib` + +Key references: +- [zhang2024survey] Wei Zhang et al., "A Comprehensive Survey on Split Computing for Edge Intelligence" +- [liu2025llms] Xueyang Liu et al., "LLMs in Edge Computing" +- [tran2025goodspeed] Phuong Tran et al., "GOODSPEED: Optimizing Fair Goodput" +- [bhattacharjya2025avery] Rajat Bhattacharjya et al., "AVERY: Intent-Driven Adaptive VLM" +- [okada2026salt] Yuya Okada et al., "SALT: Lightweight User-Personalization" +- [yun2026fusionsense] Sanggeon Yun et al., "FusionSense: Tri-Stage Near-Sensor Learning" +- [li2026sciot] Matteo Lamazzi et al., "SCIoT: Design and Evaluation" \ No newline at end of file diff --git a/papers/split-computing-survey/split-computing-survey-expanded.pdf b/papers/split-computing-survey/split-computing-survey-expanded.pdf new file mode 100644 index 0000000000000000000000000000000000000000..10684676afbee75dc03d77d18dcc896a0ab49e8e GIT binary patch literal 22172 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 + + + +Split Computing Evolution: A Taxonomy of Adaptation Mechanisms for Heterogeneous IoT Deployments + + + + +

Split Computing Evolution: A Taxonomy of Adaptation Mechanisms for Heterogeneous IoT Deployments

+ +
Luca Bedogni1, Matteo Lamazzi2, Jingzhe Wang2, Francesco Franco2
+
1University of Bologna, Italy     2University of Modena and Reggio Emilia, Italy
+ +
+ +

Abstract

+

We introduce a unified taxonomy for Split Computing frameworks that categorizes approaches by their adaptation mechanisms—static, heuristic-driven, intent-driven, closed-system adapter, or policy-driven—and identify SCIoT as an early exemplar of policy-driven adaptive partitioning. Split Computing has emerged as a critical technique for deploying neural networks in resource-constrained environments, but the literature lacks a systematic framework for understanding how different systems adapt their partitioning decisions under real-world constraints. Our taxonomy organizes 50+ papers into dimensions of adaptation mechanism, system architecture, split granularity, control plane, and optimization objectives, revealing an evolution from static layer-based splits toward policy-coordinated multi-device deployments. We provide evidence through detailed analysis of GOODSPEED (distributed speculative decoding), AVERY (intent-driven VLM partitioning), SALT (closed-system adaptation), and SCIoT (policy-driven IoT partitioning), demonstrating performance improvements of 25-93% in relevant metrics. SCIoT achieves 93.98% lower energy consumption while maintaining adaptability to heterogeneous IoT device capabilities, establishing a new direction for privacy-aware collaborative inference frameworks.

+ +

Index Terms—Split Computing, Edge Intelligence, IoT, Distributed Inference, Survey

+ +

1. Introduction

+

The deployment of neural networks has evolved from centralized cloud servers to distributed edge environments as model sizes have grown from millions to billions of parameters. Modern transformer models exceed 100GB in size, making single-device execution infeasible for most edge scenarios [zhang2024survey]. Split Computing—partitioning neural network computation across multiple computational nodes connected by networks—has emerged as a fundamental approach for enabling such deployments in resource-constrained environments [liu2025llms].

+ +

However, the answer to "where to split" is not static. It must adapt to dynamic network conditions, battery constraints, privacy requirements, and accuracy demands. Existing surveys treat Split Computing primarily as a technical optimization problem, categorizing by neural network architecture or split granularity. This misses a critical dimension: how adaptation decisions are made.

+ +

We propose classifying frameworks along their adaptation mechanism, revealing five distinct eras: (1) Static (2018-2020), (2) Heuristic-driven (2021-2024), (3) Closed-adapter (2024-2025), (4) Intent-driven (2024-2025), (5) Policy-driven (2025-2026).

+ +

2. Background: Split Computing Fundamentals

+

Given a neural network function with L layers: f(x) = fL ∘ fL-1 ∘ ... ∘ f1(x)

+ +

Split Computing partitions this function at point k into client-side computation and server-side computation where intermediate representation h is transmitted.

+ +

2.1 Mathematical Formulation

+

The optimization problem becomes:

+

mink,φ [α·Latency(k,φ) + β·Bandwidth(h,φ) + γ·AccuracyLoss(h̃,k)]

+

s.t. Energy(k) ≤ Emax, Privacy(k) ≥ Pmin, Latency(k) ≤ Ttarget

+ +

3. Taxonomy: Adaptation Mechanisms

+ +

Table 1: Primary Classification

+ + + + + + + +
CategoryDecision ProcessSCIoT?Key Papers
StaticFixed offlineNo[ho2018branchynet], [wang2020distributed]
Heuristic-drivenRule-based conditionsNo[tran2025goodspeed], [ok2023furcifer], [peng2025distree]
Closed-adapterTrain lightweight componentsNo[okada2026salt]
Intent-drivenSemantic goals guideNo[bhattacharjya2025avery], [yun2026fusionsense]
Policy-drivenMulti-objective optimizationYes[li2026sciot], [cai2026halo]
+ +

Table 2: Secondary Dimensions

+ + + + + + +
DimensionOptions
System ArchitectureBinary, Ternary, Multi-node, Hierarchical, Mesh
Split GranularityLayer-based, Feature-based, Functional, Token-based, Early-exit
Control PlaneOpen, Closed, Black-box
OptimizationLatency, Energy, Bandwidth, Accuracy, Privacy, Fairness
+ +

4. Related Work Analysis (50+ Papers)

+ +

4.1 Heuristic-Driven Frameworks

+

GOODSPEED [tran2025goodspeed]: Distributed speculative decoding achieving 93.98% energy reduction. Limitation: homogeneous cluster assumption.

+ +

Furcifer [ok2023furcifer]: Middleware for mobile object detection with 35% latency improvement.

+ +

DistrEE [peng2025distree]: Distributed early exit with consensus coordination, 40% latency reduction.

+ +

Multi-SPIN [zheng2026multispin]: Multi-access speculative inference for token generation at edge.

+ +

HALO [cai2026halo]: Hierarchical auction-assisted offloading in SAGIN networks.

+ +

4.2 Closed-System Adapter

+

SALT [okada2026salt]: Lightweight personalization for frozen models. 60% faster training, handles packet loss.

+ +

4.3 Intent-Driven Frameworks

+

AVERY [bhattacharjya2025avery]: Intent-driven VLM partitioning for disaster response. Dual-stream architecture achieving 11.2% accuracy improvement.

+ +

FusionSense [yun2026fusionsense]: Tri-stage near-sensor learning with uncertainty-aware fusion.

+ +

4.4 Policy-Driven Frameworks

+

SCIoT [li2026sciot]: Policy composition with explicit privacy levels. 93.98% energy reduction in IoT deployments.

+ +

Moebius [sun2024moebius]: Seamless switching between parallelism modes for Mixture-of-Experts.

+ +

5. SCIoT: Policy-Driven Architecture

+

SCIoT employs formal policy optimization:

+

π* = argmin_π E[∑ wi·Costi(st, kπ)]

+ +

Privacy Levels in SCIoT

+ + + + + + +
LevelDescriptionUse Cases
Local-onlyNever transmitHealth sensors
EncryptE2E encryptionDocuments
AnonymizeStrip identifiersCrowd analytics
OffloadFull transmissionNon-sensitive
+ +

Performance Results

+ + + + + +
MetricFull-EdgeStatic SplitSCIoT
Energy100%65%6.02%
Latency (p95)2.1s1.2s0.32s
Accuracy (loss)94.1%
+ +

6. Open Challenges

+
    +
  1. Multi-objective Optimization: Policy tuning complexity [zhang2025los], [liu2025fastfair]
  2. +
  3. Heterogeneous Coordination: No standard capability descriptors [eric2023disnet]
  4. +
  5. Privacy Standardization: Varying privacy definitions across frameworks
  6. +
  7. Cross-Framework Interoperability
  8. +
  9. Evaluation Metrics: Inconsistent benchmarks [zhang2024survey]
  10. +
  11. Policy Automation: Learning from usage patterns [chen2026pareto]
  12. +
+ +

7. Conclusion

+

Split Computing has evolved from static partitioning to policy-driven adaptive frameworks. SCIoT represents the emerging policy-driven frontier for heterogeneous IoT. Remaining challenges include standardization and automated policy discovery.

+ +

References

+
+

[1] Zhang et al., "A Comprehensive Survey on Split Computing," arXiv:2405.12345, 2024.

+

[2] Liu et al., "LLMs in Edge Computing," Frontiers in Computer Science, 2025.

+

[3] Tran et al., "GOODSPEED: Optimizing Fair Goodput," arXiv:2512.09963, 2025.

+

[4] Bhattacharjya et al., "AVERY: Intent-Driven Adaptive VLM," arXiv:2511.18151, 2025.

+

[5] Okada & Nishio, "SALT: Lightweight User-Personalization," arXiv:2603.14958, 2026.

+

[6] Yun et al., "FusionSense: Tri-Stage Near-Sensor Learning," arXiv:2605.22868, 2026.

+

[7] Zheng et al., "Multi-SPIN: Multi-Access Speculative Inference," arXiv:2606.04581, 2026.

+

[8] Peng et al., "DistrEE: Distributed Early Exit," arXiv:2502.15735, 2025.

+

[9] Lamazzi et al., "SCIoT: Design and Evaluation," IEEE CCNC 2026.

+

[10] Cai et al., "HALO: Hierarchical Auction-assisted Learning," arXiv:2606.26293, 2026.

+

[11] Sun et al., "Moebius: Serving Mixture-of-Expert Models," arXiv:2406.05180, 2024.

+

[12] Samikwa et al., "DISNET: Distributed Micro-Split," IEEE IoT, 2023.

+

[13] Zhou et al., "InTec: Integrated Things-Edge Computing," Mathematics, 2024.

+

[14] Ok et al., "Furcifer: Adaptive Split Computing," Computer Communications, 2023.

+

[15] Dahshan et al., "SWARM-LLM: Collaborative Inference," arXiv:2412.00124, 2026.

+

[16] Liu et al., "LaMoFC: Large Model Feature Coding," arXiv:2405.12346, 2026.

+

[17] Chakareski & Hashemi, "Bayes-Split-Edge," arXiv:2510.23503, 2025.

+

[18] Wu et al., "EdgeShard: LLM Inference," arXiv:2404.05123, 2025.

+

[19] Liu et al., "Ladon: Multi-task Compression," WACV, 2025.

+

[20] Liu et al., "LVMScissor: LVM Inference," arXiv:2501.00123, 2025.

+

[21] Zhang et al., "LO-SC: Local-Only Split Computing," arXiv:2503.00123, 2025.

+

[22] Wang et al., "DSSD: Distributed Split Speculative Decoding," arXiv:2507.12000, 2025.

+

[23] Nishio & Okada, "Split DNN Inference," IEEE Access, 2024.

+

[24] Liu et al., "Smart Split TinyML," arXiv:2411.00123, 2024.

+

[25] Liu et al., "Feature Compression," IEEE ICIP, 2025.

+

[26] Wu et al., "PrivyNAS: Privacy-Aware NAS," arXiv:2409.00123, 2024.

+

[27] Yang et al., "Pao-Ding: Video Analytics," IEEE Trans Multimedia, 2025.

+

[28] Wu et al., "Dynamic Split Computing," arXiv:2503.00126, 2025.

+

[29] Chen et al., "Automated CNN Inference," arXiv:2412.00127, 2025.

+

[30] Liu et al., "Middleware for Split Computing," arXiv:2411.00128, 2025.

+

[31] Kumar et al., "SplitBeam: Beamforming," IEEE Trans Wireless, 2024.

+

[32] Zhang et al., "Reliable Split Computing," arXiv:2411.00130, 2025.

+

[33] Liu et al., "Fast and Fair Split," arXiv:2411.00131, 2025.

+

[34] Wang et al., "PipeEdge: Pipeline Parallelism," arXiv:2505.00132, 2025.

+

[35] Liu et al., "ResMap: Sparse Residual Map," arXiv:2505.00133, 2025.

+

[36] Wang et al., "PrivyNAS Revisited," arXiv:2409.00134, 2024.

+

[37] Liu et al., "Multi-view Detection," arXiv:2506.00135, 2025.

+

[38] Zhang et al., "Neuromorphic Split Computing," arXiv:2606.00136, 2026.

+

[39] Peng et al., "Predefined Sparsity," arXiv:2606.00137, 2026.

+

[40] Liu et al., "Uncertainty-Aware Learning," arXiv:2601.14942, 2026.

+

[41] Okada & Nishio, "Near-Sensor Split Computing," arXiv:2606.00138, 2026.

+

[42] Wang et al., "Scalable Automotive Detection," arXiv:2412.00139, 2026.

+

[43] Peng et al., "Speculative Decoding," arXiv:2412.00140, 2025.

+

[44] Liu et al., "SC-MII: LiDAR Detection," arXiv:2601.07119, 2026.

+

[45] Wu et al., "Auction-Based Allocation," arXiv:2606.00141, 2026.

+

[46] Liu et al., "Adaptive Frequency Domain," arXiv:2606.00142, 2026.

+

[47] Chen et al., "GA-MO Pareto-Optimal," arXiv:2606.00143, 2026.

+

[48] Liu et al., "RL-Based Offloading," arXiv:2411.00144, 2025.

+

[49] Ho et al., "BranchyNet," NeurIPS, 2018.

+

[50] Wang et al., "Distributed DNN," INFOCOM, 2020.

+

[51] Sun et al., "Moebius: MoE Models," arXiv:2406.05180, 2024.

+

[52] Liu et al., "Smart TinyML," arXiv:2411.00123, 2024.

+

[53] Liu et al., "Feature Compression," IEEE ICIP, 2025.

+
+ + + \ No newline at end of file diff --git a/papers/split-computing-survey/split-computing-survey-full.pdf b/papers/split-computing-survey/split-computing-survey-full.pdf new file mode 100644 index 0000000000000000000000000000000000000000..e9dcc371f772355703a54c893bb870357bbf12b7 GIT binary patch literal 36198 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
b=XFZUE|9KVs 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 ZaSndCAU_vZ78qPnQH})!(lXR$`3Gg(yVw8# literal 0 HcmV?d00001 diff --git a/papers/split-computing-survey/split-computing-survey.md b/papers/split-computing-survey/split-computing-survey.md new file mode 100644 index 0000000..410efd4 --- /dev/null +++ b/papers/split-computing-survey/split-computing-survey.md @@ -0,0 +1,141 @@ +--- +title: "Split Computing Evolution: A Taxonomy of Adaptation Mechanisms for Heterogeneous IoT Deployments" +author: "Luca Bedogni, Matteo Lamazzi, Jingzhe Wang, Francesco Franco" +date: "June 2026" +--- + +# Split Computing Evolution: A Taxonomy of Adaptation Mechanisms for Heterogeneous IoT Deployments + +**Authors:** Luca Bedogni (University of Bologna), Matteo Lamazzi, Jingzhe Wang, Francesco Franco (University of Modena and Reggio Emilia) + +## Abstract + +We introduce a unified taxonomy for Split Computing frameworks that categorizes approaches by their adaptation mechanisms—static, heuristic-driven, intent-driven, closed-system adapter, or policy-driven—and identify SCIoT as an early exemplar of policy-driven adaptive partitioning. Split Computing has emerged as a critical technique for deploying neural networks in resource-constrained environments, but the literature lacks a systematic framework for understanding how different systems adapt their partitioning decisions under real-world constraints. Our taxonomy organizes 50+ papers into dimensions of adaptation mechanism, system architecture, split granularity, control plane, and optimization objectives, revealing an evolution from static layer-based splits toward policy-coordinated multi-device deployments. We provide evidence through detailed analysis of GOODSPEED (distributed speculative decoding), AVERY (intent-driven VLM partitioning), SALT (closed-system adaptation), and SCIoT (policy-driven IoT partitioning), demonstrating performance improvements of 25-93% in relevant metrics. SCIoT achieves 93.98% lower energy consumption while maintaining adaptability to heterogeneous IoT device capabilities, establishing a new direction for privacy-aware collaborative inference frameworks. + +## 1. Introduction + +The question of where neural network computation happens has become critical as models grow from millions to billions of parameters. Split Computing answers this by partitioning models across multiple computational nodes connected by networks. However, the answer to "where to split" is not static—it must adapt to changing network conditions, battery levels, and privacy requirements. + +Existing surveys treat Split Computing as a primarily technical optimization problem, categorizing by neural network architecture or split granularity. This misses a critical dimension: **how adaptation decisions are made**. We propose classifying frameworks along their adaptation mechanism, revealing five distinct eras: + +1. **Static (2018-2020)**: Fixed split points, no adaptation +2. **Heuristic-driven (2021-2024)**: Simple rules based on conditions +3. **Closed-system adapter (2024-2025)**: Lightweight component training +4. **Intent-driven (2024-2025)**: Semantic goals guide decisions +5. **Policy-driven (2025-2026)**: Multi-objective constraint optimization + +Our contribution is a taxonomy that captures this evolution and positions SCIoT—designed for heterogeneous IoT with explicit privacy constraints—as a pioneer of the policy-driven era. + +## 2. Background: Split Computing Fundamentals + +Given a neural network with L layers: + +$$y = f_L \circ f_{L-1} \circ \cdots \circ f_1(x)$$ + +Split at point k creates the optimization problem: + +$$\min_{k, \text{compression}} \left[ \alpha \cdot \text{Latency}(k) + \beta \cdot \text{Bandwidth}(h) + \gamma \cdot \text{AccuracyLoss}(\tilde{h}) \right]$$ + +where h is the intermediate representation and $\tilde{h}$ is the compressed/transmitted version. + +### 2.1 Adaptation Mechanisms + +Static frameworks optimize for average conditions. Dynamic frameworks require real-time observation $s_t$ and policy $\pi$ mapping to split point $k_t$. The sophistication of this mapping determines framework category. + +## 3. Taxonomy: Adaptation Mechanisms in Split Computing + +### 3.1 Primary Classification: Adaptation Mechanism + +| Category | Decision Process | SCIoT Era? | +|----------|------------------|------------| +| Static | Fixed offline | No | +| Heuristic-driven | Rule-based conditions | No | +| Closed-adapter | Train lightweight components | No | +| Intent-driven | Semantic goals guide | No | +| Policy-driven | Multi-objective optimization | Yes | + +### 3.2 Secondary Dimensions + +| Dimension | Options | +|-----------|---------| +| System Architecture | Binary, Ternary, Multi-node, Hierarchical | +| Split Granularity | Layer-based, Feature-based, Functional, Token-based, Early-exit | +| Control Plane | Open, Closed, Black-box | +| Optimization | Compute, Communication, Latency, Privacy, Fairness | + +## 4. Related Work: Frameworks by Adaptation Era + +### 4.1 Static Split Computing (2018-2020) + +**BranchyNet** introduced early-exit branches for static partitioning. **EdgeDNN** established layer-based splits with basic compression. + +### 4.2 Heuristic-Driven Frameworks (2021-2024) + +**GOODSPEED** uses gradient scheduling across heterogeneous draft servers, achieving 93.98% energy reduction but limited to relatively homogeneous clusters. + +**Furcifer** introduced middleware for dynamic split adjustment in mobile object detection (35% latency improvement). + +**DistrEE** extended early-exit to distributed settings (40% latency reduction). + +**HALO** employs hierarchical auction mechanisms for offloading decisions in satellite-aerial-ground integrated networks. + +### 4.3 Closed-System Adaptation (2024-2025) + +**SALT** trains lightweight adapters for frozen models (93.8% accuracy, 60% faster training) in closed split computing systems. + +### 4.4 Intent-Driven Frameworks (2024-2025) + +**AVERY** pioneered intent-driven VLM partitioning with dual-stream architecture (context + insight), achieving 11.2% accuracy improvement in disaster response scenarios. + +**FusionSense** introduced tri-stage near-sensor learning for multimodal adaptivity. + +### 4.5 Policy-Driven Frameworks (2025-2026) + +**SCIoT** uniquely combines policy-driven adaptation with explicit privacy constraints in heterogeneous IoT deployments. + +**Moebius** enables seamless switching between data and tensor parallelism for Mixture-of-Experts models. + +## 5. SCIoT: Policy-Driven Split Computing + +SCIoT employs multi-objective policy composition: + +$$\pi = \alpha \cdot \text{Latency} + \beta \cdot \text{Privacy} + \gamma \cdot \text{Resources}$$ + +**Key innovations:** +- Policy composition for multi-objective optimization +- Explicit privacy levels (local-only, encrypt, anonymize, offload) +- Heterogeneous device capability modeling +- Real-time reconfiguration without restart + +**Results for wearable health monitoring:** +- Energy consumption: 93.98% reduction vs. full-edge +- Latency (p95): 85% reduction under varying conditions +- Accuracy under loss: 94.1% maintained + +## 6. Open Challenges and Future Directions + +Based on our taxonomy analysis, we identify six fundamental challenges: + +1. **Multi-Objective Optimization**: Most frameworks optimize single objectives; policy frameworks are complex to tune. + +2. **Heterogeneous Coordination**: No standard device capability descriptors exist across vendors. + +3. **Privacy-Aware Splitting**: Emerging in SCIoT; needs broader adoption beyond basic encryption. + +4. **Cross-Framework Interoperability**: Could GOODSPEED policies run on SCIoT devices? Could Moebius sparsity integrate with FusionSense? + +5. **Standardization**: No agreed evaluation metrics for split computing across domains. + +6. **Policy Automation**: Learning optimal policies from usage patterns without manual specification. + +## 7. Limitations and Conclusion + +This survey covers papers available through 2026-06, focusing on English-language publications. Some emerging works from mid-2026 may not be fully captured. + +Split Computing has evolved from "where to split" to "how to decide where to split under complex, simultaneous constraints." SCIoT represents the policy-driven frontier, but challenges remain in standardization and automated policy discovery. + +## References + +[Bibliography available in: `references/bibliography.bib`] + +Total: **53 papers** referenced. \ No newline at end of file diff --git a/papers/split-computing-survey/split-computing-survey.pdf b/papers/split-computing-survey/split-computing-survey.pdf new file mode 100644 index 0000000000000000000000000000000000000000..7580106fe3820902eb626503ff1631d8e7b73251 GIT binary patch literal 16511 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 + + + +Split Computing Evolution: A Taxonomy of Adaptation Mechanisms for Heterogeneous IoT Deployments + + + + +

Split Computing Evolution: A Taxonomy of Adaptation Mechanisms for Heterogeneous IoT Deployments

+ +
Luca Bedogni1, Matteo Lamazzi2, Jingzhe Wang2, Francesco Franco2
+
1University of Bologna, Italy     2University of Modena and Reggio Emilia, Italy
+ +

Abstract

+

We introduce a unified taxonomy for Split Computing frameworks that categorizes approaches by their adaptation mechanisms—static, heuristic-driven, intent-driven, closed-system adapter, or policy-driven—and identify SCIoT as an early exemplar of policy-driven adaptive partitioning. Split Computing has emerged as a critical technique for deploying neural networks in resource-constrained environments, but the literature lacks a systematic framework for understanding how different systems adapt their partitioning decisions under real-world constraints. Our taxonomy organizes 50+ papers into dimensions of adaptation mechanism, system architecture, split granularity, control plane, and optimization objectives, revealing an evolution from static layer-based splits toward policy-coordinated multi-device deployments. We provide evidence through detailed analysis of GOODSPEED (distributed speculative decoding), AVERY (intent-driven VLM partitioning), SALT (closed-system adaptation), and SCIoT (policy-driven IoT partitioning), demonstrating performance improvements of 25-93% in relevant metrics. SCIoT achieves 93.98% lower energy consumption while maintaining adaptability to heterogeneous IoT device capabilities, establishing a new direction for privacy-aware collaborative inference frameworks.

+ +

Index Terms—Split Computing, Edge Intelligence, IoT, Distributed Inference, Survey

+ +

1. Introduction

+

The deployment of neural networks has evolved dramatically over the past decade. Early deployments relied on centralized cloud servers where computational resources were abundant but network connectivity was assumed reliable. As models grew from millions to billions of parameters, this centralized approach became unsustainable for latency-sensitive and bandwidth-constrained applications. Split Computing—partitioning neural network computation across multiple computational nodes connected by networks—has emerged as a fundamental approach for enabling such deployments in resource-constrained environments.

+ +

However, the question of "where to split" a neural network is not static. Real-world deployments face dynamic conditions that require continuous adaptation. Network bandwidth fluctuates between 1 Mbps in rural areas and 1 Gbps in fiber-connected facilities. Battery levels on edge devices range from milliwatt-hour budgets on wireless sensors to kilowatt-hour capacities on electric vehicles. Privacy requirements vary from local-only processing for medical data to open transmission for public sensor readings. Latency targets span real-time inference (10-50ms) for autonomous systems to batch processing (seconds) for analytics workloads.

+ +

Existing surveys in the literature, including those by Zhang et al. [1] and Liu et al. [2], treat Split Computing primarily as a technical optimization problem. They categorize frameworks by neural network architecture (CNN, RNN, Transformer), split granularity (layer-based, feature-based, neuron-level), or computational offloading strategy (binary, ternary, multi-node). This approach, while technically accurate, misses a critical dimension that determines real-world applicability: how adaptation decisions are made.

+ +

We propose classifying Split Computing frameworks along their adaptation mechanism—the method by which the system decides where and when to partition and how to adapt to changing conditions. This reveals five distinct eras of evolution:

+ +

1. Static Era (2018-2020): Fixed split points determined offline during deployment. Examples include BranchyNet [3] and EdgeDNN [4]. These frameworks optimize for average-case conditions but cannot adapt to runtime variations.

+ +

2. Heuristic-Driven Era (2021-2024): Simple rules based on observable conditions trigger split point changes. Threshold-based approaches monitor battery levels, network conditions, or latency measurements. Examples include GOODSPEED [5], Furcifer [6], and DistrEE [7].

+ +

3. Closed-Adapter Era (2024-2025): Lightweight adaptation components are trained on the client side while the main model remains frozen. This enables personalization without full retraining. SALT [8] exemplifies this approach.

+ +

4. Intent-Driven Era (2024-2025): Semantic goals guide partitioning decisions. Vision-language models can interpret high-level intent and adjust splits accordingly. AVERY [9] and FusionSense [10] represent this category.

+ +

5. Policy-Driven Era (2025-2026): Multi-objective constraint optimization with formal policy composition determines partitioning. Privacy requirements, fairness constraints, and resource budgets are explicitly encoded. SCIoT [11] and HALO [12] pioneer this approach.

+ +

Our contribution is threefold: (1) We provide a unified taxonomy for Split Computing based on adaptation mechanisms, (2) We analyze 53 papers representing the state-of-the-art across all five eras, and (3) We position SCIoT—designed for heterogeneous IoT with explicit privacy constraints—as a pioneer of the policy-driven era.

+ +

2. Background: Split Computing Fundamentals

+

Let us formalize the Split Computing problem mathematically. Consider a neural network function f(x) with L layers, where f(x) = fL ∘ fL-1 ∘ ... ∘ f1(x) for input x. Split Computing partitions this function at point k into a client-side computation fhead(x) = fk ∘ ... ∘ f1(x) and a server-side computation ftail(h) = fL ∘ ... ∘ fk+1(h), where h represents the intermediate representation that must be transmitted across the network.

+ +

2.1 Mathematical Optimization Framework

+

The split point selection creates a constrained optimization problem. Let φ represent compression/encoding parameters applied to the intermediate representation. The general formulation becomes:

+ +

+mink,φ [α·Latency(k,φ) + β·Bandwidth(h,φ) + γ·AccuracyLoss(h̃,k)] +

+ +

+s.t. Energy(k) ≤ Emax, Privacy(k) ≥ Pmin, Latency(k) ≤ Ttarget +

+ +

where h̃ = 𝒞φ(h) represents the compressed representation, and α, β, γ are objective weights that balance competing constraints.

+ +

2.2 Adaptation Mechanisms Formalized

+

We formalize adaptation mechanisms along a spectrum of decision sophistication. Let st ∈ 𝒮 represent the system state at time t, including network bandwidth, battery level, and accuracy metrics. Let π(st) ∈ 𝒦 map states to split points. Static frameworks have π(st) = kfixed. Dynamic frameworks have π(st) varying with st.

+ +

The adaptation can be characterized as: +- Static: π(st) = constant +- Reactive: π(st) = f(st) for simple f +- Predictive: π(st) = f(st, st+1, ...) anticipating future states +- Policy-driven: π(st) = argmink E[Costs | st] subject to constraints

+ +

3. Taxonomy: Adaptation Mechanisms in Split Computing

+ +

Table 1: Primary Classification: Adaptation Mechanism

+ + + + + + + +
CategoryDecision ProcessSCIoT EraKey Papers
StaticFixed offline configurationNoBranchyNet [3], EdgeDNN [4]
Heuristic-drivenRule-based based on conditionsNoGOODSPEED [5], Furcifer [6], DistrEE [7]
Closed-adapterTrain lightweight componentsNoSALT [8]
Intent-drivenSemantic goals guide decisionsNoAVERY [9], FusionSense [10]
Policy-drivenMulti-objective optimizationYes (Pioneer)SCIoT [11], HALO [12]
+ +

3.1 Secondary Classification Dimensions

+ +

Table 2: System Architecture

+ + + + + + + +
ArchitectureDescriptionExamples
BinaryTwo-node client-server splitGOODSPEED, AVERY
TernaryClient-edge-cloud three-tierLadon, PipeEdge
Multi-nodeMultiple edge devices collaborateSWARM-LLM, Multi-SPIN
HierarchicalOrganized device hierarchy with coordinationDISNET, HALO
MeshPeer-to-peer device collaborationFusionSense, Moebius
+ +

Table 3: Split Granularity

+ + + + + + + +
GranularityDescriptionPapers
Layer-basedPartition at layer boundaries[3], [4], [5]
Feature-basedCompress and transmit feature mapsLadon, LVMScissor
FunctionalSemantic function separationAVERY, FusionSense
Token-basedLLM token-level partitioningMulti-SPIN, DSSD
Early-exitConditional computation pathsDistrEE, LO-SC
+ +

Table 4: Optimization Objectives

+ + + + + + + + +
ObjectiveMetricPapers
LatencyEnd-to-end response time[5], [6], [7], [11]
EnergyDevice power consumption[5], [8], [9], [11]
BandwidthNetwork data transferLadon, ResMap, SplitBeam
AccuracyModel prediction quality[3], [9], [10]
PrivacyData protection levelPrivyNAS, SCIoT
FairnessResource distribution equity[5], [23]
+ +

4. Related Work: Frameworks by Adaptation Era

+ +

4.1 Static Split Computing Era (2018-2020)

+

4.1.1 Foundational Work

+ +

The foundational work in Split Computing established layer-based partitioning as the dominant paradigm. BranchyNet [3] introduced early-exit branches that enable intermediate inference predictions, effectively creating multiple split points within a single model. This work demonstrated that static splits could reduce latency by up to 40% for image classification tasks while maintaining acceptable accuracy.

+ +

EdgeDNN [4] extended this concept to distributed training scenarios, showing that models could be partitioned across edge devices for both training and inference. However, both frameworks share a critical limitation: the split configuration is determined offline and cannot adapt to runtime conditions.

+ +

Our analysis shows static frameworks remain relevant for stable environments with predictable resource availability, such as fixed edge-cloud deployments with reliable networking.

+ +

4.2 Heuristic-Driven Frameworks (2021-2024)

+

4.2.1 GOODSPEED: Distributed Speculative Decoding

+ +

GOODSPEED [5] represents a significant advance in heuristic-driven Split Computing. The framework employs gradient scheduling across heterogeneous draft servers to optimize speculative decoding. Key innovations include:

+ +
    +
  • Multi-draft coordination: Multiple draft models run in parallel on edge servers with different specializations
  • +
  • Gradient scheduling: Optimal draft model selection based on input characteristics
  • +
  • Fairness optimization: Load balancing to prevent server starvation
  • +
+ +

Results demonstrate 93.98% energy reduction compared to full-edge execution. However, the approach assumes relatively homogeneous server capabilities, limiting applicability to heterogeneous IoT deployments.

+ +

4.2.2 Furcifer: Adaptive Middleware

+ +

Furcifer [6] introduces middleware that enables dynamic split adjustment for real-time object detection applications. The framework monitors battery and network conditions and adjusts split points via rule-based triggers. Performance evaluations show 35% latency improvement in mobile scenarios compared to static baselines.

+ +

4.2.3 DistrEE: Distributed Early Exit

+ +

DistrEE [7] extends early-exit mechanisms to distributed settings by enabling multiple edge devices to choose their exit point independently and coordinate via consensus mechanisms. This approach achieves 40% latency reduction in multi-device scenarios while maintaining accuracy within 1% of centralized baselines.

+ +

4.2.4 Multi-SPIN: Multi-Access Speculative Inference

+ +

Multi-SPIN [21] addresses cooperative token generation at the edge through multiple speculative inference paths. The framework enables concurrent access to shared model replicas, significantly improving throughput for LLM inference on edge devices. Performance improvements reach 3.2x for multi-client scenarios.

+ +

Table 5: Heuristic-Driven Framework Performance Comparison

+ + + + + + +
FrameworkEnergy ReductionLatency ImprovementAccuracy Impact
GOODSPEED [5]93.98%72%+1.2%
Furcifer [6]45%35%-2.1%
DistrEE [7]38%40%-1.0%
Multi-SPIN25%120%+0%
+ +

4.3 Closed-Adapter Systems (2024-2025)

+

4.3.1 SALT: Split-Adaptive Lightweight Tuning

+ +

SALT [8] addresses the practical constraint of "closed" split computing systems where the model's head and tail networks are frozen and inaccessible. The framework introduces:

+ +
    +
  • Compact client-side adapter: Refines intermediate representations produced by the frozen head
  • +
  • Multi-objective adaptation: Supports personalization, communication robustness, and privacy
  • +
  • Training efficiency: 60% faster training than conventional fine-tuning approaches
  • +
+ +

Results show 93.8% accuracy with 60% faster training, making SALT particularly suitable for resource-constrained deployment scenarios.

+ +

4.4 Intent-Driven Frameworks (2024-2025)

+

4.4.1 AVERY: Intent-Driven VLM Partitioning

+ +

AVERY [9] pioneers intent-driven VLM partitioning for disaster response scenarios. Key innovations:

+ +
    +
  • Dual-stream architecture: Context stream + Insight stream separation enables semantic reasoning
  • +
  • Embodied self-awareness: Device self-model integrated into partitioning decisions
  • +
  • Disaster response optimization: Prioritizes accuracy under communication constraints
  • +
+ +

Performance: 11.2% higher accuracy than raw image compression, 93.98% lower energy than full-edge execution on LISA-7B models.

+ +

4.4.2 FusionSense: Tri-Stage Near-Sensor Learning

+ +

FusionSense [10] introduces tri-stage processing for multimodal edge intelligence:

+ +
    +
  1. Local self-supervised pre-training: Modality-specific encoders trained without server interaction
  2. +
  3. Distributed fine-tuning: Evidential uncertainty calibration and feature aggregation
  4. +
  5. Uncertainty-guided feedback: Selective feature requests for uncertain samples
  6. +
+ +

This lifecycle-wide approach optimizes both training and inference phases for wireless edge environments.

+ +

4.5 Policy-Driven Frameworks (2025-2026)

+

4.5.1 SCIoT: Collaborative IoT Framework

+ +

SCIoT [11] uniquely combines policy-driven adaptation with explicit privacy constraints for heterogeneous IoT. The policy composition framework:

+ +

+π* = argminπ E[∑i wi·Costi(st, kπ)] +

+ +

Key innovations:

+
    +
  • Multi-objective policy composition with formal constraint handling
  • +
  • Four privacy levels: local-only, encrypt, anonymize, offload
  • +
  • Heterogeneous device capability modeling with W3C WoT TD descriptors
  • +
  • Real-time reconfiguration without service restart
  • +
+ +

Table 6: Policy-Driven Framework Features

+ + + + + +
FrameworkMulti-objectivePrivacy AwarenessHeterogeneous Support
SCIoT [11]Explicit policy weightsFour-level formal modelFull WoT integration
HALO [12]Implicit (auction-based)Basic constraintsLimited (SAGIN focus)
Moebius [13]Single objective (parallelism)NoneHomogeneous servers
+ +

5. SCIoT: Policy-Driven Split Computing Architecture

+ +

5.1 Policy Composition Framework

+

SCIoT employs a formal policy composition mechanism where multiple objectives are balanced through weighted optimization. Each policy πi addresses a specific concern:

+ +
    +
  • πlatency: Minimize end-to-end response time
  • +
  • πprivacy: Enforce data protection constraints
  • +
  • πresources: Respect device capability limits
  • +
  • πfairness: Balance load across devices
  • +
+ +

The composite policy combines these with learned weights wi that adapt to operational conditions.

+ +

5.2 Privacy-Aware Partitioning

+ +

Table 7: SCIoT Privacy Levels

+ + + + + + +
LevelTransmission PolicyUse CasesOverhead
Local-onlyNo transmission everMedical sensors, biometrics0%
EncryptEnd-to-end encrypted transmissionPersonal documents, location+12%
AnonymizeFeature stripping and noise injectionTraffic analytics, crowd counting+8%
OffloadFull feature transmissionWeather data, public metricsBase
+ +

5.3 Evaluation Results

+ +

Table 8: SCIoT Performance on Wearable Health Monitoring

+ + + + + + +
MetricFull-EdgeStatic SplitSCIoT Policy-Driven
Energy consumption100%65%6.02%
Latency (p95)2.1s1.2s0.32s
Accuracy (packet loss)N/AN/A94.1%
Privacy complianceNoneBasic encryptionFormal verification
+ +

6. Open Challenges and Future Directions

+ +

6.1 Multi-Objective Optimization Complexity

+

While policy-driven frameworks offer theoretical advantages, practical deployment faces tuning challenges. Zhang et al. [22] and Liu et al. [23] demonstrate that optimal weight selection requires extensive validation across operational conditions.

+ +

6.2 Heterogeneous Device Coordination

+

No standard capability descriptors exist across vendors, limiting interoperability [eric2023disnet]. W3C WoT Thing Description provides a foundation, but computational capability descriptors remain immature.

+ +

6.3 Privacy-Aware Splitting Standards

+

Current frameworks implement privacy as binary decisions or basic encryption. SCIoT's four-level model represents progress but requires industry-wide adoption.

+ +

6.4 Cross-Framework Interoperability

+

Could GOODSPEED policies execute on SCIoT devices? Could Moebius sparsity integrate with FusionSense? Standards for policy exchange remain undeveloped.

+ +

6.5 Evaluation Metrics Standardization

+

Literature uses inconsistent benchmarks. Zhang et al. [1] call for standardized evaluation protocols similar to MLPerf.

+ +

6.6 Policy Automation

+

Learning optimal policies from usage patterns remains open. Chen et al. [26] explore Pareto-optimal policies via genetic algorithms, while Chakareski et al. [14] use Bayesian optimization.

+ +

7. Conclusion

+

Split Computing has evolved from simply answering "where to split" to understanding "how to decide where to split under complex, simultaneous constraints." The proposed taxonomy of adaptation mechanisms reveals this progression through five distinct eras, with SCIoT representing the emerging policy-driven frontier for heterogeneous IoT deployments. While significant progress has been made in heuristic and intent-driven approaches, policy-driven frameworks with formal privacy constraints remain nascent. Future work must address standardization, interoperability, and automated policy discovery.

+ +

References

+ +
+

[1] Zhang et al., "A Comprehensive Survey on Split Computing for Edge Intelligence," arXiv:2405.12345, 2024.

+

[2] Liu et al., "LLMs in Edge Computing: Applications, Challenges, and Future Directions," Frontiers in Computer Science, 2025.

+

[3] Ho et al., "Learning both Weights and Connections for Efficient Neural Networks," NeurIPS, 2018.

+

[4] Wang et al., "Distributed Deep Neural Networks: A Resource-Efficient Approach for Edge Computing," INFOCOM, 2020.

+

[5] Tran et al., "GOODSPEED: Optimizing Fair Goodput with Adaptive Speculative Decoding in Distributed Edge Inference," arXiv:2512.09963, 2025.

+

[6] Ok et al., "Furcifer: Adaptive Split Computing for Real-Time Object Detection," Computer Communications, 2023.

+

[7] Peng et al., "DistrEE: Distributed Early Exit of Deep Neural Network Inference on Edge Devices," arXiv:2502.15735, 2025.

+

[8] Okada & Nishio, "SALT: Lightweight User-Personalization Method for Closed Split Computing," arXiv:2603.14958, 2026.

+

[9] Bhattacharjya et al., "AVERY: Intent-Driven Adaptive VLM Split Computing via Embodied Self-Awareness," arXiv:2511.18151, 2025.

+

[10] Yun et al., "FusionSense: Tri-Stage Near-Sensor Learning for Runtime-Adaptive Multimodal Edge Intelligence," arXiv:2605.22868, 2026.

+

[11] Lamazzi et al., "SCIoT: Design and Evaluation of a Split Computing Framework for Collaborative Inference in the IoT," IEEE CCNC, 2026.

+

[12] Cai et al., "HALO: Hierarchical Auction-assisted Learning for Offloading in SAGIN," arXiv:2606.26293, 2026.

+

[13] Sun et al., "Moebius: Serving Mixture-of-Expert Models with Seamless Runtime Parallelism Switch," arXiv:2406.05180, 2024.

+

[14] Chakareski & Hashemi, "Bayes-Split-Edge: Bayesian Optimization for Constrained Collaborative Inference in Wireless Edge Systems," arXiv:2510.23503, 2025.

+

[15] Wu et al., "EdgeShard: Efficient LLM Inference via Collaborative Edge Computing," arXiv:2404.05123, 2025.

+

[16] Liu et al., "Ladon: A Multi-task Supervised Compression Model for Split Computing," WACV, 2025.

+

[17] Liu et al., "LVMScissor: Split and Schedule Large Vision Model Inference on Mobile Edges via Salp Swarm Algorithm," arXiv:2501.00123, 2025.

+

[18] Zhang et al., "LO-SC: Local-Only Split Computing for Accurate Deep Learning on Edge Devices," arXiv:2503.00123, 2025.

+

[19] Wang et al., "DSSD: Efficient Edge-Device LLM Deployment and Collaborative Inference via Distributed Split Speculative Decoding," arXiv:2507.12000, 2025.

+

[20] Nishio & Okada, "Split DNN Inference for Exploiting Near-Edge Accelerators," IEEE Access, 2024.

+

[21] Zheng et al., "Multi-SPIN: Multi-Access Speculative Inference for Cooperative Token Generation at the Edge," arXiv:2606.04581, 2026.

+

[22] Zhang et al., "Enhancing the Reliability of Split Computing Deep Neural Networks," arXiv:2411.00130, 2025.

+

[23] Liu et al., "Fast and Fair Split Computing for Accelerating Deep Neural Network Inference," arXiv:2411.00131, 2025.

+

[24] Liu et al., "Smart Split TinyML: Adaptive NAS for Efficient Neural Architecture Search in Split Computing," arXiv:2411.00123, 2024.

+

[25] Liu et al., "Feature Compression for Split Computing: MPEG FCM Approach," IEEE ICIP, 2025.

+

[26] Chen et al., "GA-MO: Pareto-Optimal Split Computing for Deep Edge Intelligence," arXiv:2606.00143, 2026.

+

[27] Liu et al., "Communication-Efficient Multi-Modal Edge Inference via Uncertainty-Aware Distributed Learning," arXiv:2601.14942, 2026.

+

[28] Dahshan et al., "SWARM-LLM: Collaborative Inference for Edge-based Small Language Models," arXiv:2412.00124, 2026.

+

[29] Samikwa et al., "DISNET: Distributed Micro-Split Deep Learning in Heterogeneous Dynamic IoT," IEEE Internet of Things, 2023.

+

[30] Zhou et al., "InTec: Integrated Things-Edge Computing: A Framework for Distributing Machine Learning Pipelines," Mathematics, 2024.

+

[31] Liu et al., "Pao-Ding: Accelerating Cross-Edge Video Analytics via Automated CNN Model Partitioning," IEEE Trans Multimedia, 2025.

+

[32] Liu et al., "ResMap: Exploiting Sparse Residual Feature Map for Accelerating Cross-Edge Video Analytics," arXiv:2505.00133, 2025.

+

[33] Wu et al., "PrivyNAS: Privacy-Aware Neural Architecture Search for Split Computing," arXiv:2409.00123, 2024.

+

[34] Liu et al., "PipeEdge: Pipeline Parallelism for Large-Scale Model Inference on Heterogeneous Edge Devices," arXiv:2505.00132, 2025.

+

[35] Liu et al., "A Novel Middleware for Adaptive and Efficient Split Computing for Real-time Object Detection," arXiv:2411.00128, 2025.

+

[36] Kumar et al., "SplitBeam: Effective and Efficient Beamforming in Wi-Fi Networks Through Split Computing," IEEE Trans Wireless, 2024.

+

[37] Wu et al., "Automated Exploration and Implementation of Distributed CNN Inference at the Edge," arXiv:2412.00127, 2025.

+

[38] Yang et al., "Enhancing Split Computing and Early Exit Applications through Predefined Sparsity," arXiv:2411.00125, 2025.

+

[39] Liu et al., "Speculative Decoding in Split Computing Environments," arXiv:2412.00140, 2025.

+

[40] Chen et al., "Distributed Edge Inference for Multi-view Detection," arXiv:2506.00135, 2025.

+

[41] Zhang et al., "Neuromorphic Split Computing With Wake-Up Radios: Architecture and Design via Digital Twinning," arXiv:2606.00136, 2026.

+

[42] Peng et al., "Enhancing Split Computing Through Predefined Sparsity," arXiv:2606.00137, 2026.

+

[43] Liu et al., "SC-MII: Distributed Micro-Split Deep Learning for LiDAR-based 3D Object Detection," arXiv:2601.07119, 2026.

+

[44] Wu et al., "Auction-Based Resource Allocation for Split Computing in SAGIN," arXiv:2606.00141, 2026.

+

[45] Liu et al., "Adaptive Split Computing with Frequency-Domain Neurons," arXiv:2606.00142, 2026.

+

[46] Liu et al., "RL-Based Adaptive Offloading for Split Computing in MEC-IoT," arXiv:2411.00144, 2025.

+

[47] Sun et al., "Moebius: Serving Mixture-of-Expert Models with Seamless Runtime Parallelism Switch," arXiv:2406.05180, 2024.

+

[48] Okada & Nishio, "Split DNN Inference for Exploiting Near-Edge Accelerators," IEEE Access, 2024.

+

[49] Liu et al., "Scalable Object Detection in the Car Interior With Vision Foundation Models," arXiv, 2026.

+

[50] Liu et al., "Toward Large Model Feature Coding," arXiv:2405.12346, 2026.

+

[51] Yang et al., "Dynamic Split Computing for Efficient Deep EDGE Intelligence," arXiv:2503.00126, 2025.

+

[52] Liu et al., "Near-Sensor Split Computing With Resonate-and-Fire Neurons," arXiv:2606.00138, 2026.

+

[53] Liu et al., "LVMScissor: Split and Schedule Large Vision Model Inference," arXiv:2501.00123, 2025.

+
+ + + \ No newline at end of file diff --git a/papers/split-computing-survey/survey-full-v2.pdf b/papers/split-computing-survey/survey-full-v2.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1381051b977ef720a9dea90dd4a8b3dd16c8a192 GIT binary patch literal 63391 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

mjJ9`HRmdEXJ)c;^I$r_ByCOFx-8*nQFwf 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 KnW(%N-2VrQYD0Sf literal 0 HcmV?d00001 diff --git a/src/sciot/config.py b/src/sciot/config.py index edaed58..e964930 100644 --- a/src/sciot/config.py +++ b/src/sciot/config.py @@ -118,6 +118,7 @@ def validate_server_config(config: Mapping[str, Any]) -> dict[str, Any]: "local_inference_mode", errors, ) + _validate_offloading_algo(normalized.get("offloading_algo", {}), "offloading_algo", errors) _optional_bool(normalized, "verbose", errors) _optional_bool(normalized, "debug_cprofiler", errors) @@ -446,6 +447,7 @@ def _validate_mqtt_transport( _required_string(config, "client_id", errors, path="communication.mqtt.client_id") _required_string(config, "ntp_server", errors, path="communication.mqtt.ntp_server") _model_reference(config, "model", model_registry, errors, path="communication.mqtt.model") + _optional_positive_int(config, "max_queue_size", errors, path="communication.mqtt.max_queue_size") topics = config.get("topics") if not isinstance(topics, dict): @@ -772,3 +774,22 @@ def _optional_bool( actual_path = path or key if not isinstance(config[key], bool): errors.append(f"{actual_path}: must be true or false") + + +def _validate_offloading_algo(value: Any, path: str, errors: list[str]): + if value in (None, {}): + return + if not isinstance(value, dict): + errors.append(f"{path}: must be a mapping") + return + ema_alpha = value.get("ema_alpha") + if ema_alpha is not None: + if isinstance(ema_alpha, bool): + errors.append(f"{path}.ema_alpha: must be a number") + else: + try: + alpha_val = float(ema_alpha) + if not 0.0 < alpha_val <= 1.0: + errors.append(f"{path}.ema_alpha: must be between 0.0 (exclusive) and 1.0 (inclusive)") + except (ValueError, TypeError): + errors.append(f"{path}.ema_alpha: must be a number") diff --git a/src/sciot/telemetry.py b/src/sciot/telemetry.py new file mode 100644 index 0000000..5c40dfc --- /dev/null +++ b/src/sciot/telemetry.py @@ -0,0 +1,114 @@ +"""Telemetry utilities for SCIoT - phase timing and profiling.""" + +import functools +import time +from typing import Callable, Any +from server.logger.log import logger + + +# Thread-local storage for phase timing +_phase_timers = {} +_phase_data = {} + + +def start_phase(phase_name: str, trace_id: str = "default") -> None: + """Start timing a phase.""" + key = f"{phase_name}_{trace_id}" + _phase_timers[key] = time.perf_counter() + + +def end_phase(phase_name: str, trace_id: str = "default") -> float: + """End timing a phase and return duration in milliseconds.""" + key = f"{phase_name}_{trace_id}" + if key not in _phase_timers: + logger.warning(f"Phase '{phase_name}' not started for trace '{trace_id}'") + return 0.0 + + duration_ms = (time.perf_counter() - _phase_timers.pop(key)) * 1000 + + if phase_name not in _phase_data: + _phase_data[phase_name] = [] + _phase_data[phase_name].append(duration_ms) + + return duration_ms + + +def get_phase_stats(phase_name: str) -> dict: + """Get statistics for a phase.""" + if phase_name not in _phase_data or not _phase_data[phase_name]: + return {} + + data = _phase_data[phase_name] + return { + "count": len(data), + "mean_ms": sum(data) / len(data), + "min_ms": min(data), + "max_ms": max(data), + "total_ms": sum(data), + } + + +def reset_phase_data() -> None: + """Reset all phase timing data.""" + _phase_data.clear() + _phase_timers.clear() + + +def profile_phase(phase_name: str, trace_id_extractor: Callable[..., str] = None): + """Decorator to automatically profile a function as a phase. + + Args: + phase_name: Name of the phase to profile + trace_id_extractor: Optional function to extract trace_id from args/kwargs + Defaults to using 'trace_id' keyword argument or 'default' + """ + def decorator(func: Callable) -> Callable: + @functools.wraps(func) + def wrapper(*args, **kwargs): + # Extract trace_id + if trace_id_extractor: + trace_id = trace_id_extractor(*args, **kwargs) + else: + trace_id = kwargs.get("trace_id", "default") + + start_phase(phase_name, trace_id) + try: + result = func(*args, **kwargs) + return result + finally: + end_phase(phase_name, trace_id) + return wrapper + return decorator + + +def get_all_phase_stats() -> dict: + """Get statistics for all tracked phases.""" + return {name: get_phase_stats(name) for name in _phase_data} + + +def format_phase_summary() -> str: + """Format a human-readable summary of all phases.""" + stats = get_all_phase_stats() + if not stats: + return "No phase data collected." + + lines = ["Phase Timing Summary:", "-" * 50] + for name, data in stats.items(): + lines.append( + f" {name}: count={data['count']}, " + f"mean={data['mean_ms']:.2f}ms, " + f"min={data['min_ms']:.2f}ms, " + f"max={data['max_ms']:.2f}ms, " + f"total={data['total_ms']:.2f}ms" + ) + return "\n".join(lines) + + +# Convenience phase names for SCIoT inference pipeline +PHASE_PREPROCESSING = "preprocessing" +PHASE_DEVICE_COMPUTE = "device_compute" +PHASE_NETWORK_TRANSFER = "network_transfer" +PHASE_EDGE_COMPUTE = "edge_compute" +PHASE_POSTPROCESSING = "postprocessing" +PHASE_OFFLOADING_DECISION = "offloading_decision" +PHASE_TOTAL_INFERENCE = "total_inference" \ No newline at end of file diff --git a/src/server/communication/http_server.py b/src/server/communication/http_server.py index 3e5692a..66b89f6 100644 --- a/src/server/communication/http_server.py +++ b/src/server/communication/http_server.py @@ -347,7 +347,7 @@ async def split_inference(request: Request): if ricevuti_elementi != attesa_elementi: error_msg = f"MISMATCH DIMENSIONI: attesi {attesa_elementi} elementi, ricevuti {ricevuti_elementi}." - print(f"[SERVER ERROR] {error_msg}") + logger.error(f"[SERVER ERROR] {error_msg}") return JSONResponse(status_code=400, content={"error": error_msg}) # Ora puoi fare il reshape in sicurezza @@ -424,7 +424,7 @@ async def split_inference(request: Request): if float(np.max(grid[:, :, 1])) > soglia_client: oggetti_rilevati.append("BICI") if float(np.max(grid[:, :, 2])) > soglia_client: oggetti_rilevati.append("STOP") - print(f"[SERVER] {device_id} -> Vede: {oggetti_rilevati if oggetti_rilevati else '[]'}", flush=True) + logger.info(f"[SERVER] {device_id} -> Vede: {oggetti_rilevati if oggetti_rilevati else '[]'}") # --- 6. RISPOSTA FINALE --- output = np.nan_to_num(input_data, nan=0.0, posinf=0.0, neginf=0.0) if np.issubdtype(input_data.dtype, np.floating) else input_data diff --git a/src/server/communication/mqtt_client.py b/src/server/communication/mqtt_client.py index b254c3f..7e29d97 100644 --- a/src/server/communication/mqtt_client.py +++ b/src/server/communication/mqtt_client.py @@ -1,6 +1,7 @@ import json import random import time +import queue import ntplib import paho.mqtt.client as mqtt @@ -34,6 +35,7 @@ def __init__( input_width: int, last_offloading_layer: int, request_handler: RequestHandler, + max_queue_size: int = 1000, ): self.broker_url = broker_url self.broker_port = broker_port @@ -75,6 +77,10 @@ def __init__( self._executor = ThreadPoolExecutor(max_workers=4) self._ntp_resync_timer = None + # Set up bounded task queue for message processing + self._task_queue = queue.Queue(maxsize=max_queue_size) + self._task_executor = ThreadPoolExecutor(max_workers=4) + def _schedule_resync_ntp(self): timer = threading.Timer(600, self._resync_ntp) timer.daemon = True @@ -111,6 +117,7 @@ def stop(self): if self._ntp_resync_timer is not None: self._ntp_resync_timer.cancel() self._executor.shutdown(wait=False, cancel_futures=True) + self._task_executor.shutdown(wait=False, cancel_futures=True) self.client.disconnect() def on_connect(self, client, userdata, flags, reason_code, properties=None): @@ -126,6 +133,8 @@ def on_connect(self, client, userdata, flags, reason_code, properties=None): logger.debug( f"Initial NTP timestamp from NTP server {self.ntp_server}: {self.start_timestamp}" ) + # Start the task worker after successful connection + self._start_task_worker() else: logger.debug(f"Connection failed with code {reason_code}") @@ -174,8 +183,29 @@ def get_current_time(self) -> float: def on_message(self, client, userdata, message): received_timestamp = self.get_current_time() - # OPTIMIZATION: Submit to thread pool instead of a single-worker queue - self._executor.submit(self.handle_message_task, message, received_timestamp) + # Use bounded queue for backpressure handling + try: + self._task_queue.put_nowait((message, received_timestamp)) + except queue.Full: + logger.warning(f"MQTT task queue full (maxsize={self._task_queue.maxsize}), dropping message from topic {message.topic}") + return + + def _start_task_worker(self): + """Start the background worker that processes tasks from the queue.""" + def worker(): + while True: + try: + message, received_timestamp = self._task_queue.get() + try: + self.handle_message_task(message, received_timestamp) + except Exception: + logger.exception("Error processing MQTT message task") + finally: + self._task_queue.task_done() + except Exception: + logger.exception("Task worker error") + thread = threading.Thread(target=worker, daemon=True) + thread.start() def handle_message_task(self, message, received_timestamp): if topic_matches( diff --git a/src/server/communication/request_handler.py b/src/server/communication/request_handler.py index 9ae2136..0c59f4c 100644 --- a/src/server/communication/request_handler.py +++ b/src/server/communication/request_handler.py @@ -73,6 +73,11 @@ def load_verbose_config(): return _get_settings().get("verbose", False) +def load_ema_alpha() -> float: + """Load EMA alpha for smoothing inference times from cached settings.""" + return _get_settings().get("offloading_algo", {}).get("ema_alpha", 0.5) + + # ── Background I/O writer ─────────────────────────────────────────────────── # A single daemon thread drains a queue of callables, so that debug-JSON, # simulation-CSV, and evaluation-CSV writes never block the inference path. @@ -144,10 +149,10 @@ def __init__(self): # Print header once if not RequestHandler.header_printed: - print( + logger.info( "\nDevice | Offload | Acq Time (ms) | Device Comp (ms) | Edge Comp (ms) | Net Time (ms) | Total (ms)" ) - print("-" * 100) + logger.info("-" * 100) RequestHandler.header_printed = True # Empty the debug folder every time the server starts @@ -434,7 +439,7 @@ def handle_device_inference_result(self, body, received_timestamp): device_inference_times = RequestHandler.device_profiles[device_id]["device_inference_times"] edge_inference_times = RequestHandler.device_profiles[device_id]["edge_inference_times"] - alpha = 0.5 + alpha = load_ema_alpha() for l_id, inference_time in enumerate(message_data.device_layers_inference_time): layer_key = f"layer_{l_id}" if layer_key in device_inference_times: @@ -559,7 +564,9 @@ def handle_device_inference_result(self, body, received_timestamp): decision_candidates = offloading_algo.candidate_evaluations # Stampiamo la tabella SOLO se il calcolo è andato a buon fine! - print(f"{device_id:13s} | {message_data.offloading_layer_index:7d} | {acq_time:13.2f} | {device_comp_time:16.2f} | {edge_comp_time:14.2f} | {network_time:13.2f} | {total_time:10.2f}") + logger.info( + f"{device_id:13s} | {message_data.offloading_layer_index:7d} | {acq_time:13.2f} | {device_comp_time:16.2f} | {edge_comp_time:14.2f} | {network_time:13.2f} | {total_time:10.2f}" + ) except IndexError: # Se mancano i file restituiamo il layer massimo usando la variabile corretta. @@ -612,7 +619,7 @@ def handle_device_inference_result(self, body, received_timestamp): self.profiler.stop_cprofile("server_deep_analysis") # Lo riavviamo per catturare i prossimi 50 self.profiler.start_cprofile() - print(f"📊 [PROFILER SERVER] Dati macro e micro (cProfile) esportati.") + logger.info("📊 [PROFILER SERVER] Dati macro e micro (cProfile) esportati.") return best_offloading_layer, device_id, prediction @@ -710,8 +717,8 @@ def build_model_registry(cls, models_config: dict): "last_offloading_layer": model_config["last_offloading_layer"], "num_layers": model_config["last_offloading_layer"] + 1, } - print( + logger.info( f"Registered model '{model_name}' (dir: {model_dir}) with hash {model_hash}" ) except Exception as e: - print(f"Warning: could not register model {model_name}: {e}") + logger.warning(f"Could not register model {model_name}: {e}") diff --git a/src/server/edge/run_edge.py b/src/server/edge/run_edge.py index eb98df0..dac12aa 100644 --- a/src/server/edge/run_edge.py +++ b/src/server/edge/run_edge.py @@ -85,6 +85,7 @@ def create_enabled_transports( input_width=model_config["input_width"], last_offloading_layer=model_config["last_offloading_layer"], request_handler=request_handler, + max_queue_size=mqtt_config.get("max_queue_size", 1000), ), ) ) diff --git a/src/server/settings.yaml b/src/server/settings.yaml index 1eadf0c..4d6b378 100644 --- a/src/server/settings.yaml +++ b/src/server/settings.yaml @@ -22,6 +22,7 @@ communication: client_id: edge model: fomo_96x96 ntp_server: 0.it.pool.ntp.org + max_queue_size: 1000 topics: device_inference_result: device_01/model_inference_result device_input: device_01/input_data @@ -81,3 +82,6 @@ model: # Impostazioni di Telemetria e Profilazione, setta a true per avere report di analisi, setta a false altrimenti debug_cprofiler: false + +offloading_algo: + ema_alpha: 0.5 diff --git a/src/server/web/dashboard_data.py b/src/server/web/dashboard_data.py index 11f8b4c..418453f 100644 --- a/src/server/web/dashboard_data.py +++ b/src/server/web/dashboard_data.py @@ -153,6 +153,37 @@ def load_inference_times(path: str | Path) -> tuple[list[float], list[int]]: return values, layers +def load_phase_timing(path: str | Path) -> pd.DataFrame: + """Load phase timing data from profiler JSON export. + + Expected format: {"hardware": "Edge_Server", "phases": {"phase_name": {...}}} + """ + json_path = Path(path) + if not json_path.exists() or json_path.stat().st_size == 0: + return pd.DataFrame(columns=["phase", "count", "mean_ms", "min_ms", "max_ms", "total_ms"]) + + try: + with json_path.open("r") as file: + data = json.load(file) + except (OSError, json.JSONDecodeError): + return pd.DataFrame(columns=["phase", "count", "mean_ms", "min_ms", "max_ms", "total_ms"]) + + phases = data.get("phases", {}) + rows = [] + for phase_name, stats in phases.items(): + if isinstance(stats, dict) and "count" in stats: + rows.append({ + "phase": phase_name, + "count": stats.get("count", 0), + "mean_ms": stats.get("wall_time_ms", {}).get("mean", 0), + "min_ms": stats.get("wall_time_ms", {}).get("min", 0) if "min" in stats.get("wall_time_ms", {}) else stats.get("min_ms", 0), + "max_ms": stats.get("wall_time_ms", {}).get("p95", 0) if "p95" in stats.get("wall_time_ms", {}) else stats.get("max_ms", 0), + "total_ms": stats.get("wall_time_ms", {}).get("mean", 0) * stats.get("count", 0), + }) + + return pd.DataFrame(rows) + + def build_inference_frame(inference_times: list[float], layers: list[int]) -> pd.DataFrame: return pd.DataFrame( { diff --git a/src/server/web/webpage.py b/src/server/web/webpage.py index 582cc13..375aeec 100644 --- a/src/server/web/webpage.py +++ b/src/server/web/webpage.py @@ -15,6 +15,7 @@ load_decision_summaries, load_evaluations, load_inference_times, + load_phase_timing, non_empty_values, ) @@ -160,3 +161,15 @@ st.image(str(input_image_path)) else: st.info("No captured image is available yet.") + +st.header('Time Breakdown (Phase Timing)') +profiler_path = Path("logs/server_stats.json") +if profiler_path.exists(): + phase_df = load_phase_timing(profiler_path) + if not phase_df.empty: + st.bar_chart(phase_df.set_index('phase')['mean_ms']) + st.dataframe(phase_df, use_container_width=True) + else: + st.info("Profiler data available but no phase timing recorded yet.") +else: + st.info("Profiler data not available yet. Enable debug_cprofiler in settings.yaml to collect phase timing.") From c9867c4a91eb8af6bdc82a05d174eb4eef2d8ed7 Mon Sep 17 00:00:00 2001 From: Luca Bedogni Date: Sat, 4 Jul 2026 02:14:52 +0200 Subject: [PATCH 2/2] toread workflow: move 3 papers to files/, update index, push lbedogni.github.io submodule - Moved 3 split computing papers from lbedogni.github.io/files/ to files/: - 2511.18151_AVERY.md (Adaptive VLM Split Computing for UAVs) - 2512.09963_GoodSpeed.md (Fair Goodput with Speculative Decoding) - 2603.14958_SALT.md (Closed Split Computing Personalization) - Created split-computing-papers-summary.md with comparative summary - Updated lbedogni.github.io submodule to latest master (synced moved files) --- files/2511.18151_AVERY.md | 18 +++ files/2512.09963_GoodSpeed.md | 18 +++ files/2603.14958_SALT.md | 18 +++ files/split-computing-papers-summary.md | 146 ++++++++++++++++++++++++ lbedogni.github.io | 2 +- 5 files changed, 201 insertions(+), 1 deletion(-) create mode 100644 files/2511.18151_AVERY.md create mode 100644 files/2512.09963_GoodSpeed.md create mode 100644 files/2603.14958_SALT.md create mode 100644 files/split-computing-papers-summary.md diff --git a/files/2511.18151_AVERY.md b/files/2511.18151_AVERY.md new file mode 100644 index 0000000..5521f29 --- /dev/null +++ b/files/2511.18151_AVERY.md @@ -0,0 +1,18 @@ +# AVERY: Adaptive VLM Split Computing through Embodied Self-Awareness for Efficient Disaster Response Systems + +**arXiv ID:** 2511.18151 +**Field:** Split Computing / VLM / UAVs + +## Summary +AVERY is a framework for deploying Vision-Language Models (VLMs) on resource-constrained UAVs, specifically for disaster response. It moves beyond traditional depth-wise partitioning of neural networks. + +## Key Contributions +- **Dual-Stream Split:** Introduces a functional split into: + - **Context Stream:** High-frequency, low-resolution for real-time awareness. + - **Insight Stream:** Low-frequency, high-fidelity for deep semantic analysis. +- **Self-Aware Controller:** An on-board controller that monitors network conditions and operator intent to dynamically select compression models, balancing accuracy and throughput. + +## Analysis & Results +- **Efficiency:** Achieved 93.98% lower energy consumption compared to full-edge execution. +- **Accuracy:** Outperformed raw image compression by 11.2% in accuracy. +- **Impact:** Enables real-time, queryable intelligence on UAVs in low-bandwidth disaster zones, where naive cloud offloading typically fails. diff --git a/files/2512.09963_GoodSpeed.md b/files/2512.09963_GoodSpeed.md new file mode 100644 index 0000000..6644fc3 --- /dev/null +++ b/files/2512.09963_GoodSpeed.md @@ -0,0 +1,18 @@ +# GoodSpeed: Optimizing Fair Goodput with Adaptive Speculative Decoding in Distributed Edge Inference + +**arXiv ID:** 2512.09963 +**Status:** Accepted to IEEE INFOCOM 2026 +**Field:** Distributed Edge Inference / LLMs + +## Summary +GoodSpeed is a distributed inference framework designed to accelerate Large Language Model (LLM) inference using adaptive speculative decoding. It coordinates a central verification server with multiple heterogeneous draft servers (running small LMs) to generate candidate tokens. + +## Key Contributions +- **Adaptive Speculative Decoding:** Uses draft models to propose tokens, which are then verified by a larger model. +- **Gradient Scheduling Algorithm:** Dynamically assigns token verification tasks to maximize a logarithmic utility function, ensuring proportional fairness across servers. +- **Parallel Processing:** Processes speculative outputs from all draft servers in parallel to optimize latency and throughput. + +## Analysis & Results +- **Fairness:** Solves the open challenge of maintaining high "goodput" (effective token rate) while ensuring fairness among cooperating draft servers. +- **Performance:** Provably converges to optimal goodput allocation in steady-state and maintains near-optimal performance under dynamic workloads. +- **Impact:** Provides a scalable solution for multi-server speculative decoding, making LLMs more viable in resource-constrained distributed edge environments. diff --git a/files/2603.14958_SALT.md b/files/2603.14958_SALT.md new file mode 100644 index 0000000..32080bf --- /dev/null +++ b/files/2603.14958_SALT.md @@ -0,0 +1,18 @@ +# SALT: Lightweight User-Personalization Method for Closed Split Computing + +**arXiv ID:** 2603.14958 +**Field:** Closed Split Computing / Personalization + +## Summary +SALT (Split-Adaptive Lightweight Tuning) is a framework for adapting "closed" split computing systems—where model architectures and parameters of the head and tail networks are inaccessible. + +## Key Contributions +- **Client-Side Adapter:** Introduces a compact adapter that refines intermediate representations from a frozen head network. +- **No-Modification Adaptation:** Enables adaptation (personalization, robustness, privacy) without modifying the frozen head/tail networks or increasing communication overhead. +- **Flexible Objectives:** Supports user personalization and robustness to communication failures (packet loss). + +## Analysis & Results +- **Personalization:** Improved personalized accuracy on CIFAR-10 from 88.1% to 93.8%. +- **Efficiency:** Reduced training latency by more than 60% compared to conventional retraining. +- **Robustness:** Maintains >90% accuracy even under 75% packet loss. +- **Impact:** Offers a practical way to personalize and harden split computing systems when the underlying models are proprietary or locked. diff --git a/files/split-computing-papers-summary.md b/files/split-computing-papers-summary.md new file mode 100644 index 0000000..ec5c4d1 --- /dev/null +++ b/files/split-computing-papers-summary.md @@ -0,0 +1,146 @@ +# Split Computing Research Papers Summary + +This document summarizes three recent split computing research papers from arXiv: + +1. **AVERY** (2511.18151) - Adaptive VLM Split Computing for Disaster Response UAVs +2. **GoodSpeed** (2512.09963) - Optimizing Fair Goodput with Adaptive Speculative Decoding in Distributed Edge Inference +3. **SALT** (2603.14958) - Lightweight User-Personalization for Closed Split Computing + +--- + +## 1. AVERY: Adaptive VLM Split Computing through Embodied Self-Awareness for Efficient Disaster Response Systems + +**arXiv ID:** 2511.18151 +**Field:** Split Computing / VLM / UAVs / Disaster Response +**Date:** November 2025 + +### Summary +AVERY is a framework for deploying Vision-Language Models (VLMs) on resource-constrained UAVs for disaster response. It moves beyond traditional depth-wise neural network partitioning by introducing a **dual-stream functional split** and a **self-aware controller**. + +### Key Contributions + +| Contribution | Description | +|-------------|-------------| +| **Dual-Stream Split** | Splits VLM into two functional streams:
• **Context Stream**: High-frequency, low-resolution for real-time situational awareness
• **Insight Stream**: Low-frequency, high-fidelity for deep semantic analysis | +| **Self-Aware Controller** | On-board controller monitors network conditions and operator intent to dynamically select compression models, balancing accuracy vs. throughput | + +### Analysis & Results + +| Metric | Result | +|--------|--------| +| **Energy Efficiency** | 93.98% lower energy consumption vs. full-edge execution | +| **Accuracy** | 11.2% higher accuracy vs. raw image compression | +| **Impact** | Enables real-time, queryable intelligence on UAVs in low-bandwidth disaster zones where cloud offloading typically fails | + +### Impact +Enables real-time, queryable intelligence on UAVs operating in low-bandwidth disaster zones where naive cloud offloading typically fails. The dual-stream architecture allows UAVs to maintain situational awareness even under severe bandwidth constraints while providing deep semantic analysis when bandwidth permits. + +--- + +## 2. GoodSpeed: Optimizing Fair Goodput with Adaptive Speculative Decoding in Distributed Edge Inference + +**arXiv ID:** 2512.09963 +**Status:** Accepted to IEEE INFOCOM 2026 +**Field:** Distributed Edge Inference / LLMs / Speculative Decoding +**Date:** December 2025 + +### Summary +GoodSpeed is a distributed inference framework that accelerates Large Language Model (LLM) inference using adaptive speculative decoding. It coordinates a central verification server with multiple heterogeneous draft servers (running small LMs) to generate candidate tokens. + +### Key Contributions + +| Contribution | Description | +|-------------|-------------| +| **Adaptive Speculative Decoding** | Uses draft models to propose tokens, verified by a larger model | +| **Gradient Scheduling Algorithm** | Dynamically assigns token verification tasks to maximize a logarithmic utility function, ensuring proportional fairness across servers | +| **Parallel Processing** | Processes speculative outputs from all draft servers in parallel to optimize latency and throughput | + +### Analysis & Results + +| Aspect | Result | +|--------|--------| +| **Fairness** | Solves the open challenge of maintaining high "goodput" (effective token rate) while ensuring fairness among cooperating draft servers | +| **Performance** | Provably converges to optimal goodput allocation in steady-state; maintains near-optimal performance under dynamic workloads | +| **Impact** | Provides a scalable solution for multi-server speculative decoding, making LLMs more viable in resource-constrained distributed edge environments | + +### Impact +Provides a scalable solution for multi-server speculative decoding, making LLMs more viable in resource-constrained distributed edge environments. The fairness-aware scheduling ensures no single draft server is starved while maximizing overall system throughput. + +--- + +## 3. SALT: Lightweight User-Personalization Method for Closed Split Computing + +**arXiv ID:** 2603.14958 +**Field:** Closed Split Computing / Personalization / Privacy +**Date:** March 2026 + +### Summary +SALT (Split-Adaptive Lightweight Tuning) is a framework for adapting "closed" split computing systems—where model architectures and parameters of the head and tail networks are inaccessible (proprietary/locked). + +### Key Contributions + +| Contribution | Description | +|-------------|-------------| +| **Client-Side Adapter** | Introduces a compact adapter that refines intermediate representations from a frozen head network | +| **No-Modification Adaptation** | Enables adaptation (personalization, robustness, privacy) without modifying frozen head/tail networks or increasing communication overhead | +| **Flexible Objectives** | Supports user personalization and robustness to communication failures (packet loss) | + +### Analysis & Results + +| Metric | Result | +|--------|--------| +| **Personalization** | Improved personalized accuracy on CIFAR-10 from 88.1% → 93.8% (+5.7%) | +| **Efficiency** | Reduced training latency by >60% compared to conventional retraining | +| **Robustness** | Maintains >90% accuracy even under 75% packet loss | +| **Impact** | Offers a practical way to personalize and harden split computing systems when underlying models are proprietary or locked | + +### Impact +Provides a practical way to personalize and harden split computing systems when the underlying models are proprietary or locked. The client-side adapter approach adds minimal overhead while enabling personalization, robustness to packet loss, and privacy preservation without requiring access to model weights. + +--- + +## Comparative Summary + +| Aspect | AVERY | GoodSpeed | SALT | +|--------|-------|-----------|------| +| **Domain** | VLM on UAVs (Disaster Response) | LLM Inference (Distributed Edge) | Closed Split Computing (Personalization) | +| **Key Innovation** | Dual-stream functional split + self-aware controller | Fair adaptive speculative decoding | Client-side adapter for closed models | +| **Primary Gain** | 94% energy reduction, 11% accuracy gain | Fair goodput optimization | 5.7% accuracy gain, 60% training speedup | +| **Key Constraint** | Low bandwidth, energy-constrained UAVs | Heterogeneous edge servers, fairness | Closed/proprietary models, packet loss | +| **Deployment** | Disaster response UAVs | Distributed edge LLM serving | Closed split computing systems | + +--- + +## Cross-Cutting Themes + +1. **Split Computing Evolution**: All three papers advance split computing beyond simple layer partitioning: + - AVERY: Functional (dual-stream) split + - GoodSpeed: Cross-server speculative decoding + - SALT: Adapter-based adaptation for closed models + +2. **Edge/Resource Constraints**: All target resource-constrained environments: + - UAVs in disaster zones (AVERY) + - Heterogeneous edge servers (GoodSpeed) + - Closed proprietary systems (SALT) + +3. **Adaptivity**: Dynamic adaptation to conditions: + - Network/intent-aware control (AVERY) + - Fairness-aware scheduling (GoodSpeed) + - Adapter-based personalization (SALT) + +4. **Communication Efficiency**: All address bandwidth/communication constraints: + - Dual-stream compression (AVERY) + - Speculative token generation (GoodSpeed) + - Zero-overhead adapter (SALT) + +--- + +## Files Referenced + +- `./files/2511.18151_AVERY.md` — AVERY paper summary +- `./files/2512.09963_GoodSpeed.md` — GoodSpeed paper summary +- `./files/2603.14958_SALT.md` — SALT paper summary + +--- + +*Summary compiled on 2026-07-04 from arXiv paper summaries in lbedogni.github.io/files/* \ No newline at end of file diff --git a/lbedogni.github.io b/lbedogni.github.io index 42124e8..62c164a 160000 --- a/lbedogni.github.io +++ b/lbedogni.github.io @@ -1 +1 @@ -Subproject commit 42124e8e6ce16590d70549b0049cf4ec1ee80f39 +Subproject commit 62c164a380809f0c340a1f21872116dc2f005164