隱私計算 FATE - 模型訓練

小程式開發發表於2022-07-12

mark

一、說明

本文分享基於 Fate 自帶的測試樣例,進行  縱向邏輯迴歸 演算法的模型訓練,並且通過  FATE Board 視覺化檢視結果。

本文的內容為基於《隱私計算 FATE - 概念與單機部署指南》中部署的環境。

 

二、進入容器

執行以下命令,進入 Fate 的容器中:

docker exec -it $(docker ps -aqf "name=standalone_fate") bash

file

可以看到其中有一個  examples 的目錄,裡面包含各種演算法的測試樣例,以及測試的資料。

進入到  examples 後,建立一個  my_test 的目錄:

cd examplesmkdir my_test

注意:後面所有的操作都預設在該目錄下執行。

 

三、上傳資料

第一步需要準備好訓練要用的資料,我們可以通過  csv檔案 把資料上傳到 Fate 裡面;

自帶的測試資料都在容器裡的  /data/projects/fate/examples/data 目錄中:

file

可以看到每種演算法都分別提供了 guest 和 host 兩方的資料。

 

3.1. 準備 guest 方配置

在  my_test 目錄下,執行以下命令:

vi upload_hetero_guest.json

內容如下:

{  "file": "/data/projects/fate/examples/data/breast_hetero_guest.csv",  "head": 1,  "partition": 10,	"work_mode": 0,  "namespace": "experiment",  "table_name": "breast_hetero_guest"}
  • file:資料檔案的路徑
  • head:資料檔案是否包含表頭
  • partition:用於儲存資料的分割槽數
  • work_mode:工作模式,0 為單機版,1 為叢集版
  • namespace:名稱空間
  • table_name:資料表名

 

3.2. 準備 host 方配置

在  my_test 目錄下,執行以下命令:

vi upload_hetero_host.json

內容如下:

{  "file": "/data/projects/fate/examples/data/breast_hetero_host.csv",  "head": 1,  "partition": 10,	"work_mode": 0,  "namespace": "experiment",  "table_name": "breast_hetero_host"}

注意檔名與表名是和 guest 方不一樣的。

 

3.3. 執行上傳

執行以下兩個命令,分別上傳 guest 和 host 方的資料:

flow data upload -c upload_hetero_guest.jsonflow data upload -c upload_hetero_host.json

通過 -c 來指定配置檔案。

成功後返回上傳任務的相關資訊:

{    "data": {        "board_url": "{            "model_id": "local-0#model",            "model_version": "202205070640371260700"
        },        "namespace": "experiment",        "pipeline_dsl_path": "/data/projects/fate/fateflow/jobs/202205070640371260700/pipeline_dsl.json",        "runtime_conf_on_party_path": "/data/projects/fate/fateflow/jobs/202205070640371260700/local/0/job_runtime_on_party_conf.json",        "runtime_conf_path": "/data/projects/fate/fateflow/jobs/202205070640371260700/job_runtime_conf.json",        "table_name": "breast_hetero_guest",        "train_runtime_conf_path": "/data/projects/fate/fateflow/jobs/202205070640371260700/train_runtime_conf.json"
    },    "jobId": "202205070640371260700",    "retcode": 0,    "retmsg": "success"}

 

3.4. 檢查資料

執行以下命令,檢視錶的相關資訊:

flow table info -t breast_hetero_guest -n experiment

執行後返回:

{    "data": {        "address": {            "home": null,            "name": "breast_hetero_guest",            "namespace": "experiment",            "storage_type": "LMDB"
        },        "count": 569,        "exist": 1,        "namespace": "experiment",        "partition": 10,        "schema": {            "header": "y,x0,x1,x2,x3,x4,x5,x6,x7,x8,x9",            "sid": "id"
        },        "table_name": "breast_hetero_guest"
    },    "retcode": 0,    "retmsg": "success"}

 

四、模型訓練

接下來我們就開始進行建模任務,需要準備兩個配置檔案,流程配置檔案 dsl 和引數配置檔案 conf。

4.1. 準備 dsl 檔案

執行以下命令:

cp /data/projects/fate/examples/dsl/v2/hetero_logistic_regression/hetero_lr_normal_dsl.json /data/projects/fate/examples/my_test/

