网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
企业连接 EC
云原生应用网络 ANC
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
威胁检测服务 MTD
态势感知 SA
认证测试中心 CTC
边缘安全 EdgeSec
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
Haydn解决方案工厂
数字化诊断治理专家服务
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts 盘古助手
华为云Astro大屏应用
计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
云手机服务器 CPH
专属主机 DeH
弹性伸缩 AS
镜像服务 IMS
函数工作流 FunctionGraph
云耀云服务器(旧版)
VR云渲游平台 CVR
Huawei Cloud EulerOS
网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
企业连接 EC
云原生应用网络 ANC
CDN与智能边缘
内容分发网络 CDN
智能边缘云 IEC
智能边缘平台 IEF
CloudPond云服务
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
威胁检测服务 MTD
态势感知 SA
认证测试中心 CTC
边缘安全 EdgeSec
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
可信智能计算服务 TICS
推荐系统 RES
云搜索服务 CSS
数据可视化 DLV
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
湖仓构建 LakeFormation
智能数据洞察 DataArts Insight
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
开天aPaaS
应用平台 AppStage
开天企业工作台 MSSE
开天集成工作台 MSSI
API中心 API Hub
云消息服务 KooMessage
交换数据空间 EDS
云地图服务 KooMap
云手机服务 KooPhone
组织成员账号 OrgID
云空间服务 KooDrive
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
区块链
区块链服务 BCS
数字资产链 DAC
华为云区块链引擎服务 HBS
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
Haydn解决方案工厂
数字化诊断治理专家服务
价格
成本优化最佳实践
专属云商业逻辑
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
其他
管理控制台
消息中心
产品价格详情
系统权限
客户关联华为云合作伙伴须知
公共问题
宽限期保留期
奖励推广计划
活动
云服务信任体系能力说明
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts 盘古助手
华为云Astro大屏应用
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
存储容灾服务 SDRS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
云存储网关 CSG
专属分布式存储服务 DSS
数据工坊 DWR
地图数据 MapDS
键值存储服务 KVS
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
云原生服务中心 OSC
应用服务网格 ASM
华为云UCS
数据库
云数据库 RDS
数据复制服务 DRS
文档数据库服务 DDS
分布式数据库中间件 DDM
云数据库 GaussDB
云数据库 GeminiDB
数据管理服务 DAS
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
AI开发平台ModelArts
华为HiLens
图引擎服务 GES
图像识别 Image
文字识别 OCR
自然语言处理 NLP
内容审核 Moderation
图像搜索 ImageSearch
医疗智能体 EIHealth
企业级AI应用开发专业套件 ModelArts Pro
人脸识别服务 FRS
对话机器人服务 CBS
语音交互服务 SIS
人证核身服务 IVS
视频智能分析服务 VIAS
城市智能体
自动驾驶云服务 Octopus
盘古大模型 PanguLargeModels
IoT物联网
设备接入 IoTDA
全球SIM联接 GSL
IoT数据分析 IoTA
路网数字化服务 DRIS
IoT边缘 IoTEdge
设备发放 IoTDP
企业应用
域名注册服务 Domains
云解析服务 DNS
企业门户 EWP
ICP备案
商标注册
华为云WeLink
华为云会议 Meeting
隐私保护通话 PrivateNumber
语音通话 VoiceCall
消息&短信 MSGSMS
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
云桌面 Workspace
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMA Exchange
API全生命周期管理 ROMA API
政企自服务管理 ESM
视频
实时音视频 SparkRTC
视频直播 Live
视频点播 VOD
媒体处理 MPC
视频接入服务 VIS
数字内容生产线 MetaStudio
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
专属云
专属计算集群 DCC
开发者工具
SDK开发指南
API签名指南
DevStar
华为云命令行工具服务 KooCLI
Huawei Cloud Toolkit
CodeArts API
云化转型
云架构中心
云采用框架
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
客户运营能力
国际站常见问题
支持计划
专业服务
合作伙伴支持计划
我的凭证
华为云公共事业服务云平台
工业软件
工业数字模型驱动引擎
硬件开发工具链平台云服务
工业数据转换引擎云服务
更新时间:2024-12-20 GMT+08:00
分享

准备数据

(可选)准备MRS Hive数据源

如果您的数据需通过MRS Hive发布到TICS,则您需要提前准备MRS Hive数据源。

