UniFaaS: Programming across Distributed Cyberinfrastructure with Federated Function Serving
<|reference_start|>UniFaaS: Programming across Distributed Cyberinfrastructure with Federated Function Serving: Modern scientific applications are increasingly decomposable into individual functions that may be deployed across distributed and diverse cyberinfrastructure such as supercomputers, clouds, and accelerators. Such applications call for new approaches to programming, distributed execution, and function-level management. We present UniFaaS, a parallel programming framework that relies on a federated function-as-a-service (FaaS) model to enable composition of distributed, scalable, and high-performance scientific workflows, and to support fine-grained function-level management. UniFaaS provides a unified programming interface to compose dynamic task graphs with transparent wide-area data management. UniFaaS exploits an observe-predict-decide approach to efficiently map workflow tasks to target heterogeneous and dynamic resources. We propose a dynamic heterogeneity-aware scheduling algorithm that employs a delay mechanism and a re-scheduling mechanism to accommodate dynamic resource capacity. Our experiments show that UniFaaS can efficiently execute workflows across computing resources with minimal scheduling overhead. We show that UniFaaS can improve the performance of a real-world drug screening workflow by as much as 22.99% when employing an additional 19.48% of resources and a montage workflow by 54.41% when employing an additional 47.83% of resources across multiple distributed clusters, in contrast to using a single cluster<|reference_end|>
@article{li2024unifaas:,
    title={UniFaaS: Programming across Distributed Cyberinfrastructure with
  Federated Function Serving},
    author={Yifei Li, Ryan Chard, Yadu Babuji, Kyle Chard, Ian Foster, Zhuozhao Li},
    journal={arXiv preprint arXiv:2403.19257},
    year={2024},
    doi={10.1109/IPDPS57955.2024.00027},
    archivePrefix={arXiv},
    eprint={2403.19257},
    primaryClass={cs.DC}
}