Files
publish-assistant/cloud-edge/digests/nsdi-2024/index.html
2026-08-18 13:39:21 +00:00

26 lines
22 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!doctype html><html lang=en dir=auto data-theme=auto><head><meta charset=utf-8><meta http-equiv=X-UA-Compatible content="IE=edge"><meta name=viewport content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name=robots content="index, follow"><title>NSDI 2024 Digest | Publish Assistant</title><meta name=keywords content><meta name=description content="13 papers selected.
MegaScale: Scaling Large Language Model Training to More Than 10, 000 GPUs
Ziheng Jiang, Haibin Lin, Yinmin Zhong, Qi Huang et al.
TL;DR — ByteDance&rsquo;s full production account of training LLMs at 10,000+ GPUs, with novel co-design of the network stack, fault tolerance, and collective communication to sustain near-linear scaling.
Harmony: A Congestion-free Datacenter Architecture
Saksham Agarwal, Qizhe Cai, Rachit Agarwal 0001, David B. Shmoys et al."><meta name=author content="Publish Assistant"><link rel=canonical href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/nsdi-2024/><link crossorigin=anonymous href=/vincent/publish-assistant/assets/css/stylesheet.d72f07832e13c592b3edba91680bfe70f01daac396179bcace0ac36e8e0494c6.css integrity="sha256-1y8Hgy4TxZKz7bqRaAv+cPAdqsOWF5vKzgrDbo4ElMY=" rel="preload stylesheet" as=style><link rel=icon href=https://pub.sqrt.fr/vincent/publish-assistant/favicon.ico><link rel=icon type=image/png sizes=16x16 href=https://pub.sqrt.fr/vincent/publish-assistant/favicon-16x16.png><link rel=icon type=image/png sizes=32x32 href=https://pub.sqrt.fr/vincent/publish-assistant/favicon-32x32.png><link rel=apple-touch-icon href=https://pub.sqrt.fr/vincent/publish-assistant/apple-touch-icon.png><link rel=mask-icon href=https://pub.sqrt.fr/vincent/publish-assistant/safari-pinned-tab.svg><meta name=theme-color content="#2e2e33"><meta name=msapplication-TileColor content="#2e2e33"><link rel=alternate hreflang=en href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/nsdi-2024/><noscript><style>#theme-toggle,.top-link{display:none}</style><style>@media(prefers-color-scheme:dark){:root{--theme:rgb(29, 30, 32);--entry:rgb(46, 46, 51);--primary:rgb(218, 218, 219);--secondary:rgb(155, 156, 157);--tertiary:rgb(65, 66, 68);--content:rgb(196, 196, 197);--code-block-bg:rgb(46, 46, 51);--code-bg:rgb(55, 56, 62);--border:rgb(51, 51, 51);color-scheme:dark}.list{background:var(--theme)}.toc{background:var(--entry)}}</style></noscript><script>localStorage.getItem("pref-theme")==="dark"?document.querySelector("html").dataset.theme="dark":localStorage.getItem("pref-theme")==="light"?document.querySelector("html").dataset.theme="light":window.matchMedia("(prefers-color-scheme: dark)").matches?document.querySelector("html").dataset.theme="dark":document.querySelector("html").dataset.theme="light"</script><meta property="og:url" content="https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/nsdi-2024/"><meta property="og:site_name" content="Publish Assistant"><meta property="og:title" content="NSDI 2024 Digest"><meta property="og:description" content="13 papers selected.
MegaScale: Scaling Large Language Model Training to More Than 10, 000 GPUs Ziheng Jiang, Haibin Lin, Yinmin Zhong, Qi Huang et al.
TL;DR — ByteDances full production account of training LLMs at 10,000+ GPUs, with novel co-design of the network stack, fault tolerance, and collective communication to sustain near-linear scaling.
Harmony: A Congestion-free Datacenter Architecture Saksham Agarwal, Qizhe Cai, Rachit Agarwal 0001, David B. Shmoys et al."><meta property="og:locale" content="en_us"><meta property="og:type" content="article"><meta property="article:section" content="cloud-edge"><meta property="article:published_time" content="2024-01-01T00:00:00+00:00"><meta property="article:modified_time" content="2024-01-01T00:00:00+00:00"><meta name=twitter:card content="summary"><meta name=twitter:title content="NSDI 2024 Digest"><meta name=twitter:description content="13 papers selected.
MegaScale: Scaling Large Language Model Training to More Than 10, 000 GPUs Ziheng Jiang, Haibin Lin, Yinmin Zhong, Qi Huang et al.
TL;DR — ByteDances full production account of training LLMs at 10,000+ GPUs, with novel co-design of the network stack, fault tolerance, and collective communication to sustain near-linear scaling.
Harmony: A Congestion-free Datacenter Architecture Saksham Agarwal, Qizhe Cai, Rachit Agarwal 0001, David B. Shmoys et al."><script type=application/ld+json>{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Edge and Cloud Systems","item":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/"},{"@type":"ListItem","position":2,"name":"Digests","item":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/"},{"@type":"ListItem","position":3,"name":"NSDI 2024 Digest","item":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/nsdi-2024/"}]}</script><script type=application/ld+json>{"@context":"https://schema.org","@type":"BlogPosting","headline":"NSDI 2024 Digest","name":"NSDI 2024 Digest","description":"13 papers selected.\nMegaScale: Scaling Large Language Model Training to More Than 10, 000 GPUs Ziheng Jiang, Haibin Lin, Yinmin Zhong, Qi Huang et al.\nTL;DR — ByteDance\u0026rsquo;s full production account of training LLMs at 10,000+ GPUs, with novel co-design of the network stack, fault tolerance, and collective communication to sustain near-linear scaling.\nHarmony: A Congestion-free Datacenter Architecture Saksham Agarwal, Qizhe Cai, Rachit Agarwal 0001, David B. Shmoys et al.\n","keywords":[],"articleBody":"13 papers selected.\nMegaScale: Scaling Large Language Model Training to More Than 10, 000 GPUs Ziheng Jiang, Haibin Lin, Yinmin Zhong, Qi Huang et al.\nTL;DR — ByteDances full production account of training LLMs at 10,000+ GPUs, with novel co-design of the network stack, fault tolerance, and collective communication to sustain near-linear scaling.\nHarmony: A Congestion-free Datacenter Architecture Saksham Agarwal, Qizhe Cai, Rachit Agarwal 0001, David B. Shmoys et al.\nTL;DR — Proposes rethinking datacenter fabrics to eliminate congestion by construction rather than managing it reactively, achieving line-rate throughput without per-packet feedback from Cornell and Google.\nDINT: Fast In-Kernel Distributed Transactions with eBPF Yang Zhou 0008, Xingyu Xiang, Matthew Kiley, Sowmya Dharanipragada et al.\nTL;DR — Demonstrates that eBPF programs executing entirely inside the kernel can enforce linearizable, ACID-compliant distributed transactions at dramatically lower latency than user-space approaches.\nMaking Kernel Bypass Practical for the Cloud with Junction Joshua Fried, Gohar Irfan Chaudhry, Enrique Saurez, Esha Choukse et al.\nTL;DR — Junction (MIT + Microsoft) is the first system to bring full kernel-bypass networking to multi-tenant cloud VMs without requiring application modifications or sacrificing isolation.\nSIEVE is Simpler than LRU: an Efficient Turn-Key Eviction Algorithm for Web Caches Yazhuo Zhang, Juncheng Yang, Yao Yue, Ymir Vigfusson et al.\nTL;DR — Surprising finding that a single-queue eviction policy requiring almost no state changes outperforms LRU and all modern approximations on production web-cache workloads.\nA large-scale deployment of DCTCP Abhishek Dhamija, Balasubramanian Madhavan, Hechao Li, Jie Meng et al.\nTL;DR — A rare, candid production report from Meta on deploying DCTCP at hyperscale, surfacing unexpected interactions with heterogeneous hardware, cross-traffic, and operational constraints.\nBrain-on-Switch: Towards Advanced Intelligent Network Data Plane via NN-Driven Traffic Analysis at Line-Speed Jinzhu Yan, Haotian Xu, Zhuotao Liu, Qi Li 0002 et al.\nTL;DR — Executes neural-network inference for traffic classification directly in the programmable switch data plane at line rate, eliminating the round-trip to a CPU-based classifier.\nHorus: Granular In-Network Task Scheduler for Cloud Datacenters Parham Yassini, Khaled Diab 0001, Saeed Mahloujifar, Mohamed Hefeeda\nTL;DR — Offloads microsecond-granularity task scheduling decisions into programmable switches, reducing load-balancing latency by orders of magnitude compared to software schedulers.\nCAPA: An Architecture For Operating Cluster Networks With High Availability Bingzhe Liu, Colin Scott, Mukarram Tariq, Andrew D. Ferguson et al.\nTL;DR — Googles production architecture for maintaining five-nines availability in Jupiter-scale cluster networks, detailing how control-plane redundancy and fast failover are achieved in practice.\nRevisiting Congestion Control for Lossless Ethernet Yiran Zhang, Qingkai Meng 0001, Chaolei Hu, Fengyuan Ren\nTL;DR — Identifies fundamental flaws in PFC-based lossless Ethernet that cause cascading head-of-line blocking and proposes a redesigned congestion control that avoids them.\nSirius: Composing Network Function Chains into P4-Capable Edge Gateways Jiaqi Gao, Jiamin Cao, Yifan Li, Mengqi Liu 0001 et al.\nTL;DR — Alibabas production system for composing arbitrary NF chains into P4-programmed edge gateways, replacing a fleet of dedicated middleboxes and cutting per-packet processing cost significantly.\nCASSINI: Network-Aware Job Scheduling in Machine Learning Clusters Sudarsanan Rajasekaran, Manya Ghobadi, Aditya Akella\nTL;DR — Shows that ignoring network topology when scheduling ML training jobs causes severe collective-communication contention, and that topology-aware co-scheduling yields substantial throughput gains.\nCloudcast: High-Throughput, Cost-Aware Overlay Multicast in the Cloud Sarah Wooders, Shu Liu, Paras Jain 0001, Xiangxi Mo et al.\nTL;DR — Berkeley/Penn system that builds overlay multicast trees across cloud regions optimized for egress cost, enabling high-throughput data dissemination at a fraction of unicast cloud egress fees.\n","wordCount":"571","inLanguage":"en","datePublished":"2024-01-01T00:00:00Z","dateModified":"2024-01-01T00:00:00Z","author":{"@type":"Person","name":"Publish Assistant"},"mainEntityOfPage":{"@type":"WebPage","@id":"https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/nsdi-2024/"},"publisher":{"@type":"Organization","name":"Publish Assistant","logo":{"@type":"ImageObject","url":"https://pub.sqrt.fr/vincent/publish-assistant/favicon.ico"}}}</script></head><body id=top><header class=header><nav class=header-nav><div class=logo><a href=https://pub.sqrt.fr/vincent/publish-assistant/ accesskey=h title="Publish Assistant (Alt + H)">Publish Assistant</a>
<span class=logo-sep>/</span>
<a class=logo-topic href=/vincent/publish-assistant/cloud-edge/ title="Edge and Cloud Systems">Edge and Cloud Systems</a><div class=logo-switches><button id=theme-toggle class=theme-toggle accesskey=t title="(Alt + T)" aria-label="Toggle theme">
<svg class="moon" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M21 12.79A9 9 0 1111.21 3 7 7 0 0021 12.79z"/></svg>
<svg class="sun" width="18" height="18" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><circle cx="12" cy="12" r="5"/><line x1="12" y1="1" x2="12" y2="3"/><line x1="12" y1="21" x2="12" y2="23"/><line x1="4.22" y1="4.22" x2="5.64" y2="5.64"/><line x1="18.36" y1="18.36" x2="19.78" y2="19.78"/><line x1="1" y1="12" x2="3" y2="12"/><line x1="21" y1="12" x2="23" y2="12"/><line x1="4.22" y1="19.78" x2="5.64" y2="18.36"/><line x1="18.36" y1="5.64" x2="19.78" y2="4.22"/></svg></button></div></div><ul id=menu class=menu><li><a href=/vincent/publish-assistant/cloud-edge/venues/ title=Venues><span>Venues</span></a></li><li><a href=/vincent/publish-assistant/cloud-edge/calendar/ title=Calendar><span>Calendar</span></a></li><li><a href=/vincent/publish-assistant/cloud-edge/digests/ title=Digests><span class=active>Digests</span></a></li></ul></nav></header><main class=main><article class=post-single><header class=post-header><nav class=breadcrumbs role=navigation aria-label=Breadcrumb><a href=/vincent/publish-assistant/cloud-edge/digests/>Digests</a>
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevron-right"><polyline points="9 18 15 12 9 6"/></svg></nav><h1 class="post-title entry-hint-parent">NSDI 2024 Digest</h1><div class=post-meta><span title='2024-01-01 00:00:00 +0000 UTC'>January 1, 2024</span>&nbsp;·&nbsp;<span>Publish Assistant</span></div></header><div class="post-content md-content"><p>13 papers selected.</p><hr><h3 id=megascale-scaling-large-language-model-training-to-more-than-10-000-gpus>MegaScale: Scaling Large Language Model Training to More Than 10, 000 GPUs<a hidden class=anchor aria-hidden=true href=#megascale-scaling-large-language-model-training-to-more-than-10-000-gpus>#</a></h3><p><em>Ziheng Jiang, Haibin Lin, Yinmin Zhong, Qi Huang <em>et al.</em></em></p><p><strong>TL;DR</strong> — ByteDance&rsquo;s full production account of training LLMs at 10,000+ GPUs, with novel co-design of the network stack, fault tolerance, and collective communication to sustain near-linear scaling.</p><hr><h3 id=harmony-a-congestion-free-datacenter-architecture>Harmony: A Congestion-free Datacenter Architecture<a hidden class=anchor aria-hidden=true href=#harmony-a-congestion-free-datacenter-architecture>#</a></h3><p><em>Saksham Agarwal, Qizhe Cai, Rachit Agarwal 0001, David B. Shmoys <em>et al.</em></em></p><p><strong>TL;DR</strong> — Proposes rethinking datacenter fabrics to eliminate congestion by construction rather than managing it reactively, achieving line-rate throughput without per-packet feedback from Cornell and Google.</p><hr><h3 id=dint-fast-in-kernel-distributed-transactions-with-ebpf>DINT: Fast In-Kernel Distributed Transactions with eBPF<a hidden class=anchor aria-hidden=true href=#dint-fast-in-kernel-distributed-transactions-with-ebpf>#</a></h3><p><em>Yang Zhou 0008, Xingyu Xiang, Matthew Kiley, Sowmya Dharanipragada <em>et al.</em></em></p><p><strong>TL;DR</strong> — Demonstrates that eBPF programs executing entirely inside the kernel can enforce linearizable, ACID-compliant distributed transactions at dramatically lower latency than user-space approaches.</p><hr><h3 id=making-kernel-bypass-practical-for-the-cloud-with-junction>Making Kernel Bypass Practical for the Cloud with Junction<a hidden class=anchor aria-hidden=true href=#making-kernel-bypass-practical-for-the-cloud-with-junction>#</a></h3><p><em>Joshua Fried, Gohar Irfan Chaudhry, Enrique Saurez, Esha Choukse <em>et al.</em></em></p><p><strong>TL;DR</strong> — Junction (MIT + Microsoft) is the first system to bring full kernel-bypass networking to multi-tenant cloud VMs without requiring application modifications or sacrificing isolation.</p><hr><h3 id=sieve-is-simpler-than-lru-an-efficient-turn-key-eviction-algorithm-for-web-caches>SIEVE is Simpler than LRU: an Efficient Turn-Key Eviction Algorithm for Web Caches<a hidden class=anchor aria-hidden=true href=#sieve-is-simpler-than-lru-an-efficient-turn-key-eviction-algorithm-for-web-caches>#</a></h3><p><em>Yazhuo Zhang, Juncheng Yang, Yao Yue, Ymir Vigfusson <em>et al.</em></em></p><p><strong>TL;DR</strong> — Surprising finding that a single-queue eviction policy requiring almost no state changes outperforms LRU and all modern approximations on production web-cache workloads.</p><hr><h3 id=a-large-scale-deployment-of-dctcp>A large-scale deployment of DCTCP<a hidden class=anchor aria-hidden=true href=#a-large-scale-deployment-of-dctcp>#</a></h3><p><em>Abhishek Dhamija, Balasubramanian Madhavan, Hechao Li, Jie Meng <em>et al.</em></em></p><p><strong>TL;DR</strong> — A rare, candid production report from Meta on deploying DCTCP at hyperscale, surfacing unexpected interactions with heterogeneous hardware, cross-traffic, and operational constraints.</p><hr><h3 id=brain-on-switch-towards-advanced-intelligent-network-data-plane-via-nn-driven-traffic-analysis-at-line-speed>Brain-on-Switch: Towards Advanced Intelligent Network Data Plane via NN-Driven Traffic Analysis at Line-Speed<a hidden class=anchor aria-hidden=true href=#brain-on-switch-towards-advanced-intelligent-network-data-plane-via-nn-driven-traffic-analysis-at-line-speed>#</a></h3><p><em>Jinzhu Yan, Haotian Xu, Zhuotao Liu, Qi Li 0002 <em>et al.</em></em></p><p><strong>TL;DR</strong> — Executes neural-network inference for traffic classification directly in the programmable switch data plane at line rate, eliminating the round-trip to a CPU-based classifier.</p><hr><h3 id=horus-granular-in-network-task-scheduler-for-cloud-datacenters>Horus: Granular In-Network Task Scheduler for Cloud Datacenters<a hidden class=anchor aria-hidden=true href=#horus-granular-in-network-task-scheduler-for-cloud-datacenters>#</a></h3><p><em>Parham Yassini, Khaled Diab 0001, Saeed Mahloujifar, Mohamed Hefeeda</em></p><p><strong>TL;DR</strong> — Offloads microsecond-granularity task scheduling decisions into programmable switches, reducing load-balancing latency by orders of magnitude compared to software schedulers.</p><hr><h3 id=capa-an-architecture-for-operating-cluster-networks-with-high-availability>CAPA: An Architecture For Operating Cluster Networks With High Availability<a hidden class=anchor aria-hidden=true href=#capa-an-architecture-for-operating-cluster-networks-with-high-availability>#</a></h3><p><em>Bingzhe Liu, Colin Scott, Mukarram Tariq, Andrew D. Ferguson <em>et al.</em></em></p><p><strong>TL;DR</strong> — Google&rsquo;s production architecture for maintaining five-nines availability in Jupiter-scale cluster networks, detailing how control-plane redundancy and fast failover are achieved in practice.</p><hr><h3 id=revisiting-congestion-control-for-lossless-ethernet>Revisiting Congestion Control for Lossless Ethernet<a hidden class=anchor aria-hidden=true href=#revisiting-congestion-control-for-lossless-ethernet>#</a></h3><p><em>Yiran Zhang, Qingkai Meng 0001, Chaolei Hu, Fengyuan Ren</em></p><p><strong>TL;DR</strong> — Identifies fundamental flaws in PFC-based lossless Ethernet that cause cascading head-of-line blocking and proposes a redesigned congestion control that avoids them.</p><hr><h3 id=sirius-composing-network-function-chains-into-p4-capable-edge-gateways>Sirius: Composing Network Function Chains into P4-Capable Edge Gateways<a hidden class=anchor aria-hidden=true href=#sirius-composing-network-function-chains-into-p4-capable-edge-gateways>#</a></h3><p><em>Jiaqi Gao, Jiamin Cao, Yifan Li, Mengqi Liu 0001 <em>et al.</em></em></p><p><strong>TL;DR</strong> — Alibaba&rsquo;s production system for composing arbitrary NF chains into P4-programmed edge gateways, replacing a fleet of dedicated middleboxes and cutting per-packet processing cost significantly.</p><hr><h3 id=cassini-network-aware-job-scheduling-in-machine-learning-clusters>CASSINI: Network-Aware Job Scheduling in Machine Learning Clusters<a hidden class=anchor aria-hidden=true href=#cassini-network-aware-job-scheduling-in-machine-learning-clusters>#</a></h3><p><em>Sudarsanan Rajasekaran, Manya Ghobadi, Aditya Akella</em></p><p><strong>TL;DR</strong> — Shows that ignoring network topology when scheduling ML training jobs causes severe collective-communication contention, and that topology-aware co-scheduling yields substantial throughput gains.</p><hr><h3 id=cloudcast-high-throughput-cost-aware-overlay-multicast-in-the-cloud>Cloudcast: High-Throughput, Cost-Aware Overlay Multicast in the Cloud<a hidden class=anchor aria-hidden=true href=#cloudcast-high-throughput-cost-aware-overlay-multicast-in-the-cloud>#</a></h3><p><em>Sarah Wooders, Shu Liu, Paras Jain 0001, Xiangxi Mo <em>et al.</em></em></p><p><strong>TL;DR</strong> — Berkeley/Penn system that builds overlay multicast trees across cloud regions optimized for egress cost, enabling high-throughput data dissemination at a fraction of unicast cloud egress fees.</p></div><footer class=post-footer><ul class=post-tags></ul><nav class=paginav><a class=prev href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/mobisys-2024/><span class=title>« Prev</span>
<span>MobiSys 2024 Digest</span>
</a><a class=next href=https://pub.sqrt.fr/vincent/publish-assistant/cloud-edge/digests/sc-2024/><span class=title>Next »</span>
<span>SC 2024 Digest</span></a></nav></footer></article></main><footer class=footer><span>&copy; 2026 <a href=https://pub.sqrt.fr/vincent/publish-assistant/>Publish Assistant</a></span> ·
<span>Powered by
<a href="https://gohugo.io/?utm_source=papermod" rel=noopener target=_blank>Hugo</a> &
<a href=https://github.com/adityatelange/hugo-PaperMod/ rel=noopener target=_blank>PaperMod</a></span></footer><a href=#top id=top-link class="top-link hidden" aria-label="go to top" title="Go to Top (Alt + G)" accesskey=g><svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather feather-chevrons-up"><polyline points="17 11 12 6 7 11"/><polyline points="17 18 12 13 7 18"/></svg>
</a><script>let menu=document.getElementById("menu");if(menu){const e=localStorage.getItem("menu-scroll-position");e&&(menu.scrollLeft=parseInt(e,10)),menu.onscroll=function(){localStorage.setItem("menu-scroll-position",menu.scrollLeft)}}document.querySelectorAll('a[href^="#"]').forEach(e=>{e.addEventListener("click",function(e){e.preventDefault();var t=this.getAttribute("href").substr(1);window.matchMedia("(prefers-reduced-motion: reduce)").matches?document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView():document.querySelector(`[id='${decodeURIComponent(t)}']`).scrollIntoView({behavior:"smooth"}),t==="top"?history.replaceState(null,null," "):history.pushState(null,null,`#${t}`)})})</script><script>var toplink=document.getElementById("top-link");window.onscroll=function(){const e=window.innerHeight;document.body.scrollTop>e||document.documentElement.scrollTop>e?toplink.classList.remove("hidden"):toplink.classList.add("hidden")}</script><script>document.getElementById("theme-toggle").addEventListener("click",()=>{const e=document.querySelector("html");e.dataset.theme==="dark"?(e.dataset.theme="light",localStorage.setItem("pref-theme","light")):(e.dataset.theme="dark",localStorage.setItem("pref-theme","dark"))})</script></body></html>