mindspore.obfuscate_ckpt
- mindspore.obfuscate_ckpt(network, ckpt_files, target_modules=None, obf_config=None, saved_path='./', obfuscate_scale=100)[源代码]
根据用户配置的混淆策略,对模型的Checkpoint进行混淆保护,防止攻击者窃取模型资产。
- 参数:
network (nn.Cell) - 待混淆的原始网络。
ckpt_files (str) - 待混淆的原始权重文件的存储路径。
target_modules (list[str]) - 需要混淆的目标算子。第一个字符串表示目标算子在原网络中的路径,应该是
"A/B/C"
的形式。第二个字符串表示同一个路径下的多个目标算子名,它应该是"D|E|F"
的形式。例如,GPT2的 target_modules 可以是['backbone/blocks/attention', 'dense1|dense2|dense3']
。如果 target_modules 有第三个值,它的格式应该是"obfuscate_layers:all"
或"obfuscate_layers:int"
,这表示需要混淆重复层(如transformer层或resnet块)的层数。默认值:None
。obf_config (dict) - 模型混淆策略的配置。默认值:
None
。saved_path (str) - 混淆后权重文件的保存路径。默认值:
'./'
。obfuscate_scale (Union[float, int]) - 权重混淆尺度,控制混淆系数的取值范围(>1的int/float)。默认值: 100。
- 返回:
解混淆元数据(dict)。该数据在运行混淆网络时加载使用。
- 异常:
TypeError - network 不是nn.Cell类型。
TypeError - ckpt_files 不是str类型或者 saved_path 不是str类型。
TypeError - target_modules 不是list类型。
TypeError - target_modules 中的元素不是str类型。
TypeError - obf_config 不是dict类型。
ValueError - ckpt_files 目录不存在或者 saved_path 目录不存在。
ValueError - target_modules 中的元素个数小于2。
ValueError - target_modules 的第一个字符串包含大小写字母、数字、
'_'
和'/'
以外的字符。ValueError - target_modules 的第二个字符串为空或包含大小写字母,数字,
'_'
和'/''
以外的字符。ValueError - target_modules 的第三个字符串不是
"obfuscate_layers:all"
或"obfuscate_layers:int"
的格式。
样例:
>>> from mindspore import obfuscate_ckpt, save_checkpoint >>> # Refer to https://gitee.com/mindspore/docs/blob/r2.4.1/docs/mindspore/code/lenet.py >>> net = LeNet5() >>> save_checkpoint(net, './test_net.ckpt') >>> target_modules = ['', 'fc1|fc2'] >>> obfuscate_ckpt(net, './', target_modules=target_modules, saved_path='./')