1 背景
通常情况下,MindIE从配置文件获取模型权重文件的路径,并加载磁盘上的权重文件。但模型是模型厂家重要的资产,模型厂家会做加密保护。当模型厂家落盘的权重文件是加密时,则MindIE需要支持从内存加载已解密的权重,包括基础权重和LoRA权重。
2 权重加密阶段
2.1 加密算法选择
下载MindIE LLM仓的权重加解密样例,详见链接。
加密算法实现逻辑在encrypt.py中的EncryptTools类中的encrypt方法中实现。若使用其他加密算法,用户可自行修改encrypt方法中的代码实现。
class EncryptTools(Encrypt):
def __init__(self) -> None:
super().__init__()
# generate key
self.key = your key info
def encrypt(self, tensor: torch.Tensor):
"""
输入是原始tensor,输出是加密tensor。
保证加密前后,encrypted_tensor和tensor的shape一致。
"""
return encrypted_tensor
针对权重文件的具体解密算法,用户根据选择加密算法实现DecryptTools类中的 decrypt方法。
class DecryptTools(Decrypt):
'''
写一个自己的解密类,以AES-256,CTR模式 加密算法为例。
'''
def __init__(self, key_path, **kwargs) -> None:
super().__init__()
def decrypt(self, encrypted_tensor: torch.Tensor):
"""
输入是加密tensor,输出是解密tensor。
保证解密前后,encrypted_tensor和decrypted_tensor的shape一致。
"""
return decrypted_tensor
通常,加密阶段一般在客户的开发环境生成加密权重,在运行环境部署加密后的权重。
注意事项:
1)选择安全的加密算法,例如:AES-256, CTR模式加密算法;
2)对权重和密钥文件存储路径进行合法性和安全性校验。

最低0.47元/天 解锁文章
1123

被折叠的 条评论
为什么被折叠?