准备数据步骤如下:

  1. 购买MRS服务,操作步骤参考创建集群章节,且MRS服务的VPC必须与计算节点部署节点处于同一个VPC内。

    注意事项:

    • “区域”必须与CCE集群在同一个VPC下。
      图1 区域配置
    • “Kerberos”认证无论是否勾选,当前的MRS Hive连接器都支持。
    • “虚拟私有云”与后续要建立的CCE集群必须在同一个VPC下。
    • “安全组”建议在同一个安全组内且对同组节点开放必要端口。

  2. 准备MRS Hive用户,操作步骤参考准备开发用户。需要注意的是用户必须具有Hive权限以及对应库表的访问权限。

    如果要创建MRS安全集群的数据连接,不能使用admin用户。因为admin用户是默认的管理页面用户,这个用户无法作为安全集群的认证用户来使用。您可以参考以下步骤创建一个新的MRS用户:

    1. 使用admin账号登录MRS Manager页面。
    2. 单击“系统 > 权限 > 角色管理”,选择添加角色,角色名称为“tics_hive_read”,配置角色权限依次单击“集群名 > Hive > Hive读写权限”,勾选后续需要发布的Hive库表的读或者写权限。
      图2 添加角色权限

    3. 登录MRS Manager,在页面的“系统设置”中,单击“用户管理”,在用户管理页面,添加用户,添加一个专有用户作为Kerberos认证用户,并且为这个用户添加用户组和分配角色权限,用户组至少选择Hive组,角色至少要勾选新建的角色(用于访问Hive)和Manager_administrator(用于下载安全认证配置),然后根据页面提示完成用户的创建。
      图3 新建用户

    4. 使用新建的用户登录MRS Manager页面,更新初始密码。

  3. 将数据资源导入MRS中的Hive,操作步骤参考从零开始使用Hive中关于导入数据的描述。
  4. 配置安全组,操作步骤请参考如何配置安全组

    安全组配置示例

    该步骤是为了确保计算节点的部署节点能够与该MRS集群通信以获取Hive数据。

    一种方式是让计算节点与MRS集群的master节点处于同一个安全组。

    另一个方式,是配置MRS集群的安全组策略,开放部分端口提供给计算节点。

    必须确保互通的ip和端口:

    • KrbServer的ip,以及tcp端口21730 和udp端口(21732,21731)
    • zookeeper的ip和端口(2181)
    • Hive-server的ip和端口(10000)
    • MRS Manager的TCP端口(9022)

    参考如下:

    图4 添加入方向规则

(可选)准备RDS(MySQL)数据源

如果您的数据需通过RDS(MySQL)发布到TICS,则您需要提前准备RDS(MySQL)数据源。

JDBC数据源支持原生MySQL及RDS(MySQL)的连接。这里介绍RDS(MySQL)准备数据的步骤:

  1. 购买RDS服务,操作步骤参考购买RDS(MySQL)数据库实例,且RDS服务的VPC必须与计算节点部署节点处于同一个VPC内。

    参数配置注意事项:

    • “区域”必须与后续要建立的CCE集群在同一个区域下。
    • “虚拟私有云”与CCE集群必须在同一个VPC下。
    • “安全组”建议在同一个安全组内且对同组节点开放数据库端口。
    • 当前暂不支持开启“SSL连接”

  2. 准备数据库数据及访问用户,操作步骤参考数据库与用户创建。需要注意的是的访问用户必须具有对应库表的访问权限。
  3. 将数据导入RDS库表中。
  4. 在RDS服务控制台,单击实例名进入RDS实例,在连接管理 -> 安全组规则处配置安全组。确保数据库端口对计算节点开放。

(可选)准备DWS数据源

如果您的数据需通过DWS发布到TICS,则您需要提前准备DWS数据源。

JDBC数据源支持DWS(GaussDB SQL)的连接,目前仅支持默认数据库为postgres的DWS数据源。这里介绍DWS(GaussDB SQL)准备数据的步骤:

  1. 购买DWS服务,选择默认数据库为postgres的数仓,创建DWS集群,操作步骤参考创建DWS集群

    参数配置注意事项:

    • “安全组”建议自动创建安全组,或选择与计算节点在同一个安全组内且对同组节点开放数据库端口。
    • 当前暂不支持开启“SSL连接”。
    • 购买“公网访问”,按照实际带宽需求来进行购买

  2. 准备数据库数据及访问用户。需要注意的是访问用户必须具有对应库表的访问权限。
  3. 将数据导入DWS库表中。
  4. 在DWS服务控制台,单击实例名进入DWS集群详情页面,在“网络 -> 安全组”,检查安全组配置。确保数据库端口对计算节点开放。

(可选)准备API数据源

如果您的数据需通过API发布到TICS,则您需要提交准备API数据源。

  1. 目前API数据源支持基础认证方式。
  2. API数据源可以是GET或者POST请求。
  3. API数据源的返回格式如下,使用json格式

[{"id":"1","x0":"3232","x1":15}]

