Fase 5: 21_quantize_nvfp4.py - compat shim para bug de import en llmcompressor 0.12.0

llmcompressor 0.12.0 (ultima version en PyPI) importa incondicionalmente
GraniteMoeParallelExperts al armar su registro interno de arquitecturas MoE
linearizables, incluso para modelos que no son GraniteMoe. transformers 5.14.1
renombro esa clase a GraniteMoeExperts, lo que rompia oneshot() para
cualquier modelo (incluido este Qwen3.5 MoE, que ni siquiera esta en ese
registro). Alias minimo antes de importar llmcompressor para que el import
no explote; nunca se usa en la practica ya que Qwen3.5 MoE no matchea esa
entrada del registro.
This commit is contained in:
2026-07-29 22:39:12 +00:00
parent 712097e26b
commit 1e3726a12f
+15 -3
View File
@@ -49,9 +49,21 @@ from datasets import Dataset
from safetensors import safe_open from safetensors import safe_open
from transformers import AutoProcessor, Qwen3_5MoeForConditionalGeneration from transformers import AutoProcessor, Qwen3_5MoeForConditionalGeneration
from compressed_tensors.utils import save_mtp_tensors_to_checkpoint # Compat shim: llmcompressor 0.12.0 (ultima version en PyPI) importa incondicionalmente
from llmcompressor import oneshot # GraniteMoeParallelExperts al armar su registro de arquitecturas MoE "linearizables"
from llmcompressor.modifiers.quantization import QuantizationModifier # (llmcompressor/modeling/moe/granitemoe.py), incluso para modelos que no son GraniteMoe
# (como este Qwen3.5 MoE). transformers 5.14.1 renombro esa clase a GraniteMoeExperts,
# rompiendo ese import y abortando oneshot() para CUALQUIER modelo. Como Qwen3.5 MoE no
# esta en ese registro (solo granitemoe/llama4), el alias nunca se usa realmente -- solo
# hace falta que el nombre exista para que el import no explote.
import transformers.models.granitemoe.modeling_granitemoe as _granitemoe_mod # noqa: E402
if not hasattr(_granitemoe_mod, "GraniteMoeParallelExperts"):
_granitemoe_mod.GraniteMoeParallelExperts = _granitemoe_mod.GraniteMoeExperts
from compressed_tensors.utils import save_mtp_tensors_to_checkpoint # noqa: E402
from llmcompressor import oneshot # noqa: E402
from llmcompressor.modifiers.quantization import QuantizationModifier # noqa: E402
REPO_ROOT = Path(__file__).resolve().parent.parent REPO_ROOT = Path(__file__).resolve().parent.parent
MODEL_PATH = Path(os.environ.get("MODEL_PATH", "/workspace/ft-models/Qwen3.6-35B-A3B-mcp-bf16")) MODEL_PATH = Path(os.environ.get("MODEL_PATH", "/workspace/ft-models/Qwen3.6-35B-A3B-mcp-bf16"))