compressed-tensors-nightly 0.8.1.20250110__py3-none-any.whl → 0.8.1.20250112__py3-none-any.whl

Sign up to get free protection for your applications and to get access to all the features.
@@ -310,7 +310,10 @@ class ModelCompressor:
310
310
  model_path = get_safetensors_folder(model_path)
311
311
  sparse_decompressed = False
312
312
 
313
- if self.sparsity_compressor is not None:
313
+ if (
314
+ self.sparsity_compressor is not None
315
+ and self.sparsity_config.format != CompressionFormat.dense.value
316
+ ):
314
317
  # Sparse decompression is applied on the model_path
315
318
  dense_gen = self.sparsity_compressor.decompress(model_path)
316
319
  self._replace_weights(dense_gen, model)
@@ -15,4 +15,5 @@
15
15
 
16
16
  from .base import *
17
17
  from .dense import *
18
+ from .sparse_24_bitmask import *
18
19
  from .sparse_bitmask import *
@@ -0,0 +1,238 @@
1
+ # Copyright (c) 2021 - present / Neuralmagic, Inc. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing,
10
+ # software distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from dataclasses import dataclass
16
+ from typing import Dict, List, Tuple, Union
17
+
18
+ import torch
19
+ from compressed_tensors.compressors.base import BaseCompressor
20
+ from compressed_tensors.compressors.sparse_compressors.base import BaseSparseCompressor
21
+ from compressed_tensors.config import CompressionFormat, SparsityStructure
22
+ from compressed_tensors.quantization import FP8_DTYPE
23
+ from compressed_tensors.utils import merge_names, pack_bitmasks, unpack_bitmasks
24
+ from torch import Tensor
25
+
26
+
27
+ __all__ = [
28
+ "Sparse24BitMaskCompressor",
29
+ "Sparse24BitMaskTensor",
30
+ "sparse24_bitmask_compress",
31
+ "sparse24_bitmask_decompress",
32
+ "get_24_bytemasks",
33
+ ]
34
+
35
+
36
+ @BaseCompressor.register(name=CompressionFormat.sparse_24_bitmask.value)
37
+ class Sparse24BitMaskCompressor(BaseSparseCompressor):
38
+ """
39
+ Compression for sparse models using bitmasks. Non-zero weights are stored in a 2d
40
+ values tensor, with their locations stored in a 2d bitmask
41
+ """
42
+
43
+ COMPRESSION_PARAM_NAMES = [
44
+ "shape",
45
+ "compressed",
46
+ "bitmask",
47
+ ]
48
+
49
+ def compress_weight(self, name, value):
50
+ bitmask_tensor = Sparse24BitMaskTensor.from_dense(
51
+ value, self.config.sparsity_structure
52
+ )
53
+ bitmask_dict = bitmask_tensor.dict(name_prefix=name, device="cpu")
54
+ return bitmask_dict
55
+
56
+ def decompress_weight(self, weight_data):
57
+ data = Sparse24BitMaskTensor.from_compressed_data(**weight_data)
58
+ decompressed = data.decompress()
59
+ return decompressed
60
+
61
+
62
+ @dataclass
63
+ class Sparse24BitMaskTensor:
64
+ """
65
+ Owns compressions and decompression for a single 2:4 sparse
66
+ bitmask compressed tensor.
67
+
68
+ :param shape: shape of dense tensor
69
+ :param compressed: 2d tensor of non-zero values
70
+ :param bitmask: 2d bitmask of non-zero values
71
+ """
72
+
73
+ shape: List[int]
74
+ compressed: Tensor
75
+ bitmask: Tensor
76
+
77
+ @staticmethod
78
+ def from_dense(
79
+ tensor: Tensor,
80
+ sparsity_structure: Union[SparsityStructure, str] = SparsityStructure.TWO_FOUR,
81
+ ) -> "Sparse24BitMaskTensor":
82
+ """
83
+ :param tensor: dense tensor to compress
84
+ :return: instantiated compressed tensor
85
+ """
86
+ shape = list(tensor.shape)
87
+ compressed, bitmask = sparse24_bitmask_compress(
88
+ tensor.cpu(), sparsity_structure=sparsity_structure
89
+ )
90
+ return Sparse24BitMaskTensor(
91
+ shape=shape,
92
+ compressed=compressed,
93
+ bitmask=bitmask,
94
+ )
95
+
96
+ @staticmethod
97
+ def from_compressed_data(
98
+ shape: Union[List[int], Tensor], compressed: Tensor, bitmask: Tensor
99
+ ) -> "Sparse24BitMaskTensor":
100
+ """
101
+ :param shape: shape of the dense tensor (can be a list or a tensor)
102
+ :param compressed: 2d tensor of non-zero values
103
+ :param bitmask: 2d bitmask of non-zero values
104
+ :return: instantiated Sparse24BitMaskTensor
105
+ """
106
+ if isinstance(shape, Tensor):
107
+ shape = shape.tolist()
108
+ return Sparse24BitMaskTensor(
109
+ shape=shape, compressed=compressed, bitmask=bitmask
110
+ )
111
+
112
+ def decompress(self) -> Tensor:
113
+ """
114
+ :return: reconstructed dense tensor
115
+ """
116
+ return sparse24_bitmask_decompress(self.compressed, self.bitmask, self.shape)
117
+
118
+ def curr_memory_size_bytes(self) -> int:
119
+ """
120
+ :return: size in bytes required to store compressed tensor on disk
121
+ """
122
+
123
+ def sizeof_tensor(a: Tensor) -> int:
124
+ return a.element_size() * a.nelement()
125
+
126
+ return sizeof_tensor(self.compressed) + sizeof_tensor(self.bitmask)
127
+
128
+ def dict(self, name_prefix: str, device: str = "cpu") -> Dict[str, Tensor]:
129
+ """
130
+ :param name_prefix: name of original tensor to store compressed weight as
131
+ :return: dict of compressed data for the stored weight
132
+ """
133
+ if name_prefix.endswith(".weight"):
134
+ name_prefix = name_prefix[: -len(".weight")]
135
+ return {
136
+ merge_names(name_prefix, "shape"): torch.tensor(
137
+ self.shape, device=device
138
+ ).reshape(-1, 1),
139
+ merge_names(name_prefix, "compressed"): self.compressed.to(device),
140
+ merge_names(name_prefix, "bitmask"): self.bitmask.to(device),
141
+ }
142
+
143
+ def __repr__(self) -> str:
144
+ return f"BitMaskTensor(shape={self.shape}, compressed=True)"
145
+
146
+
147
+ def sparse24_bitmask_compress(
148
+ tensor: Tensor,
149
+ sparsity_structure: Union[SparsityStructure, str] = SparsityStructure.TWO_FOUR,
150
+ ) -> Tuple[Tensor, Tensor, Tensor]:
151
+ """
152
+ Compresses a dense tensor using bitmask compression
153
+
154
+ :param tensor: dense 2D tensor to compress
155
+ :param sparsity_structure: structure of sparsity in the tensor, defaults
156
+ to unstructured, can also be set to `2:4`
157
+ :return: tuple of compressed data representing tensor
158
+ """
159
+ assert len(tensor.shape) == 2, "Only 2D tensors are supported"
160
+ assert (
161
+ SparsityStructure(sparsity_structure) == SparsityStructure.TWO_FOUR
162
+ ), "Only 2:4 sparsity is supported"
163
+
164
+ bytemasks = get_24_bytemasks(tensor=tensor)
165
+
166
+ if tensor.dtype == FP8_DTYPE:
167
+ # acces raw bytes of the tensor
168
+ tensor_view = tensor.view(torch.int8)
169
+ values = tensor_view[bytemasks]
170
+ values = values.view(FP8_DTYPE)
171
+ else:
172
+ values = tensor[bytemasks]
173
+
174
+ num_rows, num_cols = tensor.shape
175
+ compressed_values = values.reshape(num_rows, num_cols // 2)
176
+ bitmasks_packed = pack_bitmasks(bytemasks)
177
+ return compressed_values, bitmasks_packed
178
+
179
+
180
+ def sparse24_bitmask_decompress(
181
+ values: Tensor, bitmasks: Tensor, original_shape: torch.Size
182
+ ) -> Tensor:
183
+ """
184
+ Reconstructs a dense tensor from a compressed one
185
+
186
+ :param values: 1d tensor of non-zero values
187
+ :param bitmasks: 2d int8 tensor flagging locations of non-zero values in the
188
+ tensors original shape
189
+ :param original_shape: shape of the dense tensor
190
+ :return: decompressed dense tensor
191
+ """
192
+ bytemasks_unpacked = unpack_bitmasks(bitmasks, original_shape)
193
+
194
+ decompressed_tensor = torch.zeros(original_shape, dtype=values.dtype)
195
+ decompressed_tensor = decompressed_tensor.to(values.device)
196
+ values = values.flatten()
197
+ if decompressed_tensor.dtype == FP8_DTYPE:
198
+ decompressed_tensor[bytemasks_unpacked] = values
199
+ decompressed_tensor = decompressed_tensor.cuda()
200
+ else:
201
+ decompressed_tensor[bytemasks_unpacked] = values
202
+ return decompressed_tensor
203
+
204
+
205
+ def get_24_bytemasks(tensor):
206
+ """
207
+ Generate a 2:4 sparsity mask for the given tensor.
208
+
209
+ This function creates a mask where exactly 2 out of every 4 elements are
210
+ preserved based on their magnitudes. The preserved elements are the ones
211
+ with the highest absolute values in each group of 4 elements.
212
+
213
+ :param tensor: The input tensor for which the 2:4 sparsity mask is to be created.
214
+ The tensor can be of any shape but its total number of elements
215
+ must be a multiple of 4.
216
+ :return: A boolean tensor of the same shape as the input tensor, where `True`
217
+ indicates the preserved elements and `False` indicates the pruned elements.
218
+ :raises ValueError: If the total number of elements in the tensor is not a
219
+ multiple of 4.
220
+ """
221
+ original_dtype = tensor.dtype
222
+ if tensor.dtype == FP8_DTYPE:
223
+ tensor = tensor.view(torch.int8)
224
+ original_shape = tensor.shape
225
+ num_elements = tensor.numel()
226
+
227
+ if num_elements % 4 != 0:
228
+ raise ValueError("Tensor size must be a multiple of 4 for TWO_FOUR sparsity")
229
+
230
+ reshaped_tensor = tensor.view(-1, 4)
231
+ abs_tensor = reshaped_tensor.abs()
232
+ topk_indices = abs_tensor.topk(2, dim=1).indices
233
+ mask = torch.zeros_like(reshaped_tensor, dtype=torch.bool)
234
+ mask.scatter_(1, topk_indices, True)
235
+ mask = mask.view(original_shape)
236
+ tensor = tensor.view(original_dtype)
237
+
238
+ return mask
@@ -14,13 +14,12 @@
14
14
 
15
15
  from typing import Dict, List, Tuple, Union
16
16
 
17
- import numpy
18
17
  import torch
19
18
  from compressed_tensors.compressors.base import BaseCompressor
20
19
  from compressed_tensors.compressors.sparse_compressors.base import BaseSparseCompressor
21
20
  from compressed_tensors.config import CompressionFormat
22
21
  from compressed_tensors.quantization import FP8_DTYPE
23
- from compressed_tensors.utils import merge_names
22
+ from compressed_tensors.utils import merge_names, pack_bitmasks, unpack_bitmasks
24
23
  from torch import Tensor
25
24
 
26
25
 
@@ -29,8 +28,6 @@ __all__ = [
29
28
  "BitmaskTensor",
30
29
  "bitmask_compress",
31
30
  "bitmask_decompress",
32
- "pack_bitmasks",
33
- "unpack_bitmasks",
34
31
  ]
35
32
 
36
33
 
@@ -164,37 +161,3 @@ def bitmask_decompress(
164
161
  decompressed_tensor[bytemasks_unpacked] = values
165
162
 
166
163
  return decompressed_tensor
167
-
168
-
169
- def pack_bitmasks(bytemasks: Tensor) -> Tensor:
170
- """
171
- Converts a bytemask tensor to a bitmask tensor to reduce memory. Shape RxC will be
172
- compressed to R x ceil(C/8)
173
- :param bytemasks: mask tensor where each byte corresponds to a weight
174
- :return: mask tensor where each bit corresounds to a weight
175
- """
176
- packed_bits_numpy = numpy.packbits(bytemasks.numpy(), axis=-1, bitorder="little")
177
- packed_bits_torch = torch.from_numpy(packed_bits_numpy)
178
-
179
- return packed_bits_torch
180
-
181
-
182
- def unpack_bitmasks(packed_bitmasks: Tensor, original_shape: torch.Size) -> Tensor:
183
- """
184
- Converts a bitmask tensor back to a bytemask tensor for use during decompression
185
-
186
- :param packed_bitmasks: mask tensor where each bit corresponds to a weight
187
- :param original_shape: dense shape to decompress to
188
- :return: boolean mask of weights in the original dense shape
189
- """
190
- # Unpack the bits
191
- unpacked_bits = numpy.unpackbits(
192
- packed_bitmasks.numpy(), axis=-1, count=original_shape[-1], bitorder="little"
193
- )
194
-
195
- # Reshape to match the original shape
196
- unpacked_bitmasks_torch = torch.from_numpy(
197
- unpacked_bits.reshape(original_shape).astype(bool)
198
- )
199
-
200
- return unpacked_bitmasks_torch
@@ -15,4 +15,5 @@
15
15
  # flake8: noqa
16
16
  from .base import *
17
17
  from .dense import *
18
+ from .sparse_24_bitmask import *
18
19
  from .sparse_bitmask import *
@@ -26,6 +26,7 @@ __all__ = ["SparsityCompressionConfig", "CompressionFormat", "SparsityStructure"
26
26
  class CompressionFormat(Enum):
27
27
  dense = "dense"
28
28
  sparse_bitmask = "sparse-bitmask"
29
+ sparse_24_bitmask = "sparse-24-bitmask"
29
30
  int_quantized = "int-quantized"
30
31
  float_quantized = "float-quantized"
31
32
  naive_quantized = "naive-quantized"
@@ -0,0 +1,40 @@
1
+ # Copyright (c) 2021 - present / Neuralmagic, Inc. All Rights Reserved.
2
+ #
3
+ # Licensed under the Apache License, Version 2.0 (the "License");
4
+ # you may not use this file except in compliance with the License.
5
+ # You may obtain a copy of the License at
6
+ #
7
+ # http://www.apache.org/licenses/LICENSE-2.0
8
+ #
9
+ # Unless required by applicable law or agreed to in writing,
10
+ # software distributed under the License is distributed on an "AS IS" BASIS,
11
+ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ # See the License for the specific language governing permissions and
13
+ # limitations under the License.
14
+
15
+ from typing import Optional
16
+
17
+ from compressed_tensors.config import (
18
+ CompressionFormat,
19
+ SparsityCompressionConfig,
20
+ SparsityStructure,
21
+ )
22
+
23
+
24
+ __all__ = ["Sparse24BitMaskConfig"]
25
+
26
+
27
+ @SparsityCompressionConfig.register(name=CompressionFormat.sparse_24_bitmask.value)
28
+ class Sparse24BitMaskConfig(SparsityCompressionConfig):
29
+ """
30
+ Configuration for storing a 24 sparse model using
31
+ bytemask compression
32
+
33
+ :param global_sparsity: average sparsity of the entire model
34
+ :param sparsity_structure: structure of the sparsity, should always be
35
+ "2:4" for this compression format
36
+ """
37
+
38
+ format: str = CompressionFormat.sparse_24_bitmask.value
39
+ global_sparsity: Optional[float] = 0.0
40
+ sparsity_structure: Optional[str] = SparsityStructure.TWO_FOUR.value
@@ -14,8 +14,9 @@
14
14
 
15
15
  import warnings
16
16
  from functools import wraps
17
- from typing import Any, Callable, Dict, Optional
17
+ from typing import Any, Callable, Dict, List, Optional
18
18
 
19
+ import numpy
19
20
  import torch
20
21
  from transformers import AutoConfig
21
22
 
@@ -29,6 +30,10 @@ __all__ = [
29
30
  "getattr_chain",
30
31
  "deprecated",
31
32
  "Aliasable",
33
+ "combine_shards",
34
+ "shard_tensor",
35
+ "pack_bitmasks",
36
+ "unpack_bitmasks",
32
37
  ]
33
38
 
34
39
  FSDP_WRAPPER_NAME = "_fsdp_wrapped_module"
@@ -214,3 +219,108 @@ class Aliasable:
214
219
  def __hash__(self):
215
220
  canonical_value = self.aliases.get(self.value, self.value)
216
221
  return hash(canonical_value)
222
+
223
+
224
+ def shard_tensor(
225
+ tensor: torch.Tensor, shard_sizes: List[int], dim: int = 0
226
+ ) -> List[torch.Tensor]:
227
+ """
228
+ Shards a tensor into a list of tensors along a given dimension.
229
+
230
+ raises: ValueError: If the sum of shard_sizes does not match the
231
+ size of the tensor along the given dimension.
232
+
233
+ :param tensor: The input tensor to shard.
234
+ :param shard_sizes : List of sizes for each shard along the specified dimension.
235
+ :param dim : The dimension along which to shard the tensor.
236
+ :returns: A list of tensors sharded along the specified dimension.
237
+ """
238
+ if sum(shard_sizes) != tensor.size(dim):
239
+ raise ValueError(
240
+ "Sum of shard_sizes must equal the size of the tensor "
241
+ "along the specified dimension."
242
+ )
243
+
244
+ shards = []
245
+ start_idx = 0
246
+
247
+ for size in shard_sizes:
248
+ end_idx = start_idx + size
249
+ shard = tensor.narrow(dim, start_idx, size)
250
+ shards.append(shard)
251
+ start_idx = end_idx
252
+
253
+ return shards
254
+
255
+
256
+ def combine_shards(shards, dim=0):
257
+ """
258
+ Combine decompressed shards along a given dimension using `narrow`.
259
+
260
+ :param shards: List of decompressed shard tensors.
261
+ :param dim: Dimension to combine along (default: 0).
262
+ :return: Combined decompressed tensor.
263
+ """
264
+ if not shards:
265
+ raise ValueError("The list of shards is empty.")
266
+
267
+ # Assert that all shards have the same dtype
268
+ shard_dtypes = {shard.dtype for shard in shards}
269
+ if len(shard_dtypes) > 1:
270
+ raise ValueError("All shards must have the same dtype.")
271
+
272
+ # Determine the total shape of the combined tensor
273
+ total_shape = list(shards[0].shape)
274
+ total_shape[dim] = sum(shard.shape[dim] for shard in shards)
275
+
276
+ # Create the combined tensor
277
+ combined = torch.zeros(total_shape, dtype=shards[0].dtype, device=shards[0].device)
278
+
279
+ # Fill the combined tensor using narrow
280
+ shard_offset = 0
281
+ for shard in shards:
282
+ shard_size = shard.shape[dim]
283
+ combined.narrow(dim, shard_offset, shard_size).copy_(shard)
284
+ shard_offset += shard_size
285
+
286
+ return combined
287
+
288
+
289
+ def pack_bitmasks(bytemasks: torch.Tensor) -> torch.Tensor:
290
+ """
291
+ Converts a bytemask tensor to a bitmask tensor to reduce memory. Shape RxC will be
292
+ compressed to R x ceil(C/8)
293
+
294
+ :param bytemasks: mask tensor where each byte corresponds to a weight
295
+ :return: mask tensor where each bit corresounds to a weight
296
+ """
297
+ packed_bits_numpy = numpy.packbits(bytemasks.numpy(), axis=-1, bitorder="little")
298
+ packed_bits_torch = torch.from_numpy(packed_bits_numpy)
299
+
300
+ return packed_bits_torch
301
+
302
+
303
+ def unpack_bitmasks(
304
+ packed_bitmasks: torch.Tensor, original_shape: torch.Size
305
+ ) -> torch.Tensor:
306
+ """
307
+ Converts a bitmask tensor back to a bytemask tensor for use during decompression
308
+
309
+ :param packed_bitmasks: mask tensor where each bit corresponds to a weight
310
+ :param original_shape: dense shape to decompress to
311
+ :return: boolean mask of weights in the original dense shape
312
+ """
313
+ # Unpack the bits
314
+ unpacked_bits = numpy.unpackbits(
315
+ packed_bitmasks.cpu().numpy(),
316
+ axis=-1,
317
+ count=original_shape[-1],
318
+ bitorder="little",
319
+ )
320
+
321
+ # Reshape to match the original shape
322
+ unpacked_bitmasks_torch = torch.from_numpy(
323
+ unpacked_bits.reshape(original_shape).astype(bool)
324
+ )
325
+
326
+ return unpacked_bitmasks_torch
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: compressed-tensors-nightly
3
- Version: 0.8.1.20250110
3
+ Version: 0.8.1.20250112
4
4
  Summary: Library for utilization of compressed safetensors of neural network models
5
5
  Home-page: https://github.com/neuralmagic/compressed-tensors
6
6
  Author: Neuralmagic, Inc.
@@ -5,20 +5,22 @@ compressed_tensors/compressors/__init__.py,sha256=smSygTSfcfuujRrAXDc6uZm4L_ccV1
5
5
  compressed_tensors/compressors/base.py,sha256=D9TNwQcjanDiAHODPbg8JUqc66e3j50rctY7A708NEs,6743
6
6
  compressed_tensors/compressors/helpers.py,sha256=OK6qxX9j3bHwF9JfIYSGMgBJe2PWjlTA3byXKCJaTIQ,5431
7
7
  compressed_tensors/compressors/model_compressors/__init__.py,sha256=5RGGPFu4YqEt_aOdFSQYFYFDjcZFJN0CsMqRtDZz3Js,666
8
- compressed_tensors/compressors/model_compressors/model_compressor.py,sha256=nsMKqjdzEttvkabpp_7Qt4mhWcmjwRYnwjQzeN2a2E4,18295
8
+ compressed_tensors/compressors/model_compressors/model_compressor.py,sha256=3WyzAW2Rm_uLprxwO2QH6FR76W6Mk4r2yedayaSZHhw,18396
9
9
  compressed_tensors/compressors/quantized_compressors/__init__.py,sha256=09UJq68Pht6Bf-4iP9xYl3tetKsncNPHD8IAGbePsr4,714
10
10
  compressed_tensors/compressors/quantized_compressors/base.py,sha256=LVqSSqSjGi8LB-X13zC_0AFHc8BobGQVC0zjInDhOWE,7217
11
11
  compressed_tensors/compressors/quantized_compressors/naive_quantized.py,sha256=fahmPJFz49rVS7q705uQwZ0kUtdP46GuXR7nPr6uIqI,4943
12
12
  compressed_tensors/compressors/quantized_compressors/pack_quantized.py,sha256=OO5dceCfNVuY8A23kBg6z2wk-zGUVqR_MyLvObvT7pk,7741
13
- compressed_tensors/compressors/sparse_compressors/__init__.py,sha256=i2TESH27l7KXeOhJ6hShIoI904XX96l-cRQiMR6MAaU,704
13
+ compressed_tensors/compressors/sparse_compressors/__init__.py,sha256=Atuz-OdEgn8OCUhx7Ovd6gXdyImAI186uCR-uR0t_Nk,737
14
14
  compressed_tensors/compressors/sparse_compressors/base.py,sha256=9e841MQWr0j8m33ejDw_jP5_BIpQ5099x9_pvuZ-Nr0,5944
15
15
  compressed_tensors/compressors/sparse_compressors/dense.py,sha256=lSKNWRx6H7aUqaJj1j4qbXk8Gkm1UohbnvW1Rvq6Ra4,1284
16
- compressed_tensors/compressors/sparse_compressors/sparse_bitmask.py,sha256=Z9qMJ2JyUaBNQe-CXBJLuWacnHdFArrJYZEZDmW5x8o,6889
16
+ compressed_tensors/compressors/sparse_compressors/sparse_24_bitmask.py,sha256=3M0FI8gY_T8iNmp9oSEHoVjr_AwdercdRd3R9hzltVM,8512
17
+ compressed_tensors/compressors/sparse_compressors/sparse_bitmask.py,sha256=7zSr9bqkpuH1ivQpxtYBNxXIoElal7Jo1nSKpZN_IFk,5633
17
18
  compressed_tensors/compressors/sparse_quantized_compressors/__init__.py,sha256=4f_cwcKXB1nVVMoiKgTFAc8jAPjPLElo-Df_EDm1_xw,675
18
19
  compressed_tensors/compressors/sparse_quantized_compressors/marlin_24.py,sha256=BMIQWTLlnUvxy14iEJegtiP75WHJeOVojey9mKOK1hE,9427
19
- compressed_tensors/config/__init__.py,sha256=ZBqWn3r6ku1qfmlHHYp0mQueY0i7Pwhr9rbQk9dDlMc,704
20
- compressed_tensors/config/base.py,sha256=3bFAdwDZjOt-U3fneOeL8dRci-PS8DqstnXuQVtkfiQ,3435
20
+ compressed_tensors/config/__init__.py,sha256=8sOoZ6xvYSC79mBvEtO8l6xk4PC80d29AnnJiGMrY2M,737
21
+ compressed_tensors/config/base.py,sha256=R3iUmFf1MslEjin5LgwQbmfJHIsS7Uw0UIxfn780uqY,3479
21
22
  compressed_tensors/config/dense.py,sha256=NgSxnFCnckU9-iunxEaqiFwqgdO7YYxlWKR74jNbjks,1317
23
+ compressed_tensors/config/sparse_24_bitmask.py,sha256=Lhj39zT2V1hxftprvxvneyhv45ShlXOKd75DBbDTyTE,1401
22
24
  compressed_tensors/config/sparse_bitmask.py,sha256=pZUboRNZTu6NajGOQEFExoPknak5ynVAUeiiYpS1Gt8,1308
23
25
  compressed_tensors/linear/__init__.py,sha256=fH6rjBYAxuwrTzBTlTjTgCYNyh6TCvCqajCz4Im4YrA,617
24
26
  compressed_tensors/linear/compressed_linear.py,sha256=MJa-UfoKhIkdUWRD1shrXXri2cOwR5GK0a4t4bNYosM,3268
@@ -37,14 +39,14 @@ compressed_tensors/quantization/utils/helpers.py,sha256=DBP-sGRpGAY01K0LFE7qqonN
37
39
  compressed_tensors/registry/__init__.py,sha256=FwLSNYqfIrb5JD_6OK_MT4_svvKTN_nEhpgQlQvGbjI,658
38
40
  compressed_tensors/registry/registry.py,sha256=vRcjVB1ITfSbfYUaGndBBmqhip_5vsS62weorVg0iXo,11896
39
41
  compressed_tensors/utils/__init__.py,sha256=gS4gSU2pwcAbsKj-6YMaqhm25udFy6ISYaWBf-myRSM,808
40
- compressed_tensors/utils/helpers.py,sha256=XF36-SLkXnAHh0VzbvUlAdh6a88aCQvS_WeYs9Lfio8,6827
42
+ compressed_tensors/utils/helpers.py,sha256=OODitCQuSKH6Ux_8Ff05pSrKzaai1t8IERNPKTtiD1A,10321
41
43
  compressed_tensors/utils/offload.py,sha256=cMmzd9IdlNbs29CReHj1PPSLUM6OWaT5YumlLT5eP3w,13845
42
44
  compressed_tensors/utils/permutations_24.py,sha256=kx6fsfDHebx94zsSzhXGyCyuC9sVyah6BUUir_StT28,2530
43
45
  compressed_tensors/utils/permute.py,sha256=V6tJLKo3Syccj-viv4F7ZKZgJeCB-hl-dK8RKI_kBwI,2355
44
46
  compressed_tensors/utils/safetensors_load.py,sha256=fBuoHVPoBt1mkvqFJ60zQIASX_4nhl0-6QfFS27NY8I,11430
45
47
  compressed_tensors/utils/semi_structured_conversions.py,sha256=XKNffPum54kPASgqKzgKvyeqWPAkair2XEQXjkp7ho8,13489
46
- compressed_tensors_nightly-0.8.1.20250110.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
47
- compressed_tensors_nightly-0.8.1.20250110.dist-info/METADATA,sha256=B1dwfh4KtSBBAhnhxvyKqw6hzmzWfnrW4M8RnPtyRyE,6799
48
- compressed_tensors_nightly-0.8.1.20250110.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
49
- compressed_tensors_nightly-0.8.1.20250110.dist-info/top_level.txt,sha256=w2i-GyPs2s1UwVxvutSvN_lM22SXC2hQFBmoMcPnV7Y,19
50
- compressed_tensors_nightly-0.8.1.20250110.dist-info/RECORD,,
48
+ compressed_tensors_nightly-0.8.1.20250112.dist-info/LICENSE,sha256=xx0jnfkXJvxRnG63LTGOxlggYnIysveWIZ6H3PNdCrQ,11357
49
+ compressed_tensors_nightly-0.8.1.20250112.dist-info/METADATA,sha256=pq2PSfcDi6Nd2HW_UQdaHAYGGDo8X4Ko948pS3B1fj0,6799
50
+ compressed_tensors_nightly-0.8.1.20250112.dist-info/WHEEL,sha256=tZoeGjtWxWRfdplE7E3d45VPlLNQnvbKiYnx7gwAy8A,92
51
+ compressed_tensors_nightly-0.8.1.20250112.dist-info/top_level.txt,sha256=w2i-GyPs2s1UwVxvutSvN_lM22SXC2hQFBmoMcPnV7Y,19
52
+ compressed_tensors_nightly-0.8.1.20250112.dist-info/RECORD,,