准备本地横向联邦数据资源

  1. 上传数据集文件(作业参与方)

    上传数据集文件到计算节点挂载路径下,供计算节点执行的脚本读取。如果是主机挂载,上传到宿主机的挂载路径下。如果是OBS挂载,使用华为云提供的对象存储服务,上传到当前计算节点使用的对象桶中。

    图5 对象桶名称

    此处以主机挂载为例:

    1. 创建一个主机挂载的计算节点Agent1,挂载路径为/tmp/tics1/。
    2. 使用文件上传工具上传包含数据集iris1.csv的dataset文件夹到宿主机/tmp/tics1/目录下。
      iris1.csv内容如下:
      sepal_length,sepal_width,petal_length,petal_width,class
      5.1,3.5,1.4,0.3,Iris-setosa
      5.7,3.8,1.7,0.3,Iris-setosa
      5.1,3.8,1.5,0.3,Iris-setosa
      5.4,3.4,1.7,0.2,Iris-setosa
      5.1,3.7,1.5,0.4,Iris-setosa
      4.6,3.6,1,0.2,Iris-setosa
      5.1,3.3,1.7,0.5,Iris-setosa
      4.8,3.4,1.9,0.2,Iris-setosa
      5,3,1.6,0.2,Iris-setosa
      5,3.4,1.6,0.4,Iris-setosa
      5.2,3.5,1.5,0.2,Iris-setosa
      5.2,3.4,1.4,0.2,Iris-setosa
      4.7,3.2,1.6,0.2,Iris-setosa
      4.8,3.1,1.6,0.2,Iris-setosa
      5.4,3.4,1.5,0.4,Iris-setosa
      5.2,4.1,1.5,0.1,Iris-setosa
      5.5,4.2,1.4,0.2,Iris-setosa
      4.9,3.1,1.5,0.1,Iris-setosa
      5,3.2,1.2,0.2,Iris-setosa
      5.5,3.5,1.3,0.2,Iris-setosa
      4.9,3.1,1.5,0.1,Iris-setosa
      4.4,3,1.3,0.2,Iris-setosa
      5.1,3.4,1.5,0.2,Iris-setosa
      5,3.5,1.3,0.3,Iris-setosa
      4.5,2.3,1.3,0.3,Iris-setosa
      4.4,3.2,1.3,0.2,Iris-setosa
      5,3.5,1.6,0.6,Iris-setosa
      5.1,3.8,1.9,0.4,Iris-setosa
      4.8,3,1.4,0.3,Iris-setosa
      5.1,3.8,1.6,0.2,Iris-setosa
      4.6,3.2,1.4,0.2,Iris-setosa
      5.3,3.7,1.5,0.2,Iris-setosa
      5,3.3,1.4,0.2,Iris-setosa
      6.8,2.8,4.8,1.4,Iris-versicolor
      6.7,3,5,1.7,Iris-versicolor
      6,2.9,4.5,1.5,Iris-versicolor
      5.7,2.6,3.5,1,Iris-versicolor
      5.5,2.4,3.8,1.1,Iris-versicolor
      5.5,2.4,3.7,1,Iris-versicolor
      5.8,2.7,3.9,1.2,Iris-versicolor
      6,2.7,5.1,1.6,Iris-versicolor
      5.4,3,4.5,1.5,Iris-versicolor
      6,3.4,4.5,1.6,Iris-versicolor
      6.7,3.1,4.7,1.5,Iris-versicolor
      6.3,2.3,4.4,1.3,Iris-versicolor
      5.6,3,4.1,1.3,Iris-versicolor
      5.5,2.5,4,1.3,Iris-versicolor
      5.5,2.6,4.4,1.2,Iris-versicolor
      6.1,3,4.6,1.4,Iris-versicolor
      5.8,2.6,4,1.2,Iris-versicolor
      5,2.3,3.3,1,Iris-versicolor
      5.6,2.7,4.2,1.3,Iris-versicolor
      5.7,3,4.2,1.2,Iris-versicolor
      5.7,2.9,4.2,1.3,Iris-versicolor
      6.2,2.9,4.3,1.3,Iris-versicolor
      5.1,2.5,3,1.1,Iris-versicolor
      5.7,2.8,4.1,1.3,Iris-versicolor
      6.3,3.3,6,2.5,Iris-virginica
      5.8,2.7,5.1,1.9,Iris-virginica
      7.1,3,5.9,2.1,Iris-virginica
      6.3,2.9,5.6,1.8,Iris-virginica
      6.5,3,5.8,2.2,Iris-virginica
      7.6,3,6.6,2.1,Iris-virginica
      4.9,2.5,4.5,1.7,Iris-virginica
      7.3,2.9,6.3,1.8,Iris-virginica
      6.7,2.5,5.8,1.8,Iris-virginica
      7.2,3.6,6.1,2.5,Iris-virginica
      6.5,3.2,5.1,2,Iris-virginica
      6.4,2.7,5.3,1.9,Iris-virginica
      6.8,3,5.5,2.1,Iris-virginica
      5.7,2.5,5,2,Iris-virginica
      5.8,2.8,5.1,2.4,Iris-virginica
      6.4,3.2,5.3,2.3,Iris-virginica
      6.5,3,5.5,1.8,Iris-virginica
      7.7,3.8,6.7,2.2,Iris-virginica
      7.7,2.6,6.9,2.3,Iris-virginica
      6,2.2,5,1.5,Iris-virginica
      6.9,3.2,5.7,2.3,Iris-virginica
      5.6,2.8,4.9,2,Iris-virginica
      7.7,2.8,6.7,2,Iris-virginica
      6.3,2.7,4.9,1.8,Iris-virginica
      6.7,3.3,5.7,2.1,Iris-virginica
      7.2,3.2,6,1.8,Iris-virginica
    3. 为了使容器内的计算节点程序有权限能够读取到文件,使用命令chown -R 1000:1000 /tmp/tics1/修改挂载目录下的文件的属主和组为1000:1000。
    4. 在第二台主机上创建计算节点Agent2,挂载路径为/tmp/tics2/。上传包含数据集iris2.csv的dataset文件夹到宿主机目录下,修改属主。
      iris2.csv的内容如下:
      sepal_length,sepal_width,petal_length,petal_width,class
      5.1,3.5,1.4,0.2,Iris-setosa
      4.9,3,1.4,0.2,Iris-setosa
      4.7,3.2,1.3,0.2,Iris-setosa
      4.6,3.1,1.5,0.2,Iris-setosa
      5,3.6,1.4,0.2,Iris-setosa
      5.4,3.9,1.7,0.4,Iris-setosa
      4.6,3.4,1.4,0.3,Iris-setosa
      5,3.4,1.5,0.2,Iris-setosa
      4.4,2.9,1.4,0.2,Iris-setosa
      4.9,3.1,1.5,0.1,Iris-setosa
      5.4,3.7,1.5,0.2,Iris-setosa
      4.8,3.4,1.6,0.2,Iris-setosa
      4.8,3,1.4,0.1,Iris-setosa
      4.3,3,1.1,0.1,Iris-setosa
      5.8,4,1.2,0.2,Iris-setosa
      5.7,4.4,1.5,0.4,Iris-setosa
      5.4,3.9,1.3,0.4,Iris-setosa
      7,3.2,4.7,1.4,Iris-versicolor
      6.4,3.2,4.5,1.5,Iris-versicolor
      6.9,3.1,4.9,1.5,Iris-versicolor
      5.5,2.3,4,1.3,Iris-versicolor
      6.5,2.8,4.6,1.5,Iris-versicolor
      5.7,2.8,4.5,1.3,Iris-versicolor
      6.3,3.3,4.7,1.6,Iris-versicolor
      4.9,2.4,3.3,1,Iris-versicolor
      6.6,2.9,4.6,1.3,Iris-versicolor
      5.2,2.7,3.9,1.4,Iris-versicolor
      5,2,3.5,1,Iris-versicolor
      5.9,3,4.2,1.5,Iris-versicolor
      6,2.2,4,1,Iris-versicolor
      6.1,2.9,4.7,1.4,Iris-versicolor
      5.6,2.9,3.6,1.3,Iris-versicolor
      6.7,3.1,4.4,1.4,Iris-versicolor
      5.6,3,4.5,1.5,Iris-versicolor
      5.8,2.7,4.1,1,Iris-versicolor
      6.2,2.2,4.5,1.5,Iris-versicolor
      5.6,2.5,3.9,1.1,Iris-versicolor
      5.9,3.2,4.8,1.8,Iris-versicolor
      6.1,2.8,4,1.3,Iris-versicolor
      6.3,2.5,4.9,1.5,Iris-versicolor
      6.1,2.8,4.7,1.2,Iris-versicolor
      6.4,2.9,4.3,1.3,Iris-versicolor
      6.6,3,4.4,1.4,Iris-versicolor
      6.8,2.8,4.8,1.4,Iris-versicolor
      6.2,2.8,4.8,1.8,Iris-virginica
      6.1,3,4.9,1.8,Iris-virginica
      6.4,2.8,5.6,2.1,Iris-virginica
      7.2,3,5.8,1.6,Iris-virginica
      7.4,2.8,6.1,1.9,Iris-virginica
      7.9,3.8,6.4,2,Iris-virginica
      6.4,2.8,5.6,2.2,Iris-virginica
      6.3,2.8,5.1,1.5,Iris-virginica
      6.1,2.6,5.6,1.4,Iris-virginica
      7.7,3,6.1,2.3,Iris-virginica
      6.3,3.4,5.6,2.4,Iris-virginica
      6.4,3.1,5.5,1.8,Iris-virginica
      6,3,4.8,1.8,Iris-virginica
      6.9,3.1,5.4,2.1,Iris-virginica
      6.7,3.1,5.6,2.4,Iris-virginica
      6.9,3.1,5.1,2.3,Iris-virginica
      5.8,2.7,5.1,1.9,Iris-virginica
      6.8,3.2,5.9,2.3,Iris-virginica
      6.7,3.3,5.7,2.5,Iris-virginica
      6.7,3,5.2,2.3,Iris-virginica
      6.3,2.5,5,1.9,Iris-virginica
      6.5,3,5.2,2,Iris-virginica
      6.2,3.4,5.4,2.3,Iris-virginica
      5.9,3,5.1,1.8,Iris-virginica
  2. 准备模型文件/初始权重(作业发起方)

    作业发起方需要提供模型、初始权重(非必须),上传到Agent1的挂载目录下并使用命令chown -R 1000:1000 /tmp/tics1/修改挂载目录下的文件的属主和组。

    使用python代码创建模型文件,保存为二进制文件model.h5,以鸢尾花为例,生成如下的模型:

    import tensorflow as tf
    import keras
     
    model = keras.Sequential([
        keras.layers.Dense(4, activation=tf.nn.relu, input_shape=(4,)),
        keras.layers.Dense(6, activation=tf.nn.relu),
        keras.layers.Dense(3, activation='softmax')
    ])
     
    model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
    model.save("d:/model.h5")

    初始权重的格式是浮点数的数组,与模型对应。使用联邦学习训练出来的结果result_1可以作为初始权重,样例如下:

    -0.23300957679748535,0.7804553508758545,0.0064492723904550076,0.5866460800170898,0.676144003868103,-0.7883696556091309,0.5472091436386108,-0.20961782336235046,0.58524489402771,-0.5079598426818848,-0.47474920749664307,-0.3519996106624603,-0.10822880268096924,-0.5457949042320251,-0.28117161989212036,-0.7369481325149536,-0.04728877171874046,0.003856887575238943,0.051739662885665894,0.033792052417993546,-0.31878742575645447,0.7511205673217773,0.3158722519874573,-0.7290999293327332,0.7187696695327759,0.09846954792737961,-0.06735057383775711,0.7165604829788208,-0.730293869972229,0.4473201036453247,-0.27151209115982056,-0.6971480846405029,0.7360773086547852,0.819558322429657,0.4984433054924011,0.05300116539001465,-0.6597640514373779,0.7849202156066895,0.6896201372146606,0.11731931567192078,-0.5380218029022217,0.18895208835601807,-0.18693888187408447,0.357051283121109,0.05440644919872284,0.042556408792734146,-0.04341210797429085,0.0,-0.04367709159851074,-0.031455427408218384,0.24731603264808655,-0.062861368060112,-0.4265706539154053,0.32981523871421814,-0.021271884441375732,0.15228557586669922,0.1818728893995285,0.4162319302558899,-0.22432318329811096,0.7156463861465454,-0.13709741830825806,0.7237883806228638,-0.5489991903305054,0.47034209966659546,-0.04692812263965607,0.7690137028694153,0.40263476967811584,-0.4405142068862915,0.016018997877836227,-0.04845477640628815,0.037553105503320694
  3. 编写训练脚本(作业发起方)

    作业发起方还需要编写联邦学习训练脚本,其中需要用户自行实现读取数据、训练模型、评估模型、获取评估指标的逻辑。计算节点会将数据集配置文件中的path属性作为参数传递给训练脚本。

    JobParam属性如下:

    class JobParam:
        """训练脚本参数
        """
        # 作业id
        job_id = ''
        # 当前轮数
        round = 0
        # 迭代次数
        epoch = 0
        # 模型文件路径
        model_file = ''
        # 数据集路径
        dataset_path = ''
        # 是否仅做评估
        eval_only = False
        # 权重文件
        weights_file = ''
        # 输出路径
        output = ''
        # 其他参数json字符串
        param = ''

    鸢尾花的训练脚本iris_train.py样例如下:

    # -*- coding: utf-8 -*-
    
    import getopt
    import sys
    
    import keras
    
    import horizontal.horizontallearning as hl
    
    
    def train():
        # 解析命令行输入
        jobParam = JobParam()
        jobParam.parse_from_command_line()
        job_type = 'evaluation' if jobParam.eval_only else 'training'
        print(f"Starting round {jobParam.round} {job_type}")
    
        # 加载模型,设置初始权重参数
        model = keras.models.load_model(jobParam.model_file)
        hl.set_model_weights(model, jobParam.weights_file)
    
        # 加载数据、训练、评估 -- 用户自己实现
        print(f"Load data {jobParam.dataset_path}")
        train_x, test_x, train_y, test_y, class_dict = load_data(jobParam.dataset_path)
    
        if not jobParam.eval_only:
            b_size = 1
            model.fit(train_x, train_y, batch_size=b_size, epochs=jobParam.epoch, shuffle=True, verbose=1)
            print(f"Training job [{jobParam.job_id}] finished")
        eval = model.evaluate(test_x, test_y, verbose=0)
        print("Evaluation on test data: loss = %0.6f accuracy = %0.2f%% \n" % (eval[0], eval[1] * 100))
    
        # 结果以json格式保存 -- 用户读取评估指标
        result = {}
        result['loss'] = eval[0]
        result['accuracy'] = eval[1]
    
        # 生成结果文件
        hl.save_train_result(jobParam, model, result)
    
    
    # 读取CSV数据集,并拆分为训练集和测试集
    # 该函数的传入参数为CSV_FILE_PATH: csv文件路径
    def load_data(CSV_FILE_PATH):
        import pandas as pd
        from sklearn.model_selection import train_test_split
        from sklearn.preprocessing import LabelBinarizer
    
        # 读取目录数据集,读取目录下所有CSV文件
        if os.path.isdir(CSV_FILE_PATH):
           print(f'read file folder [{CSV_FILE_PATH}]')
           all_csv_path = glob.glob(os.path.join(CSV_FILE_PATH, '*.csv'))
           all_csv_path.sort()
           csv_list = []
           for csv_path in all_csv_path:
               csv_list.append(pd.read_csv(csv_path))
           IRIS = pd.concat(csv_list)
        # 读取CSV文件
        else:
            IRIS = pd.read_csv(CSV_FILE_PATH)
        target_var = 'class'  # 目标变量
        # 数据集的特征
        features = list(IRIS.columns)
        features.remove(target_var)
        # 目标变量的类别
        Class = IRIS[target_var].unique()
        # 目标变量的类别字典
        Class_dict = dict(zip(Class, range(len(Class))))
        # 增加一列target, 将目标变量进行编码
        IRIS['target'] = IRIS[target_var].apply(lambda x: Class_dict[x])
        # 对目标变量进行0-1编码(One-hot Encoding)
        lb = LabelBinarizer()
        lb.fit(list(Class_dict.values()))
        transformed_labels = lb.transform(IRIS['target'])
        y_bin_labels = []  # 对多分类进行0-1编码的变量
        for i in range(transformed_labels.shape[1]):
            y_bin_labels.append('y' + str(i))
            IRIS['y' + str(i)] = transformed_labels[:, i]
        # 将数据集分为训练集和测试集
        train_x, test_x, train_y, test_y = train_test_split(IRIS[features], IRIS[y_bin_labels],
                                                            train_size=0.7, test_size=0.3, random_state=0)
        return train_x, test_x, train_y, test_y, Class_dict
    
    
    class JobParam:
        """训练脚本参数
        """
        # required parameters
        job_id = ''
        round = 0
        epoch = 0
        model_file = ''
        dataset_path = ''
        eval_only = False
    
        # optional parameters
        weights_file = ''
        output = ''
        param = ''
    
        def parse_from_command_line(self):
            """从命令行中解析作业参数
            """
            opts, args = getopt.getopt(sys.argv[1:], 'hn:w:',
                                       ['round=', 'epoch=', 'model_file=', 'eval_only', 'dataset_path=',
                                        'weights_file=', 'output=', 'param=', 'job_id='])
            for key, value in opts:
                if key in ['--round']:
                    self.round = int(value)
                if key in ['--epoch']:
                    self.epoch = int(value)
                if key in ['--model_file']:
                    self.model_file = value
                if key in ['--eval_only']:
                    self.eval_only = True
                if key in ['--dataset_path']:
                    self.dataset_path = value
                if key in ['--weights_file']:
                    self.weights_file = value
                if key in ['--output']:
                    self.output = value
                if key in ['--param']:
                    self.param = value
                if key in ['--job_id']:
                    self.job_id = value
    
    
    if __name__ == '__main__':
        train()

