Opacus 是一个使 PyTorch 模型训练具备差分隐私的库。它支持在客户端代码几乎不变的情况下进行训练,对训练性能的影响很小,并允许客户端随时在线追踪隐私预算的消耗。
目标受众
本代码发布面向两个目标受众:
- 机器学习实践者会发现这是一个对使用差分隐私训练模型的温和介绍,因为它需要最少的代码更改。
- 差分隐私研究人员会发现这很容易进行实验和调整,让他们能专注于重要的事情。
安装
最新版本的 Opacus 可以通过 pip
安装:
pip install opacus
或者,通过 conda
安装:
conda install -c conda-forge opacus
您也可以直接从源代码安装以获取最新功能(同时可能偶尔会有一些小问题):
git clone https://github.com/pytorch/opacus.git
cd opacus
pip install -e .
入门
要使用差分隐私训练您的模型,您只需要实例化一个 PrivacyEngine
并将您的模型、数据加载器和优化器传递给该引擎的 make_private()
方法,以获得它们的私有对应物。
# 像往常一样定义组件
model = Net()
optimizer = SGD(model.parameters(), lr=0.05)
data_loader = torch.utils.data.DataLoader(dataset, batch_size=1024)
# 进入 PrivacyEngine
privacy_engine = PrivacyEngine()
model, optimizer, data_loader = privacy_engine.make_private(
module=model,
optimizer=optimizer,
data_loader=data_loader,
noise_multiplier=1.1,
max_grad_norm=1.0,
)
# 现在像往常一样进行业务
MNIST 示例 展示了使用 Opacus 进行端到端运行的完整过程。示例文件夹 中包含更多类似的例子。
迁移到 1.0
Opacus 1.0 引入了许多库的改进,但也有一些重大变动。如果您一直在使用 Opacus 0.x 并希望更新到最新版本,请使用此 迁移指南。
了解更多
互动教程
我们构建了一系列基于 IPython 的教程,作为使用差分隐私训练模型和使用 Opacus 各种功能的温和介绍。
- 构建具有差分隐私的图像分类器
- 训练用于名称分类的差分隐私 LSTM 模型
- 使用差分隐私在 BERT 上构建文本分类器
- Opacus 指南:高级功能介绍
- Opacus 指南:Grad Sampler
- Opacus 指南:模块验证器与修复器
技术报告和引用
介绍 Opacus 的技术报告,展示其设计原理、数学基础和基准测试,可以在 这里 找到。
如果在您的论文中使用了 Opacus,请考虑引用该报告,如下所示:
@article{opacus,
title={Opacus: {U}ser-Friendly Differential Privacy Library in {PyTorch}},
author={Ashkan Yousefpour and Igor Shilov and Alexandre Sablayrolles and Davide Testuggine and Karthik Prasad and Mani Malek and John Nguyen and Sayan Ghosh and Akash Bharadwaj and Jessica Zhao and Graham Cormode and Ilya Mironov},
journal={arXiv preprint arXiv:2109.12298},
year={2021}
}
博客文章和讲座
如果您想了解更多关于 DP-SGD 和相关主题的信息,请查看我们的一系列博客文章和讲座:
- 差分隐私系列第一部分 | DP-SGD 算法解释
- 差分隐私系列第二部分 | Opacus 中的高效逐样本梯度计算
- PriCon 2020 教程:使用 Opacus 进行差分隐私模型训练
- PyTorch 开发者日 2020 | PyTorch 中的差分隐私
- Opacus v1.0 精彩亮点 | PyTorch 开发者日 2021
常见问题
在 常见问题 页面中查看一些关于差分隐私和 Opacus 的常见问题的答案。
贡献
请参阅 贡献指南 文件,了解如何参与贡献。还请查看仓库中的 README 文件,了解代码的组织方式。
许可证
此代码是根据 Apache 2.0 许可证发布的,具体内容请参阅 LICENSE 文件。