## 5 Experiments
### Evaluation of Joint Pruning and Quantization  
We evaluate our greedy layerwise channel pruning algorithm when jointly used with the quantization algorithms detailed in Section 4.2 to learn low-precision structured subnetworks through joint pruning and quantization. As discussed in Section 2, we apply symmetric, per-channel quantization to the weights of our deep neural networks and asymmetric, per-tensor quantization to the activations. To implement Algorithms 2 and 3, we create another custom quantization PyTorch module that accumulates the respective per-tensor or per-channel moving average statistics. As is standard practice, our modules produce a \"fake quantized\" output using the derived scale \(s\) and zero-point \(z\)[27, 28]. We apply these modules to every hidden activation \(\{h_{i}\}_{i=1}^{L}\) and set of weights \(\{\mathbf{w}_{i}\}_{i=1}^{L}\) in the network to prepare our models for integer-only inference [27]. We follow the standard \"prune-then-quantize\" training paradigm and activate the quantization operators only after the completion of layerwise pruning. Figure 1 shows both the training schedule and computational order of our joint pruning and quantization pipeline. In Table 3, we report our joint pruning and quantization results for 50% and 75% sparsity when training 4-bit and 8-bit models. We use \"W4A8\" to denote quantizing weights to 4 bits and activations to 8 bits. For all networks except for CycleGAN, we quantize the weights of all layers \(\{\mathbf{w}_{i}\}_{i=1}^{L}\) to the specified bitwidth, including the first and last layer and quantize the activations of all layers \(\{\mathbf{h}_{i}\}_{i=1}^{L}\) to the specified bitwidth except for network input \(\mathbf{x}\) and output \(\mathbf{x}\). For CycleGAN, we always quantize the weights and input activation of the last layer to 8-bit regardless of global bitwidth configuration, as is standard practice [49]. For each experiment reported in Table 3, we use our greedy layerwise pruning algorithm with the \(\ell_{1}\)-norm of the output channel activations as our importance measure. Finally, we apply our joint layerwise channel pruning and uniform quantization framework to train ResNet-32 [37] on the CIFAR10 dataset with sparsity ratios of 25%, 40% and 50%, and uniform bitwidths of 8 and 4. We compare against existing solutions and summarize the results in Table 4. Here, \(N_{W}\) and \(N_{A}\) denote the average number of bits used to quantize weights or activations, respectively, and \(s_{W}\) and \(s_{A}\) denote the global weight and activation sparsity, respectively. Note that, as discussed in Section 2.1, channel pruning reduces both the storage and operating memory4 requirements of both the weights and activations, while unstructured weight pruning only reduces the memory storage requirements of the weights. Therefore, structured pruning can result in lower operating memory requirements, despite lower compression ratios with respect to unstructured pruning. To compare different approaches across these configurations, we compute the performance per operating memory size (i.e., **performance density**) for each model, as listed in the last column. For existing solutions, we summarize the results reported in prior work. For solutions that do not apply quantization to the weights or activations, we