Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package python-compressed-tensors for 
openSUSE:Factory checked in at 2026-10-30 18:17:33
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-compressed-tensors (Old)
 and      /work/SRC/openSUSE:Factory/.python-compressed-tensors.new.1255 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "python-compressed-tensors"

Fri Oct 30 18:17:33 2026 rev:6 rq:1393853 version:0.20.1

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/python-compressed-tensors/python-compressed-tensors.changes
      2026-10-28 17:47:45.016083139 +0100
+++ 
/work/SRC/openSUSE:Factory/.python-compressed-tensors.new.1255/python-compressed-tensors.changes
    2026-10-30 18:23:35.902644909 +0100
@@ -1,0 +2,8 @@
+Fri Oct 30 07:58:20 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to 0.20.1:
+  * Keep block-quantized compressed weights contiguous
+  * Skip meta-device check for non-persistent buffers in
+    from_accelerate
+
+-------------------------------------------------------------------

Old:
----
  compressed_tensors-0.20.0.tar.gz

New:
----
  compressed_tensors-0.20.1.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ python-compressed-tensors.spec ++++++
--- /var/tmp/diff_new_pack.CkpcZW/_old  2026-10-30 18:23:36.800682502 +0100
+++ /var/tmp/diff_new_pack.CkpcZW/_new  2026-10-30 18:23:36.805682712 +0100
@@ -18,7 +18,7 @@
 
 %{?sle15_python_module_pythons}
 Name:           python-compressed-tensors
-Version:        0.20.0
+Version:        0.20.1
 Release:        0
 Summary:        Library for utilization of compressed safetensors of neural 
network models
 License:        Apache-2.0

++++++ compressed_tensors-0.20.0.tar.gz -> compressed_tensors-0.20.1.tar.gz 
++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/compressed_tensors-0.20.0/PKG-INFO 
new/compressed_tensors-0.20.1/PKG-INFO
--- old/compressed_tensors-0.20.0/PKG-INFO      2026-10-26 22:06:02.586963000 
+0100
+++ new/compressed_tensors-0.20.1/PKG-INFO      2026-10-28 17:04:33.331373200 
+0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: compressed-tensors
-Version: 0.20.0
+Version: 0.20.1
 Summary: Library for utilization of compressed safetensors of neural network 
models
 Home-page: https://github.com/vllm-project/compressed-tensors
 Author: The vLLM Project
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compressed_tensors-0.20.0/src/compressed_tensors/compressors/naive_quantized/base.py
 
new/compressed_tensors-0.20.1/src/compressed_tensors/compressors/naive_quantized/base.py
--- 
old/compressed_tensors-0.20.0/src/compressed_tensors/compressors/naive_quantized/base.py
    2026-10-26 22:05:56.679001000 +0100
+++ 
new/compressed_tensors-0.20.1/src/compressed_tensors/compressors/naive_quantized/base.py
    2026-10-28 17:04:24.061476000 +0100
@@ -80,11 +80,15 @@
             dtype=weights.pytorch_dtype(),
         )
 
-        # Truncate back to original shape if padding was added
+        # Truncate back to original shape if padding was added. The slice is
+        # a view into the padded buffer, so it is non-contiguous whenever the
+        # columns were padded; copy it so that the compressed weight can be
+        # serialized (e.g. by safetensors, which rejects non-contiguous
+        # tensors)
         if quantized_weight.shape != original_weight_shape:
             quantized_weight = quantized_weight[
                 tuple([slice(v) for v in original_weight_shape])
-            ]
+            ].contiguous()
 
         state_dict["weight"] = quantized_weight
         state_dict = cls._remove_symmetric_zp(state_dict, scheme)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compressed_tensors-0.20.0/src/compressed_tensors/offload/convert/from_accelerate.py
 
new/compressed_tensors-0.20.1/src/compressed_tensors/offload/convert/from_accelerate.py
--- 
old/compressed_tensors-0.20.0/src/compressed_tensors/offload/convert/from_accelerate.py
     2026-10-26 22:05:56.682001000 +0100
+++ 
new/compressed_tensors-0.20.1/src/compressed_tensors/offload/convert/from_accelerate.py
     2026-10-28 17:04:24.065476000 +0100
@@ -163,7 +163,13 @@
 
         # Not offloaded, likely a buffer
         else:
