
一、說明
本文分享基于 Fate 自帶的測驗樣例,進行 縱向邏輯回歸 演算法的模型訓練,并且通過 FATE Board 可視化查看結果,
本文的內容為基于 《隱私計算FATE-概念與單機部署指南》中部署的環境,
二、進入容器
執行以下命令,進入 Fate 的容器中:
docker exec -it $(docker ps -aqf "name=standalone_fate") bash

可以看到其中有一個 examples 的目錄,里面包含各種演算法的測驗樣例,以及測驗的資料,
進入到 examples 后,創建一個 my_test 的目錄:
cd examples
mkdir my_test
注意:后面所有的操作都默認在該目錄下執行,
三、上傳資料
第一步需要準備好訓練要用的資料,我們可以通過 csv檔案 把資料上傳到 Fate 里面;
自帶的測驗資料都在容器里的 /data/projects/fate/examples/data 目錄中:

可以看到每種演算法都分別提供了 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 組成的:

比如第一個模塊 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目錄下,

從上圖可以看到在 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

左邊 Dataset info 是各個參與方的資訊,中間呢是任務的運行情況顯示運行的進度條以及耗時,右邊是整個任務流程的組件 DAG 圖,下方是任務日志資訊,
5.2. 組件輸出
點擊中間的 view this job 按鈕,進入任務的詳細資訊:

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

左上角有三個 TAG 分別為:
- model output:模型輸出,是演算法組件的訓練結果,
- data output:資料輸出,每個組件資料處理后的輸出,用于下游組件的輸入,
- log:該組件的運行日志,
掃碼關注有驚喜!

轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/493093.html
標籤:其他
