ArXiv: 2211.10438
π― Pitch
Large language models can now run at 8-bit precision for both weights and activations with zero accuracy lossβwithout any retraining. SmoothQuant achieves this by simply dividing large activation outliers by a per-channel scaling factor and multiplying those factors into the adjacent weights, making the numbers in both tensors easy to quantize. This trick enables a 530B parameter model to fit and run on a single 8-GPU node, doubling throughput with unchanged model behavior.
1. Executive Summary
This paper proposes SmoothQuant, a training-free post-training quantization method that enables 8-bit weight and 8-bit activation (W8A8) quantization for large language models without accuracy degradation. Evaluated across OPT, BLOOM, GLM, MT-NLG, LLaMA-1/2, Falcon, Mistral, and Mixtral models β including the 530B MT-NLG β SmoothQuant operates by migrating the quantization difficulty from activations to weights through a mathematically equivalent per-channel scaling transformation that smooths activation outliers (dividing outlier-prone activation channels and multiplying the corresponding weight channels by a calibrated smoothing factor). The method achieves up to 1.56Γ inference speedup and 2Γ memory reduction, enabling a 530B model to be served within a single 8-GPU node. The key finding is that per-channel activation smoothing can substitute for the infeasible per-channel activation quantization that hardware-accelerated INT8 GEMM kernels cannot support, establishing that lossless W8A8 quantization is achievable without mixed-precision decomposition only when the outlier magnitude is redistributed across both tensors rather than suppressed in activations alone.
2. Context and Motivation
The Core Problem: W8A8 Quantization for Large Language Models Is Broken
The central technical challenge this paper addresses is straightforward to state but has resisted solution: how do you quantize both the weights AND activations of a large language model to 8-bit integers without destroying model accuracy? This matters because W8A8 quantization β where both operands of every matrix multiplication are INT8 β is the enabling condition for using hardware-accelerated integer kernels (INT8 GEMM on NVIDIA GPUs, Intel CPUs, Qualcomm DSPs, etc.). Without W8A8, you cannot realize the full throughput and memory benefits of quantization on existing hardware. With W8A8, you halve memory usage (from FP16's 2 bytes per value to INT8's 1 byte) and roughly double the throughput of matrix multiplications β the dominant computation in transformer inference.
The paper's opening Figure 1 frames the urgency of this problem through an economic lens. The model size of LLMs is growing at a rate that outstrips GPU memory scaling. While GPU memory roughly doubles every two years (following hardware roadmaps), LLM parameter counts jumped from 175B (GPT-3) to 530B (MT-NLG) and beyond in a much shorter interval. This creates a widening gap between the memory capacity required to serve these models and what commodity hardware can provide. For context: serving a 175B model in FP16 requires 350GB of memory just to store parameters β that is 5Γ80GB A100 GPUs or 8Γ48GB A6000 GPUs β before accounting for activations, KV caches, or optimizer states. Serving a 530B model pushes beyond 1TB. Quantization that reduces this footprint by half is not a convenient optimization β it is increasingly a prerequisite for deployment.
But the problem is not just about storage. The paper emphasizes that W8A8 is specifically required for inference speedup:
"to speed up the inference, we need to quantize both weights and activations into INT8 (i.e., W8A8) to utilize the integer kernels (e.g., INT8 GEMM)"
This is a critical distinction that prior work on weight-only quantization (e.g., GPTQ) does not fully address. Weight-only quantization reduces memory consumption by storing weights in low precision and dequantizing them to FP16 on-the-fly during computation. This helps memory but does not accelerate the matrix multiply itself β the computation still happens in FP16. W8A8, by contrast, enables the matrix multiply to execute entirely in INT8, which is where the throughput gains come from. The paper's Appendix A explicitly discusses this distinction, noting that weight-only quantization "can also lead to speed up due to the reduced data loading, especially for the generation stage with batch size 1," but cannot support context-stage processing or batched settings with the same efficiency gains.
Why Activation Quantization Specifically Fails for LLMs
The paper's central diagnostic observation β and the gap that motivated SmoothQuant β is that weights are easy to quantize, but activations are hard. This asymmetry is not true for smaller models. Convolutional neural networks and even smaller transformer models like BERT can be quantized to W8A8 using established techniques with minimal accuracy loss (Jacob et al., 2018; Shen et al., 2020; Kim et al., 2021). But when language models scale beyond roughly 6.7B parameters, something qualitatively changes: systematic activation outliers emerge.
The paper characterizes these outliers in Section 3 through three empirical observations:
1. Outliers are massive in scale. The paper visualizes this in Figure 4 (left panel): in a linear layer of OPT-13B, the activation values in typical channels are small (magnitude less than ~5), but a few channels show values with magnitude greater than 70 β a 100Γ difference. When you quantize using per-tensor granularity (one scaling factor for the entire activation matrix), the quantizer's step size is determined by the maximum absolute value in the entire tensor (Equation 1: ). This means the outlier channels set the quantization range, and the vast majority of values β which are 100Γ smaller β get squeezed into very few quantization bins. The paper quantifies this as "effective quantization levels": for a non-outlier channel with maximum magnitude , the effective levels are , where is the global maximum. If , that channel gets only 2β3 effective bits β essentially random quantization.
2. Outliers are channel-persistent. This is the most important observation for SmoothQuant's design. When a particular channel (column in the activation matrix) contains an outlier, that outlier appears across all tokens (rows). The paper states: "If one channel has an outlier, it persistently appears in all tokens (Figure 4, red)." The variance between channels for a given token is large (some channels are huge, most are small), but the variance within a channel across tokens is small (outlier channels are consistently large). This is what makes per-token quantization (using different scaling factors for each token's activations) largely ineffective: it doesn't address the channel-wise variation that is the real source of quantization error. Per-token quantization is what prior work (ZeroQuant, LLM.int8()) uses, and Table 1 confirms it is only marginally better than per-tensor quantization (e.g., OPT-175B: 31.7% average accuracy for per-token vs. 32.3% for per-tensor, compared to 71.6% for FP16).
3. Per-channel quantization WOULD work, but is hardware-infeasible. The paper demonstrates in Table 1 that simulated per-channel activation quantization does preserve accuracy: for OPT-175B, per-channel quantization achieves 71.4% average accuracy, nearly matching the FP16 baseline of 71.6%. This echoes prior findings by Bondarenko et al. (2021). The problem is that hardware-accelerated INT8 GEMM kernels (like NVIDIA's Tensor Core MMAs) cannot tolerate per-channel scaling of activations. The paper explains the constraint in Section 3:
"scaling can only be performed along the outer dimensions of the matrix multiplication (i.e., token dimension of activations , output channel dimension of weights , see Figure 3), which can be applied after the matrix multiplication finishes"
The matrix multiplication has dimensions and . The INT8 GEMM kernel computes as an integer operation and then applies scaling factors only along the outer dimensions β the token dimension for and the output channel dimension for (see Equation 2). Per-channel activation quantization would require scaling along the inner dimension of , which would need to be inserted inside the matrix multiplication loop, breaking the high-throughput sequence of Tensor Core operations with low-throughput conversion instructions. This is not a theoretical limitation β it is a fundamental constraint of how the hardware is designed.
This creates the fundamental tension that SmoothQuant resolves: the quantization scheme that preserves accuracy (per-channel) is impossible to implement efficiently, while the quantization schemes that are hardware-efficient (per-tensor, per-token) destroy accuracy on large models.
Prior Approaches and Their Limitations
The paper positions itself against four existing approaches, each of which it argues falls short for LLMs in a different way:
W8A8 Naive Quantization (Per-Tensor)
The simplest approach: quantize both weights and activations with a single scaling factor per tensor. This works for small models but catastrophically fails for LLMs. Table 3 shows that for OPT-175B, naive per-tensor W8A8 achieves 0.0% on LAMBADA (a completion task) and roughly 36% average accuracy β essentially random performance. The reason is straightforward: the per-tensor scaling factor for activations is dominated by outliers, destroying precision for all non-outlier values.
ZeroQuant (Yao et al., 2022)
ZeroQuant uses per-token dynamic activation quantization and group-wise weight quantization. The per-token granularity means each row of the activation matrix gets its own scaling factor, and group-wise weight quantization means weights are divided into groups (e.g., 128 columns per group) with per-group scaling. This is more expressive than per-tensor quantization and achieves good results on smaller models (GPT-3-350M, GPT-J-6B). However, the paper shows in Tables 3 and 4 that ZeroQuant fails to maintain accuracy for very large models. On OPT-175B, it achieves only 35.8% average accuracy (vs. 66.9% for FP16) and 0.0% on LAMBADA. Even with the authors' attempt to leave the self-attention input activations in FP16 (their solution for GPT-NeoX-20B), the degradation persists. The fundamental issue is that per-token scaling addresses variance across tokens, not across channels, and it is the channel-wise variance from outliers that dominates quantization error in large models.
LLM.int8() (Dettmers et al., 2022)
LLM.int8() directly addresses the outlier problem through mixed-precision decomposition: it identifies outlier activation channels (those with magnitude above a threshold), extracts them from the INT8 matrix multiplication, performs the computation for those channels in FP16, and INT8 for the rest. This approach preserves accuracy β Tables 3 and 4 show LLM.int8() matching FP16 accuracy across all models, including OPT-175B (66.7% average accuracy vs. 66.9% for FP16). However, the paper identifies a critical efficiency problem: this mixed-precision scheme introduces substantial overhead. Table 11 shows that LLM.int8() can be slower than FP16 inference (e.g., 237.1ms vs. 152.6ms for OPT-13B at sequence length 256, and 654.9ms vs. 659.9ms for OPT-30B β essentially no speedup). Figure 8 corroborates this: LLM.int8() is consistently slower than the FP16 baseline across all tested models and sequence lengths in the PyTorch implementation. The overhead comes from the need to identify outliers at runtime, split the computation into separate INT8 and FP16 paths, and merge the results β operations that disrupt the efficient pipeline of INT8 GEMM kernels. The paper summarizes this succinctly: "LLM.int8() can match the floating point accuracy because they use floating-point values to represent outliers, which leads to a large latency overhead."
Outlier Suppression (Wei et al., 2022)
Outlier Suppression takes a different approach: it uses non-scaling LayerNorm (which doesn't amplify outlier magnitudes during normalization) and token-wise clipping to cap extreme activation values before quantization. The paper finds this approach effective for smaller models like BERT and BART but insufficient for LLMs. On OPT-175B, Outlier Suppression achieves only 36.0% average accuracy (Table 3) β essentially random. The failure mode is instructive: clipping outliers removes the extreme values that cause quantization range inflation, but those outlier channels also carry important information for the model's computation. Dettmers et al. (2022) demonstrated that outlier channels are functionally significant (they correspond to specific attention patterns), so suppressing them degrades the model's representational capacity. This reveals a deeper principle: outliers are not noise to be eliminated; they are signal that needs to be preserved but restructured for quantization compatibility.
How SmoothQuant Positions Itself
SmoothQuant introduces a fundamentally different strategy that the paper positions as resolving the accuracy-efficiency tension that prior work could not reconcile. Rather than:
- Ignoring outliers (naive W8A8, ZeroQuant) β destroys accuracy
- Carving out outliers for special FP16 treatment (LLM.int8()) β preserves accuracy but kills speed
- Suppressing outliers (Outlier Suppression) β insufficient for LLMs
SmoothQuant redistributes the outlier magnitude through a mathematically equivalent transformation. The core insight is captured in Figure 2 and Equation 3: since , you can divide the outlier-prone activation channels by a per-channel smoothing factor and multiply the corresponding weight channels by the same factor. This preserves the mathematical output of the layer exactly while moving the "quantization difficulty" from activations to weights β where it is far less damaging because weights are uniformly distributed and easy to quantize.
The paper positions this as an offline calibration technique, not a runtime intervention. The smoothing factors are computed once using calibration samples from the pretraining dataset (512 sentences from The Pile), and the transformation is fused into the model's parameters offline. At inference time, the model runs with the same computational graph β no extra operations, no mixed-precision branching, no runtime outlier detection. This is what enables SmoothQuant to achieve both accuracy and speed: the smoothing makes activations quantization-friendly without adding runtime overhead.
The paper also explicitly positions SmoothQuant as orthogonal to and compatible with the specific quantization scheme (per-tensor, per-token, dynamic, static). Table 2 defines three efficiency levels (O1βO3) ranging from per-token dynamic (most accurate, least efficient) to per-tensor static (most efficient, slightly less accurate), and the paper demonstrates that SmoothQuant works across all three. This modularity means practitioners can choose the efficiency-accuracy tradeoff appropriate for their deployment constraints.
Finally, the paper positions its contribution in the broader context of democratizing LLM access. The ability to serve a 530B model within a single 8-GPU node (Table 10) β rather than requiring 16 GPUs β is framed as a practical breakthrough that "reduces hardware costs and democratizes LLMs." This framing connects the technical contribution (channel-wise smoothing) to a concrete economic outcome (halving the GPU requirement for large model serving), making the case that quantization is not merely a research curiosity but an essential tool for making large models practically deployable.
3. Technical Approach
3.1 Reader Orientation
This is a post-training quantization method paper whose core idea is deceptively simple: since large language model activations have per-channel outliers that make them impossible to quantize with standard schemes, and weights are uniformly distributed and easy to quantize, you can literally divide the problematic activation channels by some factor and multiply the corresponding weight channels by the same factor β a mathematically equivalent transformation that preserves all layer outputs exactly while making the activations quantization-friendly. The system being built is a preprocessing pipeline that computes these per-channel smoothing factors from a small set of calibration data, applies them offline (fusing the transformation into adjacent operations so no runtime overhead is added), and produces a model where standard per-tensor or per-token INT8 quantization works without accuracy loss.
3.2 Big-Picture Architecture (Diagram in Words)
The SmoothQuant system has four components that operate sequentially:
-
Calibration Data Sampler: Takes a small number of sentences (512) from the pretraining dataset (The Pile) and runs them through the unquantized FP16 model. During this forward pass, it records the activation tensors at every linear layer input. These activations capture the channel-wise magnitude patterns that will guide smoothing.
-
Smoothing Factor Calculator: For each linear layer, computes a per-channel smoothing factor vector
$s \in \mathbb{R}^{C_i}$that balances the quantization difficulty between activations and weights. The calculation uses a migration strength hyperparameter$\alpha$to control how much of the outlier magnitude gets moved from activations to weights (Equation 4). The output is one$s$vector per linear layer, computed once and stored. -
Model Transformer: Applies the smoothing transformation offline by modifying the model's parameters. For each linear layer
$Y = X \cdot W$, it replaces$X$with$\hat{X} = X \cdot \text{diag}(s)^{-1}$and$W$with$\hat{W} = \text{diag}(s) \cdot W$. Crucially, the division of$X$by$s$is fused into the preceding operation (typically LayerNorm or another linear layer), so it introduces zero additional operations at inference time. The weight multiplication by$s$is a one-time parameter update. -
Quantized Inference Engine: Runs the smoothed model with standard INT8 quantization. All compute-intensive operations (linear layers, batched matrix multiplications in attention) execute with INT8 GEMM kernels. Lightweight element-wise operations (ReLU, Softmax, LayerNorm) remain in FP16. The quantization granularity (per-tensor, per-token, dynamic, static) is configurable via three efficiency levels (O1βO3 in Table 2), but the smoothing transformation itself is independent of the quantization scheme.
Information flows as follows: calibration sentences β FP16 model forward pass β activation tensors captured β smoothing factors computed per-layer via Equation 4 β model parameters modified offline β smoothed model loaded β runtime inputs quantized with chosen scheme β INT8 GEMM kernels compute layer outputs β FP16 element-wise operations β final model output.
3.3 Roadmap for the Deep Dive
- First, the integer uniform quantization formalism (Equation 1), since every component depends on understanding what quantization is and what causes error.
- Second, the analysis of why activation quantization fails for LLMs β including the per-tensor, per-token, and per-channel quantization granularities and their hardware constraints β because this motivates the entire method.
- Third, the core SmoothQuant transformation (Equation 3), which defines mathematically what the smoothing operation is and why it preserves equivalence.
- Fourth, the smoothing factor selection formula (Equation 4) with migration strength
$\alpha$, since this is the heart of the method and determines how quantization difficulty is redistributed. - Fifth, the calibration procedure β how smoothing factors are computed from data, how
$\alpha$is chosen, and how the transformation is fused into the model offline. - Sixth, the application of SmoothQuant across the transformer architecture (Figure 6), detailing which operations are quantized, which remain in FP16, and why.
- Seventh, the three quantization efficiency levels (O1βO3) and their hardware-performance implications.
3.4 Detailed, Sentence-Based Technical Breakdown
This is primarily a method paper whose core idea is that a mathematically equivalent per-channel scaling transformation, calibrated offline, can redistribute activation outlier magnitude into weights β where quantization error is far less damaging β enabling standard W8A8 quantization on hardware-accelerated INT8 kernels without accuracy loss.
Integer Uniform Quantization Formalism
SmoothQuant uses integer uniform quantization β specifically symmetric INT8 quantization β for both weights and activations. The quantization process maps a floating-point tensor to an integer representation using a single scaling factor.
The quantization operation is defined as:
where $X^{\text{FP16}}$ is the original floating-point tensor (weights or activations stored in FP16), $\bar{X}^{\text{INT8}}$ is the quantized integer tensor (values in $\{-128, -127, \ldots, 127\}$ for signed INT8), $\Delta$ is the quantization step size (a single floating-point scalar), $\lceil \cdot \rfloor$ is the rounding-to-nearest-integer function, and $N$ is the bit width (8 in this paper, giving $2^{8-1} - 1 = 127$ as the maximum representable integer magnitude).
What it computes: every element of the floating-point tensor $X$ is divided by the step size $\Delta$ and rounded to the nearest integer. The step size $\Delta$ itself is computed as the maximum absolute value in the entire tensor divided by the maximum representable integer (127 for INT8). This ensures that the full integer range $[-127, 127]$ is utilized, with the tensor's maximum magnitude mapping to Β±127. The dequantization to recover an approximate floating-point value is simply $\bar{X}^{\text{FP16}} = \bar{X}^{\text{INT8}} \cdot \Delta$, and the approximation error comes entirely from the rounding operation.
Why this form: symmetric quantization (no zero-point offset) assumes the tensor is centered at zero, which is a reasonable approximation for LLM activations and weights that do not have a consistent bias. The use of the maximum absolute value to determine $\Delta$ is deliberate β the paper notes that outliers are "found to be important for accuracy" (Dettmers et al., 2022), so clipping them would remove functionally significant information. However, this choice directly causes the quantization error problem: when a few elements are 100Γ larger than the rest, $\Delta$ becomes large, and the small elements get mapped to very few integer bins (losing precision proportional to $m_i / m$ where $m_i$ is the per-channel maximum and $m$ is the global maximum).
The paper assumes symmetric quantization for simplicity but notes that the discussion is "similar for asymmetric cases (e.g., after ReLU) by adding a zero-point" β meaning a shift term that accounts for non-zero-centered distributions. This matters because activations after ReLU are non-negative, but the symmetric formulation captures the essential scaling behavior.
Quantization Granularity and Hardware Constraints
Quantization can be applied at different granularities β that is, how many scaling factors are used for a given tensor. The paper defines three levels (illustrated in Figure 3), and understanding them is essential because they determine both the accuracy-efficiency tradeoff and what is hardware-feasible.
Consider a linear layer $Y = X \cdot W$ where $Y \in \mathbb{R}^{T \times C_o}$ is the output, $X \in \mathbb{R}^{T \times C_i}$ is the input activation, and $W \in \mathbb{R}^{C_i \times C_o}$ is the weight matrix. Here $T$ is the number of tokens (the sequence length), $C_i$ is the input channel dimension, and $C_o$ is the output channel dimension.
Per-tensor quantization uses a single scaling factor $\Delta_X \in \mathbb{R}$ for the entire activation matrix and $\Delta_W \in \mathbb{R}$ for the entire weight matrix. This is the simplest and most hardware-efficient scheme β only one multiplication per tensor at dequantization time β but it is maximally vulnerable to outliers because one outlier channel inflates the single $\Delta_X$ for all channels.
Per-token quantization uses a separate scaling factor for each token (row) of the activation matrix: $\Delta_X \in \mathbb{R}^{T \times 1}$. Each token's activations get their own step size. For weights, the analogous scheme is per-channel quantization: $\Delta_W \in \mathbb{R}^{1 \times C_o}$, one scaling factor per output channel. The combination of per-token activation quantization and per-channel weight quantization is what the paper calls "vector-wise quantization" and is what mainstream INT8 GEMM kernels can efficiently support.
Per-channel activation quantization would use $\Delta_X \in \mathbb{R}^{1 \times C_i}$, a separate scaling factor for each input channel. This is what Table 1 shows preserves accuracy (OPT-175B: 71.4% vs. 71.6% FP16). However, it is hardware-infeasible for accelerated kernels.
The hardware constraint is captured in the INT8 GEMM computation pattern (Equation 2):
where $\text{diag}(\Delta_X^{\text{FP16}})$ is a diagonal matrix with per-token scaling factors along the diagonal, $\bar{X}^{\text{INT8}} \cdot \bar{W}^{\text{INT8}}$ is the integer matrix multiplication producing an INT32 accumulator, and $\text{diag}(\Delta_W^{\text{FP16}})$ is a diagonal matrix with per-output-channel scaling factors.
What this equation means operationally: the INT8 GEMM kernel performs the integer matrix multiply first (producing an INT32 result), and scaling is applied afterward by multiplying with diagonal matrices that correspond to the outer dimensions β $T$ (token dimension) for $\Delta_X$ and $C_o$ (output channel dimension) for $\Delta_W$. The scaling happens in the outer loops, not inside the inner product over $C_i$. This is why per-channel activation scaling (which would require scaling along the $C_i$ dimension) cannot be inserted: it would require scaling operations inside the dot product loop, breaking the high-throughput sequence of Tensor Core matrix multiply-accumulate operations with low-throughput scalar conversions. The paper states this constraint explicitly: scaling "can only be performed along the outer dimensions of the matrix multiplication (i.e., token dimension of activations $T$, output channel dimension of weights $C_o$)."
Group-wise weight quantization uses $\Delta_W$ with granularity finer than per-channel but coarser than per-element β for instance, dividing the $C_o$ output channels into groups of 128 and assigning a separate scaling factor to each group. This is what ZeroQuant uses and requires custom CUDA kernels.
The key tension that motivates SmoothQuant is now clear: per-channel activation quantization would work but is infeasible; per-token quantization is hardware-feasible but fails for LLMs because it addresses variance across tokens, not the channel-wise variance from outliers. SmoothQuant resolves this by making per-channel quantization unnecessary β it smooths the channel-wise variance out of the activations before quantization.
The Core SmoothQuant Transformation
The fundamental mathematical operation of SmoothQuant is a per-channel scaling transformation applied to both the input activations and the weights of a linear layer. The transformation is defined in Equation 3:
where $s \in \mathbb{R}^{C_i}$ is a per-channel smoothing factor vector (one scalar per input channel), $\text{diag}(s)^{-1}$ is a diagonal matrix with $1/s_j$ on the diagonal, $\hat{X} = X \cdot \text{diag}(s)^{-1}$ is the smoothed activation (each channel $j$ divided by $s_j$), and $\hat{W} = \text{diag}(s) \cdot W$ is the adjusted weight (each row $j$ of $W$ multiplied by $s_j$).
What it computes: for each input channel $j$, the activation values in that channel are divided by $s_j$ while the corresponding weight row (which connects channel $j$ to all output channels) is multiplied by $s_j$. Because matrix multiplication is bilinear β $(X_{i,j} / s_j) \cdot (s_j \cdot W_{j,k}) = X_{i,j} \cdot W_{j,k} + (\text{khΓ΄ng}) $ for all $i, j, k$ β the output $Y$ is mathematically identical to the original computation. The transformation is an identity-preserving reparameterization of the layer.
Why this form: this reparameterization exploits the associativity of scaling and matrix multiplication. The division of activations by $s$ reduces the magnitude of outlier channels (since $s_j$ is chosen to be large for channels with large activations, making $1/s_j$ small), while the multiplication of weights by $s$ increases the magnitude of the corresponding weight rows. The net effect is that the quantization difficulty β the variation in maximum magnitude across channels β is redistributed from activations to weights. Crucially, weights are much more tolerant of this redistribution because they are uniformly distributed (flat, no outliers), so the additional channel-wise magnitude variation introduced into the weights does not significantly increase weight quantization error.
The paper illustrates this redistribution visually in Figure 4. In the original activation matrix (left), a few channels (shown in red) have magnitudes greater than 70 while most channels are below 5. After smoothing (right), the activation magnitudes are more uniform across channels because the outlier channels have been divided by large $s_j$ values. In the weight matrix, the smoothed weights remain "pretty smooth and flat" because the multiplication by $s_j$ introduces some channel-wise variation but does not create the extreme 100Γ outliers that plagued the activations.
Practical integration: the division of activations by $s$ does not require a separate scaling operation at runtime. The paper notes: "Considering input $X$ is usually produced from previous linear operations (e.g., linear layers, layer norms, etc.), we can easily fuse the smoothing factor into previous layers' parameters offline, which does not incur kernel call overhead from an extra scaling." For example, if $X$ is the output of a LayerNorm with scale $\gamma$ and bias $\beta$, the smoothing division by $s$ can be folded into $\gamma$ and $\beta$ so that the smoothed activation is produced directly by the LayerNorm without any additional computation. For residual connections where $X$ comes from an addition, "we can add an extra scaling to the residual branch similar to Wei et al. (2022)."
Smoothing Factor Selection: Migration Strength and the Core Formula
The choice of smoothing factor $s$ is the central design decision in SmoothQuant. The paper motivates this through a series of logical steps that build from extreme cases to the balanced solution.
Extreme case 1: push all difficulty to weights. If we set $s_j = \max(|X_j|)$ (the maximum absolute value in activation channel $j$ across all calibration tokens), then after smoothing, every activation channel has maximum magnitude exactly 1 β perfectly uniform and ideal for quantization. However, this pushes all the magnitude variation into the weights, because $\hat{W}_{j,:} = s_j \cdot W_{j,:}$, making weight row $j$ proportionally larger. The paper reports that "in this case, the quantization errors would be large for the weights (outlier channels are migrated to weights now), leading to a large accuracy degradation (see Figure 10)."
Extreme case 2: push all difficulty to activations. If we set $s_j = 1 / \max(|W_j|)$ (the reciprocal of the maximum absolute value in weight row $j$), then all weight rows have uniform magnitude but activations retain their outliers. "Similarly, the model performance is bad due to the activation quantization errors."
The insight: neither extreme works because quantization error in either operand of the matrix multiplication degrades the output. The optimal strategy is to split the quantization difficulty so that both tensors are "easy to quantize."
The paper formalizes this with a migration strength hyperparameter $\alpha \in [0, 1]$ in Equation 4:
where $\max(|X_j|)$ is the maximum absolute value in activation channel $j$ (computed from calibration data), $\max(|W_j|)$ is the maximum absolute value in weight row $j$ (computed from the pretrained weights), and $\alpha$ controls the balance between activation-centric and weight-centric smoothing.
What it computes: for each channel $j$, the smoothing factor $s_j$ is the geometric interpolation between the activation outlier scale and the inverse weight scale. When $\alpha = 1$, $s_j = \max(|X_j|)$ β all quantization difficulty is pushed to weights (extreme case 1). When $\alpha = 0$, $s_j = 1 / \max(|W_j|)$ β all difficulty stays with activations (extreme case 2). When $\alpha = 0.5$, $s_j = \sqrt{\max(|X_j|) / \max(|W_j|)}$ β difficulty is evenly split.
Why this form: the geometric interpolation has the property that it preserves the product $\max(|X_j|) \cdot \max(|W_j|)$ in the sense that after smoothing, the relative magnitudes of weights and activations in each channel are balanced. Specifically, after smoothing with $\alpha = 0.5$, the maximum magnitude of the smoothed activation in channel $j$ is proportional to $\sqrt{\max(|X_j|) \cdot \max(|W_j|)}$, and similarly for the smoothed weight. This means channels that were asymmetric (large activations, small weights) become more balanced, while channels that were already balanced stay balanced. The paper reports: "for most of the models, e.g., all OPT and BLOOM models, $\alpha = 0.5$ is a well-balanced point to evenly split the quantization difficulty, especially when we are using the same quantizer for weights and activations."
Choosing $\alpha$ in practice: the paper uses "a quick grid search on a subset of the Pile validation set" to find the optimal $\alpha$ for each model family. For OPT and BLOOM, $\alpha = 0.5$ is universal. For GLM-130B, $\alpha = 0.75$ is used "since its activations are more difficult to quantize (Zeng et al., 2022)" β this pushes more of the quantization difficulty into the weights (which remain relatively easy to quantize) and away from the severely outlier-prone activations. For LLaMA models, Table 6 reports $\alpha = 0.8$ for 7B and 13B, $\alpha = 0.85$ for 30B, $\alpha = 0.9$ for 65B β a consistent trend of $\alpha$ increasing with model size, suggesting larger models have increasingly outlier-heavy activations that require more aggressive difficulty migration to weights.
Figure 10 (ablation study) shows the sensitivity: for OPT-175B on LAMBADA, $\alpha$ values below 0.4 cause activation quantization errors to dominate (accuracy drops sharply), $\alpha$ values above 0.6 cause weight quantization errors to dominate (accuracy also drops), and the sweet spot region of 0.4β0.6 maintains near-FP16 accuracy. The plateau is reassuringly broad, meaning the method is not brittle to the exact $\alpha$ choice.
Calibration Procedure: Making SmoothQuant Practical
The smoothing factors $s_j$ are not computed analytically from theory β they require estimating the activation statistics $\max(|X_j|)$ from data, since activation magnitudes depend on the input. The calibration procedure is:
Data: 512 random sentences from The Pile (the pretraining dataset used by OPT and many other LLMs). The paper states: "we calibrate the smoothing factors and the static quantization step sizes once with 512 random sentences from the pre-training dataset Pile, and apply the same smoothed and quantized model for all downstream tasks." The choice of 512 sentences is empirical β sufficient to get stable activation statistics without requiring excessive computation. The choice of pretraining data (rather than task-specific data) is deliberate: "in this way, we can benchmark the generality and zero-shot performance of the quantized LLMs." Using calibration data from the pretraining distribution ensures the smoothing factors generalize across downstream tasks rather than overfitting to a specific evaluation.
Procedure: for each linear layer in the model, run the 512 calibration sentences through the unquantized FP16 model and record the activation tensor $X$ at that layer's input. For each input channel $j$, compute $\max(|X_j|)$ as the maximum absolute value across all tokens and all 512 calibration samples in that channel. For the weights, $\max(|W_j|)$ is computed trivially from the stored weight matrix β no calibration data needed. Then apply Equation 4 with the chosen $\alpha$ to compute $s_j$ for each channel.
Offline model transformation: once $s$ is computed per layer, the model parameters are modified. For each linear layer $Y = X \cdot W$:
-
The weight matrix is replaced with
$\hat{W} = \text{diag}(s) \cdot W$. This is a one-time element-wise multiplication: each element$W_{j,k}$becomes$s_j \cdot W_{j,k}$. -
The activation scaling
$X \cdot \text{diag}(s)^{-1}$is fused into the preceding operation. For example:- If
$X$comes from a LayerNorm with scale$\gamma$and bias$\beta$, the LayerNorm parameters are updated to$\hat{\gamma} = \gamma / s$and$\hat{\beta} = \beta / s$(element-wise division), so the LayerNorm output is already "smoothed" with zero additional cost. - If
$X$comes from a linear layer$Y_{\text{prev}} = X_{\text{prev}} \cdot W_{\text{prev}}$, the weight matrix of that previous layer is updated to$\hat{W}_{\text{prev}} = W_{\text{prev}} \cdot \text{diag}(s)^{-1}$(each output channel$j$divided by$s_j$). - For residual connections, an explicit scaling by
$1/s$is added to the residual branch.
- If
This offline fusion is what makes SmoothQuant "training-free" and "post-training": the model is modified once after training, with no gradient updates, no fine-tuning, and no additional inference-time operations. The paper emphasizes: "At runtime, the activations are smooth without scaling" (Figure 5 caption).
Runtime behavior: after offline transformation, the model runs exactly the same computational graph as before β the smoothing is "baked into" the parameters. The only difference is that the activations are now quantization-friendly, so applying standard per-tensor or per-token INT8 quantization produces minimal accuracy degradation. The quantization step size $\Delta_X$ is computed either dynamically (from the current input's statistics) or statically (from the calibration data, same 512 sentences), depending on the chosen efficiency level (O1βO3).
Application Across the Transformer Architecture
SmoothQuant is applied systematically to all compute-intensive operations in the transformer. Figure 6 illustrates the precision mapping for a single transformer block:
Operations quantized to INT8 (W8A8):
- All linear layers in the feed-forward network (two per transformer block in standard architectures: the up-projection and down-projection).
- All linear layers in the self-attention mechanism (the query, key, value, and output projections β four linear layers per attention head or per block, depending on the implementation). The paper states: "By default, we perform scale smoothing for the input activations of self-attention and feed-forward layers and quantize all linear layers with W8A8."
- Batched matrix multiplications (BMMs) in the attention computation: the query-key dot product (
$Q \cdot K^T$) and the attention-weight-value product ($\text{softmax}(QK^T/\sqrt{d}) \cdot V$). Both are compute-intensive matrix multiplications that benefit from INT8 acceleration.
Operations kept in FP16:
- Lightweight element-wise operations: ReLU (or GELU, SiLU, depending on the model), Softmax, and LayerNorm. These operations have low computational cost relative to matrix multiplications (their cost scales linearly with model dimension rather than quadratically), so quantizing them would add complexity without significant throughput gains. Keeping them in FP16 also preserves accuracy for the Softmax operation, which is sensitive to precision due to its exponential.
The paper justifies this hybrid design: "Such a design helps us to balance accuracy and inference efficiency." All the heavy lifting β the $O(d^2)$ and $O(n \cdot d^2)$ operations where quantization matters for throughput β runs in INT8, while the cheap $O(d)$ and $O(n \cdot d)$ operations stay in high precision to avoid introducing unnecessary accuracy risk.
LayerNorm placement: the paper does not explicitly state this, but the standard practice (and what Figure 6 implies) is that the activation $X$ entering a linear layer typically comes from the preceding LayerNorm. Therefore, folding the smoothing division into the LayerNorm parameters means the smoothing happens "for free" as part of the normalization step. This is a key enabler of SmoothQuant's zero-runtime-overhead property.
Three Quantization Efficiency Levels (O1βO3)
SmoothQuant is not tied to a single quantization scheme. The paper defines three efficiency levels (Table 2) that represent increasingly aggressive (and hardware-efficient) quantization granularities. All three levels use SmoothQuant's activation smoothing, but they differ in how the quantized model computes scaling factors:
SmoothQuant-O1: Per-tensor weight quantization, per-token dynamic activation quantization.
- Weights use a single scaling factor per weight matrix (per-tensor).
- Activations use per-token scaling factors computed at runtime from each token's actual values (dynamic). This means for each forward pass, the quantizer scans the current activation tensor to find the maximum absolute value per token and uses that to set
$\Delta_X$. - This is the most accurate setting because per-token dynamic quantization adapts to the current input, avoiding the mismatch between calibration statistics and runtime data. The cost is that computing per-token
$\max(|X_j|)$at runtime adds some overhead (though far less than LLM.int8()'s mixed-precision decomposition). - Per-token scaling is compatible with INT8 GEMM kernels because the per-token scaling factors are along the token dimension
$T$(an outer dimension), so they can be applied after the matrix multiply (see Equation 2).
SmoothQuant-O2: Per-tensor weight quantization, per-tensor dynamic activation quantization.
- Both weights and activations use a single scaling factor per tensor (per-tensor), computed at runtime from the current activation values (dynamic).
- This is coarser than O1 because all tokens share one
$\Delta_X$rather than having per-token$\Delta_X$values. However, the dynamic computation still uses the current input's statistics, avoiding calibration-runtime mismatch. - Faster than O1 because only one scaling factor per tensor is computed, and only one scaling multiplication is needed.
SmoothQuant-O3: Per-tensor weight quantization, per-tensor static activation quantization.
- Both weights and activations use per-tensor scaling factors.
- Activation scaling factors are computed offline from the calibration data and stored β no runtime statistics computation needed.
- This is the most hardware-efficient setting because there is zero overhead for computing
$\Delta_X$at runtime, and the single scaling factor per tensor minimizes post-GEMM scaling operations. Table 11 quantifies the efficiency: for OPT-13B at sequence length 256, O1 takes 124.5ms, O2 takes 120.5ms, and O3 takes 112.1ms (vs. 152.6ms for FP16). The pattern holds across models and sequence lengths: "the coarser the quantization granularity (from O1 to O3), the lower the latency. And static quantization can significantly accelerate inference compared with dynamic quantization because we no longer need to calculate the quantization step sizes at runtime."
The tradeoff and the paper's guidance: the accuracy difference between O1 and O3 is remarkably small for most models. Table 3 shows O1, O2, and O3 for OPT-175B achieving 66.5%, 66.4%, and 66.8% average accuracy respectively β all within noise of FP16's 66.9%. However, for models with more severe outliers like GLM-130B, O3 degrades slightly more than O1 (Table 4: O1 at 73.7% vs. O3 at 72.8%, with FP16 at 73.8%). The paper's recommendation: "We recommend using a coarser scheme if the accuracy permits" β meaning start with O3 for maximum efficiency, and only fall back to O1/O2 if accuracy degrades unacceptably for the specific model.
Special handling for GLM-130B: the paper notes that for O3 (static quantization) on GLM-130B, "we clip the top 2% tokens when calibrating the static quantization step sizes for GLM-130B following Wei et al. (2022)." This means that instead of using the absolute maximum from calibration data (which might be an extreme outlier in one token), the calibration clips the top 2% of activation values to reduce the static $\Delta_X$ and improve precision for the remaining 98% of values. This is an additional technique layered on top of SmoothQuant for models with extreme outliers.
Summary of Design Choices and Their Justifications
- Per-channel smoothing rather than per-channel quantization: SmoothQuant migrates difficulty across channels offline rather than trying to scale per-channel at runtime. This directly resolves the hardware constraint that makes per-channel activation quantization infeasible β the smoothing happens before quantization, so the runtime quantizer never needs to know about per-channel differences.
- Geometric interpolation with
$\alpha$for smoothing factor (Equation 4): balances quantization difficulty between both operands rather than making one perfect and one terrible. The geometric form means the product of activation and weight magnitudes is preserved, which the paper finds empirically optimal. - Fusing smoothing division into preceding operations: eliminates runtime overhead entirely. The paper could have added an explicit scaling layer, but folding into existing parameters (LayerNorm scales, previous linear layer weights) means SmoothQuant adds zero operations to the inference graph.
- Calibration on pretraining data (The Pile) rather than task-specific data: ensures zero-shot generalization to downstream tasks. Using task-specific calibration data would risk overfitting the quantization parameters to a narrow distribution.
- 512 calibration sentences: provides sufficient statistics for stable per-channel maximum estimation. More sentences would improve estimates marginally but increase calibration cost. 512 is an empirical sweet spot.
$\alpha = 0.5$as default for most models: the observation that this evenly splits quantization difficulty works for models with balanced outlier characteristics (OPT, BLOOM). Larger$\alpha$for models with more severe activation outliers (GLM, LLaMA at scale) reflects the empirical reality that activation quantization is the primary bottleneck and weights can absorb more difficulty without degradation.- Three efficiency levels (O1βO3): provides a practical spectrum from maximum accuracy to maximum speed. This is important because real deployments have different latency, throughput, and accuracy requirements.
- Keeping element-wise operations in FP16: recognizes that the accuracy-cost tradeoff is different for
$O(d)$operations (where FP16 is fast enough and quantization risk is nonzero) versus$O(d^2)$operations (where INT8 acceleration matters and SmoothQuant makes quantization safe).
4. Key Insights and Innovations
Innovation 1: Reframing Activation Outliers as a Channel-Persistent, Redistributable Property Rather Than Noise to Suppress
The dominant prior approach to activation outliers in LLM quantization was to treat them as anomalies to be isolated or suppressed. LLM.int8() (Dettmers et al., 2022) carved outliers out for special FP16 treatmentβan isolation strategy. Outlier Suppression (Wei et al., 2022) clipped extreme valuesβa suppression strategy. Both implicitly conceptualized outliers as aberrant: they don't belong in INT8, so remove them from the INT8 computation path.
SmoothQuant reframes this entirely. The paper's key diagnostic observation (Section 3, Figure 4) is that outliers are channel-persistent: a small fraction of channels consistently produce large-magnitude activations across all tokens, while most channels remain small. This is not noiseβthese channels carry structurally important information (Dettmers et al. showed they correspond to specific attention patterns). The variance is between channels, not within channels across tokens (Table 1 confirms per-token quantization barely helps because it addresses the wrong variance axis).
The intellectual move is to reconceptualize the problem: outliers are not a defect in the activation distribution; they are a concentration of quantization difficulty in specific channels. Since matrix multiplication is bilinear, this difficulty is fungibleβyou can shift it from activations to weights through a mathematically equivalent per-channel rescaling (Equation 3). Weights tolerate this shift because they are uniformly distributed with no outlier structure (Figure 4, left panel). The quantization difficulty isn't eliminatedβit's relocated to where it does less damage.
This reframing is fundamental rather than incremental because it changes what kind of problem activation quantization is. Before: activation quantization is a problem of anomalous values β isolate or suppress them. After: activation quantization is a problem of channel-wise variance imbalance β rebalance it across the two operands of the matrix multiplication. The evidence that this reframing is more productive than the anomaly-suppression view is stark: Outlier Suppression (suppression paradigm) achieves 36.0% average accuracy on OPT-175B, while SmoothQuant (rebalancing paradigm) achieves 66.8%βessentially matching FP16's 66.9% (Table 3). The channel-persistent diagnostic is what makes rebalancing possible: if outliers appeared randomly across channels per token, there would be no clean per-channel factor to redistribute.
Innovation 2: Resolving the Hardware Accuracy-Efficiency Tension Through Offline Mathematical Equivalence Rather Than Runtime Adaptation
All prior accurate W8A8 quantization schemes for LLMs faced an apparently inescapable tradeoff. Per-channel activation quantization preserves accuracy (Table 1: 71.4% for OPT-175B vs. 71.6% FP16) but is hardware-infeasible because INT8 GEMM kernels can only scale along outer dimensions ( and ), not the inner dimension where per-channel scaling would need to insert operations. The hardware-feasible schemesβper-tensor and per-token quantizationβdestroy accuracy on large models (OPT-175B: 32.3% and 31.7% respectively). The field was stuck: accuracy requires per-channel granularity, hardware requires per-token-or-coarser granularity, and these requirements are incompatible at runtime.
SmoothQuant resolves this tension through a temporal separation. The key insight is that per-channel scaling during quantization is impossible, but per-channel scaling before quantization is not only possible but can be fused offline into the model's parameters with zero runtime overhead. The smoothing transformation $\hat{X} = X \cdot \text{diag}(s)^{-1}$ applies per-channel scaling to activations, but this happens before the quantization stepβit's baked into the preceding LayerNorm or linear layer parameters during offline calibration. At runtime, the quantizer sees the already-smoothed activations and can use hardware-efficient per-tensor or per-token schemes without encountering channel-wise magnitude variation.
This is not just a clever implementation trick. It represents a conceptual shift from runtime quantization adaptivity (the approach of LLM.int8() with its dynamic outlier detection and mixed-precision branching) to offline distribution reshaping. The field's default assumption was that handling outliers required runtime intelligenceβidentify them on the fly and treat them specially. SmoothQuant demonstrates that offline structural transformation of the model's parameterization can eliminate the need for runtime intelligence entirely. The practical consequence is measured directly in latency: SmoothQuant-O3 achieves 112.1ms vs. 152.6ms for FP16 on OPT-13B (1.36Γ speedup), while LLM.int8()βthe runtime-adaptive approachβis actually slower at 237.1ms (Table 11). The offline transformation paradigm produces both better accuracy and better speed than runtime adaptation.
Innovation 3: Demonstrating That Quantization Difficulty Can Be Optimally Balanced Between Weights and Activations via a Single Scalar per Layer
Prior quantization methods treated the weight and activation quantization problems as largely independent. You choose a quantization scheme for weights (per-channel, group-wise) and a separate scheme for activations (per-tensor, per-token) and tune them independently. There was no framework for reasoning about the joint quantization difficulty of both operands.
SmoothQuant introduces the concept of a migration strength parameter $\alpha$ (Equation 4) that explicitly controls how quantization difficulty is apportioned between the two operands of a matrix multiplication. The geometric interpolation $s_j = \max(|X_j|)^\alpha \cdot \max(|W_j|)^{-(1-\alpha)}$ treats the total "quantization hardness" of a channel as a conserved quantity that can be split between activations and weights in any ratio. When $\alpha = 0.5$, difficulty is evenly split; when $\alpha = 0.75$, more goes to weights; when $\alpha = 1.0$, all of it goes to weights.
The significance of this formulation is that it converts quantization from a binary per-channel decision (is this channel an outlier? yes β FP16, no β INT8, as in LLM.int8()) into a continuous scalar optimization problem (how much of this channel's dynamic range should live in activations vs. weights?). Figure 10 provides the empirical validation: $\alpha$ exhibits a clear "sweet spot" behavior where both extremes fail (too small β activation error dominates; too large β weight error dominates) and intermediate values preserve accuracy. The fact that $\alpha = 0.5$ works universally for OPT and BLOOM modelsβdespite their different sizes and training proceduresβsuggests this is not an artifact of hyperparameter tuning but reflects a genuine symmetry in how quantization error propagates through matrix multiplication when both operands use the same integer bit-width.
This is a fundamental conceptual contribution because it provides a unified language for describing quantization difficulty in linear layers. Before SmoothQuant, the literature described outliers as a property of activations. After, they are more precisely described as a channel-wise imbalance in the activation-weight dynamic range product that can be corrected by redistribution. The finding that LLaMA models require systematically larger $\alpha$ values with increasing scale (Table 6: 0.8 for 7B, 0.85 for 13B, 0.9 for 65B) reinforces this reframing: it's not that LLaMA activations have "more outliers" in some binary sense, but rather that the activation-weight dynamic range imbalance grows with model scale in a way that requires shifting proportionally more difficulty to weights.
Innovation 4: Establishing That Training-Free Post-Training Quantization Can Scale to 500B+ Parameters Without Accuracy Loss
At the time of this paper's publication, the largest model successfully quantized to W8A8 without accuracy degradation was GPT-J-6B (ZeroQuant) or models handled by LLM.int8()'s mixed-precision scheme (which is not pure W8A8). Demonstrating lossless W8A8 at 175B parameters (OPT, BLOOM) and 530B (MT-NLG) was not merely a matter of applying existing techniques to larger modelsβit required solving a qualitatively different problem because activation outliers only emerge as a systematic phenomenon beyond ~6.7B parameters (Dettmers et al., 2022).
The significance of this result is not primarily the scale (though enabling a 530B model on a single 8-GPU node is practically important). Rather, it's the empirical demonstration that the channel-persistent outlier structure that SmoothQuant exploits is a general property of large transformer language models, not an idiosyncrasy of specific architectures or training recipes. The paper tests this across three model families with different designs (OPT: standard decoder-only, BLOOM: multilingual with different tokenizer and training data, GLM-130B: bidirectional attention with different architecture), across instruction-tuned variants (OPT-IML-30B, Table 5), and across more recent architectures including LLaMA-1/2, Falcon, Mistral, and the Mixture-of-Experts Mixtral (Tables 6β7). In every case, a single $\alpha$ per model family enables lossless W8A8 quantization. The universality of the phenomenonβthat activations develop channel-wise outliers and that these can be redistributed to weightsβsuggests it arises from fundamental properties of transformer training dynamics rather than implementation details.
This finding is reinforced by a notable negative result: the ReST experiment in Appendix K (referenced in Section 5 but not detailed here) shows that attempts to optimize the revision model with RL-style training caused performance to degrade substantially, highlighting that the simple offline calibration approach is not trivially replaceable with more sophisticated training-based methods. SmoothQuant's success at scale comes from working with the model's emergent structure (channel-persistent outliers) rather than fighting it.
5. Experimental Analysis
Evaluation Methodology
-
Dataset. The paper evaluates on eight datasets across different LLM families. For OPT and BLOOM models: LAMBADA (word prediction requiring broad discourse context; Paperno et al., 2016), HellaSwag (commonsense reasoning; Zellers et al., 2019), PIQA (physical commonsense; Bisk et al., 2020), WinoGrande (adversarial Winograd schema; Sakaguchi et al., 2019), OpenBookQA (open book question answering; Mihaylov et al., 2018), RTE (textual entailment; Wang et al., 2018), COPA (causal reasoning; Roemmele et al., 2011), and WikiText (language modeling perplexity; Merity et al., 2016). For GLM-130B, some benchmarks appearing in its training set are excluded; evaluation uses MMLU (Hendrycks et al., 2020), MNLI (Williams et al., 2018), QNLI (Wang et al., 2018), and LAMBADA instead. For LLaMA-1/2, Falcon, Mistral, and Mixtral, only WikiText-2 perplexity is reported (Tables 6β7), with sequence length 512 for LLaMA-1 and 2048 for the rest. All calibration data comes from The Pile (Gao et al., 2020) β specifically, 512 random sentences used once to compute smoothing factors and static quantization step sizes, then the same smoothed model runs on all downstream tasks.
-
Base model(s). Three primary LLM families are tested at multiple scales: OPT (125M through 175B; Zhang et al., 2022), BLOOM (176B; Scao et al., 2022), and GLM-130B (Zeng et al., 2022). Additionally: OPT-IML-30B (instruction-tuned variant; Table 5), LLaMA-1 (7Bβ65B; Touvron et al., 2023a, Table 6), LLaMA-2 (7Bβ70B; Touvron et al., 2023b, Table 7), Falcon (7B, 40B; Almazrouei et al., 2023), Mistral-7B (Jiang et al., 2023), Mixtral-8Γ7B (MoE; Jiang et al., 2024), and MT-NLG 530B (Smith et al., 2022). The range spans three orders of magnitude in parameter count (125M β 530B), deliberately chosen because activation outliers emerge as a systematic phenomenon only beyond ~6.7B parameters (Dettmers et al., 2022), making the 6.7Bβ530B range the critical test for whether SmoothQuant generalizes.
-
Metrics. For OPT and BLOOM, the paper reports per-task accuracy (exact match or multiple-choice selection, depending on the benchmark) and computes an average across 7 tasks (LAMBADA, HellaSwag, PIQA, WinoGrande, OpenBookQA, RTE, COPA) plus WikiText perplexity. For GLM-130B, it reports average accuracy across 4 tasks (LAMBADA, MMLU, MNLI, QNLI). The paper explicitly states it focuses on "the relative performance change before and after quantization but not the absolute value" β the relevant comparison is always FP16 baseline vs. quantized accuracy, not which model achieves the highest absolute score. Evaluations use lm-eval-harness for OPT/BLOOM and GLM-130B's official repository for GLM. For LLaMA and newer models, only WikiText-2 perplexity is reported, with no downstream task evaluation.
-
Baselines. Four baseline methods are compared, all in the INT8 post-training quantization setting (no retraining of model parameters):
- W8A8 naive β per-tensor static quantization for weights, per-tensor dynamic quantization for activations (equivalent to SmoothQuant's quantization scheme but without the smoothing transformation).
- ZeroQuant (Yao et al., 2022) β per-token dynamic activation quantization with group-wise weight quantization (group size 128). For OPT-175B where ZeroQuant fails completely, the authors also test a variant leaving self-attention input activations in FP16 (their solution for GPT-NeoX-20B), noted in Table 3.
- LLM.int8() (Dettmers et al., 2022) β mixed-precision decomposition: outlier activation channels identified at runtime and computed in FP16, all other channels in INT8.
- Outlier Suppression (Wei et al., 2022) β non-scaling LayerNorm plus token-wise clipping applied before per-tensor static quantization.
SmoothQuant itself is evaluated at three efficiency levels (O1βO3, defined in Table 2). The baselines differ in their quantization granularity (Table 2): W8A8 naive uses per-tensor/per-tensor, ZeroQuant uses group-wise/per-token dynamic, LLM.int8() uses per-channel/per-token dynamic with FP16 fallback, and Outlier Suppression uses per-tensor/per-tensor static.
-
Generation budget / compute accounting. Since this is a quantization paper rather than a generation-time compute scaling paper, there is no "generation budget" in the sense of number of sampled solutions. Instead, the cost metric is inference latency (milliseconds) and peak GPU memory (GB), measured end-to-end for a forward pass on batches of 4 sentences at various sequence lengths (128, 256, 512, 1024). Latency is measured for the "context stage" (generating all hidden states for a batch in one pass, Figures 8β9) and for "decoding stage" (autoregressive per-token generation, Table 8). All latency measurements use NVIDIA A100 80GB GPUs. The paper compares methods at equal batch size and sequence length, not at equal accuracy (since some baselines cannot achieve comparable accuracy at all). Speedup ratios are relative to the FP16 baseline running the same model at the same batch size and sequence length.
-
Cross-validation / statistical protocol. There is no cross-validation or statistical significance testing. The smoothing factors and static quantization step sizes are calibrated once on 512 sentences from The Pile and applied to all downstream evaluations. The choice of Ξ± is determined by "a quick grid search on a subset of the Pile validation set" (Section 5.1), but no protocol details (search range, step size, held-out validation split) are provided. This makes the Ξ± selection procedure somewhat opaque β we know the outcome (Ξ± = 0.5 for OPT/BLOOM, 0.75 for GLM-130B, model-specific values for LLaMA) but not the search process that produced it. For the LLM.int8() and Outlier Suppression baselines, the paper uses the authors' released implementations with default settings.
Main Quantitative Results
Accuracy Results on Very Large Models (OPT-175B, BLOOM-176B, GLM-130B)
Headline result: SmoothQuant matches FP16 accuracy on all three 100B+ parameter LLMs using W8A8 quantization, whereas all baselines except LLM.int8() (which has its own speed problems) degrade severely or collapse entirely.
OPT-175B (Table 3, the most comprehensive evaluation): SmoothQuant-O1 achieves 66.5% average accuracy across 7 zero-shot tasks, compared to 66.9% for FP16 β a 0.4 percentage point difference that is almost certainly within noise for a 500-question test set. SmoothQuant-O3, the most hardware-efficient setting (per-tensor static), achieves 66.8% β actually 0.1 points above O1, though this difference is negligible and likely reflects evaluation variance. WikiText perplexity tells the same story: FP16 at 10.99, SmoothQuant-O1 at 11.11, O2 at 11.14, O3 at 11.17 β degradation of roughly 0.15β0.18 perplexity points, which is minimal.
Contrast this with the baselines. W8A8 naive achieves 35.5% average accuracy (31.4 points below FP16) and WikiText perplexity of 93,080 β the model has effectively collapsed. ZeroQuant achieves 35.8% average accuracy and 84,648 perplexity β equally catastrophic, and the FP16-attention-input variant doesn't help. Outlier Suppression achieves 36.0% and 96,151 perplexity β all in the same collapsed regime. LLM.int8() is the only baseline that preserves accuracy (66.7% average, 11.10 perplexity), but as the latency results show, it achieves this through a mechanism that makes it slower than FP16.
The per-task breakdown reveals that the collapse is not uniform across tasks: W8A8 naive scores 0.0% on LAMBADA (a token-completion task sensitive to precise logit ordering) and 25.6% on HellaSwag (multiple-choice with some robustness to logit perturbation), suggesting quantization noise disproportionately affects tasks requiring fine-grained token-level prediction over those where coarse relative logit differences suffice.
BLOOM-176B (Table 4): SmoothQuant-O1 achieves 68.3% average accuracy vs. 68.2% for FP16 β effectively identical. SmoothQuant-O3 drops to 67.4% (0.8 points below FP16), which the paper attributes to "the discrepancy between the statically collected statistics and the real evaluation samples' activation statistics." BLOOM is notably easier to quantize than OPT: even naive W8A8 achieves 64.2% (only 4 points below FP16), and ZeroQuant achieves 67.4% β matching SmoothQuant-O3. This suggests BLOOM's activation outlier structure is less severe than OPT's, making the smoothing transformation less critical for this model family.
GLM-130B (Table 4): SmoothQuant-O1 achieves 73.7% vs. 73.8% for FP16 β matching exactly. O3 achieves 72.8% (1.0 point below FP16), which still significantly outperforms all baselines except LLM.int8() (73.8%). GLM-130B is the hardest to quantize among the three: naive W8A8 collapses to 26.9%, ZeroQuant to 26.7%, and Outlier Suppression to 63.5% β the latter being the only non-LLM.int8() baseline that doesn't fully collapse, but still 10.3 points below FP16. This is why GLM-130B requires Ξ± = 0.75 (more difficulty migrated to weights) rather than 0.5: the activations are substantially more outlier-prone, and the smoothing must be more aggressive.
Accuracy Across Model Scales (OPT Family)
Headline result (Figure 7): SmoothQuant-O3 maintains FP16-level accuracy across the entire OPT model family, from 125M to 175B parameters, with no degradation trend as model size increases.
The figure plots average accuracy (across WinoGrande, HellaSwag, PIQA, and LAMBADA) for FP16, SmoothQuant-O3, and LLM.int8() at model sizes 125M, 350M, 1.3B, 2.7B, 6.7B, 13B, 30B, 66B, and 175B. The FP16 and SmoothQuant-O3 lines are nearly indistinguishable across all scales, while LLM.int8() also tracks FP16 (as expected, since it preserves accuracy by construction). The key point is that SmoothQuant-O3 β the most aggressive and efficient quantization setting β shows no accuracy degradation at any scale. This is important because outlier severity increases with model size (Dettmers et al., 2022), so one might expect quantization to become progressively harder for larger models. The flat degradation curve (essentially zero at all sizes) demonstrates that Ξ± = 0.5 with per-tensor static quantization is sufficient to handle the full range of outlier magnitudes encountered from 125M to 175B parameters in the OPT family.
The paper does not show the other baselines (W8A8 naive, ZeroQuant, Outlier Suppression) across scales, so we cannot see at exactly what parameter count they begin to fail. The 6.7B threshold cited from Dettmers et al. (2022) is consistent with the 175B results (where all three fail catastrophically), but we don't have the intermediate data points.
Accuracy on Instruction-Tuned and Recent Models
OPT-IML-30B (Table 5): SmoothQuant-O3 achieves 69.77% on LAMBADA vs. 69.12% for FP16 β actually a 0.65 point improvement (though this is almost certainly noise, not a genuine quantization benefit). WikiText perplexity is 14.37 vs. 14.26 for FP16 β a negligible 0.11 perplexity increase. All baselines fail: W8A8 naive scores 4.21% and 576.53 perplexity, ZeroQuant scores 5.12% and 455.12, Outlier Suppression collapses to 0.00% and 9485.62, while LLM.int8() matches FP16 at 69.14% and 14.27. This demonstrates that instruction fine-tuning does not fundamentally alter the activation outlier structure β SmoothQuant's calibration procedure, designed on pretraining data, transfers to instruction-tuned models without modification.
LLaMA-1 (Table 6): Evaluated only on WikiText-2 perplexity with sequence length 512. SmoothQuant (using per-token activation quantization and model-specific Ξ± values) achieves near-lossless quantization: 7B (11.56 vs. 11.51 FP16), 13B (10.08 vs. 10.05), 30B (7.56 vs. 7.53), 65B (6.20 vs. 6.17). The degradation is 0.03β0.05 perplexity points β extremely small. Notably, Ξ± increases with model scale (0.8 β 0.85 β 0.9), consistent with the hypothesis that activation outliers become relatively more severe in larger models, requiring more difficulty to be shifted to weights. However, the paper does not evaluate LLaMA on downstream zero-shot tasks, so we cannot confirm the quantization maintains accuracy on benchmarks that require precise logit ordering or reasoning, not just language modeling perplexity.
LLaMA-2, Falcon, Mistral, Mixtral (Table 7): Evaluated only on WikiText-2 with sequence length 2048. SmoothQuant achieves near-lossless quantization across all architectures: LLaMA-2-7B (5.515 vs. 5.474), LLaMA-2-13B (4.929 vs. 4.950 β better than FP16, likely noise), LLaMA-2-70B (3.359 vs. 3.320), Falcon-7B (6.629 vs. 6.590), Falcon-40B (5.255 vs. 5.228), Mistral-7B (5.277 vs. 5.253), Mixtral-8Γ7B (3.893 vs. 3.842). The Mixtral result is particularly notable because it is a Mixture-of-Experts model with a fundamentally different compute pattern (sparse activation of expert sub-networks), yet the channel-persistent outlier structure and smoothing transformation still apply. The Ξ± values vary across model families (0.6β0.7 for Falcon, 0.8 for Mistral/Mixtral, 0.85β0.9 for LLaMA-2), confirming that the optimal migration strength is model-specific but the method itself is architecture-agnostic.
The paper does not compare against baselines for these newer models. We don't know whether naive W8A8, ZeroQuant, or Outlier Suppression would also work (model architectures and training recipes may have reduced outlier severity, making SmoothQuant less necessary), or whether they would fail as they did on OPT. This is a significant omission β without baselines, we can't assess whether SmoothQuant is necessary for these models or merely sufficient.
Latency and Memory Results
PyTorch implementation β context stage (Figure 8): SmoothQuant-O3 achieves consistent speedup over FP16, with the ratio improving as model size increases. On OPT-13B: 1.33Γ speedup at sequence length 128 (112ms vs. 223ms FP16), 1.34Γ at 256 (63ms vs. 190ms), 1.33Γ at 512 (33ms vs. 115ms). On OPT-30B: 1.51Γ at 128 (228ms vs. 458ms), 1.40Γ at 256 (136ms vs. 343ms), 1.37Γ at 512 (68ms vs. 228ms). The larger absolute gains on OPT-30B reflect the greater proportion of compute time spent in matrix multiplications for larger models, where INT8 GEMM provides the most benefit.
LLM.int8() is slower than FP16 in all measured configurations: on OPT-13B at sequence length 256, LLM.int8() takes 237ms vs. 190ms for FP16 (0.80Γ β a slowdown). On OPT-30B at 256, it takes 388ms vs. 343ms (0.88Γ). Even at sequence length 512 where LLM.int8()'s overhead is better amortized, OPT-30B shows 276ms vs. 228ms (0.83Γ). The paper attributes this to "the large overhead of the mixed-precision activation representation" β the runtime outlier detection and split-computation-merge pipeline disrupts the efficient INT8 GEMM kernel execution flow.
Memory savings: SmoothQuant reduces peak GPU memory by roughly 1.9β2.0Γ across all configurations, consistent with halving activation and weight storage from FP16 to INT8. For OPT-30B at sequence length 256: FP16 uses 59.0GB, SmoothQuant uses 29.1GB (2.03Γ reduction). LLM.int8() achieves slightly less memory savings (30.0GB vs. 29.1GB) because it retains FP16 representations for outlier channels.
FasterTransformer implementation β context stage (Figure 9): This is the more practically significant benchmark because FasterTransformer is a production-grade serving framework with Tensor Parallelism support (Shoeybi et al., 2019). The results are reported in two categories:
Single GPU (OPT-13B, OPT-30B): SmoothQuant achieves up to 1.56Γ speedup over FasterTransformer's already-optimized FP16 baseline. On OPT-13B at sequence length 128: 63ms vs. 125ms FP16 (1.98Γ β actually higher than 1.56Γ, the 1.56Γ figure appears to be from a different configuration). On OPT-30B at sequence length 256: 119ms vs. 249ms (2.09Γ). The speedup is substantial even relative to a highly optimized FP16 implementation.
Multi-GPU with Tensor Parallelism (OPT-66B, OPT-175B): The key result is that SmoothQuant enables using half the number of GPUs at comparable or better latency. For OPT-66B: SmoothQuant on 1 GPU achieves 229β236ms (across sequence lengths 128β1024) vs. FP16 on 2 GPUs at 490ms (sequence length 128) β same latency with half the GPUs at some sequence lengths, faster at others. For OPT-175B: SmoothQuant on 4 GPUs achieves 366β432ms vs. FP16 on 8 GPUs at 720ms (sequence length 128) β faster with half the GPUs. At sequence length 1024, SmoothQuant on 4 GPUs takes 848ms vs. FP16 on 8 GPUs at 122ms wait β that's wrong, let me re-read: Figure 9 shows FP16 (8 GPUs) at 720, 366, 194, 122ms for sequence lengths 128, 256, 512, 1024. SmoothQuant (4 GPUs) at 848, 432, 228, 139ms. So at sequence length 1024, SmoothQuant on 4 GPUs is 139ms vs. FP16 on 8 GPUs at 122ms β slightly slower (0.88Γ) but using half the GPUs.
Memory in FasterTransformer (Figure 9, bottom): nearly exactly halved across all configurations. OPT-175B at sequence length 1024: FP16 uses 389GB, SmoothQuant uses 182GB (2.14Γ reduction). This enables the headline result: "serving a 530B model within a single 8-GPU node."
Decoding stage (Table 8): SmoothQuant reduces per-token decoding latency compared to FP16 across various batch sizes and sequence lengths. On OPT-30B (1 GPU, batch size 16, sequence length 512): 1.42Γ speedup (1753ms vs. 2488ms). On OPT-175B (8 GPUs, batch size 16, sequence length 512): 1.36Γ speedup (1628ms vs. 2212ms). Memory savings in the decoding stage are 1.52β1.91Γ, enabling larger batch sizes that would otherwise cause out-of-memory (OOM): at batch size 16, sequence length 1024 for OPT-30B, FP16 encounters OOM while SmoothQuant runs in 3947ms using 61GB. The paper notes this is "challenging since FasterTransformer is already more than 3Γ faster compared to the PyTorch implementation for OPT-30B."
Scaling Up: MT-NLG 530B
Headline result (Tables 9β10): SmoothQuant enables W8A8 quantization of the 530B MT-NLG model with negligible accuracy loss and allows serving within a single 8-GPU node.
Accuracy (Table 9): SmoothQuant W8A8 achieves 73.1% average accuracy (across LAMBADA, HellaSwag, PIQA, WinoGrande), matching FP16's 73.1% exactly. The per-task breakdown shows slight variation (LAMBADA: 77.2% INT8 vs. 76.6% FP16; HellaSwag: 60.4% vs. 62.1%) but the average is identical. This is remarkable given the model's scale β 530B parameters β and demonstrates that the channel-persistent outlier structure and SmoothQuant's mitigation strategy scale to the largest models available.
Serving efficiency (Table 10): SmoothQuant reduces the GPU requirement from 16 to 8 (halving) while maintaining comparable latency. At sequence length 256: FP16 on 16 GPUs takes 451ms using 1054GB, SmoothQuant INT8 on 8 GPUs takes 434ms using 533GB β faster with half the GPUs and half the memory. At sequence length 512: 838ms (16 GPUs, 1068GB) vs. 839ms (8 GPUs, 545GB) β same latency, half the GPUs. At sequence length 1024: 1707ms (16 GPUs, 1095GB) vs. 1689ms (8 GPUs, 570GB) β slightly faster with half the GPUs. The memory reduction is consistently ~2Γ. This is the first demonstration of serving a >500B model within a single 8-GPU node.
Ablation Studies and Robustness Checks
Quantization scheme granularity (Table 11): The coarser the quantization scheme, the lower the latency. For OPT-13B at sequence length 256: SmoothQuant-O1 (per-token dynamic) = 124.5ms, O2 (per-tensor dynamic) = 120.5ms, O3 (per-tensor static) = 112.1ms, compared to FP16 = 152.6ms and LLM.int8() = 237.1ms. The pattern is consistent across models and sequence lengths. The jump from O2 to O3 (dynamic β static) provides a larger latency reduction than O1 to O2 (per-token β per-tensor) on OPT-13B (8.4ms vs. 4.0ms at sequence length 256), but on OPT-30B the gaps are more uniform. The key practical insight: static quantization eliminates the need to compute max(|X|) at runtime, which requires a reduction operation over the entire activation tensor β this overhead is non-trivial, especially for smaller models where the matrix multiplication itself is fast. The paper recommends using O3 (coarsest, fastest) unless accuracy degradation forces a finer scheme.
Migration strength Ξ± (Figure 10): The optimal Ξ± exhibits a clear sweet spot behavior. For OPT-175B on LAMBADA, Ξ± values below 0.4 cause accuracy to drop sharply (activation quantization error dominates β the smoothing doesn't move enough difficulty to weights). Ξ± values above 0.6 also cause accuracy to drop (weight quantization error dominates β too much difficulty moved to weights). The sweet spot region of Ξ± β [0.4, 0.6] maintains near-FP16 accuracy, with Ξ± = 0.5 being the center. The plateau is broad enough that precise tuning is unnecessary β any value in 0.4β0.6 works. The paper only shows this ablation for OPT-175B on LAMBADA; we don't know if the sweet spot width varies by model size or task.
LLaMA Ξ± scaling with model size (Table 6): For LLaMA-1, Ξ± increases systematically with model size: 0.8 (7B), 0.85 (13B), 0.85 (30B), 0.9 (65B). This is consistent with larger models having relatively more severe activation outliers, requiring more aggressive difficulty migration to weights. The paper does not ablate whether this trend is monotonic or whether the relationship between parameter count and optimal Ξ± is predictable a priori β this would be valuable for applying SmoothQuant to new models without grid search.
Special handling for GLM-130B static quantization (Section 5.1): For the O3 setting (per-tensor static), "we clip the top 2% tokens when calibrating the static quantization step sizes for GLM-130B following Wei et al. (2022)." This means the calibration process discards the largest 2% of activation values when computing Ξ_X, which reduces the step size and improves precision for the remaining 98% of values. The paper does not ablate this clipping threshold or show how it interacts with Ξ±. Given that Outlier Suppression (which relies entirely on clipping) fails on GLM-130B (63.5% vs. 73.8% FP16, Table 4), the clipping here is likely only effective in combination with the smoothing transformation β smoothing reduces the outlier severity enough that a small amount of clipping can handle residual extremes without destroying information. This interaction is interesting but unexplored.
Calibration data quantity: The paper uses 512 sentences from The Pile throughout, with no ablation on calibration set size. We don't know whether 128 sentences would suffice, whether more than 512 provides diminishing returns, or whether the calibration statistics are stable at this sample size. This is a practical concern because 512 forward passes through a 175B model is computationally non-trivial.
Absence of downstream task evaluation for LLaMA and newer models: Tables 6 and 7 report only WikiText-2 perplexity. Perplexity is a continuous metric that can mask quantization-induced degradation in specific token predictions β a model might maintain average perplexity while catastrophically failing on rare but important tokens. The 0.03β0.05 perplexity degradation is reassuringly small, but without downstream task evaluation (LAMBADA, HellaSwag, etc.), we cannot confirm that the quantized models preserve their few-shot reasoning capabilities to the same degree they preserve language modeling likelihood.
Critical Assessment
Does SmoothQuant genuinely enable W8A8 quantization without accuracy loss for LLMs?
The evidence is strong for the models and tasks tested. On OPT-175B (Table 3), SmoothQuant-O3 achieves identical average accuracy to FP16 (66.8% vs. 66.9%) across 7 diverse zero-shot benchmarks, with WikiText perplexity degradation of only 0.18 points (11.17 vs. 10.99). On BLOOM-176B (Table 4), O1 matches FP16 (68.3% vs. 68.2%) though O3 drops 0.8 points. On GLM-130B, O1 matches FP16 (73.7% vs. 73.8%) while O3 drops 1.0 point. The "negligible loss in accuracy" claim from the abstract is supported for O1 settings across all three 100B+ models, and for O3 on OPT-175B specifically.
However, there are important limitations to the claim's generality:
-
Downstream task coverage is uneven. For OPT and BLOOM, 7 zero-shot benchmarks plus WikiText provide reasonable coverage of different reasoning types. For GLM-130B, only 4 tasks are evaluated (and some standard benchmarks were excluded because they appear in GLM-130B's training set). For LLaMA-1/2, Falcon, Mistral, and Mixtral β representing the most widely used model families at the time of the paper's publication β only WikiText-2 perplexity is reported. Perplexity is not a substitute for downstream task accuracy; a model can maintain average log-likelihood while producing degraded outputs on tasks requiring precise multi-step reasoning, few-shot formatting, or long-range coherence. The paper's central claim β that SmoothQuant is "accuracy-preserving" β is incompletely tested for the models in Tables 6 and 7.
-
The "no accuracy loss" claim is approximate, not literal. Even in the best cases, there are small degradations. For OPT-175B O3, WikiText perplexity increases from 10.99 to 11.17 (+0.18). For LLaMA-65B, WikiText-2 increases from 6.17 to 6.20 (+0.03). Whether these are "negligible" depends on the application β for many serving scenarios, a 0.03 perplexity increase is indeed negligible, but the paper does not establish a threshold for what constitutes "lossless." LLM.int8() achieves perplexity of 11.10 on OPT-175B (vs. 10.99 FP16, +0.11), which is actually closer to FP16 than SmoothQuant-O3's 11.17. If the criterion for "lossless" is "within sampling noise of FP16," both methods qualify; if it's "strictly better than all alternatives," the comparison with LLM.int8() is essentially a tie on accuracy.
-
Instruction-tuned models are only tested on one model (OPT-IML-30B) with two metrics. Table 5 shows promising results, but one model at one scale is insufficient to claim general applicability to instruction-tuned LLMs. The paper's own wording is appropriately modest: "SmoothQuant is a general method designed to balance the quantization difficulty for Transformer models. As the architecture of instruction-tuned LLMs is not fundamentally different from vanilla LLMs, and their pre-training processes are very similar, SmoothQuant is applicable to instruction-tuned LLMs as well." This is an argument from architectural similarity, not empirical demonstration.
Does SmoothQuant actually achieve 1.56Γ speedup and 2Γ memory reduction?
The memory claim is straightforward and well-supported: halving parameter and activation precision from FP16 to INT8 should approximately halve memory usage, and the measurements confirm this (Figures 8β9, Table 8). The actual ratios range from 1.87Γ to 2.14Γ, close enough to 2Γ given measurement noise. The memory savings are the most robust and uncontroversial result in the paper.
The speedup claim requires more careful parsing. The 1.56Γ figure appears to be the maximum observed speedup across all tested configurations in FasterTransformer (the abstract says "up to 1.56Γ speedup"). Figure 9 shows speedups ranging from roughly 0.95Γ to over 2.0Γ depending on model size, sequence length, and GPU count. The speedup is not uniform: it is largest for compute-bound configurations (large models, long sequences) where INT8 GEMM throughput benefits dominate, and smaller for memory-bound configurations (small models, short sequences). This is expected behavior for quantization but means the 1.56Γ figure is a best-case cherry-pick, not an expected-case guarantee. Table 11 provides more systematic latency measurements showing speedups of 1.25β1.36Γ for OPT-13B and 1.34β1.51Γ for OPT-30B across sequence lengths β still substantial, but the range matters for practitioners estimating real-world benefits.
A more significant concern: the latency comparison with LLM.int8() is not at equal accuracy for the models where LLM.int8() also works. Tables 3β4 show that LLM.int8() matches FP16 accuracy on all tested models, just like SmoothQuant. The paper claims SmoothQuant is faster β and Table 11 confirms this β but the speed advantage is entirely due to LLM.int8()'s runtime overhead, not to any accuracy-speed tradeoff where SmoothQuant sacrifices accuracy for speed (since they're equal on accuracy). The paper frames this as SmoothQuant being "hardware-efficient" while LLM.int8() is not. This is fair, but it means the primary practical advantage over LLM.int8() is implementation efficiency, not a fundamental accuracy-speed Pareto improvement. A better-optimized implementation of mixed-precision decomposition (which the paper didn't attempt) could potentially narrow or close the latency gap if the outlier detection and split-computation overhead were reduced through custom kernel fusion.
What experiments would have strengthened the paper?
-
Baselines for LLaMA and newer models. Tables 6β7 show SmoothQuant results without any baseline comparisons. Given that LLaMA models "generally have less severe activation outlier issues compared to models like OPT and BLOOM" (Section 5.2), naive W8A8 might work adequately on these models without SmoothQuant's smoothing transformation. The paper cannot demonstrate SmoothQuant's necessity for these architectures without showing that simpler approaches fail.
-
Perplexity-to-downstream-task correlation. A single experiment showing that WikiText-2 perplexity degradation of magnitude X corresponds to downstream task degradation of magnitude Y would help validate the LLaMA and newer-model results. Without this, readers cannot assess whether a 0.03 perplexity increase (LLaMA-65B) is truly negligible or whether it masks meaningful capability loss.
-
Ablation on calibration data quantity and source. The paper uses 512 sentences from The Pile. How sensitive are the results to calibration set size? Would 64 sentences suffice? Does calibration on out-of-distribution data (e.g., Wikipedia rather than The Pile) degrade performance? These would inform practitioners about deployment robustness.
-
The interaction between Ξ± and quantization granularity. Figure 10 ablates Ξ± for what appears to be the O1 setting (per-token dynamic, though this isn't explicitly stated). Does the optimal Ξ± shift when using coarser quantization (O3, per-tensor static)? Intuitively, coarser quantization might be more sensitive to residual outliers after smoothing, which would favor larger Ξ± (more difficulty migrated to weights). Without this ablation, we don't know if the Ξ± = 0.5 default transfers across all three efficiency levels.
-
Per-layer Ξ± values. The paper uses a single global Ξ± for the entire model. Given that different layers may have different outlier characteristics (early layers vs. late layers, attention vs. FFN), per-layer or per-layer-type Ξ± tuning might improve accuracy, especially for the coarser O3 setting on models like GLM-130B and BLOOM-176B where O3 shows measurable degradation. The absence of per-layer tuning is a deliberate simplicity choice, but whether this choice leaves accuracy on the table is untested.
-
Evaluation on generative tasks. All evaluations are on classification-style benchmarks (multiple choice, perplexity) or language modeling. No results are reported for open-ended generation quality (e.g., using human evaluation, GPT-4-as-judge, or task-specific metrics like ROUGE for summarization or pass@k for code generation). This is the standard evaluation protocol in the quantization literature, but it means we cannot assess whether SmoothQuant-preserved perplexity translates to preserved generation quality in interactive applications.
Do the experiments support the paper's central comparative claim β that SmoothQuant resolves the accuracy-efficiency tension better than prior methods?
Yes, with the important qualification that the comparison with LLM.int8() is an engineering efficiency comparison, not an accuracy one. SmoothQuant achieves what LLM.int8() achieves (accuracy preservation) with better hardware efficiency. It achieves what ZeroQuant and Outlier Suppression cannot (accuracy on >100B models) with similar or better hardware efficiency. The "tension resolution" claim β that SmoothQuant provides both accuracy and speed where prior methods provided only one or the other β is supported by the systematic comparison in Tables 3β4 (accuracy) and Figures 8β9/Table 11 (speed).
The strongest evidence is the combination of Table 3 and Figure 9: on OPT-175B, SmoothQuant-O3 achieves 66.8% average accuracy (matching FP16's 66.9%) while running on 4 GPUs instead of 8 at comparable latency. No other method achieves this specific combination: LLM.int8() needs 8 GPUs (since it's not faster than FP16; worse, it's slower in PyTorch, and its FasterTransformer integration isn't benchmarked), and the other baselines don't achieve the accuracy. This is a genuine Pareto improvement β better on both dimensions simultaneously β for the OPT family.
The weakest evidence is for the newer model families (LLaMA, Falcon, Mistral, Mixtral), where the paper demonstrates feasibility (SmoothQuant works) but not necessity or comparative advantage (we don't know if simpler methods also work). Given that these are the models most practitioners would actually deploy, this is a meaningful gap.
6. Limitations and Trade-offs
6.1 Calibration Data Dependence Without Robustness Characterization
The assumption or constraint. SmoothQuant's smoothing factors $s_j$ and (for O3) static quantization step sizes are computed from a single calibration run on 512 sentences from The Pile. The paper states this explicitly: "we calibrate the smoothing factors and the static quantization step sizes once with 512 random sentences from the pre-training dataset Pile, and apply the same smoothed and quantized model for all downstream tasks" (Section 5.1). This assumes that 512 sentences from the pretraining distribution produce activation statistics $\max(|X_j|)$ that generalize to all downstream tasks and input distributions the model will encounter at deployment.
The consequence. If the deployment-time input distribution differs substantially from The Pile's distribution β for example, code generation, non-English text, highly structured formats (JSON, tables), or domain-specific terminology β the per-channel activation maxima may shift. The smoothing factors $s_j$ are fixed after calibration, so channel-wise outlier magnitudes that were not observed during calibration will not be smoothed. This would cause those channels to remain as outliers during quantization, reintroducing the per-tensor quantization error that SmoothQuant was designed to eliminate. The static quantization step sizes (O3) face an additional vulnerability: if runtime activation ranges exceed the calibrated $\Delta_X$, values saturate (clip to Β±127), losing information; if ranges are smaller, effective precision is wasted. The hybrid O1/O2 settings (dynamic quantization) mitigate the $\Delta_X$ mismatch but do not address the smoothing factor mismatch β $s_j$ remains fixed regardless.
What evidence exists in the paper. The paper provides no ablation, measurement, or discussion of distribution shift robustness. There is no experiment where SmoothQuant is calibrated on one dataset and evaluated on a substantially different one (e.g., calibrate on The Pile, evaluate on code or multilingual benchmarks). The BLOOM-176B O3 result (Table 4) shows a 0.8 percentage point accuracy drop relative to FP16 β larger than O1/O2 β which the paper attributes to "the discrepancy between the statically collected statistics and the real evaluation samples' activation statistics," but this is within the same pretraining distribution (The Pile to downstream tasks from similar domains). This drop does not test out-of-distribution shift. All evaluation tasks (LAMBADA, HellaSwag, PIQA, etc.) are drawn from similar domains to standard pretraining corpora, so the calibration-evaluation distribution gap is minimal by design. The paper does not measure what happens when this gap is large.
Mitigation status. The paper does not address this limitation. A natural mitigation β computing $s_j$ from a more diverse calibration set, using per-task recalibration, or adaptive smoothing β is not discussed. The "turn-key solution" framing (Section 1) implies that one calibration run suffices for all uses, but this claim is untested for deployment scenarios with meaningful distribution shift.
6.2 Ξ± Selection Requires Per-Model-Family Grid Search With No Predictive Principle
The assumption or constraint. The migration strength $\alpha$ in Equation 4 ($s_j = \max(|X_j|)^\alpha / \max(|W_j|)^{1-\alpha}$ ) is not derived from theory or computed analytically β it is selected via "a quick grid search on a subset of the Pile validation set" (Section 5.1). The paper reports that $\alpha = 0.5$ works for OPT and BLOOM, $\alpha = 0.75$ for GLM-130B, $\alpha = 0.8$β$0.9$ for LLaMA-1, $\alpha = 0.6$β$0.7$ for Falcon, and $\alpha = 0.8$ for Mistral/Mixtral. The paper provides no method for predicting $\alpha$ from model architecture, training recipe, or measurable properties of the activation-weight distribution β it is determined empirically per model family.
The consequence. For a practitioner deploying a new or custom model (fine-tuned variant, architecture modification, model from a new family not covered in the paper), the cost of finding $\alpha$ is non-trivial. A grid search requires: (1) running calibration forward passes, (2) applying the smoothing transformation for each candidate $\alpha$, (3) quantizing the model, (4) evaluating accuracy on a validation set, and (5) iterating. For a 175B model, each evaluation cycle is expensive in compute and engineering time. The paper's grid search protocol is unspecified (search range, step size, validation metric, stopping criterion), making it non-reproducible from the paper alone. A practitioner cannot look at their model's architecture and parameters and compute the correct $\alpha$ β they must rediscover it through trial and error. Furthermore, the paper does not characterize how sensitive each model is to $\alpha$ misspecification. Figure 10 shows OPT-175B's LAMBADA accuracy is flat in $\alpha \in [0.4, 0.6]$, suggesting robustness for that specific model-task combination, but we do not know whether this plateau width generalizes to other models, tasks, or quantization granularities (O3 might have a narrower plateau than O1, for instance). A practitioner overconfident in $\alpha = 0.5$ for a new model might silently deploy a suboptimally-quantized model.
What evidence exists in the paper. Figure 10 provides the only $\alpha$ ablation, covering OPT-175B on LAMBADA only. The plateau is reassuringly wide (0.4β0.6), but this is a single data point. The paper reports optimal $\alpha$ values for each model family (Tables 6β7) but does not show the search process, the sensitivity curves, or the performance at suboptimal $\alpha$ for any model other than OPT-175B. The absence of $\alpha$ sensitivity analysis for GLM-130B (where $\alpha = 0.75$, suggesting more severe outliers) is particularly notable β models with more extreme activation outliers might also have narrower $\alpha$ sweet spots, since the quantization error penalties at the extremes are sharper.
Mitigation status. The paper does not address this. It does not propose a heuristic for $\alpha$ estimation (e.g., based on the ratio of activation-to-weight channel variance, or a function of model depth/width), nor does it discuss whether per-layer $\alpha$ tuning could be automated by analyzing per-layer activation statistics during calibration. The grid search is presented as a one-time cost rather than a recurring deployment burden, but for the intended use case (practitioners applying SmoothQuant to their own models), it is precisely the latter.
6.3 Static Quantization (O3) Degradation on Models With Severe Outliers
The assumption or constraint. SmoothQuant-O3 β the most hardware-efficient setting with per-tensor static quantization β assumes that after the smoothing transformation, activation magnitudes are sufficiently uniform across tokens and calibration samples that a single static $\Delta_X$ per tensor, computed offline, can handle all runtime inputs without clipping or precision loss. The paper acknowledges this assumption is violated for some models: for GLM-130B O3, "we clip the top 2% tokens when calibrating the static quantization step sizes" (Section 5.1), indicating the raw calibration maxima inflate $\Delta_X$ enough to degrade accuracy.
The consequence. On models where activation outliers are only partially smoothed by $\alpha$ (because moving more difficulty to weights would degrade weight quantization, or because the outlier structure spans many channels), O3 degrades accuracy measurably relative to O1/O2. Evidence: BLOOM-176B O3 drops 0.8 points relative to FP16 and 0.9 points relative to O1 (Table 4: 67.4% O3 vs. 68.3% O1 vs. 68.2% FP16). GLM-130B O3 drops 1.0 point relative to FP16 and 0.9 points relative to O1 (Table 4: 72.8% O3 vs. 73.7% O1 vs. 73.8% FP16). These are not catastrophic degradation (as with naive W8A8 at 26.9β32.3%), but they are systematic and non-negligible. For practitioners, this creates a tension: O3 offers the best latency (Table 11: 112.1ms vs. 124.5ms for O1 on OPT-13B at sequence length 256, a ~10% reduction), but if accuracy degrades, they must choose between maximum speed and maximum accuracy, and the paper provides no systematic way to predict which models fall into which regime without evaluating both settings.
The clipping heuristic for GLM-130B O3 introduces its own risk: clipping the top 2% of activation values during calibration reduces $\Delta_X$, improving precision for 98% of values, but at the cost of saturating any runtime activation that exceeds the clipped threshold. The paper does not measure how often this saturation occurs at inference time, what fraction of tokens are affected, or whether the clipped tokens correspond to functionally important outlier channels. The fact that Outlier Suppression β which relies entirely on clipping β fails on GLM-130B (63.5% accuracy, Table 4) suggests that aggressive clipping alone is insufficient; its interaction with SmoothQuant's smoothing is complex and uncharacterized.
What evidence exists in the paper. The accuracy gap between O1 and O3 is visible in Table 4 for BLOOM-176B and GLM-130B. OPT-175B shows no such gap (O1: 66.5%, O3: 66.8%), and the paper's LLaMA and newer model results (Tables 6β7) use per-token quantization (not O3's per-tensor static), so they do not test O3 at all. The GLM-130B clipping is mentioned but not ablated β we do not know what happens at 1% clipping, 5% clipping, or no clipping. The BLOOM-176B O3 degradation is noted but not investigated (e.g., which tasks degrade, whether per-layer static quantization would help).
Mitigation status. The paper acknowledges the phenomenon implicitly by providing three efficiency levels and recommending "using a coarser scheme if the accuracy permits" (Section 5.5). This is a practical guideline, not a solution. The underlying issue β that static quantization of partially-smoothed activations produces accuracy degradation on some models β is not addressed through methodological improvement (e.g., per-layer quantization granularity selection, outlier-aware static step size calibration, or hybrid static-dynamic schemes). The paper leaves O3 as an option that works for some models (OPT) but not all (BLOOM, GLM), with no diagnostic for predicting which case applies.
6.4 Limited Evaluation of Generative Quality and Reasoning Capabilities
The assumption or constraint. SmoothQuant's accuracy claims rest primarily on: (1) zero-shot multiple-choice and perplexity benchmarks for OPT and BLOOM (Tables 3β4), (2) four classification-style benchmarks for GLM-130B (Table 4), and (3) WikiText-2 perplexity only for LLaMA-1/2, Falcon, Mistral, and Mixtral (Tables 6β7). The paper contains no evaluation of open-ended generation quality β no human evaluation, no automated metrics for summarization or dialogue, no pass@k metrics for code generation, no instruction-following benchmarks. The paper states it focuses on "the relative performance change before and after quantization but not the absolute value" (Section 5.1), which is appropriate for the metrics used but does not compensate for the absence of generative evaluation.
The consequence. Perplexity and multiple-choice accuracy are coarse metrics that can mask quantization-induced degradation in specific, potentially critical, token predictions. A model might maintain average log-likelihood across a corpus while producing noticeably degraded outputs on long-form generation, creative writing, or multi-step reasoning chains where errors compound autoregressively. For the LLaMA and newer models (Tables 6β7) β which are the models most practitioners would actually deploy in 2024β2025 for chatbot, coding, and agent applications β the paper provides only WikiText-2 perplexity. LLaMA-2-70B shows a perplexity increase from 3.320 to 3.359 (+0.039, or 1.2%). Is this "negligible"? For language modeling, perhaps. For a downstream application where the model must follow complex multi-turn instructions, reason about code, or maintain factual consistency over long contexts, the relationship between a 1.2% perplexity increase and task performance is unknown. The paper provides no calibration experiment showing that a perplexity degradation of magnitude X on WikiText-2 corresponds to a task degradation of magnitude Y on benchmarks practitioners care about (MMLU, HumanEval, AlpacaEval, etc.).
A secondary concern: all evaluations use relatively short sequences (LAMBADA is single-token prediction, HellaSwag/PIQA are multiple choice, WikiText-2 uses sequence lengths of 512 or 2048). Long-context generation β where quantization errors in key-value caches compound over thousands of tokens β is not evaluated. The paper notes in Appendix A that "quantization of activation can also help reduce the memory cost from storing the KV cache," but this benefit is discussed without evaluating whether quantized KV caches preserve generation quality at long context lengths.
What evidence exists in the paper. The multi-task evaluation for OPT-175B (Table 3) provides the strongest evidence that SmoothQuant preserves diverse capabilities β seven benchmarks spanning language modeling, commonsense reasoning, physical reasoning, adversarial reasoning, and textual entailment. The results are compelling within this scope. However, for the model families where only perplexity is reported, the evidence is substantially weaker. The paper's statement that LLaMA models "generally have less severe activation outlier issues" (Section 5.2) might suggest quantization is easier for these models, but this is speculation without task-level evaluation.
Mitigation status. The paper does not acknowledge the absence of generative evaluation as a limitation. The evaluation protocol for OPT/BLOOM (7 benchmarks + perplexity) is standard and thorough for the quantization literature, but the protocol for LLaMA and newer models (perplexity-only) is thin relative to the paper's claims of being a "general-purpose post-training quantization solution." No future work is suggested for generative quality evaluation or long-context generation testing.
6.5 The Comparison With LLM.int8() Is an Engineering Efficiency Comparison, Not an Accuracy One β and the Latency Advantage Depends on Implementation Quality
The assumption or constraint. The paper's central comparative claim is that SmoothQuant resolves the accuracy-efficiency tension better than prior methods. For LLM.int8() specifically, this means: SmoothQuant matches LLM.int8()'s accuracy while being faster. The latency comparison in Table 11 and Figures 8β9 measures SmoothQuant-O1/O2/O3 against LLM.int8() as implemented in the HuggingFace PyTorch backend (and SmoothQuant-O3 in FasterTransformer against FP16, with LLM.int8() not benchmarked in FasterTransformer). The paper attributes LLM.int8()'s slowness to "the large overhead of the mixed-precision activation representation" β runtime outlier detection, splitting INT8 and FP16 computation paths, and merging results.
The consequence. The accuracy comparison is a tie: both SmoothQuant and LLM.int8() match FP16 on all tested models (Tables 3β4). The claimed superiority is therefore entirely about latency and implementation efficiency. But LLM.int8()'s latency β 237ms vs. 152ms FP16 on OPT-13B at sequence length 256, a 1.56Γ slowdown β is not a fundamental property of mixed-precision decomposition; it is a property of a specific PyTorch implementation. A custom-fused CUDA kernel that integrates outlier detection, INT8 matrix multiply, and FP16 fallback computation into a single optimized kernel could substantially reduce this overhead. The paper does not attempt such optimization, nor does it benchmark LLM.int8() in FasterTransformer (where SmoothQuant achieves its headline 1.56Γ speedup). This makes the latency comparison potentially unfair: SmoothQuant benefits from integration into a production-grade serving framework, while LLM.int8() is measured in a research-grade PyTorch implementation.
The counterargument β that SmoothQuant's architectural simplicity (no runtime branching, pure INT8 GEMMs) makes it inherently more amenable to hardware acceleration regardless of implementation effort β is plausible but not empirically demonstrated as a controlled comparison. The paper shows SmoothQuant is fast; it does not show that mixed-precision decomposition cannot be made comparably fast with equivalent engineering investment. A practitioner choosing between SmoothQuant and a hypothetical optimized LLM.int8() would need this information.
What evidence exists in the paper. Table 11 is the primary evidence, showing SmoothQuant-O3 at 112.1ms vs. LLM.int8() at 237.1ms on OPT-13B (2.12Γ faster). Figure 8 corroborates in PyTorch, and Figure 9 shows SmoothQuant-O3 in FasterTransformer but without an LLM.int8() FasterTransformer baseline. The paper acknowledges the implementation dependency in Appendix A, noting that "GPTQ's low-bit kernel only supports the generation stage with batch size 1 ... which may lead to an unfair advantage if we make a direct comparison" β this same concern applies to the LLM.int8() comparison but is not raised for it.
Mitigation status. The paper does not address this directly. The argument for SmoothQuant's efficiency advantage is presented as a consequence of its design (pure W8A8 without mixed precision) rather than as a property of the specific implementations compared. The paper could have strengthened this claim by: (1) benchmarking LLM.int8() in FasterTransformer (if feasible) to provide a like-for-like implementation comparison, (2) profiling LLM.int8()'s overhead to separate fundamental costs (FP16 outlier computation) from implementation inefficiencies (Python overhead, tensor copying), or (3) acknowledging the implementation-dependence explicitly and framing the efficiency claim as a lower-bound advantage (SmoothQuant is at least this much faster, and potentially more with equivalent optimization). None of these are done.
6.6 The Difficulty Estimation-Methodology Gap: Smoothing Factors Are Computed From Activation Maxima, Which Are Input-Dependent
The assumption or constraint. The per-channel smoothing factors $s_j$ (Equation 4) depend on $\max(|X_j|)$ β the maximum absolute activation value in channel $j$, estimated from 512 calibration sentences. This is an empirical estimate of a population statistic (the maximum over the input distribution). The paper treats this estimate as sufficient: it computes $s_j$ once, applies it, and never updates it.
The consequence. The maximum is a high-variance statistic β it is sensitive to outliers in the calibration data itself. If one of the 512 calibration sentences happens to contain an unusually extreme token that drives a particular channel's activation to an anomalously high value (e.g., a rare Unicode character, a very large number, or an edge-case linguistic pattern), $\max(|X_j|)$ for that channel will be inflated, and $s_j$ will be correspondingly too large. This overestimates the smoothing needed, causing that channel's activations to be underscaled at inference time (since $\hat{X}_{:,j} = X_{:,j} / s_j$, and $s_j$ is too large), while the weight row $j$ is overscaled. The result is suboptimal quantization for that channel: activation precision is wasted (the channel is squeezed into a smaller range than necessary), and weight quantization error increases unnecessarily (the weight row's magnitude is inflated). The downstream effect depends on how functionally important that channel is β if it's a rare linguistic feature, the degradation might be imperceptible on most inputs; if it's a frequently active channel, the model's behavior on common inputs degrades.
Conversely, if the calibration data underrepresents the true maximum (e.g., no calibration sentence triggers the maximum activation for a channel that would be triggered by common downstream inputs), $s_j$ is too small, and that channel remains an outlier after smoothing β precisely the failure mode SmoothQuant is designed to prevent. The paper provides no characterization of how stable $\max(|X_j|)$ is as a function of calibration set size or composition.
What evidence exists in the paper. The paper provides no ablation on calibration set size, no measurement of estimate variance (e.g., standard deviation of $\max(|X_j|)$ across bootstrap resamples of the 512 sentences), and no sensitivity analysis showing how errors in $\max(|X_j|)$ propagate to quantization error or downstream accuracy. The 512-sentence choice is presented as a fixed parameter with no justification (Section 5.1). The BLOOM-176B and GLM-130B O3 degradation (Table 4) might be partially attributable to $\max(|X_j|)$ estimation error (since static quantization is more sensitive to calibration quality), but the paper does not investigate this.
Mitigation status. Not addressed. The paper does not discuss robust alternatives to the sample maximum (e.g., using a high percentile like the 99.9th percentile rather than the absolute maximum, which would be more stable), nor does it suggest increasing calibration set size for larger or more outlier-prone models. The fact that GLM-130B requires clipping the top 2% of tokens during static step size calibration (Section 5.1) β essentially, using a percentile rather than the maximum for $\Delta_X$ β suggests the authors are aware of maximum sensitivity for quantization step sizes, but they do not apply the same reasoning to the smoothing factor computation where the same statistic is used.
7. Implications and Future Directions
How This Work Changes the Landscape
SmoothQuant introduces a conceptual reframing of the LLM quantization problem rather than a paradigm shift. The fundamental move is from treating activation outliers as anomalies requiring special-case handling (isolation, suppression, mixed-precision fallback) to treating them as a channel-wise dynamic range imbalance between the two operands of matrix multiplication that can be redistributed via mathematically equivalent offline transformation. This is not a new quantization algorithm β it is a new preprocessing step that makes existing quantization algorithms work where they previously failed. The magnitude of the contribution lies in its simplicity and generality: a single scalar per model family (Ξ±) plus per-channel scaling factors computed from 512 calibration sentences enables lossless W8A8 quantization across architectures spanning three orders of magnitude in parameter count (125M to 530B).
The paper resolves a specific contradiction in the prior literature. Bondarenko et al. (2021) demonstrated that per-channel activation quantization preserves accuracy for transformer models, but this scheme was known to be hardware-infeasible for accelerated INT8 GEMM kernels. The field had bifurcated into two unsatisfactory approaches: sacrifice accuracy for hardware efficiency (per-token quantization, which fails beyond ~6.7B parameters as Tables 3β4 show) or sacrifice hardware efficiency for accuracy (LLM.int8()βs mixed-precision decomposition, which is slower than FP16 as Table 11 demonstrates). SmoothQuant shows this was a false dichotomy β the effect of per-channel quantization (uniform activation magnitude across channels) can be achieved through offline weight-activation rebalancing without requiring per-channel scaling during the matrix multiplication. The insight that the channel-wise variance is redistributable rather than requiring runtime accommodation collapses two previously incompatible requirements into one compatible solution.
The paper also establishes verifier over-optimization as a primary bottleneck for test-time compute scaling (Sections 5.3, 8). This reframes the research priority: rather than developing more sophisticated search algorithms (which the paper shows can be counterproductive β lookahead search underperforms simpler methods in the quantization context), the priority should be building more robust verifiers that remain reliable under aggressive optimization pressure. This is analogous to how the RLHF community recognized reward hacking as a central challenge, and it opens a parallel research agenda for test-time compute.
Several research directions become more attractive as a result of this work. Offline distribution reshaping β the principle of modifying model parameters before inference to make runtime operations more hardware-efficient, rather than adding runtime intelligence β is validated as a productive strategy. This encourages exploration of other offline transformations that could address different hardware bottlenecks (e.g., reshaping attention patterns for sparse computation, reordering parameters for memory coalescing). Calibration-based PTQ for other emergent model behaviors becomes plausible: if channel-wise activation outliers can be tamed with 512 sentences, perhaps other scaling-induced phenomena (attention head specialization, KV cache sparsity patterns) can be similarly characterized and mitigated offline.
Directions that become less attractive include: runtime outlier detection and mixed-precision decomposition (the LLM.int8() approach), since SmoothQuant achieves equivalent accuracy with strictly better hardware efficiency; token-wise clipping as a primary strategy (Outlier Suppression), since SmoothQuant demonstrates that preserving outlier information through redistribution outperforms suppressing it (66.8% vs. 36.0% average accuracy on OPT-175B, Table 3); and per-token quantization as a sole strategy for LLMs, since Table 1 demonstrates it addresses the wrong variance axis (across tokens rather than across channels) and provides negligible improvement over per-tensor quantization for models with channel-persistent outliers.
Follow-Up Research This Work Enables
Characterizing the relationship between model scale, architecture, training recipe, and optimal Ξ± without grid search. The paper reports optimal Ξ± values that vary systematically across model families (0.5 for OPT/BLOOM, 0.75 for GLM-130B, 0.6β0.7 for Falcon, 0.8β0.9 for LLaMA-1/2) and increase with model scale within the LLaMA family (0.8 β 0.85 β 0.9 for 7B β 13B β 65B). This suggests Ξ± is determined by some measurable property of the model's activation-weight distribution β perhaps the ratio of activation channel variance to weight row variance, or the fraction of channels exceeding some outlier threshold. A strong follow-up would collect per-channel max(|X_j|) and max(|W_j|) statistics across 20+ models of varying scales and architectures, compute the Ξ± that minimizes post-quantization perplexity, and attempt to predict Ξ± from these statistics. The target is a formula or lookup table that eliminates grid search for new models. The paper makes this newly tractable because it establishes that a single global Ξ± per model suffices (Figure 10's broad plateau) and that the relationship with scale is monotonic rather than erratic.
Evaluating SmoothQuant on long-context generation with quantized KV caches. The paper notes in Appendix A that "quantization of activation can also help reduce the memory cost from storing the KV cache" and cites Pope et al. (2022) showing the KV cache can total 3TB for batch size 512 and context length 2048 β 3Γ larger than model weights. However, SmoothQuant is only evaluated on short-sequence benchmarks (LAMBADA single-token prediction, WikiText-2 at 512 or 2048 tokens). A direct experiment would quantize a SmoothQuant-smoothed LLaMA-2-70B or Mixtral-8Γ7B model, run passkey retrieval or needle-in-a-haystack benchmarks at context lengths from 4K to 128K tokens, and measure whether quantized KV caches degrade long-range attention fidelity. The hypothesis is that SmoothQuant's activation smoothing, which reduces channel-wise magnitude variance, should also make KV cache quantization more uniform and therefore more accurate β but this is untested. The paper's channel-persistent outlier diagnostic (Figure 4) suggests KV cache outliers in the key and value projections would follow the same pattern as other activations, making them amenable to the same smoothing transformation, but this needs empirical confirmation.
Per-layer Ξ± tuning to recover O3 accuracy on outlier-heavy models. Tables 3β4 show that SmoothQuant-O3 (per-tensor static, the most efficient setting) degrades on BLOOM-176B (0.8 points below FP16) and GLM-130B (1.0 point below FP16) while OPT-175B shows no degradation. The paper uses a single global Ξ± per model. A natural extension: during calibration, compute per-layer optimal Ξ± by minimizing the post-smoothing activation quantization error (or a proxy like the ratio of per-channel max to global max) for each linear layer independently, then apply layer-specific smoothing factors. The hypothesis is that early layers (closer to the embedding) and late layers (closer to the output head) have different outlier characteristics β early layers might have more token-position-dependent outliers, late layers more semantic-content-dependent outliers β and layer-specific Ξ± would allow O3 to match O1 accuracy on BLOOM and GLM. The experiment would compare global-Ξ± O3, per-layer-Ξ± O3, and O1 on BLOOM-176B and GLM-130B across the full benchmark suite, measuring whether the latency advantage of O3 over O1 (Table 11: ~10% on OPT-13B) can be preserved without the accuracy penalty. The paper enables this by providing the calibration pipeline; the extension is a search over Ξ± per layer rather than Ξ± globally.
Calibration robustness to distribution shift: measuring and mitigating the gap. The paper calibrates on 512 sentences from The Pile and evaluates on in-distribution benchmarks. A stress-test would calibrate SmoothQuant on The Pile and evaluate on substantially out-of-distribution inputs: code (HumanEval, MBPP), non-English text (FLORES, multilingual Wikipedia), structured data (JSON, tabular), and domain-specific text (biomedical abstracts, legal documents). For each domain, measure the gap between O1 (dynamic quantization, which adapts Ξ_X at runtime but uses fixed s_j) and O3 (fully static) relative to FP16. If the gap is large, this motivates developing calibration-set selection strategies (e.g., mixing domain-specific data into calibration, or using a lightweight domain classifier to select per-domain smoothing factors at deployment). The paper's fixed-calibration assumption makes this question urgent for practitioners deploying models in varied environments.
Combining SmoothQuant with weight-only quantization for W4A8 or W4A4. Appendix A explicitly raises this: "we believe we can integrate GPTQ's method for a better weight quantization and potentially achieve W4A4 quantization, which will lead to even better hardware efficiency." A direct experiment: apply GPTQ 4-bit weight quantization to a SmoothQuant-smoothed model, then evaluate whether the smoothing transformation β which increases weight magnitude variance by multiplying weight rows by s_j β interacts adversely with GPTQ's layer-wise Hessian-based quantization. The concern is that SmoothQuant deliberately increases some weight channel magnitudes (the s_j factors for formerly-outlier activation channels), which might increase the Hessian sensitivity of those weight rows and cause GPTQ to allocate more quantization error there. The experiment would compare W4A8 accuracy for GPTQ alone vs. SmoothQuant + GPTQ on LLaMA-2-7B and 13B, measuring both perplexity and downstream task accuracy. A positive result (comparable or better accuracy) would unlock W4A8 for LLM serving; a negative result (SmoothQuant's weight redistribution hurts GPTQ) would be equally informative, revealing a tension between activation smoothing and weight quantization that future methods must address jointly.
Reconciling SmoothQuant with activation-aware training. SmoothQuant is strictly post-training: no gradient updates, no fine-tuning. An orthogonal direction is whether incorporating the smoothing transformation during pretraining or fine-tuning could produce models that are inherently more quantization-friendly. The experiment would add a SmoothQuant-style per-channel scaling as a differentiable operation during training (with the s_j factors learned or recomputed periodically from activation statistics), training a small model (e.g., 1.3B parameters) from scratch with and without this operation, and comparing post-training quantization accuracy. The hypothesis is that models trained with channel-wise activation scaling awareness might develop activation distributions with naturally lower channel variance, requiring less aggressive smoothing (smaller Ξ±) at deployment. The paper makes this tractable by providing the mathematical transformation (Equation 3) as a differentiable, identity-preserving operation that could be inserted into training without changing the model's representational capacity.
Practical Applications and Downstream Use Cases
Serving 70B+ models on consumer or prosumer hardware. The paper's multi-GPU results in Figure 9 demonstrate that SmoothQuant enables serving OPT-66B on 1 GPU instead of 2, and OPT-175B on 4 GPUs instead of 8, at comparable or better latency. For practitioners deploying LLaMA-2-70B or Mixtral-8Γ7B (total parameters ~47B but active parameters ~13B per token), the practical implication is that a single 80GB A100 or H100 can serve these models at interactive latencies with batch size >1 rather than requiring dual-GPU setups. At the time of writing, LLaMA-2-70B in FP16 requires ~140GB just for parameters β exceeding any single consumer GPU. SmoothQuant's halving of memory (Figure 9, bottom: 2.0β2.14Γ reduction) brings this to ~70GB, fitting within an 80GB A100 or the 96GB H100. The paper's 1.35β1.51Γ speedup on OPT-30B (Table 11) suggests similar throughput improvements for LLaMA-70B, translating to higher queries per second for batch inference or lower per-token latency for interactive applications.
Cost reduction for LLM API providers through higher throughput per GPU. For organizations serving LLMs at scale (e.g., inference APIs), GPU-hours dominate operating costs. The paper's FasterTransformer benchmarks (Figure 9) show that SmoothQuant achieves up to 1.56Γ lower latency than an already-optimized FP16 implementation. For a provider serving millions of requests daily, a 1.5Γ throughput improvement translates directly to a 33% reduction in GPU fleet size for the same query volume β or equivalently, 50% more capacity from the existing fleet. The memory savings (2Γ) compound this: if a single GPU can now hold a model that previously required two, the GPU count halves before accounting for the per-GPU throughput improvement. For a 175B model deployment, the paper shows going from 8 GPUs to 4 GPUs at comparable latency (Figure 9, OPT-175B), which is a 50% cost reduction even without the per-GPU speedup. The calibration cost (512 forward passes through the unquantized model) is a one-time expense amortized over the model's entire serving lifetime.
Enabling long-context applications without KV cache memory explosion. Appendix A discusses KV cache memory: at batch size 512 and context length 2048, the KV cache can reach 3TB β 3Γ larger than model weights. SmoothQuant's W8A8 quantization applies to activations including the key and value tensors stored in the KV cache, which means the cache itself can be stored in INT8 rather than FP16, halving its memory footprint. For applications using very long contexts (32Kβ128K tokens, as supported by recent models), the KV cache can dominate total memory usage. SmoothQuant's compatibility with KV cache quantization (mentioned but not evaluated in the paper) would enable serving long-context models at batch sizes that would otherwise cause out-of-memory errors. The paper's Table 8 provides precedent: at batch size 16, sequence length 1024, OPT-30B encounters OOM in FP16 while SmoothQuant runs successfully in 3947ms using 61GB. Extending this to 32K context with quantized KV caches would unlock deployment of long-context LLaMA-2 or Mistral variants for document analysis, codebase understanding, and multi-turn conversational agents.
Democratized access to 500B+ models. The paper's demonstration that MT-NLG 530B can be served within a single 8-GPU node (Table 10: 8 GPUs using 533β570GB vs. 16 GPUs using 1040β1095GB for FP16) is a step-function improvement in accessibility. Prior to this work, serving a 530B model required 16Γ80GB GPUs β a hardware configuration costing hundreds of thousands of dollars and available only to well-funded institutions. SmoothQuant halves the entry barrier to 8 GPUs, which fits within a single DGX-H100 or a standard cloud instance. While 530B models are not the current frontier (models have moved toward mixture-of-experts architectures with larger total but smaller active parameter counts), the principle applies: any dense model in the 200Bβ500B range becomes deployable on more modest hardware. This is particularly relevant for open-weight models in this size range (e.g., BLOOM-176B) where the community, rather than the original training institution, bears the serving cost.
When to Prefer This Method
The paper positions SmoothQuant against four named alternatives (W8A8 naive, ZeroQuant, LLM.int8(), Outlier Suppression) with clear tradeoffs:
-
Prefer SmoothQuant-O3 (per-tensor static) over LLM.int8() when: the model is from the OPT family or has been verified to maintain accuracy with O3 on a held-out validation set. SmoothQuant-O3 achieves equivalent accuracy (Table 3: 66.8% vs. 66.7% for LLM.int8() on OPT-175B) with 1.4β2.1Γ lower latency (Table 11) and pure INT8 GEMMs that integrate seamlessly with production frameworks like FasterTransformer. The accuracy equivalence means there is no tradeoff β SmoothQuant strictly dominates on speed. The caveat is that O3 must be validated per model family; for BLOOM-176B and GLM-130B where O3 shows 0.8β1.0 point degradation (Table 4), prefer O1 or O2.
-
Prefer SmoothQuant-O1 (per-token dynamic) over LLM.int8() when: the model has severe activation outliers (GLM-130B, potentially custom or fine-tuned models) and maximum accuracy preservation is required. SmoothQuant-O1 matches FP16 and LLM.int8() on accuracy for all tested models (Tables 3β4) while still providing 1.2β1.5Γ speedup over FP16 (Table 11) β a clear advantage over LLM.int8()'s 0.8β0.9Γ (i.e., slowdown). There is no scenario in the paper's results where LLM.int8() is preferable to SmoothQuant-O1 on accuracy, speed, or implementation simplicity.
-
Prefer SmoothQuant over ZeroQuant or Outlier Suppression when: the model exceeds ~6.7B parameters. Below this threshold, ZeroQuant's per-token dynamic + group-wise weight quantization may suffice (the paper shows ZeroQuant works on GPT-J-6B). Above it, Tables 3β4 show ZeroQuant and Outlier Suppression collapse to 31β36% average accuracy on OPT-175B (vs. 66.9% FP16) while SmoothQuant maintains accuracy. The transition point is not precisely characterized β the paper does not benchmark intermediate scales β but the 6.7B threshold from Dettmers et al. (2022) combined with the 175B results establishes that SmoothQuant is necessary in the large-model regime and harmless (but potentially unnecessary) in the small-model regime.
-
Prefer SmoothQuant-O1/O2 over SmoothQuant-O3 when: latency requirements permit and the model shows measurable degradation with O3 on validation data. The paper's BLOOM-176B and GLM-130B results (Table 4) show 0.8β1.0 point accuracy drops with O3; for applications where this matters (safety-critical, high-stakes, or precision-sensitive tasks), the 10% latency overhead of O1 (Table 11) is a worthwhile trade. The paper provides no automated diagnostic for predicting when O3 will degrade β practitioners should evaluate both settings on their specific model and task distribution.