准备本地纵向联邦数据资源

纵向联邦学习的数据方分为标签方(数据集中有标签列的一方)和特征方(数据集中没有标签列的一方),目前仅支持CSV格式的文本文件,以及包含CSV文本的数据目录。目录数据集下必须至少包含一个CSV文件,且多个CSV文件表头结果必须保持一致。以下示例中如果没有特别说明,一般都是CSV格式的文件。

例如,标签方有30条数据,每条数据有1列ID、7列特征和1列标签:
ID,f1,f2,f3,f4,f5,f6,f7,LABEL
0,2,7,27,92,950,1128,1139,1
1,2,8,17,157,763,1127,1140,1
2,1,9,12,48,846,1129,1131,1
3,2,8,28,113,1119,1126,1136,0
4,1,6,37,313,762,1127,1132,1
5,2,6,28,329,718,1128,1136,1
6,2,6,29,114,592,1127,1140,1
7,2,7,26,153,927,1127,1132,1
8,2,10,28,161,1000,1127,1136,0
9,2,8,30,117,762,1127,1140,1
10,2,8,23,176,841,1126,1136,0
11,1,10,23,176,928,1127,1140,1
12,2,8,23,53,624,1126,1136,1
13,1,8,23,70,455,1126,1140,1
14,2,10,17,177,791,1126,1138,1
15,2,7,29,156,429,1128,1131,0
16,2,6,28,304,999,1127,1140,1
17,2,7,12,48,446,1126,1136,1
18,2,6,27,372,1000,1127,1131,0
19,1,8,20,343,1106,1128,1131,0
20,2,8,38,301,1039,1128,1136,0
21,1,8,30,134,768,1128,1139,0
22,2,7,26,294,636,1129,1140,1
23,1,7,16,101,944,1127,1136,0
24,2,8,11,43,834,1129,1140,0
25,2,7,32,175,1040,1129,1136,0
26,1,7,22,196,787,1127,1136,1
27,1,10,29,74,555,1127,1131,0
28,1,8,21,364,984,1128,1140,1
29,2,8,15,85,718,1128,1140,1
特征方有30条数据,每条数据有1列ID和6列特征:
ID,f8,f9,f10,f11,f12,f13
0,20,642,1559,1864,1877,2617
1,67,341,1158,1872,1878,2616
2,28,522,1400,1857,1876,2627
3,50,593,1505,1866,1877,2549
4,57,196,1006,1873,1877,2632
5,50,99,907,1866,1877,2313
6,67,348,1165,1872,1878,2627
7,57,132,940,1873,1877,2628
8,50,401,1248,1866,1877,2933
9,67,336,1152,1872,1878,2632
10,50,394,1241,1866,1877,2057
11,67,448,1303,1872,1878,2627
12,50,221,1033,1866,1877,1975
13,11,113,921,1872,1877,2632
14,14,305,1118,1865,1877,2627
15,61,628,1542,1857,1876,2627
16,67,341,1158,1872,1878,2616
17,50,603,1515,1866,1877,2617
18,62,320,1135,1857,1876,2627
19,28,205,1015,1857,1876,2617
20,50,160,968,1866,1877,2064
21,42,418,1269,1864,1877,2630
22,36,235,1047,1859,1877,2616
23,50,97,905,1866,1877,2064
24,1,191,1001,1874,1878,2837
25,50,226,1038,1866,1877,1930
26,50,391,1238,1866,1877,1936
27,56,565,1456,1857,1876,2627
28,71,513,1383,1872,1878,2617
29,67,336,1152,1872,1878,2634