-            if tensor.device.type == "meta":
+            if (
+                tensor.device.type == "meta"
+                # non-persistent buffers are excluded from state dicts, so they
+                # can never have a checkpoint key or an offload record; they
+                # are also never serialized, so a meta value is harmless
+                and local_name not in module._non_persistent_buffers_set
+            ):
                 raise RuntimeError(
                     f"Parameter/buffer `{full_name}` is on the meta device and 
has "
                     "no corresponding entry in accelerate's offload map, 
meaning it "
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compressed_tensors-0.20.0/src/compressed_tensors/version.py 
new/compressed_tensors-0.20.1/src/compressed_tensors/version.py
--- old/compressed_tensors-0.20.0/src/compressed_tensors/version.py     
2026-10-26 22:06:02.487963700 +0100
+++ new/compressed_tensors-0.20.1/src/compressed_tensors/version.py     
2026-10-28 17:04:33.225374500 +0100
@@ -17,5 +17,5 @@
 __version_tuple__: VERSION_TUPLE
 version_tuple: VERSION_TUPLE
 
-__version__ = version = '0.20.0'
-__version_tuple__ = version_tuple = (0, 20, 0)
+__version__ = version = '0.20.1'
+__version_tuple__ = version_tuple = (0, 20, 1)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compressed_tensors-0.20.0/src/compressed_tensors.egg-info/PKG-INFO 
new/compressed_tensors-0.20.1/src/compressed_tensors.egg-info/PKG-INFO
--- old/compressed_tensors-0.20.0/src/compressed_tensors.egg-info/PKG-INFO      
2026-10-26 22:06:02.497963400 +0100
+++ new/compressed_tensors-0.20.1/src/compressed_tensors.egg-info/PKG-INFO      
2026-10-28 17:04:33.236374400 +0100
@@ -1,6 +1,6 @@
 Metadata-Version: 2.4
 Name: compressed-tensors
-Version: 0.20.0
+Version: 0.20.1
 Summary: Library for utilization of compressed safetensors of neural network 
models
 Home-page: https://github.com/vllm-project/compressed-tensors
 Author: The vLLM Project
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compressed_tensors-0.20.0/tests/test_compressors/test_fp8_quant.py 
new/compressed_tensors-0.20.1/tests/test_compressors/test_fp8_quant.py
--- old/compressed_tensors-0.20.0/tests/test_compressors/test_fp8_quant.py      
2026-10-26 22:05:56.689001000 +0100
+++ new/compressed_tensors-0.20.1/tests/test_compressors/test_fp8_quant.py      
2026-10-28 17:04:24.072476000 +0100
@@ -16,6 +16,7 @@
     apply_quantization_config,
 )
 from compressed_tensors.quantization.lifecycle.forward import fake_quantize
+from safetensors.torch import save_file
 from torch.nn.modules import Linear, Sequential
 
 
@@ -131,9 +132,14 @@
         (300, 400, 128, 128),
         (256, 300, 128, 128),
         (300, 256, 128, 128),
+        # gemma-4-26B-A4B dense shared-expert mlp.down_proj: column dim not
+        # divisible by the block width
+        (2816, 2112, 128, 128),
     ],
 )
-def test_block_quant_compression_padding(rows, cols, block_height, 
block_width):
+def test_block_quant_compression_padding(
+    rows, cols, block_height, block_width, tmp_path
+):
     """
     Block quantization compresses weights with non-divisible dimensions without
     changing the original shape.
@@ -164,3 +170,10 @@
         rows,
         cols,
     ), "Compressed weight shape should match original"
+
+    # Truncating the padded weight must not leave behind a view: column
+    # padding yields a non-contiguous slice, which safetensors refuses to save
+    assert compressed[
+        "weight"
+    ].is_contiguous(), "Compressed weight should be contiguous"
+    save_file(compressed, str(tmp_path / "compressed.safetensors"))
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/compressed_tensors-0.20.0/tests/test_offload/convert/test_from_accelerate.py
 
new/compressed_tensors-0.20.1/tests/test_offload/convert/test_from_accelerate.py
--- 
old/compressed_tensors-0.20.0/tests/test_offload/convert/test_from_accelerate.py
    2026-10-26 22:05:56.692001000 +0100
+++ 
new/compressed_tensors-0.20.1/tests/test_offload/convert/test_from_accelerate.py
    2026-10-28 17:04:24.074476000 +0100
@@ -92,6 +92,48 @@
 
 @pytest.mark.unit
 @requires_gpu
[email protected]("ignore::UserWarning")
+def test_remove_accelerate_non_persistent_buffer_meta(accel_device, tmp_path):
+    # non-persistent buffers are excluded from state dicts, so they can never
+    # have a checkpoint key or an offload record. When such a buffer is left on
+    # the meta device (e.g. transformers' Gemma4TextScaledWordEmbedding.
+    # embed_scale under disk offloading), it should be passed through rather
+    # than raising, since it is never serialized anyway
+    from accelerate.big_modeling import dispatch_model
+
+    class ScaledEmbedding(torch.nn.Embedding):
+        def __init__(self, *args, **kwargs):
+            super().__init__(*args, **kwargs)
+            self.register_buffer("embed_scale", torch.tensor(2.0), 
persistent=False)
+
+    current_accelerator = torch.accelerator.current_accelerator()
+    offload_dir = tmp_path / "offload_dir"
+    os.mkdir(offload_dir)
+
+    embedding = ScaledEmbedding(10, 5)
+    assert "embed_scale" not in embedding.state_dict()  # non-persistent
+    model = torch.nn.Sequential(embedding)
+    dispatch_model(
+        model,
+        {"0": "disk", "fake_module": "cpu"},
+        main_device=current_accelerator,
+        force_hooks=True,
+        offload_dir=offload_dir,
+    )
+
+    # simulate the state the offload dispatch leaves behind for tensors with
+    # no offload record: the non-persistent buffer on the meta device
+    embedding.embed_scale = torch.empty((), device="meta")
+
+    onload_dev, offload_dev, _offload_dir = 
remove_accelerate_from_module(embedding)
+    assert onload_dev == accel_device
+    assert offload_dev == "disk"
+    assert _offload_dir == offload_dir
+    assert not hasattr(embedding, "_hf_hook")
+
+
[email protected]
+@requires_gpu
 def test_from_accelerate(accel_device, tmp_path):
     from accelerate.big_modeling import dispatch_model
 

Reply via email to