{"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/accelerating-training-and-inference-of-graph","title":"Accelerating Training and Inference of Graph Neural Networks with Fast Sampling and Pipelining","arxiv_id":"2110.08450","date":"2021-10-16","proceeding":null,"authors":["Tim Kaler","Nickolas Stathas","Anne Ouyang","Alexandros-Stavros Iliopoulos","Tao B. Schardl","Charles E. Leiserson","Jie Chen"],"abstract":"Improving the training and inference performance of graph neural networks (GNNs) is faced with a challenge uncommon in general neural networks: creating mini-batches requires a lot of computation and data movement due to the exponential growth of multi-hop graph neighborhoods along network layers. Such a unique challenge gives rise to a diverse set of system design choices. We argue in favor of performing mini-batch training with neighborhood sampling in a distributed multi-GPU environment, under which we identify major performance bottlenecks hitherto under-explored by developers: mini-batch preparation and transfer. We present a sequence of improvements to mitigate these bottlenecks, including a performance-engineered neighborhood sampler, a shared-memory parallelization strategy, and the pipelining of batch transfer with GPU computation. We also conduct an empirical analysis that supports the use of sampling for inference, showing that test accuracies are not materially compromised. Such an observation unifies training and inference, simplifying model implementation. We report comprehensive experimental results with several benchmark data sets and GNN architectures, including a demonstration that, for the ogbn-papers100M data set, our system SALIENT achieves a speedup of 3x over a standard PyTorch-Geometric implementation with a single GPU and a further 8x parallel speedup with 16 GPUs. Therein, training a 3-layer GraphSAGE model with sampling fanout (15, 10, 5) takes 2.0 seconds per epoch and inference with fanout (20, 20, 20) takes 2.4 seconds, attaining test accuracy 64.58%.","url_abs":"https://arxiv.org/abs/2110.08450v2","url_pdf":"https://arxiv.org/pdf/2110.08450v2.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":"accelerating-training-and-inference-of-graph","repo_url":"https://github.com/mitibmxgraph/salient_artifact","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":1,"framework":"none","reach":{"status":"ok","spdx":"Apache-2.0"}},{"paper_slug":"accelerating-training-and-inference-of-graph","repo_url":"https://github.com/gmancino/fastgcn-pytorch","is_official":0,"mentioned_in_paper":0,"mentioned_in_github":1,"framework":"pytorch","reach":{"status":"ok","spdx":"MIT"}}],"tasks":[{"task_slug":null,"task_name":"GPU"}],"methods":[{"method_slug":"graphsage","method_name":"GraphSAGE"},{"method_slug":"test","method_name":"Test"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2110.08450","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2110.08450"}},"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/gmancino/fastgcn-pytorch","reach":{"status":"ok","spdx":"MIT"}},{"provenance":"external:paperswithcode_snapshot_2025-07-28","url":"https://github.com/mitibmxgraph/salient_artifact","reach":{"status":"ok","spdx":"Apache-2.0"}}],"summary":{"unverified":7},"by_repo_kind":{"official":{"samples":4,"ran":0,"repositories":1},"listed":{"samples":3,"ran":0,"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":0,"samples":[{"code_sha256_prefix":"d9181cca32125983","entry":"Adj__pin_memory","repo":"mitibmxgraph/salient_artifact","repo_kind":"official","path":"fast_trainer/monkeypatch.py","file_url":"https://github.com/mitibmxgraph/salient_artifact/blob/HEAD/fast_trainer/monkeypatch.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"d9181cca32125983"}},{"code_sha256_prefix":"04bb3dfe2b8c7461","entry":"EdgeIndex__pin_memory","repo":"mitibmxgraph/salient_artifact","repo_kind":"official","path":"fast_trainer/monkeypatch.py","file_url":"https://github.com/mitibmxgraph/salient_artifact/blob/HEAD/fast_trainer/monkeypatch.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"04bb3dfe2b8c7461"}},{"code_sha256_prefix":"2642f61bdc8b55cf","entry":"csr_to_torch_coo","repo":"gmancino/fastgcn-pytorch","repo_kind":"listed","path":"models/helper_functions.py","file_url":"https://github.com/gmancino/fastgcn-pytorch/blob/HEAD/models/helper_functions.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"2642f61bdc8b55cf"}},{"code_sha256_prefix":"073d5527eba6d5e6","entry":"dataset_feasibility","repo":"mitibmxgraph/salient_artifact","repo_kind":"official","path":"experiments/configure_for_environment.py","file_url":"https://github.com/mitibmxgraph/salient_artifact/blob/HEAD/experiments/configure_for_environment.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"073d5527eba6d5e6"}},{"code_sha256_prefix":"d45993d10da87cea","entry":"normalize_adj","repo":"gmancino/fastgcn-pytorch","repo_kind":"listed","path":"models/helper_functions.py","file_url":"https://github.com/gmancino/fastgcn-pytorch/blob/HEAD/models/helper_functions.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"d45993d10da87cea"}},{"code_sha256_prefix":"990a8148d81cef69","entry":"row_normalize","repo":"gmancino/fastgcn-pytorch","repo_kind":"listed","path":"models/helper_functions.py","file_url":"https://github.com/gmancino/fastgcn-pytorch/blob/HEAD/models/helper_functions.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"MIT","inline_ok":true,"mcp_get_code":{"code_sha256":"990a8148d81cef69"}},{"code_sha256_prefix":"4ae8a2b8375d5c18","entry":"run_command","repo":"mitibmxgraph/salient_artifact","repo_kind":"official","path":"experiments/configure_for_environment.py","file_url":"https://github.com/mitibmxgraph/salient_artifact/blob/HEAD/experiments/configure_for_environment.py","link_basis":"harvester_set","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"Apache-2.0","inline_ok":true,"mcp_get_code":{"code_sha256":"4ae8a2b8375d5c18"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}