参考准备本地横向联邦数据资源 -> 上传数据集文件,将该文件上传到两个不同计算节点的挂载路径下,即完成纵向联邦数据集配置。

如果数据集文件不含有csv文件表头,需要用户提供额外的配置文件用来说明数据集每一列的信息。示例如下:

以上述特征方数据为例,没有表头的数据集文件示例:
0,20,642,1559,1864,1877,2617
1,67,341,1158,1872,1878,2616
2,28,522,1400,1857,1876,2627
3,50,593,1505,1866,1877,2549
4,57,196,1006,1873,1877,2632
5,50,99,907,1866,1877,2313
6,67,348,1165,1872,1878,2627
7,57,132,940,1873,1877,2628
8,50,401,1248,1866,1877,2933
9,67,336,1152,1872,1878,2632
10,50,394,1241,1866,1877,2057
11,67,448,1303,1872,1878,2627
12,50,221,1033,1866,1877,1975
13,11,113,921,1872,1877,2632
14,14,305,1118,1865,1877,2627
15,61,628,1542,1857,1876,2627
16,67,341,1158,1872,1878,2616
17,50,603,1515,1866,1877,2617
18,62,320,1135,1857,1876,2627
19,28,205,1015,1857,1876,2617
20,50,160,968,1866,1877,2064
21,42,418,1269,1864,1877,2630
22,36,235,1047,1859,1877,2616
23,50,97,905,1866,1877,2064
24,1,191,1001,1874,1878,2837
25,50,226,1038,1866,1877,1930
26,50,391,1238,1866,1877,1936
27,56,565,1456,1857,1876,2627
28,71,513,1383,1872,1878,2617
29,67,336,1152,1872,1878,2634

