保存模型
llmcompressor 库通过附加参数扩展了 Hugging Face 的 save_pretrained 方法,以支持模型压缩功能。本文档解释了这些额外参数以及如何有效使用它们。
工作原理
当您导入 llmcompressor 时,它会自动使用一个增强版本包装模型的原始 save_pretrained 方法,该版本支持压缩。这会以两种方式发生:
- 直接修改:当您直接调用
modify_save_pretrained(model)时 - 自动包装:当您调用
oneshot(...)时,它会在后台包装save_pretrained
这意味着,在使用 oneshot 应用压缩后,您模型的 save_pretrained 方法已经增强了压缩功能,您可以根据下方描述使用附加参数。
附加参数
保存压缩模型时,您可以在 save_pretrained 方法中使用以下额外参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
sparsity_config | Optional[SparsityCompressionConfig] | None | 稀疏性压缩的可选配置。如果模型中已存在稀疏性,则应提供此参数。如果为 None 且 skip_sparsity_compression_stats 为 False,则将自动从模型中推断配置。 |
quantization_format | Optional[str] | None | 量化的可选格式字符串。如果未提供,将从模型中推断。 |
save_compressed | bool | True | 控制是否以压缩格式保存模型。设置为 False 以原始密集格式保存。 |
skip_sparsity_compression_stats | bool | True | 控制在保存模型时是否跳过计算稀疏性统计信息(例如,全局稀疏性和结构)。设置为 False 以包含这些统计信息。如果您不提供 sparsity_config,则应将其设置为 False 以自动为您生成配置。 |
disable_sparse_compression | bool | False | 当设置为 True 时,即使模型先前已压缩,也会跳过保存时的所有稀疏压缩。 |
具有现有稀疏性的模型工作流程
处理具有现有稀疏性的模型时
- 如果您知道稀疏性配置,请通过
sparsity_config直接提供 - 如果您不知道稀疏性配置,请将
skip_sparsity_compression_stats设置为False以自动从模型中推断
此工作流程可确保在保存具有现有稀疏性的模型时,要么提供正确的稀疏性配置,要么生成正确的稀疏性配置。
示例
使用 oneshot 应用压缩
最简单的方法是使用 oneshot,它会同时处理压缩和包装 save_pretrained
from transformers import AutoModelForCausalLM, AutoTokenizer
from llmcompressor import oneshot
from llmcompressor.modifiers.quantization import GPTQModifier
# Load model
model = AutoModelForCausalLM.from_pretrained("your-model")
tokenizer = AutoTokenizer.from_pretrained("your-model")
# Apply compression - this also wraps save_pretrained
oneshot(
model=model,
recipe=[GPTQModifier(targets="Linear", scheme="W8A8", ignore=["lm_head"])],
# Other oneshot parameters...
)
# Now you can use the enhanced save_pretrained
SAVE_DIR = "your-model-W8A8-compressed"
model.save_pretrained(
SAVE_DIR,
save_compressed=True # Use the enhanced functionality
)
tokenizer.save_pretrained(SAVE_DIR)
手动方法(不使用 oneshot)
如果您需要更多控制,可以手动包装 save_pretrained
from transformers import AutoModelForCausalLM
from llmcompressor.transformers.compression.compressed_tensors_utils import modify_save_pretrained
# Load model
model = AutoModelForCausalLM.from_pretrained("your-model")
# Manually wrap save_pretrained
modify_save_pretrained(model)
# Now you can use the enhanced save_pretrained
model.save_pretrained(
"your-model-path",
save_compressed=True,
skip_sparsity_compression_stats=False # To automatically infer sparsity config
)
使用自定义稀疏性配置保存
from transformers import AutoModelForCausalLM
from compressed_tensors import SparsityCompressionConfig
# Load model
model = AutoModelForCausalLM.from_pretrained("your-model")
# Create custom sparsity config
custom_config = SparsityCompressionConfig(
format="2:4",
block_size=16
)
# Save with custom config
model.save_pretrained(
"your-model-custom-sparse",
sparsity_config=custom_config,
)
注意事项
- 使用
from_pretrained加载压缩模型时,会自动检测压缩格式。 - 要将压缩模型与 vLLM 一起使用,只需像加载任何模型一样加载它们即可
- 压缩配置保存在模型的配置文件中,并在加载时自动应用。
有关压缩算法和格式的更多信息,请参阅 llmcompressor 存储库中的文档和示例。