跳到内容

保存模型

llmcompressor 库通过附加参数扩展了 Hugging Face 的 save_pretrained 方法,以支持模型压缩功能。本文档解释了这些额外参数以及如何有效使用它们。

工作原理

当您导入 llmcompressor 时,它会自动使用一个增强版本包装模型的原始 save_pretrained 方法,该版本支持压缩。这会以两种方式发生:

  1. 直接修改:当您直接调用 modify_save_pretrained(model)
  2. 自动包装:当您调用 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 时,即使模型先前已压缩,也会跳过保存时的所有稀疏压缩。

具有现有稀疏性的模型工作流程

处理具有现有稀疏性的模型时

  1. 如果您知道稀疏性配置,请通过 sparsity_config 直接提供
  2. 如果您不知道稀疏性配置,请将 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 一起使用,只需像加载任何模型一样加载它们即可
    from vllm import LLM
    model = LLM("./your-model-compressed")
    
  • 压缩配置保存在模型的配置文件中,并在加载时自动应用。

有关压缩算法和格式的更多信息,请参阅 llmcompressor 存储库中的文档和示例。