为尽可能说明配置文件(.json)中的各参数写法,典型示例如下,其中参数介绍如表1所示。

{
    "schema": [
      {
        "column_name": "id",
        "data_type": "INTEGER",
        "is_unique_id": true,
        "column_sensitive_level": "SENSITIVE",
        "feature_type": "CONTINUOUS",
        "privacy_policy": "NONE",
        "comments": "id_Description"
      },
      {
        "column_name": "x0",
        "data_type": "FLOAT",
        "is_unique_id": false,
        "column_sensitive_level": "SENSITIVE",
        "feature_type": "CONTINUOUS",
        "privacy_policy": "NONE"
      },
      {
        "column_name": "x1",
        "data_type": "FLOAT",
        "is_unique_id": false,
        "column_sensitive_level": "NON_SENSITIVE",
        "feature_type": "DISCRETE",
        "privacy_policy": "NONE"
      },
      {
        "column_name": "x2",
        "data_type": "FLOAT",
        "is_unique_id": false,
        "column_sensitive_level": "NON_SENSITIVE",
        "feature_type": "MULTIHOT",
        "privacy_policy": "MASK"
      },
      {
        "column_name": "x3",
        "data_type": "FLOAT",
        "is_unique_id": false,
        "column_sensitive_level": "NON_SENSITIVE",
        "feature_type": "MULTIHOT",
        "privacy_policy": "NONE"
      },
      {
        "column_name": "x4",
        "data_type": "FLOAT",
        "is_unique_id": false,
        "column_sensitive_level": "NON_SENSITIVE",
        "feature_type": "MULTIHOT",
        "privacy_policy": "NONE"
      },
      {
        "column_name": "x5",
        "data_type": "FLOAT",
        "is_unique_id": false,
        "column_sensitive_level": "NON_SENSITIVE",
        "feature_type": "MULTIHOT",
        "privacy_policy": "NONE"
      },
      {
        "column_name": "x6",
        "data_type": "FLOAT",
        "is_unique_id": false,
        "column_sensitive_level": "NON_SENSITIVE",
        "feature_type": "CONTINUOUS",
        "privacy_policy": "NONE"
      }
    ],
    "ext": {
           "multihot_settings": [{
                 "features": ["x2", "x3"],
                  "field_size": 30
           },
           {
                  "features": ["x4", "x5"],
                  "field_size": 25
           }]
    }
  }
