{"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/upscale-unconstrained-channel-pruning","title":"UPSCALE: Unconstrained Channel Pruning","arxiv_id":"2307.08771","date":"2023-07-17","proceeding":null,"authors":["Alvin Wan","Hanxiang Hao","Kaushik Patnaik","Yueyang Xu","Omer Hadad","David Güera","Zhile Ren","Qi Shan"],"abstract":"As neural networks grow in size and complexity, inference speeds decline. To combat this, one of the most effective compression techniques -- channel pruning -- removes channels from weights. However, for multi-branch segments of a model, channel removal can introduce inference-time memory copies. In turn, these copies increase inference latency -- so much so that the pruned model can be slower than the unpruned model. As a workaround, pruners conventionally constrain certain channels to be pruned together. This fully eliminates memory copies but, as we show, significantly impairs accuracy. We now have a dilemma: Remove constraints but increase latency, or add constraints and impair accuracy. In response, our insight is to reorder channels at export time, (1) reducing latency by reducing memory copies and (2) improving accuracy by removing constraints. Using this insight, we design a generic algorithm UPSCALE to prune models with any pruning pattern. By removing constraints from existing pruners, we improve ImageNet accuracy for post-training pruned models by 2.1 points on average -- benefiting DenseNet (+16.9), EfficientNetV2 (+7.9), and ResNet (+6.2). Furthermore, by reordering channels, UPSCALE improves inference speeds by up to 2x over a baseline export.","url_abs":"https://arxiv.org/abs/2307.08771v1","url_pdf":"https://arxiv.org/pdf/2307.08771v1.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":"upscale-unconstrained-channel-pruning","repo_url":"https://github.com/apple/ml-upscale","is_official":1,"mentioned_in_paper":1,"mentioned_in_github":0,"framework":"pytorch","reach":null}],"tasks":[],"methods":[{"method_slug":"1x1-convolution","method_name":"1x1 Convolution"},{"method_slug":"average-pooling","method_name":"Average Pooling"},{"method_slug":"batch-normalization","method_name":"Batch Normalization"},{"method_slug":"bottleneck-residual-block","method_name":"Bottleneck Residual Block"},{"method_slug":"concatenated-skip-connection","method_name":"Concatenated Skip Connection"},{"method_slug":"convolution","method_name":"Convolution"},{"method_slug":"dense-block","method_name":"Dense Block"},{"method_slug":"dense-connections","method_name":"Dense Connections"},{"method_slug":"depthwise-convolution","method_name":"Depthwise Convolution"},{"method_slug":"depthwise-separable-convolution","method_name":"Depthwise Separable Convolution"},{"method_slug":"dropout","method_name":"Dropout"},{"method_slug":"efficientnetv2","method_name":"EfficientNetV2"},{"method_slug":"global-average-pooling","method_name":"Global Average Pooling"},{"method_slug":"inverted-residual-block","method_name":"Inverted Residual Block"},{"method_slug":"kaiming-initialization","method_name":"Kaiming Initialization"},{"method_slug":"max-pooling","method_name":"Max Pooling"},{"method_slug":"pointwise-convolution","method_name":"Pointwise Convolution"},{"method_slug":"pruning","method_name":"Pruning"},{"method_slug":"relu","method_name":"ReLU"},{"method_slug":"residual-block","method_name":"Residual Block"},{"method_slug":"residual-connection","method_name":"Residual Connection"},{"method_slug":"softmax","method_name":"Softmax"}],"datasets_introduced":[],"methods_introduced":[],"results":[],"syntology":{"atlas_url":"https://app.syntology.ai/?focus=2307.08771","mcp":{"get_harvested_code_for_paper":{"arxiv_id":"2307.08771"}},"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/apple/ml-upscale","reach":null}],"summary":{"ran":3,"ran_draft_wrong":1,"ran_fixture":1,"unverified":2},"by_repo_kind":{"official":{"samples":7,"ran":5,"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":7,"samples":[{"code_sha256_prefix":"ac83a6a5ebd12447","entry":"Subselect","repo":"apple/ml-upscale","repo_kind":"official","path":"src/upscale/pruning/pruner.py","file_url":"https://github.com/apple/ml-upscale/blob/HEAD/src/upscale/pruning/pruner.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":"invariant","behaviour_fingerprint":true,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"ac83a6a5ebd12447"}},{"code_sha256_prefix":"2fd4914a885da34f","entry":"generate_pruned_weight","repo":"apple/ml-upscale","repo_kind":"official","path":"src/upscale/pruning/pruner.py","file_url":"https://github.com/apple/ml-upscale/blob/HEAD/src/upscale/pruning/pruner.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"2fd4914a885da34f"}},{"code_sha256_prefix":"105db10cfa40adf4","entry":"get_tensor_and_modules","repo":"apple/ml-upscale","repo_kind":"official","path":"src/upscale/pruning/pruner.py","file_url":"https://github.com/apple/ml-upscale/blob/HEAD/src/upscale/pruning/pruner.py","link_basis":"first_harvest_node","language":"python","status":"ran","verification_level":1,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"105db10cfa40adf4"}},{"code_sha256_prefix":"e0389ed8272e408a","entry":"get_tensor_to_module_metadata","repo":"apple/ml-upscale","repo_kind":"official","path":"src/upscale/pruning/pruner.py","file_url":"https://github.com/apple/ml-upscale/blob/HEAD/src/upscale/pruning/pruner.py","link_basis":"first_harvest_node","language":"python","status":"ran_draft_wrong","verification_level":1,"contract_check":"OUTPUT_MISDECLARED","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"e0389ed8272e408a"}},{"code_sha256_prefix":"d94ea0576422dcaa","entry":"group_indices_as_ranges","repo":"apple/ml-upscale","repo_kind":"official","path":"src/upscale/pruning/pruner.py","file_url":"https://github.com/apple/ml-upscale/blob/HEAD/src/upscale/pruning/pruner.py","link_basis":"first_harvest_node","language":"python","status":"ran_fixture","verification_level":1,"contract_check":"RAISES","metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"d94ea0576422dcaa"}},{"code_sha256_prefix":"6c4abf4488a5ff40","entry":"insert_subselection","repo":"apple/ml-upscale","repo_kind":"official","path":"src/upscale/pruning/pruner.py","file_url":"https://github.com/apple/ml-upscale/blob/HEAD/src/upscale/pruning/pruner.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"6c4abf4488a5ff40"}},{"code_sha256_prefix":"e9b63ad8c0322266","entry":"prune_model","repo":"apple/ml-upscale","repo_kind":"official","path":"src/upscale/pruning/pruner.py","file_url":"https://github.com/apple/ml-upscale/blob/HEAD/src/upscale/pruning/pruner.py","link_basis":"first_harvest_node","language":"python","status":"unverified","verification_level":0,"contract_check":null,"metamorphic_tier":null,"behaviour_fingerprint":false,"licence":"NOASSERTION","inline_ok":false,"mcp_get_code":{"code_sha256":"e9b63ad8c0322266"}}]},"arxiv_metadata":null,"syntology_extracted_results":null}