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