表1 配置文件参数介绍

参数

介绍

*column_name

必选参数,字段名称。

*data_type

必选参数,字段类型。

当前支持的取值为:INTEGER、FLOAT、STRING。

is_unique_id

true:表示该字段为唯一标识。

false:表示该字段为非唯一标识。

column_sensitive_level

SENSITIVE:表示该字段敏感。

NON_SENSITIVE:表示该字段非敏感。

feature_type

CONTINUOUS:表示该字段特征类型为连续。

DISCRETE:表示该字段特征类型为离散。

MULTIHOT:表示该字段特征类型为MULTIHOT。当数据集需要配置MULTIHOT分组时,配置文件需要添加ext字段,补充multihot_settings信息。

privacy_policy

NONE:表示该字段不需要脱敏。

MASK:表示该字段需要脱敏。

如果数据集文件不包含ID,该数据集将不能进行样本对齐,且特征选择、联邦训练、评估时会校验特征方、标签方的数据量是否相等,若不相等作业会报错。用户可以提供额外的数据ID文件用来说明数据每一行的ID。以上述特征数据集为例,有表头没有ID的数据集文件和数据ID文件格式如下:

数据集文件内容:
f8,f9,f10,f11,f12,f13
20,642,1559,1864,1877,2617
67,341,1158,1872,1878,2616
28,522,1400,1857,1876,2627
50,593,1505,1866,1877,2549
57,196,1006,1873,1877,2632
50,99,907,1866,1877,2313
67,348,1165,1872,1878,2627
57,132,940,1873,1877,2628
50,401,1248,1866,1877,2933
67,336,1152,1872,1878,2632
50,394,1241,1866,1877,2057
67,448,1303,1872,1878,2627
50,221,1033,1866,1877,1975
11,113,921,1872,1877,2632
14,305,1118,1865,1877,2627
61,628,1542,1857,1876,2627
67,341,1158,1872,1878,2616
50,603,1515,1866,1877,2617
62,320,1135,1857,1876,2627
28,205,1015,1857,1876,2617
50,160,968,1866,1877,2064
42,418,1269,1864,1877,2630
36,235,1047,1859,1877,2616
50,97,905,1866,1877,2064
1,191,1001,1874,1878,2837
50,226,1038,1866,1877,1930
50,391,1238,1866,1877,1936
56,565,1456,1857,1876,2627
71,513,1383,1872,1878,2617
67,336,1152,1872,1878,2634
数据ID文件内容:
id
0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29

