深度学习运算,尤其是CV(计算机视觉)和NLP(自然语言学习)类任务运算,包含大量的矩阵运算,而低秩分解通过将大矩阵分解为若干个低秩矩阵的乘积,从而降低存储空间和计算量,降低推理开销。
当前支持在训练服务器上对MindSpore和PyTorch框架下模型进行低秩分解,执行前需要参考环境准备完成开发环境部署、Python环境变量、所需框架及训练服务器环境变量配置。
目前支持对包括但不限于表1中的模型进行低秩分解。
类型 |
名称 |
框架 |
---|---|---|
图像分类 |
ResNet50 |
MindSpore、PyTorch |
VIT |
MindSpore |
|
swin-transformer |
PyTorch |
|
目标检测 |
YoloV5 |
MindSpore、PyTorch |
自然语言处理 |
BERT-Base |
MindSpore、PyTorch |
Bert-large |
MindSpore、PyTorch |
from msmodelslim.pytorch import low_rank_decompose from ascend_utils.common.utils import count_parameters #请根据实际情况导入对应框架的库文件
MindSpore框架下库文件的路径为msmodelslim.mindspore,PyTorch框架下库文件的路径为 msmodelslim.pytorch.low_rank_decompose。
from msmodelslim import set_logger_level set_logger_level("info") #根据实际情况配置
print("Original model parameters:", count_parameters(network))
decomposer = low_rank_decompose.Decompose(model).from_ratio(0.5)
model = decomposer.decompose_network() #使用分解后的模型替换原模型
print("Decomposed model parameters:", count_parameters(network))
state_dict_file = "/home/xxx/decompose_state_dict.ckpt" #请根据实际情况配置模型权重文件保存的路径及名称 torch.save(model.state_dict(),state_dict_file)
model = decomposer.decompose_network(do_decompose_weight=False) model.load_state_dict(state_dict = torch.load(state_dict_file, map_location="cpu"))
bash ./test/train_full_1p.sh --data_path=./datasets/imagenet #请根据实际情况配置数据集路径
bash ./test/train_full_8p.sh --data_path=./datasets/imagenet #请根据实际情况配置数据集路径
训练完成后输出模型训练精度和性能信息。训练结果信息可参考原模型README进行分析。