post_process(
model_args: ModelArguments | None = None,
recipe_args: RecipeArguments | None = None,
output_dir: str | None = None,
)
如果提供了 model_args 和 output_dir,则将模型和分词器/处理器保存到输出目录。
如果 output_dir 不是默认目录,则该方法会重置生命周期操作。如果 model_args 中指定了压缩格式,则会以压缩格式保存模型。此外,还会保存分词器或处理器(如果可用)。
引发: ValueError: 如果由于 output_dir 无效或其他问题导致保存失败。
源代码位于 llmcompressor/entrypoints/utils.py
| def post_process(
model_args: ModelArguments | None = None,
recipe_args: RecipeArguments | None = None,
output_dir: str | None = None,
):
"""
Saves the model and tokenizer/processor to the output directory if model_args,
output_dir is provided.
If the `output_dir` is not the default directory, the method resets lifecycle
actions. The model is saved in a compressed format if specified in `model_args`.
Additionally, the tokenizer or processor, if available, is also saved.
Raises:
ValueError: If saving fails due to an invalid `output_dir` or other issues.
"""
# remove any existing dispatches
if model_args is not None and model_args.model is not None:
remove_dispatch(model_args.model)
if model_args is not None and output_dir is not None:
if recipe_args is not None and getattr(recipe_args, "stage", None) is not None:
output_dir = os.path.join(output_dir, recipe_args.stage)
os.makedirs(output_dir, exist_ok=True)
logger.info(f"[Save] Stage detected. Updating output_dir to {output_dir}")
# TODO: support general saving parameters, beyond save_compressed
model_args.model.save_pretrained(
output_dir, save_compressed=model_args.save_compressed
)
if model_args.processor is not None:
model_args.processor.save_pretrained(output_dir)
else:
logger.warning(
"Optimized model is not saved. To save, please provide"
"`output_dir` as input arg."
"Ex. `oneshot(..., output_dir=...)`"
)
# Reset the one-time-use session upon completion
if recipe_args is not None and recipe_args.clear_sparse_session:
reset_session()
|