{"about":{"site":"https://codewithpapers.app","non_affiliation":"Code with Papers and Syntology are not affiliated with, endorsed by, or sponsored by Papers with Code, Meta, or the pwc-archive mirror.","licence":"CC BY-SA 4.0","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","attribution":"https://codewithpapers.app/attribution","modified":"archive material modified by Syntology; see the attribution page"},"url":"/paper/orchestra-unsupervised-federated-learning-via","title":"Orchestra: Unsupervised Federated Learning via Globally Consistent Clustering","arxiv_id":"2205.11506","date":"2022-05-23","proceeding":null,"authors":["Ekdeep Singh Lubana","Chi Ian Tang","Fahim Kawsar","Robert P. Dick","Akhil Mathur"],"abstract":"Federated learning is generally used in tasks where labels are readily available (e.g., next word prediction). Relaxing this constraint requires design of unsupervised learning techniques that can support desirable properties for federated training: robustness to statistical/systems heterogeneity, scalability with number of participants, and communication efficiency. Prior work on this topic has focused on directly extending centralized self-supervised learning techniques, which are not designed to have the properties listed above. To address this situation, we propose Orchestra, a novel unsupervised federated learning technique that exploits the federation's hierarchy to orchestrate a distributed clustering task and enforce a globally consistent partitioning of clients' data into discriminable clusters. We show the algorithmic pipeline in Orchestra guarantees good generalization performance under a linear probe, allowing it to outperform alternative techniques in a broad range of conditions, including variation in heterogeneity, number of clients, participation ratio, and local epochs.","url_abs":"https://arxiv.org/abs/2205.11506v2","url_pdf":"https://arxiv.org/pdf/2205.11506v2.pdf","source":{"archive":"pwc-archive (Hugging Face), CC BY-SA 4.0","snapshot":"2025-07-28","licence_url":"https://creativecommons.org/licenses/by-sa/4.0/legalcode","row_kind":"abstracts"},"code_links":[{"paper_slug":"orchestra-unsupervised-federated-learning-via","repo_url":"https://github.com/akhilmathurs/orchestra","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"pytorch","reach":null}],"tasks":[{"task_slug":"clustering","task_name":"Clustering"},{"task_slug":"federated-learning","task_name":"Federated Learning"},{"task_slug":"self-supervised-learning","task_name":"Self-Supervised Learning"}],"methods":[],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2205.11506","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2205.11506"}},"developers":"https://syntology.ai/developers","read_at":"2026-09-24T18:15:14+00:00","read_at_is":"when the build read Syntology's graph, not when any sample ran","claim":"Per-sample execution status on synthesized fixtures; not a correctness claim about the paper. Samples come from repositories linked to the paper, official or community; repo_kind says which.","repos":[{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/akhilmathurs/orchestra","reach":null}],"summary":{"ran":7,"ran_draft_wrong":7,"unverified":3},"by_repo_kind":{"official":{"samples":16,"ran":13,"repositories":1}},"repo_kind_vocabulary":{"official":"The archive marks this repository official for the paper","named_in_paper":"The archive records that the paper mentions this repository; it is not marked official","listed":"In the archive's code links for this paper, not marked official and not recorded as mentioned in the paper","found_in_text":"Syntology found this repository in the paper's own text; whether it is the authors' implementation is not asserted","community":"Not in the archive's code links for this paper; a community repository Syntology harvested"},"n_pointer_only_for_licence":17,"samples":[{"code_sha256_prefix":"b4d13be36a35d523","entry":"BasicBlock","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"b4d13be36a35d523"}},{"code_sha256_prefix":"230278e148ef6232","entry":"BlockVGG","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"230278e148ef6232"}},{"code_sha256_prefix":"768ebdb44a637d9f","entry":"Bottleneck","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"768ebdb44a637d9f"}},{"code_sha256_prefix":"7a2a904f1755154b","entry":"ResNet","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"7a2a904f1755154b"}},{"code_sha256_prefix":"c3468705a3c6bfc9","entry":"ResNet18","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"c3468705a3c6bfc9"}},{"code_sha256_prefix":"37d17635667d7654","entry":"ResNet34","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"37d17635667d7654"}},{"code_sha256_prefix":"0bc09ef7089650b0","entry":"ResNet56","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"0bc09ef7089650b0"}},{"code_sha256_prefix":"ee91c2ecc076fc6a","entry":"ResNet_basic","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ee91c2ecc076fc6a"}},{"code_sha256_prefix":"47ebea3263c682f2","entry":"VGG","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"47ebea3263c682f2"}},{"code_sha256_prefix":"2452935eabcc8e70","entry":"VGGmodel","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2452935eabcc8e70"}},{"code_sha256_prefix":"8d7ec010c29e813b","entry":"format_time","repo":null,"repo_kind":null,"path":null,"file_url":null,"link_basis":"identical_code_first_harvested_elsewhere","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":true,"licence":null,"inline_ok":false,"mcp_get_code":{"code_sha256":"8d7ec010c29e813b"}},{"code_sha256_prefix":"ab97a0adda690554","entry":"get_block","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"ab97a0adda690554"}},{"code_sha256_prefix":"2f13c80e00b0ec5e","entry":"projection_MLP_orchestra","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"deterministic","behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"2f13c80e00b0ec5e"}},{"code_sha256_prefix":"22edbc4362b31bf1","entry":"sknopp","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"MISDECLARED","metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"22edbc4362b31bf1"}},{"code_sha256_prefix":"f4fc310f28437acc","entry":"create_backbone","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"f4fc310f28437acc"}},{"code_sha256_prefix":"239be7fcbe243166","entry":"orchestra","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"239be7fcbe243166"}},{"code_sha256_prefix":"6541e65fb42cf244","entry":"progress_bar","repo":"akhilmathurs/orchestra","repo_kind":"official","path":"models.py","file_url":"https://github.com/akhilmathurs/orchestra/blob/HEAD/models.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NONE","inline_ok":false,"mcp_get_code":{"code_sha256":"6541e65fb42cf244"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}