第4部分:代码审查请求#


Code Review Workflow

到目前为止,我们已经了解了Rachel如何通过PySyft提交她的研究项目,该项目目前正等待数据所有者Owen的审核。

你将学习的内容#

第4部分结束时,你将学习到:

  • 如何访问传入的项目请求;

  • 如何审查用户代码;

  • 如何批准代码请求。

|:data_scientist:| 4.1. 审核传入请求#


Review Incoming Requests

和往常一样,第一步是登录数据站点。这次我们将使用数据所有者Owen的凭证进行登录。

import syft as sy

data_site = sy.orchestra.launch(name="cancer-research-centre")

client = data_site.login(email="[email protected]", password="cancer_research_syft_admin")

然后,我们可以通过client实例访问现有项目:

client.projects

正如预期,Datasite目前包含Rachel为她的"乳腺癌机器学习项目"提出的请求。通过查看描述,Owen可以大致了解即将到来的代码请求内容。

让我们获取请求以便进一步检查。可以通过index访问现有请求:

request = client.requests[0]
request

request对象开始,我们可以立即获取与之关联的代码引用。这段代码对应数据科学家提交的代码,并附加到原始项目中。

在继续测试代码执行之前,数据所有者可以审查代码,并再次确认项目描述中设定的期望是否得到满足:

request.code

警告

隐私与安全代码审查

代码审查必须经过安全和隐私评估后才能批准。为确保隐私得到尊重,数据所有者必须检查代码是否符合其自身的数据发布规则。为确保安全性,建议密切关注恶意代码请求。以下是一些可能有用的安全代码审查链接:

|:data_scientist:| 4.2. 执行代码#

Execute Code

在审查完代码后,Owen的下一步是在提交代码中指定的资产上对模拟真实数据执行该代码。 在审查Rachel的代码后,我们可以看到该函数需要featureslabels两个资产,这些在"乳腺癌生物标志物"数据集中是可用的。

首先,让我们获取特定syft函数的引用:

syft_function = request.code

接下来,让我们获取所需的资产:

bc_dataset = client.datasets["Breast Cancer Biomarker"]
features, labels = bc_dataset.assets

此时,数据所有者可以首先在features.mocktargets.mock上运行syft_function,然后对features.datalabels.data重复相同操作:

result_mock_data = syft_function.run(features_data=features.mock, labels=labels.mock)
result_mock_data

在模拟数据上执行

在模拟数据上的结果与我们在第3部分中最初通过Rachel代码获得的结果完全相同。这是因为Rachel的代码确实正确使用了随机种子,以确保结果可复现。

确认代码在模拟数据上运行无误后,我们可以在真实数据上测试代码,并收集Rachel等待的结果:

result_real_data = syft_function.run(features_data=features.data, labels=labels.data)
result_real_data

|:data_scientist:| 4.3. 批准请求#


Approve request

现在我们已经审查、检查并测试了Rachel在选定资产上的函数,同时也在真实的非公开数据上收集了结果,Owen可以继续批准代码请求:

request.approve()

我们可以通过查看当前可用请求的状态来验证该请求是否已获批准:

client.requests

正如预期,Rachel的请求状态现在显示为已批准

恭喜完成第4部分 🎉#

恭喜您完成教程的第4部分

在这一部分,我们探讨了PySyft中请求审查和批准的全流程。具体来说,在收到Rachel的新请求后,Owen能够查阅她的研究目的,审查提交的代码,并确认所有预期条件和数据访问标准都已满足。最终,在模拟数据和真实数据上执行代码后,该请求获得了批准。

在最后一部分,第5部分,我们将看到Rachel在收到请求批准后如何能够获取她等待的结果。