直接把 Fate 自帶的縱向邏輯迴歸演算法樣例,複製到我們的  my_test 目錄下。

Fate 把各種演算法實現了元件化,dsl 檔案主要配置整個建模流程是由哪些 component 組成的:

file

比如第一個模組  Reader 就是用於讀取剛剛上傳的訓練資料,然後是  DataTransform 模組,把訓練資料轉換為例項物件,一般所有的建模流程都需要有前面這兩個模組;

總的來說配置一個 component 需要以下內容:

- module:模型元件,Fate 當前支援 37 個模型元件 
- input: 
	- date:資料輸入	- module:模型輸入- output:	- date:資料輸出	- module:模型輸出

module 是定義這個元件的型別,當前 Fate 已經自帶 37 個元件可以使用,當然我們也可以自己開發新增演算法元件進去;

input 和 output 就是分別設定元件的輸入輸出,兩個同時都支援兩種型別,分別是資料和模型輸入輸出。

 

4.2. 準備 conf 檔案

執行以下命令:

cp /data/projects/fate/examples/dsl/v2/hetero_logistic_regression/hetero_lr_normal_conf.json /data/projects/fate/examples/my_test/

直接把 Fate 自帶的縱向邏輯迴歸演算法樣例,複製到我們的  my_test 目錄下。

file

從上圖可以看到在  component_parameters 元素下,配置  Reader 元件所讀取的表名。

該配置主要是配置以下內容:

  • DSL 的版本
  • 各個參與方的角色以及 party_id
  • 元件執行引數

4.3. 提交任務

執行以下命令:

flow job submit -d hetero_lr_normal_dsl.json -c hetero_lr_normal_conf.json

通過 -d 和 -c 來分別指定 dsl 和 conf 配置檔案。

成功後返回訓練任務的相關資訊:

{    "data": {        "board_url": "{            "model_id": "arbiter-10000#guest-9999#host-10000#model",            "model_version": "202205070226373055640"
        },        "pipeline_dsl_path": "/data/projects/fate/fateflow/jobs/202205070226373055640/pipeline_dsl.json",        "runtime_conf_on_party_path": "/data/projects/fate/fateflow/jobs/202205070226373055640/guest/9999/job_runtime_on_party_conf.json",        "runtime_conf_path": "/data/projects/fate/fateflow/jobs/202205070226373055640/job_runtime_conf.json",        "train_runtime_conf_path": "/data/projects/fate/fateflow/jobs/202205070226373055640/train_runtime_conf.json"
    },    "jobId": "202205070226373055640",    "retcode": 0,    "retmsg": "success"}

其中有幾個屬性需要關注:

  • board_url:這個地址是可以檢視任務情況的 FATE Board 地址。
  • job_id:任務的唯一關鍵字,可以在 FATE Board 上通過這個 ID 檢視任務的詳情。
  • logs_directory:是日誌的路徑,可以通過這個地址檢視任務的各種日誌資訊。
  • model_info:裡面有 model_id 和 model_version 這兩個資訊會在執行預測任務時需要用到,預測之前需要指定基於哪個模型來執行預測任務,而這兩個資訊就是模型的唯一關鍵字。

 

五、視覺化

5.1. 任務概覽

通過上面返回資訊中  board_url 的地址,在瀏覽器訪問即可進入任務的概覽頁面:

file

左邊 Dataset info 是各個參與方的資訊,中間呢是任務的執行情況顯示執行的進度條以及耗時,右邊是整個任務流程的元件  DAG 圖,下方是任務日誌資訊。

 

5.2. 元件輸出

點選中間的  view this job 按鈕,進入任務的詳細資訊:

file

DAG 圖中的每個元件都是可以點選的,選中  hetero_lr_0 元件,點選右下角的  view the outputs 按鈕,進入  邏輯迴歸 元件的輸出頁面:

file

左上角有三個 TAG 分別為:

  • model output:模型輸出,是演算法元件的訓練結果。
  • data output:資料輸出,每個元件資料處理後的輸出,用於下游元件的輸入。
  • log:該元件的執行日誌。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70019616/viewspace-2905326/,如需轉載,請註明出處,否則將追究法律責任。

相關文章