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='./')