llmcompressor.utils.helpers
通用实用辅助函数。用于与python原生类型和目录/文件进行交互的常用函数。
类
-
NumpyArrayBatcher–批处理程序实例,用于处理包含numpy数组的字典,
函数
-
DisableQuantization–在应用量化配置后,在前向传递期间禁用量化
-
bucket_iterable–将可迭代对象分桶成子数组,包含第一个顶部百分比
-
calibration_forward_context–所有校准前向传递都应在此上下文中进行。
-
clean_path–:param path: 要清理的目录或文件路径
-
convert_to_bool–:param val: 要转换为布尔值的对象,
-
create_dirs–:param path: 尝试创建的目录路径
-
create_parent_dirs–:param path: 尝试为其创建父目录的文件路径
-
create_unique_dir–:param path: 要创建唯一版本的路径
-
disable_cache–暂时禁用transformer模型的键值缓存。用于防止在仅执行预填充阶段而不执行生成阶段的一次性情况下占用过多内存。
-
disable_hf_kernels–在transformers>=4.50.0版本中,一些模块的前向方法可能会
-
disable_lm_head–通过将lm_head移动到meta设备来禁用模型的lm_head。此函数
-
eval_context–禁用给定模块的pytorch训练模式
-
flatten_iterable–:param li: 一个可能包含嵌套项的可迭代对象,将被展平
-
getattr_chain–链接多个getattr调用,由
.分隔 -
import_from_path–导入模块和函数/类的名称,由以下分隔符分隔:
-
interpolate–注意,将值限制在x0的最小值和x1的最大值,
-
interpolate_list_linear–对测量值列表中的输入值进行线性插值
-
interpolated_integral–计算一组测量值的插值积分,形式为
-
is_package_available–一个辅助函数,用于检查包是否可用
-
is_url–:param val: 要检查是否为url的值
-
json_to_jsonl–将json列表文件转换为jsonl文件格式(用于高效分片)
-
load_labeled_data–从磁盘或内存加载标签和数据并将它们分组。假设磁盘上的排序顺序。当为数据和/或标签传入文件glob时,它将进行匹配。
-
load_numpy–将numpy文件加载为ndarray或OrderedDict,表示npz文件中的内容
-
patch_attr–修补对象属性的值。原始值在退出时恢复
-
path_file_count–返回给定路径下匹配给定模式的文件数
-
path_file_size–返回文件系统上给定路径的总大小(以字节为单位)
-
save_numpy–将numpy数组或numpy数组集合保存到磁盘
-
tensor_export–:param tensor: 要导出到保存的numpy数组文件的张量
-
tensors_export–:param tensors: 要导出到保存的numpy数组文件的张量
-
validate_str_iterable–:param val: 要验证的值,检查它是否是一个列表(并将其展平),
NumpyArrayBatcher
继承自 object
批处理程序实例,用于处理包含numpy数组的字典,将多个项目附加到它们上以增加它们的批次大小,然后将它们堆叠成单个批处理的numpy数组,用于字典中的所有键。
方法
源代码位于 llmcompressor/utils/helpers.py
append
将新项目附加到当前批次。所有键和形状必须与当前状态匹配。
参数
-
(itemUnion[ndarray, Dict[str, ndarray]]) –用于批处理的项目
源代码位于 llmcompressor/utils/helpers.py
stack
将当前项目沿新添加的零维堆叠成批次
返回
-
Dict[str, ndarray]–堆叠后的项目
源代码位于 llmcompressor/utils/helpers.py
DisableQuantization
在应用量化配置后,在前向传递期间禁用量化
源代码位于 llmcompressor/utils/helpers.py
bucket_iterable
bucket_iterable(
val: Iterable[Any],
num_buckets: int = 3,
edge_percent: float = 0.05,
sort_highest: bool = True,
sort_key: Callable[[Any], Any] = None,
) -> List[Tuple[int, Any]]
将可迭代对象分桶成子数组,包含第一个顶部百分比,然后其余的可迭代对象被切分成相等大小的切片组。
参数
-
(验证Iterable[Any]) –要分桶的可迭代对象
-
(num_bucketsint, default:3) –要将可迭代对象分桶的数量,不包括顶部桶
-
(edge_percentfloat, default:0.05) –将第一个百分比分组到其自己的桶中。如果sort_highest为True,则这是顶部百分比,否则是底部百分比。如果<=0,则不会创建边缘桶。
-
(sort_highestbool, 默认值:True) –如果为True,则按降序排序,使最高百分比在前,并按降序创建桶。如果为False,则按升序排序,使最低百分比在前,并按升序创建桶。
-
(sort_keyCallable[[Any], Any], default:None) –如果提供,则用于在将可迭代对象转换为列表后进行排序的sort_key
返回
-
List[Tuple[int, Any]]–一个列表,其中包含每个值及其被排序到的存储桶
源代码位于 llmcompressor/utils/helpers.py
calibration_forward_context
所有校准前向传递都应在此上下文中进行。
- 移除梯度计算
- 禁用KV缓存
- 禁用训练模式并启用评估模式
- 禁用hf内核,这可能会绕过钩子
- 禁用lm head(输入和权重仍可校准,输出将是meta)
源代码位于 llmcompressor/utils/helpers.py
clean_path
参数
-
(路径str) –要清理的目录或文件路径
返回
-
str–一个清理后的版本,它扩展了用户路径并创建了一个绝对路径
源代码位于 llmcompressor/utils/helpers.py
convert_to_bool
参数
-
(验证Any) –要转换为布尔值的对象,支持字符串形式的逻辑值,例如True、t、false、0
返回
- –
该值的布尔表示形式,如果无法确定,则默认为True
源代码位于 llmcompressor/utils/helpers.py
create_dirs
参数
-
(路径str) –尝试创建的目录路径
源代码位于 llmcompressor/utils/helpers.py
create_parent_dirs
create_unique_dir
参数
-
(路径str) –要创建唯一版本的路径(附加数字直到其中一个不存在)
-
(check_numberint, 默认值:0) –开始检查唯一版本号的数字
返回
-
str–唯一的目录路径
源代码位于 llmcompressor/utils/helpers.py
disable_cache
暂时禁用transformer模型的键值缓存。用于防止在仅执行预填充阶段而不执行生成阶段的一次性情况下占用过多内存。
示例
model = AutoModel.from_pretrained("TinyLlama/TinyLlama-1.1B-Chat-v1.0") input = torch.randint(0, 32, size=(1, 32)) with disable_cache(model): ... output = model(input)
源代码位于 llmcompressor/utils/helpers.py
disable_hf_kernels
在transformers>=4.50.0版本中,一些模块的前向方法可能会被替换为对hf hub内核的调用。这有可能绕过LLM Compressor添加的钩子。
源代码位于 llmcompressor/utils/helpers.py
disable_lm_head
通过将lm_head移动到meta设备来禁用模型的lm_head。此函数不分离参数,并在退出时恢复模型的正确加载。
源代码位于 llmcompressor/utils/helpers.py
eval_context
禁用给定模块的pytorch训练模式
源代码位于 llmcompressor/utils/helpers.py
flatten_iterable
参数
-
(liIterable) –一个可能包含嵌套项的可迭代对象,将被展平
返回
- –
一个展平后的列表版本,其中所有元素都以深度优先的模式排列在单个列表中
源代码位于 llmcompressor/utils/helpers.py
getattr_chain
链接多个getattr调用,由.分隔
参数
-
(objAny) –要检索其属性的对象
-
(chain_strstr) –由
.分隔的属性名称 -
–default默认值,否则抛出错误
源代码位于 llmcompressor/utils/helpers.py
import_from_path
导入模块和函数/类的名称,由:分隔 示例: path = "/path/to/file.py:func_or_class_name" path = "/path/to/file:focn" path = "path.to.file:focn"
参数
-
(路径str) –包括文件路径和对象名称的路径
源代码位于 llmcompressor/utils/helpers.py
interpolate
interpolate(
x_cur: float,
x0: float,
x1: float,
y0: Any,
y1: Any,
inter_func: str = "linear",
) -> Any
注意,将值限制在x0的最小值和x1的最大值,设计上不工作在范围之外,因为实现原因
参数
-
(x_curfloat) –x的当前值,应在x0和x1之间
-
(x0float) –用于插值的x的最小值
-
(x1float) –用于插值的x的最大值
-
(y0Any) –用于插值的y的最小值
-
(y1Any) –用于插值的y的最大值
-
(inter_funcstr, default:'linear') –用于插值的函数类型:linear、cubic、inverse_cubic
返回
-
Any–插值结果,将x投影到y,使用给定的插值函数
源代码位于 llmcompressor/utils/helpers.py
interpolate_list_linear
interpolate_list_linear(
measurements: List[Tuple[float, float]],
x_val: Union[float, List[float]],
) -> List[Tuple[float, float]]
对测量值列表中的输入值进行线性插值
参数
-
(measurementsList[Tuple[float, float]]) –用于插值输出值的测量值
-
(x_valUnion[float, List[float]]) –目标值,用于插值到第二个维度
返回
-
List[Tuple[float, float]]–包含目标值和插值值的元组列表
源代码位于 llmcompressor/utils/helpers.py
interpolated_integral
计算一组测量值的插值积分,形式为[(x0, y0), (x1, y1), ...]
参数
-
(measurementsList[Tuple[float, float]]) –用于计算积分的测量值
返回
- –
给定测量值的积分或曲线下面积
源代码位于 llmcompressor/utils/helpers.py
is_package_available
is_package_available(
package_name: str, return_version: bool = False
) -> Union[Tuple[bool, str], bool]
一个辅助函数,用于检查包是否可用,并可选择返回其版本。此函数强制检查包是否可用,而不仅仅是一个与包同名的目录/文件。
参数
-
(package_namestr) –要检查的包名
-
(return_versionbool, 默认值:False) –如果包可用,则返回True以返回包的版本
返回
-
Union[Tuple[bool, str], bool]–如果包可用,则返回True,否则返回False;如果return_version为True,则返回(bool, version)元组
源代码位于 llmcompressor/utils/helpers.py
is_url
参数
-
(验证str) –要检查是否为url的值
返回
- –
如果值为URL,则返回True,否则返回False
源代码位于 llmcompressor/utils/helpers.py
json_to_jsonl
将json列表文件转换为jsonl文件格式(用于高效分片)例如:[{"a": 1}, {"a": 1}]将转换为:{"a": 1}
参数
-
(json_file_pathstr) –包含json对象列表的json文件的文件路径
-
(overwritebool, 默认值:True) –如果为True,则将覆盖现有json文件;如果为False,则文件将具有相同的名称,但扩展名为.jsonl
源代码位于 llmcompressor/utils/helpers.py
load_labeled_data
load_labeled_data(
data: Union[
str,
Iterable[Union[str, ndarray, Dict[str, ndarray]]],
],
labels: Union[
None,
str,
Iterable[Union[str, ndarray, Dict[str, ndarray]]],
],
raise_on_error: bool = True,
) -> List[
Tuple[
Union[numpy.ndarray, Dict[str, numpy.ndarray]],
Union[
None, numpy.ndarray, Dict[str, numpy.ndarray]
],
]
]
从磁盘或内存加载标签和数据并将它们分组。假设磁盘上的排序顺序。当为数据和/或标签传入文件glob时,它将进行匹配。
参数
-
(dataUnion[str, Iterable[Union[str, ndarray, Dict[str, ndarray]]]]) –用于数据的glob文件、numpy数据tarball的文件路径或数组列表
-
(labelsUnion[None, str, Iterable[Union[str, ndarray, Dict[str, ndarray]]]]) –用于标签的glob文件、numpy数据tarball的文件路径或数组列表,如果存在
-
(raise_on_errorbool, 默认值:True) –如果为True,则在发生任何错误时引发异常;如果为False,则记录警告、忽略并继续
返回
-
List[Tuple[Union[ndarray, Dict[str, ndarray]], Union[None, ndarray, Dict[str, ndarray]]]]–一个列表,包含数据和标签的元组。如果标签传入为None,则每个元组的第二个索引将为None
源代码位于 llmcompressor/utils/helpers.py
load_numpy
将numpy文件加载为ndarray或OrderedDict,表示npz文件中的内容
参数
-
(文件路径str) –要加载的文件路径
返回
-
Union[ndarray, Dict[str, ndarray]]–从文件中加载的值
源代码位于 llmcompressor/utils/helpers.py
load_numpy_from_tar
将numpy数据加载到tar文件中的列表中。tar文件中包含的所有文件都应为numpy文件。
参数
-
(路径str) –要从中加载numpy数据的tar文件的路径
返回
-
List[Union[ndarray, Dict[str, ndarray]]]–加载的numpy数据列表,可以是数组或数组的有序字典
源代码位于 llmcompressor/utils/helpers.py
load_numpy_list
load_numpy_list(
data: Union[
str,
Iterable[Union[str, ndarray, Dict[str, ndarray]]],
],
) -> List[Union[numpy.ndarray, Dict[str, numpy.ndarray]]]
将numpy数据加载到列表中
参数
-
(dataUnion[str, Iterable[Union[str, ndarray, Dict[str, ndarray]]]]) –要加载的数据,可以是以下之一:[文件夹路径,文件路径的可迭代对象,numpy数组的可迭代对象]
返回
-
List[Union[ndarray, Dict[str, ndarray]]]–加载的数据项列表
源代码位于 llmcompressor/utils/helpers.py
patch_attr
修补对象属性的值。原始值在退出时恢复
参数
-
(baseobject) –具有要修补属性的对象
-
(attrstr) –要修补的属性名称
-
(值Any) –用于替换原始值 用法: >>> from types import SimpleNamespace >>> obj = SimpleNamespace() >>> with patch_attr(obj, "attribute", "value"): ... assert obj.attribute == "value" >>> assert not hasattr(obj, "attribute")
源代码位于 llmcompressor/utils/helpers.py
path_file_count
返回给定路径下匹配给定模式的文件数
参数
-
(路径str) –要搜索文件的目录路径
-
(patternstr, default:'*') –文件必须匹配的模式才能被计数
返回
-
int–目录下匹配模式的文件数
源代码位于 llmcompressor/utils/helpers.py
path_file_size
返回文件系统上给定路径的总大小(以字节为单位)
参数
-
(路径str) –要获取大小的路径(目录或文件)
返回
-
int–路径的大小(以字节为单位),在磁盘上的存储方式
源代码位于 llmcompressor/utils/helpers.py
save_numpy
save_numpy(
array: Union[
ndarray, Dict[str, ndarray], Iterable[ndarray]
],
export_dir: str,
name: str,
npz: bool = True,
)
将numpy数组或numpy数组集合保存到磁盘
参数
-
(arrayUnion[ndarray, Dict[str, ndarray], Iterable[ndarray]]) –要保存的数组或数组集合
-
(export_dirstr) –要将numpy文件导出的目录
-
(名称str) –要导出到的文件名(不带扩展名)
-
(npzbool, 默认值:True) –如果为True,则保存为npz压缩文件;如果为False,则为标准npy。注意,npy只能用于单个numpy数组
返回
- –
已保存的路径
源代码位于 llmcompressor/utils/helpers.py
tensor_export
tensor_export(
tensor: Union[
ndarray, Dict[str, ndarray], Iterable[ndarray]
],
export_dir: str,
name: str,
npz: bool = True,
) -> str
参数
-
(tensorUnion[ndarray, Dict[str, ndarray], Iterable[ndarray]]) –要导出到保存的numpy数组文件的张量
-
(export_dirstr) –要将文件导出的目录
-
(名称str) –文件名,将在其后附加.npy
-
(npzbool, 默认值:True) –如果为True,则导出为npz文件,否则为False
返回
-
str–张量被导出到的numpy文件的路径
源代码位于 llmcompressor/utils/helpers.py
tensors_export
tensors_export(
tensors: Union[
ndarray, Dict[str, ndarray], Iterable[ndarray]
],
export_dir: str,
name_prefix: str,
counter: int = 0,
break_batch: bool = False,
) -> List[str]
参数
-
(tensorsUnion[ndarray, Dict[str, ndarray], Iterable[ndarray]]) –要导出到保存的numpy数组文件的张量
-
(export_dirstr) –要将文件导出的目录
-
(name_prefixstr) –要保存张量的名称前缀,将在其后附加关于张量在列表或字典中的位置的信息,以及.npy文件格式
-
(counterint, 默认值:0) –当前用于保存张量的计数器
-
(break_batchbool, 默认值:False) –将张量视为批次并将其分解为多个张量
返回
-
List[str]–导出的路径
源代码位于 llmcompressor/utils/helpers.py
validate_str_iterable
validate_str_iterable(
val: Union[str, Iterable[str]], error_desc: str = ""
) -> Union[str, Iterable[str]]
参数
-
(验证Union[str, Iterable[str]]) –要验证的值,检查它是否是一个列表(并将其展平),否则检查它是一个ALL或ALL_PRUNABLE字符串,否则引发ValueError
-
(error_descstr, 默认值:'') –在val无效时用于引发错误的描述
返回
-
Union[str, Iterable[str]]–参数的验证版本