@@ -221,13 +221,6 @@ def update_features_impl(op: OpKey):
221221@update_features (
222222 [
223223 operator .getitem ,
224- # Quantization related ops will be fused via graph passes
225- exir_ops .edge .quantized_decomposed .quantize_per_channel .default ,
226- exir_ops .edge .quantized_decomposed .quantize_per_tensor .default ,
227- exir_ops .edge .quantized_decomposed .quantize_per_tensor .tensor ,
228- exir_ops .edge .quantized_decomposed .dequantize_per_tensor .default ,
229- exir_ops .edge .quantized_decomposed .dequantize_per_tensor .tensor ,
230- exir_ops .edge .quantized_decomposed .dequantize_per_channel .default ,
231224 # Symbolic integer ops
232225 torch .ops .aten .sym_size .int ,
233226 operator .add ,
@@ -250,6 +243,35 @@ def register_ephemeral_op(features: OpFeatures):
250243 return features
251244
252245
246+ @update_features (
247+ [
248+ exir_ops .edge .quantized_decomposed .quantize_per_channel .default ,
249+ exir_ops .edge .quantized_decomposed .quantize_per_tensor .default ,
250+ exir_ops .edge .quantized_decomposed .quantize_per_tensor .tensor ,
251+ exir_ops .edge .quantized_decomposed .dequantize_per_tensor .default ,
252+ exir_ops .edge .quantized_decomposed .dequantize_per_tensor .tensor ,
253+ exir_ops .edge .quantized_decomposed .dequantize_per_channel .default ,
254+ exir_ops .edge .quantized_decomposed .quantize_per_token .default ,
255+ exir_ops .edge .quantized_decomposed .dequantize_per_token .default ,
256+ exir_ops .edge .quantized_decomposed .choose_qparams .tensor ,
257+ exir_ops .edge .quantized_decomposed .choose_qparams_per_token_asymmetric .default ,
258+ ]
259+ )
260+ def register_quantization_op (features : OpFeatures ):
261+ # Quantization requires buffer storage and width packing for scales/zero_points
262+ # but we need to provide texture impl features for the partitioner to work properly
263+ features .texture_impl = TextureImplFeatures (
264+ uses_axis_map = True ,
265+ valid_packed_dims = {
266+ PackedDim .WIDTH ,
267+ },
268+ )
269+ features .buffer_impl = True
270+ features .resize_fn = True
271+ features .optimal_storage = VkStorageType .BUFFER
272+ return features
273+
274+
253275@update_features (
254276 [
255277 exir_ops .edge .aten .add .Tensor ,
0 commit comments