准备本地多方安全计算数据资源

本地多方安全计算数据目前仅支持csv格式的文本文件。以下示例中如果没有特别说明,一般都是CSV格式的文件。

例如,数据表中有三列字段:

employee_id,name,salary
491915,tony,5000
491916,mark,7000
491917,jack,9000
491918,tom,9000
491919,hony,9000
500000,jim,20000
500001,tom,9000
500002,hony,9000

参考准备本地横向联邦数据资源 -> 上传数据集文件,将该文件上传到计算节点的挂载路径下,即完成多方安全计算数据集配置。

如果数据集文件不含有csv文件表头,需要用户提供额外的配置文件用来说明数据集每一列的信息。以上述标签方数据集为例,没有表头的数据集文件和数据配置文件的格式如下:

491915,tony,5000
491916,mark,7000
491917,jack,9000
491918,tom,9000
491919,hony,9000
500000,jim,20000
500001,tom,9000
500002,hony,9000

配置文件(.json):

{
  "schema": [
    {
      "column_name": "employee_id",
      "data_type": "STRING",
      "is_unique_id": true,
      "column_sensitive_level": "SENSITIVE",
      "privacy_policy": "NONE"
     },
    {
      "column_name": "name",
      "data_type": "STRING",
      "is_unique_id": false,
      "column_sensitive_level": "NON_SENSITIVE",
      "privacy_policy": "MASK"
     },
    {
      "column_name": "salary",
      "data_type": "INTEGER",
      "is_unique_id": false,
      "column_sensitive_level": "SENSITIVE",
      "privacy_policy": "NONE"
     },
  ]
}
表2 配置文件参数介绍

参数

介绍

*column_name

必选参数,字段名称。

*data_type

必选参数,字段类型。

当前支持的取值为:INTEGER、FLOAT、STRING。

is_unique_id

true:表示该字段为唯一标识。

false:表示该字段为非唯一标识。

column_sensitive_level

SENSITIVE:表示该字段敏感。

NON_SENSITIVE:表示该字段非敏感。

feature_type

CONTINUOUS:表示该字段特征类型为连续。

DISCRETE:表示该字段特征类型为离散。

MULTIHOT:表示该字段特征类型为MULTIHOT。当数据集需要配置MULTIHOT分组时,配置文件需要添加ext字段,补充multihot_settings信息。

privacy_policy

NONE:表示该字段不需要脱敏。

MASK:表示该字段需要脱敏。

相关文档