跳到内容

llmcompressor

LLM Compressor 是一个用于压缩大型语言模型的库,它利用了该领域最新的技术和研究,同时支持训练感知和训练后技术。

该库设计灵活且易于使用,基于 PyTorch 和 HuggingFace Transformers,方便快速实验。

模块

  • args

    LLM Compressor 的参数包。

  • core

    提供了 LLM Compressor 的核心压缩框架。

  • datasets

    提供了用于模型校准和处理的数据集工具。

  • entrypoints

    提供了模型压缩工作流的入口点。

  • logger

    提供了 LLM Compressor 的灵活日志配置。

  • metrics

    压缩工作流的指标日志和监控框架。

  • modeling

    用于压缩工作流的模型准备和融合工具。

  • modifiers

    用于应用各种优化技术的压缩修改器。

  • observers

    用于在压缩过程中监控和分析模型行为的框架。

  • pipelines

    用于协调不同压缩策略的压缩流水线。

  • pytorch

    模型压缩工作流的 PyTorch 特定工具。

  • recipe

    用于定义和管理压缩工作流的配方系统。

  • sentinel

    LLM 压缩工作流的哨兵值实现。

  • transformers

    用于将 LLM Compressor 与 transformers 训练流程集成的工具。

  • typing

    为 llm-compressor 库定义类型别名。

  • utils

    LLM Compressor 中使用的通用实用函数。

函数

configure_logger

configure_logger(
    config: Optional[LoggerConfig] = None,
) -> None

配置 LLM Compressor 的日志记录器。

此函数根据指定的或默认的参数设置控制台和文件日志记录。

注意:环境变量的优先级高于函数参数。

参数

  • config

    (Optional[LoggerConfig], default: None ) –

    要使用的日志记录器的配置。

源代码位于 llmcompressor/logger.py
def configure_logger(config: Optional[LoggerConfig] = None) -> None:
    """
    Configure the logger for LLM Compressor.

    This function sets up the console and file logging
    as per the specified or default parameters.

    **Note**: Environment variables take precedence over function parameters.

    :param config: The configuration for the logger to use.
    :type config: LoggerConfig
    """
    logger_config = config or LoggerConfig()

    # env vars get priority
    if (disabled := os.getenv("LLM_COMPRESSOR_LOG_DISABLED")) is not None:
        logger_config.disabled = disabled.lower() == "true"
    if (clear_loggers := os.getenv("LLM_COMPRESSOR_CLEAR_LOGGERS")) is not None:
        logger_config.clear_loggers = clear_loggers.lower() == "true"
    if (console_log_level := os.getenv("LLM_COMPRESSOR_LOG_LEVEL")) is not None:
        logger_config.console_log_level = console_log_level.upper()
    if (log_file := os.getenv("LLM_COMPRESSOR_LOG_FILE")) is not None:
        logger_config.log_file = log_file
    if (log_file_level := os.getenv("LLM_COMPRESSOR_LOG_FILE_LEVEL")) is not None:
        logger_config.log_file_level = log_file_level.upper()

    if logger_config.disabled:
        logger.disable("llmcompressor")
        return

    logger.enable("llmcompressor")

    if logger_config.clear_loggers:
        logger.remove()

    if logger_config.console_log_level:
        # log as a human readable string with the time, function, level, and message
        logger.add(
            sys.stdout,
            level=logger_config.console_log_level.upper(),
            format="{time} | {function} | {level} - {message}",
            filter=support_log_once,
        )

    if logger_config.log_file or logger_config.log_file_level:
        log_file = logger_config.log_file or "llmcompressor.log"
        log_file_level = logger_config.log_file_level or "INFO"
        # log as json to the file for easier parsing
        logger.add(
            log_file,
            level=log_file_level.upper(),
            serialize=True,
            filter=support_log_once,
        )

    if logger_config.metrics_disabled or "METRIC" in logger._core.levels.keys():
        return

    # initialize metric logger on loguru
    logger.level("METRIC", no=38, color="<yellow>", icon="📈")