AIMET API 文档(8)
1.1.12 多 GPU指南
目前AIMET支持在数据并行模式下使用Multi-GPU的模型,具有以下功能
-
跨层均衡(CLE)
-
量化感知训练 (QAT)
用户可以使用 torch API 创建数据并行模型。例如:
# Instantiate a torch model and pass it to DataParallel API
model = torch.nn.DataParallel(model)
具有 CLE 的多 GPU
对于将多 GPU 与 CLE 结合使用,您可以将上面创建的模型直接传递给 CLE API 跨层均衡 API
注意:CLE 实际上并未使用多 GPU,它仅作为工作流程的一部分集成,因此用户无需将模型在单 GPU 和多 GPU 之间来回移动。
具有量化感知训练的多 GPU
对于使用带有 QAT 的多 GPU,
-
使用火炬模型创建 QuantizationSim,如量化模拟 API中所示 (不在 DataParallel 模式下)
-
执行计算编码(注意:不要使用将模型移至多 GPU 并返回的前向函数)
-
将 sim 模型移至 DataParallel:
sim.model = torch.nn.DataParallel(sim.model)
-
执行评估/培训
1.2 PyTorch 模型压缩 API
1.2.1 介绍
AIMET 支持 PyTorch 模型的以下模型压缩技术
-
重量奇异值分解
-
空间奇异值分解
-
通道修剪
要了解有关这些模型压缩技术的更多信息,请参阅模型压缩用户指南
对于所有这些压缩技术,您可以通过两种模式调用 AIMET API
-
自动模式:
在自动模式下,AIMET将确定压缩每一层的最佳方式
该模型给出了总体目标压缩比。贪婪压缩比选择算法用于为每层选择合适的压缩比。 -
手动模式:
在手动模式下,用户可以传入所需的每层压缩比
到艾美特。AIMET 将为每一层应用指定的压缩技术,以实现每层所需的压缩比。建议用户从自动模式开始,然后根据需要使用手动模式调整每层压缩比。
1.2.2 用于压缩的顶级 API
class aimet_torch.compress.ModelCompressor
AIMET 模型压缩器:使用各种方案启用模型压缩
static ModelCompressor.compress_model(模型、eval_callback、eval_iterations、input_shape、compress_scheme、cost_metric、参数、trainer=None、visualization_url=None )
使用指定参数压缩给定模型
参数
-
model ( Module) – 要压缩的模型
-
eval_callback ( Callable[[ Any, Optional[ int], bool], float]) – 评估回调。预期签名是评估(模型,迭代,use_cuda)。预计返回准确度指标。
-
eval_iterations – 运行评估的迭代
-
trainer – 训练类:包含可调用的 train_model,它采用模型、正在微调的层和可选参数 train_flag 作为参数 None:如果在创建最终压缩模型时不需要每层微调
-
input_shape ( Tuple) – 模型输入张量的形状
-
compress_scheme ( CompressionScheme) – 压缩方案。请参阅枚举以获取允许的值
-
cost_metric ( CostMetric) – 用于压缩比的成本度量(mac 或内存)
-
参数( Union[ SpatialSvdParameters, WeightSvdParameters, ChannelPruningParameters]) – 特定于给定压缩方案的压缩参数
-
Visualization_url – 用户需要输入可视化出现位置的 url
返回类型
Tuple[ Module, CompressionStats]
退货
压缩模型的元组和压缩统计信息
1.2.3 贪心选择参数
类 aimet_common.defs.GreedySelectionParameters(target_comp_ratio、num_comp_ratio_candidates=10、use_monotonic_fit=False、saving_eval_scores_dict=None )
贪婪压缩比选择算法的配置参数
变量
-
target_comp_ratio – 目标压缩比。表示为 0 到 1 之间的值。压缩比是压缩模型的成本与原始模型的成本之比。
-
num_comp_ratio_candidates – 每层分析的比较比候选数。更多候选数允许更细粒度的压缩分布,但代价是分析期间增加的运行时间。默认值=10。值应大于 1。
-
use_monotonic_fit – 如果为 True,则 eval 字典中的 eval 分数将适合单调递增函数。如果您看到某些层的 eval dict 分数不是单调递增的,这非常有用。默认情况下,此选项设置为 False。
-
save_eval_scores_dict – 上次运行中保存的 eval_scores 字典 pickle 文件的路径。例如,当尝试不同的目标压缩比时,这对于加速实验很有用。aimet 会自动将 eval_scores 字典 pickle 文件保存在相对于当前路径的 ./data 目录中。使用此选项时,num_comp_ratio_candidates 参数将被忽略。
1.2.4 TAR 选择参数
类 aimet_torch.defs.TarRankSelectionParameters(num_rank_indices )
TAR压缩比选择算法的配置参数
变量
num_rank_indices – 用于比率选择的排名索引数。
1.2.5 空间 SVD 配置
类 aimet_torch.defs.SpatialSvdParameters(模式,参数,多重性=1 )
空间 svd 压缩的配置参数
参数
-
模式( Mode) – 自动模式或手动模式
-
params ( Union[ ManualModeParams, AutoModeParams]) – 所选模式的参数
-
多重性– 排名/输入通道将被舍入的多重性。默认值:1
类 AutoModeParams(greedy_select_params,modules_to_ignore=None )
自动模式压缩的配置参数
参数
-
gredy_select_params ( GreedySelectionParameters) – 贪婪比较比选择算法的参数
-
module_to_ignore ( Optional[ List[ Module]]) – 要忽略的模块列表(None 表示没有要忽略的内容)
类 ManualModeParams(模块压缩比对列表)
手动模式空间 svd 压缩的配置参数
参数
- list_of_module_comp_ratio_pairs ( List[ ModuleCompRatioPair]) – (模块、比较比率)对列表
类 Mode
模式枚举
-
auto= 2
自动模式 -
manual= 1
手动模式
1.2.6 权重 SVD 配置
类 aimet_torch.defs.ChannelPruningParameters(data_loader,num_reconstruction_samples,allow_custom_downsample_ops,模式,参数,多重性=1 )
权重 svd 压缩的配置参数
参数
-
模式( Mode) – 自动模式或手动模式
-
params ( Union[ ManualModeParams, AutoModeParams]) – 所选模式的参数
-
多重性– 排名/输入通道将被舍入的多重性。默认值:1
类 AutoModeParams(rank_select_scheme、select_params、modules_to_ignore=无)
自动模式压缩的配置参数
参数
-
rank_select_scheme ( RankSelectScheme) – 支持两个选项 gredy 和 tar
-
select_params ( Union[ GreedySelectionParameters, TarRankSelectionParameters]) – 贪婪/TAR 比较选择算法的参数
-
module_to_ignore ( Optional[ List[ Module]]) – 要忽略的模块列表(None 表示没有要忽略的内容)
类 ManualModeParams(模块压缩比对列表)
手动模式权重 svd 压缩的配置参数
参数
- list_of_module_comp_ratio_pairs ( List[ ModuleCompRatioPair]) – (模块、比较比率)对列表
类 Mode
模式枚举
-
auto= 2
自动模式 -
manual= 1
手动模式
1.2.7 通道修剪配置
通道修剪压缩的配置参数
类 AutoModeParams(greedy_select_params,modules_to_ignore=None )
自动模式压缩的配置参数
参数
-
gredy_select_params ( GreedySelectionParameters) – 贪婪比较比选择算法的参数
-
module_to_ignore ( Optional[ List[ Module]]) – 要忽略的模块列表(None 表示没有要忽略的内容)
类 ManualModeParams(模块压缩比对列表)
手动模式通道修剪压缩的配置参数
参数
- list_of_module_comp_ratio_pairs ( List[ ModuleCompRatioPair]) – (模块、比较比率)对列表
类 Mode
模式枚举
-
auto= 2
自动模式:AIMET 计算每层的最佳比较率 -
manual= 1
手动模式:用户指定每层的比例