聯邦學習框架FATE實踐(訓練/測試步驟及參數說明)

一、FATE概念

1. 角色

在Fate的概念中分成3種角色,Guest、Host、Arbiter
(1)Guest表示數據應用方,在縱向算法中,Guest往往是有標籤y的一方。一般是由Guest發起建模流程。
(2)Host是數據提供方
(3)arbiter是用來輔助多方完成聯合建模的,主要的作用是用來聚合梯度或者模型,比如縱向lr裏面,各方將自己一半的梯度發送給arbiter,然後arbiter再聯合優化等等,arbiter還參與以及分發公私鑰,進行加解密服務等等。

二、訓練

1. 準備

在FATE中構建算法模型,需要準備三個配置文件。
(1)上傳數據配置文件:用於上傳數據
(2)DSL配置文件:用於定義建模任務
(3)運行配置文件:用於設置每個組件的參數

2. 定義上傳數據配置文件

(1)參數說明:

file: 文件路徑
head: 指定數據文件是否包含表頭
partition: 指定用於存儲數據的分區數
work_mode: 指定工作模式,0代表單機版,1代表集羣版
table_name&namespace: 存儲數據表的標識符號

(2)示例

{
  "file": "examples/data/breast_b.csv",
  "head": 1,
  "partition": 10,
  "work_mode": 0,
  "table_name": "hetero_breast_b",
  "namespace": "hetero_guest_breast"
}

3. 定義DSL 配置文件

(1)概念

FATE 使用特定語言 DSL 來描述任務,各種模塊可通過一個有向無環圖組織起來。DSL 配置文件採用 json 格式,整個配置文件就是一個 json 對象 (dict)。在這個 dict 的第一級是 “components”,表示這個任務將會使用到的各個模塊,每個獨立的模塊定義在 “components” 之下。

(2)參數說明

module_name:模塊的鍵。用戶需要使用模塊名加數字 _num 作爲對應模塊的 key,例如 dataio_0,並且數字應從 0 開始計數。這用於區分可能存在的多個相同種類的模塊。
module:用來指定使用的模塊。這個參數的內容需要和 federatedml/conf/setting_conf 下各個模塊的文件名保持一致。模塊名鏈接
input:輸入。分爲兩種輸入類型,分別是 data 和 model。
output:輸出。和 input 一樣,有 data 和 model 兩種類型。
need_deploy:是或否。該字段用於指定組件是否需要部署以進行在線推斷。該字段僅用於在線推論dsl推論。

(3)示例

{
  "components" : {
          "dataio_0": {
                "module": "DataIO",
                "input": {
                    "data": {
                        "data": [
                            "args.train_data"
                        ]
                    }
                },
                "output": {
                    "data": ["train"],
                    "model": ["dataio"]
                },
                "need_deploy": true
            }
      }
  }

4.定義運行配置文件

(1)概念

每個模塊都有不同的參數需要配置,不同的 party 對於同一個模塊的參數也可能有所區別。爲了簡化這種情況,對於每一個模塊,FATE 會將所有 party 的不同參數保存到同一個運行配置文件(Submit Runtime Conf)中,並且所有的 party 都將共用這個配置文件。

(2)參數說明

initiator:指定啓動器的角色和參與方ID。
job_parameters:設置work_mode 和processor_per_node。
role:指示所有角色的所有參與方ID。每個角色的 party_id 以列表形式存在,因爲一個任務可能涉及到多個 party 擔任同一種角色。
role_parameters:指定角色的參數,這一部分的參數對於不同的 party 都有所區別。數據需要匹配上傳數據配置文件。
algorithm_parameters:指定所有 party 都共享的參數,每一個參數的 key 都是在 DSL 配置文件中定義好的模塊名。
在完成這些配置文件並提交任務之後,fate-flow 將會把 role_parameters 和 algorithm_parameters 中的所有參數合併。如果合併之後,仍然存在沒有定義的參數,fate-flow 則會使用默認值。fate-flow 會將這些參數分發到對應的 party,並開始聯邦建模任務。
(3)示例

{
    "initiator": {
        "role": "guest",
        "party_id": 10000
    },
    "job_parameters": {
        "work_mode": 1
        "processor_per_node": 6
    },
    "role": {
        "guest": [
            10000
        ],
        "host": [
            10000
        ],
        "arbiter": [
            10000
        ]
    },
    "role_parameters": {"Your role parameters"},
    "algorithm_parameters": {"Your algorithm parameters"},
}

5. 訓練過程

(1)上傳數據

在所有數據提供者之間加載數據,上傳命令:

python ${your_install_path}/fate_flow/fate_flow_client.py -f upload -c ${upload_data_json_path}

${your_install_path}: fate的安裝目錄
${upload_data_json_path}:上傳數據配置文件路徑
每個提供數據的集羣(即guest和host)都需執行此步驟
不能上傳具有相同table_name和namespace的不同數據集

運行此命令後,如果成功,將顯示以下信息:

