llmcompressor.core
提供 LLM Compressor 的核心压缩框架。
核心 API 管理压缩会话,跟踪状态更改,处理压缩过程中的事件,并为压缩过程提供生命周期钩子。
模块
-
events–LLM Compressor 核心事件包
-
helpers–核心压缩操作的辅助函数。
-
lifecycle–用于管理 LLM Compressor 中压缩生命周期的模块。
-
model_layer–用于 LLM 压缩工作流程的模型层实用类。
-
session–用于 LLM 压缩工作流程的压缩会话管理。
-
session_functions–用于 LLM 压缩工作流程的会话管理函数。
-
state–用于管理 LLM Compressor 状态的模块。
类
-
CompressionLifecycle–用于管理 LLM Compressor 中压缩事件生命周期的类。
-
CompressionSession–一个用于压缩的会话,它保存了生命周期
-
Data–一个 dataclass,用于保存训练、验证、
-
Event–一个用于定义在稀疏化过程中可以触发的事件的类。
-
EventType–一个枚举,用于定义可以触发的不同类型的事件
-
Hardware–一个 dataclass,用于保存有关正在使用的硬件的信息。
-
LifecycleCallbacks–一个用于调用活动会话的生命周期事件的类
-
ModelParameterizedLayer–一个 dataclass,用于保存参数及其层
-
ModifiedState–一个 dataclass,用于表示修改后的模型、优化器和损失。
-
State–状态类保存有关当前压缩状态的信息。
函数
-
active_session–:return: 用于稀疏化的活动会话
-
create_session–用于创建并生成用于稀疏化的新会话的上下文管理器。
-
reset_session–将当前活动会话重置为其初始状态
CompressionLifecycle dataclass
CompressionLifecycle(
state: State = State(),
recipe: Recipe = Recipe(),
initialized_: bool = False,
finalized: bool = False,
_last_event_type: EventType
| None = EventType.BATCH_END,
_event_order: list[EventType] = (
lambda: [
EventType.BATCH_START,
EventType.LOSS_CALCULATED,
EventType.OPTIM_PRE_STEP,
EventType.OPTIM_POST_STEP,
EventType.BATCH_END,
]
)(),
global_step: int = 0,
)
用于管理 LLM Compressor 中压缩事件生命周期的类。
参数
-
(stateState, default:State()) –压缩过程的当前状态
-
(recipeRecipe, default:Recipe()) –压缩配方
-
(修饰符list[StageModifiers]) –阶段修改器列表
方法
-
event–处理压缩事件。
-
finalize–完成压缩生命周期。
-
initialize–初始化压缩生命周期。
-
reset–重置压缩生命周期,完成任何活动的修改器
event
处理压缩事件。
参数
-
(event_typeEventType) –要处理的事件类型
-
–kwargs传递给事件处理程序的附加参数
返回
-
List[Any]–从修改器处理事件返回的数据列表
引发
-
ValueError–如果在初始化之前、完成之后或对于无效事件类型调用
源代码在 llmcompressor/core/lifecycle.py
finalize
完成压缩生命周期。
参数
-
–kwargs用于更新状态的附加参数
返回
-
List[Any]–从完成修改器返回的数据列表
引发
-
ValueError–如果在初始化之前或调用多次
源代码在 llmcompressor/core/lifecycle.py
initialize
initialize(
recipe: RecipeInput | None = None,
recipe_stage: RecipeStageInput | None = None,
recipe_args: RecipeArgsInput | None = None,
**kwargs,
) -> list[Any]
初始化压缩生命周期。
参数
-
–kwargs用于更新状态的附加参数
返回
-
List[Any]–从初始化修改器返回的数据列表
源代码在 llmcompressor/core/lifecycle.py
reset
重置压缩生命周期,完成所有活动的修改器并将所有属性重置。
源代码在 llmcompressor/core/lifecycle.py
CompressionSession
一个用于压缩的会话,它保存当前压缩会话的生命周期和状态
方法
-
event–为当前 CompressionSession 调用一个事件。
-
finalize–完成压缩会话。这将运行 finalize 方法
-
get_serialized_recipe–:return: 当前已编译配方的序列化字符串
-
initialize–初始化压缩会话。这将运行 initialize 方法
-
log–记录当前事件类型的模型和损失信息
-
reset–将会话重置为其初始状态
-
reset_stage–重置会话以开始新阶段,配方和模型保持不变
属性
-
lifecycle(CompressionLifecycle) –Lifecycle 用于跟踪压缩的进度以及哪些修改器处于活动状态。
-
state(State) –当前压缩会话的状态。State 实例
源代码在 llmcompressor/core/session.py
lifecycle property
event
event(
event_type: EventType,
batch_data: Optional[Any] = None,
loss: Optional[Any] = None,
**kwargs,
) -> ModifiedState
为当前 CompressionSession 调用一个事件。
参数
-
(event_typeEventType) –要调用的事件类型
-
(batch_dataOptional[Any], 默认值:None) –用于事件的批数据
-
(损失Optional[Any], 默认值:None) –用于事件的损失(如果存在)
-
–kwargs传递给生命周期 event 方法的附加 kwargs
返回
-
ModifiedState–调用事件后会话的修改后状态
源代码在 llmcompressor/core/session.py
finalize
完成压缩会话。这将为会话生命周期中的每个修改器运行 finalize 方法。这还将把会话的状态设置为已完成状态。
参数
-
–kwargs传递给生命周期 finalize 方法的附加 kwargs
返回
-
ModifiedState–完成会话后会话的修改后状态
源代码在 llmcompressor/core/session.py
get_serialized_recipe
返回
-
Optional[str]–当前已编译配方的序列化字符串
源代码在 llmcompressor/core/session.py
initialize
initialize(
recipe: Union[
str, List[str], Recipe, List[Recipe], None
] = None,
recipe_stage: Union[str, List[str], None] = None,
recipe_args: Union[Dict[str, Any], None] = None,
model: Optional[Any] = None,
teacher_model: Optional[Any] = None,
optimizer: Optional[Any] = None,
attach_optim_callbacks: bool = True,
train_data: Optional[Any] = None,
val_data: Optional[Any] = None,
test_data: Optional[Any] = None,
calib_data: Optional[Any] = None,
copy_data: bool = True,
start: Optional[float] = None,
steps_per_epoch: Optional[int] = None,
batches_per_step: Optional[int] = None,
loggers: Union[
None, LoggerManager, List[BaseLogger]
] = None,
**kwargs,
) -> ModifiedState
初始化压缩会话。这将为会话生命周期中的每个修改器运行 initialize 方法。这还将把会话的状态设置为已初始化状态。
参数
-
(recipeUnion[str, List[str], Recipe, List[Recipe], None], default:None) –用于压缩的配方,可以是配方文件的路径、原始配方字符串、配方对象或配方对象列表。
-
(recipe_stageUnion[str, List[str], None], default:None) –用于压缩的目标阶段
-
(recipe_argsUnion[Dict[str, Any], None], default:None) –用于覆盖配方默认值的 args
-
(modelOptional[Any], 默认值:None) –要压缩的模型
-
(teacher_modelOptional[Any], 默认值:None) –用于知识蒸馏的教师模型
-
(优化器Optional[Any], 默认值:None) –用于压缩的优化器
-
(attach_optim_callbacksbool, 默认值:True) –为压缩生命周期附加优化器回调,否则为 False
-
(train_dataOptional[Any], 默认值:None) –用于压缩的训练数据
-
(val_dataOptional[Any], 默认值:None) –用于压缩的验证数据
-
(test_dataOptional[Any], 默认值:None) –用于压缩的测试数据
-
(calib_dataOptional[Any], 默认值:None) –用于压缩的校准数据
-
(copy_databool, 默认值:True) –True 表示复制数据,False 表示不复制
-
(startOptional[float], 默认值:None) –用于压缩的起始 epoch
-
(steps_per_epochOptional[int], 默认值:None) –用于压缩的每个 epoch 的步数
-
(batches_per_stepOptional[int], 默认值:None) –用于压缩的每个步数的批次数
-
(loggersUnion[None, LoggerManager, List[BaseLogger]], default:None) –要用于记录重要信息和里程碑的指标管理器,也接受 BaseLogger 列表。
-
–kwargs传递给生命周期 initialize 方法的附加 kwargs
返回
-
ModifiedState–初始化后会话的修改后状态
源代码在 llmcompressor/core/session.py
log
记录当前事件类型的模型和损失信息
参数
-
(event_typeEventType) –要记录的事件类型
-
(损失Optional[Any], 默认值:None) –要记录的损失(如果存在)
源代码在 llmcompressor/core/session.py
reset
Data dataclass
Data(
train: Optional[Any] = None,
val: Optional[Any] = None,
test: Optional[Any] = None,
calib: Optional[Any] = None,
)
一个 dataclass,用于保存训练、验证、测试和/或校准的不同数据集。每个数据集都是一个 ModifiableData 实例。
参数
-
(trainOptional[Any], 默认值:None) –训练数据集
-
(验证Optional[Any], 默认值:None) –验证数据集
-
(testOptional[Any], 默认值:None) –测试数据集
-
(calibOptional[Any], 默认值:None) –校准数据集
Event dataclass
Event(
type_: Optional[EventType] = None,
steps_per_epoch: Optional[int] = None,
batches_per_step: Optional[int] = None,
invocations_per_step: int = 1,
global_step: int = 0,
global_batch: int = 0,
)
一个用于定义在稀疏化过程中可以触发的事件的类。
参数
-
(类型_Optional[EventType], default:None) –事件类型。
-
(steps_per_epochOptional[int], 默认值:None) –每个 epoch 的步数。
-
(batches_per_stepOptional[int], 默认值:None) –每个步骤的批次数量,其中步骤是优化器步骤调用。对于大多数路径,它们是相同的。当它们不同时,请参阅 invocations_per_step 参数以获取更多详细信息。
-
(invocations_per_stepint, 默认值:1) –调用步骤包装器之前 optimizer.step 被调用的次数。通常可以保留为 1(默认值)。对于较旧的 amp 路径,这是在调用包装的优化器步骤函数以处理 fp16 中的累积之前调用缩放器包装器的次数。
-
(global_stepint, 默认值:0) –当前全局步骤。
-
(global_batchint, 默认值:0) –当前全局批次。
方法
-
new_instance–使用提供的关键字参数创建事件的新实例。
-
should_update–确定事件是否应触发更新。
属性
-
current_index(float) –计算事件的当前索引。
-
epoch(int) –计算当前 epoch。
-
epoch_based(bool) –确定事件是否基于 epoch。
-
epoch_batch(int) –计算当前 epoch 中的当前批次。
-
epoch_full(float) –计算当前 epoch 和当前步骤的比例。
-
epoch_step(int) –计算当前 epoch 中的当前步骤。
current_index property writable
计算事件的当前索引。
返回
-
float–事件的当前索引,可以是全局步数,也可以是当前步数占 epoch 的比例。
引发
-
ValueError–如果事件不是基于 epoch 的,或者每个 epoch 的步数太多。
epoch_batch property
计算当前 epoch 中的当前批次。
返回
-
int–当前 epoch 中的当前批次。
引发
-
ValueError–如果事件不是基于 epoch 的。
epoch_full property
计算当前 epoch 和当前步骤的比例。
返回
-
float–当前 epoch 和当前步骤的比例。
引发
-
ValueError–如果事件不是基于 epoch 的。
epoch_step property
计算当前 epoch 中的当前步骤。
返回
-
int–当前 epoch 中的当前步骤。
引发
-
ValueError–如果事件不是基于 epoch 的。
new_instance
使用提供的关键字参数创建事件的新实例。
参数
-
–kwargs要在新实例中设置的关键字参数。
返回
-
Event–具有提供的 kwargs 的事件新实例。
源代码位于 llmcompressor/core/events/event.py
should_update
确定事件是否应触发更新。
参数
-
(startOptional[float]) –要检查的起始索引,设置为 None 则忽略起始。
-
(结束Optional[float]) –要检查的结束索引,设置为 None 则忽略结束。
-
(更新Optional[float]) –更新间隔,设置为 None 或 0.0 则始终更新,否则必须大于 0.0,默认为 None。
返回
-
bool–如果事件应触发更新,则为 True,否则为 False。
源代码位于 llmcompressor/core/events/event.py
EventType
基类:Enum
一个枚举,用于定义在模型压缩生命周期中可以触发的不同类型的事件。每个 EventType 的目的是在训练或训练后管道中触发相应的修饰符回调。
参数
-
–初始化初始化事件类型。
-
–完成完成事件类型。
-
–BATCH_START批次开始事件类型。
-
–损失计算损失计算事件类型。
-
–BATCH_END批次结束事件类型。
-
–CALIBRATION_EPOCH_START校准 epoch 开始事件类型。
-
–SEQUENTIAL_EPOCH_END层校准 epoch 结束事件类型,专门用于
src/llmcompressor/pipelines/sequential/pipeline.py -
–CALIBRATION_EPOCH_END校准 epoch 结束事件类型。
-
–OPTIM_PRE_STEP优化前步骤事件类型。
-
–OPTIM_POST_STEP优化后步骤事件类型。
Hardware dataclass
Hardware(
device: Optional[str] = None,
devices: Optional[List[str]] = None,
rank: Optional[int] = None,
world_size: Optional[int] = None,
local_rank: Optional[int] = None,
local_world_size: Optional[int] = None,
distributed: Optional[bool] = None,
distributed_strategy: Optional[str] = None,
)
一个 dataclass,用于保存有关正在使用的硬件的信息。
参数
-
(deviceOptional[str], 默认值:None) –当前用于训练的设备
-
(devicesOptional[List[str]], 默认值:None) –要用于训练的所有设备列表
-
(排名Optional[int], 默认值:None) –当前设备的 rank
-
(world_sizeOptional[int], 默认值:None) –正在使用的设备总数
-
(local_rankOptional[int], 默认值:None) –当前设备的 local rank
-
(local_world_sizeOptional[int], 默认值:None) –本地机器上使用的设备总数
-
(distributedOptional[bool], default:None) –是否正在使用分布式训练
-
(distributed_strategyOptional[str], 默认值:None) –正在使用的分布式策略
LifecycleCallbacks
一个用于调用活动会话的生命周期事件的类
方法
-
batch_end–为活动会话调用 batch end 事件
-
batch_start–为活动会话调用 batch start 事件
-
calibration_epoch_end–在校准期间为活动会话调用 epoch end 事件。此事件
-
calibration_epoch_start–在校准期间为活动会话调用 epoch start 事件。此事件
-
event–为活动会话调用一个事件
-
loss_calculated–为活动会话调用 loss calculated 事件
-
optim_post_step–为活动会话调用 optimizer post-step 事件
-
optim_pre_step–为活动会话调用 optimizer pre-step 事件
-
sequential_epoch_end–为活动会话调用 sequential epoch end 事件。此事件应
batch_end classmethod
为活动会话调用 batch end 事件
参数
-
–kwargs传递给当前会话的 event 方法的附加 kwargs
返回
-
ModifiedState–调用事件后活动会话的修改后状态
源代码在 llmcompressor/core/session_functions.py
batch_start classmethod
为活动会话调用 batch start 事件
参数
-
(batch_dataOptional[Any], 默认值:None) –用于事件的批数据
-
–kwargs传递给当前会话的 event 方法的附加 kwargs
返回
-
ModifiedState–调用事件后活动会话的修改后状态
源代码在 llmcompressor/core/session_functions.py
calibration_epoch_end classmethod
在校准期间为活动会话调用 epoch end 事件。此事件应在模型校准一个 epoch 后调用
有关用法示例,请参阅 src/llmcompressor/pipelines/basic/pipeline.py
源代码在 llmcompressor/core/session_functions.py
calibration_epoch_start classmethod
在校准期间为活动会话调用 epoch start 事件。此事件应在校准一个 epoch 开始之前调用
有关用法示例,请参阅 src/llmcompressor/pipelines/basic/pipeline.py
源代码在 llmcompressor/core/session_functions.py
event classmethod
为活动会话调用一个事件
参数
-
(event_typeEventType) –要调用的事件类型
-
–kwargs传递给当前会话的 event 方法的附加 kwargs
返回
-
ModifiedState–调用事件后活动会话的修改后状态
源代码在 llmcompressor/core/session_functions.py
loss_calculated classmethod
为活动会话调用 loss calculated 事件
参数
-
(损失Optional[Any], 默认值:None) –用于事件的损失
-
–kwargs传递给当前会话的 event 方法的附加 kwargs
返回
-
ModifiedState–调用事件后活动会话的修改后状态
源代码在 llmcompressor/core/session_functions.py
optim_post_step classmethod
为活动会话调用 optimizer post-step 事件
参数
-
–kwargs传递给当前会话的 event 方法的附加 kwargs
返回
-
ModifiedState–调用事件后活动会话的修改后状态
源代码在 llmcompressor/core/session_functions.py
optim_pre_step classmethod
为活动会话调用 optimizer pre-step 事件
参数
-
–kwargs传递给当前会话的 event 方法的附加 kwargs
返回
-
ModifiedState–调用事件后活动会话的修改后状态
源代码在 llmcompressor/core/session_functions.py
sequential_epoch_end classmethod
为活动会话调用 sequential epoch end 事件。此事件应在校准/训练完一个顺序层一个 epoch 后调用
在用一个批次校准顺序层后调用此函数,有关用法示例,请参阅 src/llmcompressor/pipelines/sequential/pipeline.py
源代码在 llmcompressor/core/session_functions.py
ModelParameterizedLayer dataclass
一个 dataclass,用于保存参数及其层
参数
-
(layer_namestr) –层的名称
-
(layerAny) –层对象
-
(param_namestr) –参数的名称
-
(paramAny) –参数对象
ModifiedState dataclass
一个 dataclass,用于表示修改后的模型、优化器和损失。
参数
-
(modelOptional[Any]) –修改后的模型
-
(优化器Optional[Any]) –修改后的优化器
-
(损失Optional[Any]) –修改后的损失
-
(modifier_dataOptional[List[Dict[str, Any]]]) –用于修改模型、优化器和损失的修改器数据
使用给定参数初始化 ModifiedState。
参数
-
(modelAny) –修改后的模型
-
(优化器Any) –修改后的优化器
-
(损失Any) –修改后的损失
-
(modifier_dataList[Dict[str, Any]]) –用于修改模型、优化器和损失的修改器数据
源代码位于 llmcompressor/core/state.py
State dataclass
State(
model: Any = None,
teacher_model: Any = None,
optimizer: Any = None,
optim_wrapped: bool = None,
loss: Any = None,
batch_data: Any = None,
data: Data = Data(),
hardware: Hardware = Hardware(),
loggers: Optional[LoggerManager] = None,
model_log_cadence: Optional[float] = None,
_last_log_step: Union[float, int, None] = None,
)
状态类保存有关当前压缩状态的信息。
参数
-
(modelAny, 默认值:None) –用于压缩的模型
-
(teacher_modelAny, 默认值:None) –用于压缩的教师模型
-
(优化器Any, 默认值:None) –用于训练的优化器
-
(optim_wrappedbool, 默认值:None) –优化器是否已被包装
-
(损失Any, 默认值:None) –用于训练的损失函数
-
(batch_dataAny, 默认值:None) –当前用于压缩的批次数据
-
(dataData, default:Data()) –用于训练、验证、测试和/或校准的数据集,包装在 Data 实例中
-
(硬件Hardware, default:Hardware()) –硬件实例,包含有关正在使用的目标硬件的信息
-
(loggersOptional[LoggerManager], default:None) –LoggerManager 实例,包含所有要记录的日志记录器
-
(model_log_cadenceOptional[float], 默认值:None) –记录模型信息相对于 epoch 的节奏。如果为 1,则每个 epoch 记录一次。如果为 2,则每隔一个 epoch 记录一次,依此类推。默认值为 1。
方法
-
update–使用给定参数更新状态。
属性
-
compression_ready(bool) –检查模型和优化器是否已设置为进行压缩。
compression_ready property
检查模型和优化器是否已设置为进行压缩。
返回
-
bool–如果模型和优化器已设置,则为 True,否则为 False
update
update(
model: Any = None,
teacher_model: Any = None,
optimizer: Any = None,
attach_optim_callbacks: bool = True,
train_data: Any = None,
val_data: Any = None,
test_data: Any = None,
calib_data: Any = None,
copy_data: bool = True,
start: float = None,
steps_per_epoch: int = None,
batches_per_step: int = None,
loggers: Union[
None, LoggerManager, List[BaseLogger]
] = None,
model_log_cadence: Optional[float] = None,
**kwargs,
) -> Dict
使用给定参数更新状态。
参数
-
(modelAny, 默认值:None) –用于更新状态的模型
-
(teacher_modelAny, 默认值:None) –用于更新状态的教师模型
-
(优化器Any, 默认值:None) –用于更新状态的优化器
-
(attach_optim_callbacksbool, 默认值:True) –是否附加优化器回调
-
(train_dataAny, 默认值:None) –用于更新状态的训练数据
-
(val_dataAny, 默认值:None) –用于更新状态的验证数据
-
(test_dataAny, 默认值:None) –用于更新状态的测试数据
-
(calib_dataAny, 默认值:None) –用于更新状态的校准数据
-
(copy_databool, 默认值:True) –是否复制数据
-
(startfloat, 默认值:None) –用于更新状态的起始索引
-
(steps_per_epochint, 默认值:None) –用于更新状态的每个 epoch 的步数
-
(batches_per_stepint, 默认值:None) –用于更新状态的每个步骤的批次数量
-
(loggersUnion[None, LoggerManager, List[BaseLogger]], default:None) –用于设置记录重要信息和里程碑的指标管理器,也接受 BaseLogger 列表
-
(model_log_cadenceOptional[float], 默认值:None) –记录模型信息相对于 epoch 的节奏。如果为 1,则每个 epoch 记录一次。如果为 2,则每隔一个 epoch 记录一次,依此类推。默认值为 1。
-
–kwargs用于更新状态的额外关键字参数
返回
-
Dict–更新后的状态字典
源代码位于 llmcompressor/core/state.py
127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 | |
active_session
create_session
用于创建并生成用于稀疏化的新会话的上下文管理器。这将在上下文期间将活动会话设置为新会话。
返回
-
Generator[CompressionSession, None, None]–新会话