隱私計算FATE-模型訓練

語言: CN / TW / HK

mark

一、説明

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

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

 

二、進入容器

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

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

file

可以看到其中有一個 examples 的目錄,裏面包含各種算法的測試樣例,以及測試的數據。

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

cd examples

mkdir 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.json

flow data upload -c upload_hetero_host.json

通過 -c 來指定配置文件。

成功後返回上傳任務的相關信息:

{
    "data": {
        "board_url": "http://127.0.0.1:8080/index.html#/dashboard?job_id=202205070640371260700&role=local&party_id=0",
        "code": 0,
        "dsl_path": "/data/projects/fate/fateflow/jobs/202205070640371260700/job_dsl.json",
        "job_id": "202205070640371260700",
        "logs_directory": "/data/projects/fate/fateflow/logs/202205070640371260700",
        "message": "success",
        "model_info": {
            "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 就是分別設置組件的輸入輸出,兩個同時都支持兩種類型,分別是數據和模型輸入輸出。

詳細的配置説明可參考官方文檔:https://github.com/FederatedAI/FATE/blob/master/doc/tutorial/dsl_conf/dsl_conf_v2_setting_guide.zh.md

 

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
  • 組件運行參數

關於組件清單以及每一個組件的詳細配置參數可參考官方文檔:https://fate.readthedocs.io/en/latest/zh/federatedml_component/

 

4.3. 提交任務

執行以下命令:

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

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

成功後返回訓練任務的相關信息:

{
    "data": {
        "board_url": "http://127.0.0.1:8080/index.html#/dashboard?job_id=202205070226373055640&role=guest&party_id=9999",
        "code": 0,
        "dsl_path": "/data/projects/fate/fateflow/jobs/202205070226373055640/job_dsl.json",
        "job_id": "202205070226373055640",
        "logs_directory": "/data/projects/fate/fateflow/logs/202205070226373055640",
        "message": "success",
        "model_info": {
            "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 的地址,在瀏覽器訪問即可進入任務的概覽頁面:

http://127.0.0.1:8080/index.html#/dashboard?job_id=202205070226373055640&role=guest&party_id=9999

需要注意的是:因為是在容器裏面執行的,所以 IP 地址需要按照實際情況進行修改。

登錄的用户名和密碼都為 admin

file

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

 

5.2. 組件輸出

點擊中間的 view this job 按鈕,進入任務的詳細信息:

file

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

file

左上角有三個 TAG 分別為:

  • model output:模型輸出,是算法組件的訓練結果。
  • data output:數據輸出,每個組件數據處理後的輸出,用於下游組件的輸入。
  • log:該組件的運行日誌。

 

掃碼關注有驚喜!

file