[{"data":1,"prerenderedAt":252},["ShallowReactive",2],{"project-krum":3},{"id":4,"title":5,"description":6,"extension":7,"favorite":8,"icon":9,"meta":10,"publishedAt":239,"readingTime":201,"shortDescription":240,"slug":241,"status":242,"stem":243,"tags":244,"type":250,"__hash__":251},"projects\u002Fprojects\u002Fkrum.md","Krum — Byzantine-Resilient Distributed Learning","My M2 research internship at CMAP, Ecole Polytechnique. Implementing and analyzing Byzantine-robust Gradient Aggregation Rules (GARs) for secure distributed machine learning under adversarial attacks.","md",true,"i-ph-shield-check-duotone",{"body":11},{"type":12,"value":13,"toc":231},"minimark",[14,38,43,46,49,53,92,96,163,167,210,214,217,221,227],[15,16,17,27,28,31,32,37],"p",{},[18,19,23],"a",{"href":20,"rel":21},"https:\u002F\u002Fgithub.com\u002Fcalicarpa\u002Fkrum",[22],"nofollow",[24,25,26],"strong",{},"Krum"," is an open-source framework for Byzantine-resilient distributed machine learning, developed during my ",[24,29,30],{},"M2 research internship at CMAP, Ecole Polytechnique"," under the supervision of ",[18,33,36],{"href":34,"rel":35},"https:\u002F\u002Felmahdielmhamdi.com\u002F",[22],"El Mahdi El Mhamdi",".",[39,40,42],"h2",{"id":41},"overview","Overview",[15,44,45],{},"Distributed learning scales training across multiple workers, but a single malicious worker can collapse the model by sending arbitrary gradients. Krum implements aggregation rules that are provably robust to Byzantine failures, guaranteeing convergence even when a fraction of workers are adversarial.",[15,47,48],{},"This project serves as the experimental backbone of my research on adversarially robust distributed learning.",[39,50,52],{"id":51},"key-features","Key Features",[54,55,56,63,69,75,81],"ul",{},[57,58,59,62],"li",{},[24,60,61],{},"Multiple GARs",": Krum, Multi-Krum, coordinate-wise median, trimmed mean, and more",[57,64,65,68],{},[24,66,67],{},"Byzantine Attack Models",": Bit-flipping, Gaussian noise, label-flipping, and custom attacks",[57,70,71,74],{},[24,72,73],{},"Simulation Framework",": Configurable distributed training with n workers and f adversaries",[57,76,77,80],{},[24,78,79],{},"Extensible API",": Plugin architecture for custom aggregation rules and attacks",[57,82,83,86,87],{},[24,84,85],{},"Comprehensive Documentation",": Hosted at ",[18,88,91],{"href":89,"rel":90},"https:\u002F\u002Fcalicarpa.github.io\u002Fkrum\u002F",[22],"calicarpa.github.io\u002Fkrum",[39,93,95],{"id":94},"technical-stack","Technical Stack",[97,98,99,112],"table",{},[100,101,102],"thead",{},[103,104,105,109],"tr",{},[106,107,108],"th",{},"Component",[106,110,111],{},"Technology",[113,114,115,124,132,140,151],"tbody",{},[103,116,117,121],{},[118,119,120],"td",{},"Language",[118,122,123],{},"Python 3.10–3.14",[103,125,126,129],{},[118,127,128],{},"Testing",[118,130,131],{},"pytest (GitHub Actions, 4 Python versions)",[103,133,134,137],{},[118,135,136],{},"Linting",[118,138,139],{},"Ruff",[103,141,142,145],{},[118,143,144],{},"Type Checking",[118,146,147],{},[148,149,150],"code",{},"ty",[103,152,153,156],{},[118,154,155],{},"Packaging",[118,157,158,159,162],{},"PyPI (",[148,160,161],{},"pip install krum",")",[39,164,166],{"id":165},"installation","Installation",[168,169,174],"pre",{"className":170,"code":171,"language":172,"meta":173,"style":173},"language-bash shiki shiki-themes material-theme-lighter catppuccin-latte catppuccin-macchiato","pip install krum\n# or\nuv add krum\n","bash","",[148,175,176,192,199],{"__ignoreMap":173},[177,178,181,185,189],"span",{"class":179,"line":180},"line",1,[177,182,184],{"class":183},"sqbHp","pip",[177,186,188],{"class":187},"sJlHP"," install",[177,190,191],{"class":187}," krum\n",[177,193,195],{"class":179,"line":194},2,[177,196,198],{"class":197},"sv490","# or\n",[177,200,202,205,208],{"class":179,"line":201},3,[177,203,204],{"class":183},"uv",[177,206,207],{"class":187}," add",[177,209,191],{"class":187},[39,211,213],{"id":212},"status","Status",[15,215,216],{},"Active development. New aggregation rules and attack models are continuously added as my research progresses.",[39,218,220],{"id":219},"repository","Repository",[15,222,223],{},[18,224,226],{"href":20,"rel":225},[22],"github.com\u002Fcalicarpa\u002Fkrum",[228,229,230],"style",{},"html pre.shiki code .sqbHp, html code.shiki .sqbHp{--shiki-light:#E2931D;--shiki-light-font-style:inherit;--shiki-default:#1E66F5;--shiki-default-font-style:italic;--shiki-dark:#8AADF4;--shiki-dark-font-style:italic}html pre.shiki code .sJlHP, html code.shiki .sJlHP{--shiki-light:#91B859;--shiki-default:#40A02B;--shiki-dark:#A6DA95}html pre.shiki code .sv490, html code.shiki .sv490{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#7C7F93;--shiki-default-font-style:italic;--shiki-dark:#939AB7;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":173,"searchDepth":194,"depth":194,"links":232},[233,234,235,236,237,238],{"id":41,"depth":194,"text":42},{"id":51,"depth":194,"text":52},{"id":94,"depth":194,"text":95},{"id":165,"depth":194,"text":166},{"id":212,"depth":194,"text":213},{"id":219,"depth":194,"text":220},"2026-06-15","Open-source framework for Byzantine-resilient aggregation in distributed learning, developed during my M2 internship at CMAP.","krum","In progress","projects\u002Fkrum",[245,246,247,248,249],"Distributed Learning","Byzantine Robustness","Python","PyTorch","Research","Research Project","tXZ4ECEseibuBGd3H9bI4PKirZmFsUAGCMSMQZZjV9s",1781553201959]