项目API (.projects)#

预计阅读时间:5分钟

你将学习的内容#

本指南旨在解释项目如何在数据所有者和数据科学家之间的协作中使用。

简介#

远程数据科学使研究人员能够利用他们无法直接查看的数据来解答问题。

这通常作为大型研究项目的一部分发生,PySyft通过Project对象帮助您对此进行建模。

目的#

项目的主要目的是从一开始就确立项目的目标,以便数据所有者能更好地理解数据科学家的提交内容、他们使用私有数据的动机,并就批准或拒绝其代码请求做出明智决策。此外,项目可视为邀请数据所有者与数据科学家合作解答其问题的契机。

定义#

在PySyft中,项目是syft对象,可以包含一个或多个迭代的代码请求。代码请求是syft对象,其中保存着数据科学家提交的要在私有资产上运行的代码(UserCode)。要了解更多关于代码请求的信息,请查看Code API指南。


Projects Overview

让我们进行初步设置,以探索Project对象提供的功能。

Hide code cell source
import syft as sy
import pandas as pd

# launching a test server
server = sy.orchestra.launch(
    name="my_server",
    port="auto",
    dev_mode=False,
    reset=True
)

do_client = sy.login(
    email="[email protected]",
    password="changethis",
    port=server.port
)

dataset = sy.Dataset(
    name="Dataset name",
    description="**Placehoder Dataset description**",
    asset_list=[sy.Asset(
        name="asset_name",
        data=[1,2,3], # real data
        mock=[4,5,6], # mock data
    )]
)

do_client.upload_dataset(dataset)

do_client.register(
    email="[email protected]",
    password="123",
    password_verify="123",
    name="Curious Scientist"
)

ds_client = sy.login(
    email="[email protected]",
    password="123",
    port=server.port
)
# Let's login into the server, as a data owner and data scientist respectively

do_client = sy.login(
    email="[email protected]",
    password="changethis",
    port=server.port
)

ds_client = sy.login(
    email="[email protected]",
    password="123",
    port=server.port
)

创建新项目#

创建项目需要以下属性:

  • name: 项目的名称。这是一个唯一的名称,因此您不能提交与之前创建的项目同名的项目。

  • description: 简要描述您计划完成的项目概述。如果有与项目目的相关的链接,请在此处包含它们。

  • members: PySyft项目可以扩展为与多个数据站点的数据集协同工作。该字段要求数据科学家传递一个客户端列表,每个客户端都需通过托管该项目数据的每台服务器的认证。

# create a project as a data scientist

new_project = sy.Project(
    name="Sum of private numbers",
    description="I am researching the sum of the data points.",
    members=[ds_client],
)
new_project

提交项目#

当你准备好后,可以将此项目提交给你希望知晓该项目的Datasites。这可以通过以下方式实现:

new_project.send()

注意

更新项目 一旦提交,项目将无法进一步更新。如果您想修改项目范围,需要创建一个新项目。

要检查提交是否成功,您可以查看 client.projects API:

project = ds_client.projects[0]
project

向项目添加请求#

可以在一个项目上创建一个或多个请求。要创建新请求,可以使用project.create_code_request(syft_function)方法。该方法仅接受Syft函数,如下例所示。有关Syft函数的更多详细信息,请参阅代码API指南

@sy.syft_function_single_use(data=ds_client.datasets[0].assets[0])
def sum_of_numbers(data):
    return sum(data)

project.create_code_request(sum_of_numbers)

检查现有项目#

所有用户都可以访问client.projects API。不过,根据他们的角色不同,拥有的权限也不同:

  • ADMINDATA_OWNER 用户可以查看服务器上提交的所有项目

  • DATA_SCIENTIST 用户只能查看自己的项目

do_client.projects