{
    "data": {
        "pid": 74684,
        "table_name": "breast_b",
        "namespace": "breast_hetero"
    },
    "jobId": "20190801152750392991_436",
    "meta": null,
    "retcode": 0,
    "retmsg": "success",
    "created_at": "2019-08-01 15:27:50"
}

輸出所示,table_name和namespace已經列出,可以在上傳配置文件中作爲輸入配置。

(2)開始建模

命令:

python {fate_install_path}/fate_flow/fate_flow_client.py -f submit_job -c ${runtime_config} -d ${dsl}

${runtime_config}:運行配置文件路徑
${dsl}:dsl文件路徑

(3)檢查日誌

路徑:

${your_install_path}/logs/${your jobid}

${your_install_path}: fate的安裝目錄
${your jobid}:本次的jobid

三、測試

1. 準備

(1)爲需要在預測階段部署的模塊添加或修改“ need_deploy”字段。除了通常不會在預測階段運行的FederatedmSample和Evaluation之外,所有模塊均將True設置爲其默認值。“ need_deploy”字段爲True表示此模塊應運行“擬合”過程,並且擬合模型需要在預測階段進行部署。
(2)除了Intersect模塊之外,其他模塊應該配置模型輸出,這樣fate-flow才能存儲訓練後的模型並使其在預測階段可用。
(3)獲取訓練模型的model_id和model_version,獲取命令:

python ${your_fate_install_path}/fate_flow/fate_flow_client.py -f job_config -j ${jobid} -r guest -p ${guest_partyid}  -o ${job_config_output_path}

${your_fate_install_path}: fate安裝目錄
${jobid} :任務ID
${guest_partyid}:提交工作的一方的partyId
${job_config_output_path}:存儲job_config的路徑

之後,包含模型信息的json文件將被下載到$ {job_config_output_path} /model_info.json中

2. 定義預測配置文件

(1)概念:

此配置文件用於配置用於預測的參數

(2)參數說明

initiator: 指定發起人的角色和參與方ID,應與訓練過程相同
job_parameters:
work_mode:集羣或獨立,與訓練過程相同。
model_id或model_version:1. 準備(3)中獲取的模型指示器。
job_type:工作類型。在這種情況下,它應該是“predict”。
role: 指出所有角色的所有參與ID,應與訓練過程相同
role_parameters:爲每個角色設置參數。在這種情況下,“ eval_data”(意味着將要預測的數據)應同時爲Guest和Host分別填寫

(3)示例

{
	"initiator": {
		"role": "guest",
		"party_id": 10000
	},
	job_parameters": {
		"work_mode": 0,
		"job—type": "predict",
		"model_id": "arbiter-10000#guest-10000#host-10000#model",
		"model_version": "202005140855200605181"
	},
	"role": {
		"guest": [10000],
		"host": [10000],
		"arbiter": [10000]
	}
	                                    ,,n>]
	"role_parametersn": {                                                           
	    "guest": {
	        "args": {
	            "data": {
	                "eva_data": [{"name": "homo_breast_guest", "namespace": "homo_breast_guest"}]
                }        
	        }
        },
		"host": {                           
		    "args":{
		        "data":{
                    "eva_data": [{"name": "homo_breast_host", "namespace": "homo_breast_host"}]
  		         }
            }
        }
    }
}

3. 預測過程

命令:

python ${your_fate_install_path}/fate_flow/fate_flow_client.py -f submit_job -c ${predict_config}

${your_fate_install_path}:fate安裝目錄
${predict_config}:預測配置文件路徑

4. 查看預測結果

查看FATE_board

http://${fate_board_ip}:${fate_board_port}/index.html#/details?job_id=${job_id}&role=guest&party_id=${guest_partyid}

$ {fate_board_ip} $ {fate_board_port}:用於部署FATE模塊的ip和端口。
$ {job_id}:預測任務的job_id。
$ {guest_partyid}:GuestID

5. 下載預測結果

預測任務完成後,前100條預測結果記錄將在FATE-board中可用。可以通過以下命令下載所有結果。

python ${your_fate_install_path}/fate_flow/fate_flow_client.py -f component_output_data -j ${job_id} -p ${party_id} -r ${role} -cpn ${component_name} -o ${predict_result_output_dir}

${job_id}: 預測任務ID
${party_id}: 當前用戶partyID
${role}: 當前用戶的角色
${component_name}: 具有預測結果的組件
${predict_result_output_dir}: 將預測結果下載到的目錄

四、參考

FATE用法 https://github.com/FederatedAI/FATE/tree/master/examples/federatedml-1.x-examples
上傳數據指南 https://github.com/FederatedAI/FATE/blob/master/doc/upload_data_guide_zh.rst
DSL 配置和運行配置 https://github.com/FederatedAI/FATE/blob/master/doc/dsl_conf_setting_guide_zh.rst
聯邦學習與微衆Fate https://blog.csdn.net/qq_28540443/article/details/104416436

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章