Fate實戰——實現集群橫向邏輯回歸

      網友投稿 1056 2025-04-04

      摘要

      我在做集群的聯邦學習之前,用主機部署的方式,實現了單機版的橫向聯邦學習。參考了下面的兩篇文章:

      聯邦學習實戰-2-用FATE從零實現橫向邏輯回歸_文杰的博客-CSDN博客

      Ubuntu18.04上部署單機 Fate1.6.0, 并使用PyCharm進行開發和調試。 - 老妹兒的 - 博客園 (cnblogs.com)

      參考這兩篇就可以實現單機版的部署和橫向聯邦學習,建議大家在做集群橫向聯邦學習之前,先把單機版的搞明白。搞明白單機版后,實現集群的橫向聯邦。我的集群是個星型的集群,三個節點通過exchange相鏈接,三個節點的patryid分別是9999,10000,8888。文章對實現過程做個記錄。

      1 切分數據集

      數據集和單機版的一樣也是采用威斯康星州臨床科學中心開源的乳腺癌腫瘤數據集

      from sklearn.datasets import load_breast_cancer

      為了模擬橫向聯邦建模的場景,我們首先在本地將乳腺癌數據集切分為特征相同的橫向聯邦形式,當前的breast數據集有569條樣本,我們將前面的469條作為訓練樣本,后面的100條作為評估測試樣本。

      從469條訓練樣本中,選取前200條作為公司A的本地數據,保存為breast_1_train.csv,將剩余的269條數據作為公司B的本地數據,保存為breast_2_train.csv。

      測試數據集可以不需要切分,兩個參與方使用相同的一份測試數據即可,文件命名為breast_eval.csv。

      splitDataset.py

      from sklearn.datasets import load_breast_cancer import pandas as pd breast_dataset = load_breast_cancer() breast = pd.DataFrame(breast_dataset.data, columns=breast_dataset.feature_names) breast = (breast-breast.mean())/(breast.std()) col_names = breast.columns.values.tolist() columns = {} for idx, n in enumerate(col_names): columns[n] = "x%d"%idx breast = breast.rename(columns=columns) breast['y'] = breast_dataset.target breast['idx'] = range(breast.shape[0]) idx = breast['idx'] breast.drop(labels=['idx'], axis=1, inplace = True) breast.insert(0, 'idx', idx) breast = breast.sample(frac=1) train = breast.iloc[:469] eval = breast.iloc[469:] breast_1_train = train.iloc[:200] breast_1_train.to_csv('breast_1_train.csv', index=False, header=True) breast_2_train = train.iloc[200:] breast_2_train.to_csv('breast_2_train.csv', index=False, header=True) eval.to_csv('breast_eval.csv', index=False, header=True)

      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

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      注:這一部分的邏輯和單機版的保持一致,我沒有做更改。

      2 數據轉換輸入

      在集群的fate01上的/data/projects/fate目錄下新建chapter05文件夾(單機版叫這個名字,我也懶得換了),進入chapter05文件夾然后新建data文件夾,然后將數據集放到該目錄下的data目錄中。

      參與的節點重復上面的操作,每個節點放置一份數據。

      完成數據轉換,需要一個配置文件和一個啟動程序,我演示第一個節點的操作。

      編寫訓練集的配置文件

      upload_train.json

      { "file": "chapter05/data/breast_1_train.csv", //訓練集的路徑,我們這次試用fate_flow_client.py上傳數據,默認的home路徑是/data/projects/fate,所以我們需要把剩下的路徑補充完整 "head": 1, "partition": 1,//是否要分區,小數據不用分區 "work_mode": 1,//0是單機,1是集群,我們要注意 "table_name": "homo_breast_1_train", "namespace": "homo_host_breast_train"http://后面這兩個字段一個是數據集的名字和命名空間,這個在后面的配置中要用到。 }

      1

      2

      3

      4

      5

      6

      7

      8

      編寫驗證集的配置文件

      upload_eval.json

      { "file": "chapter05/data/breast_eval.csv", //訓練集的路徑,我們這次試用fate_flow_client.py上傳數據,默認的home路徑是/data/projects/fate,所以我們需要把剩下的路徑補充完整 "head": 1, "partition": 1,//是否要分區,小數據不用分區 "work_mode": 1,//0是單機,1是集群,我們要注意 "table_name": "homo_breast_eval", "namespace": "homo_host_breast_eval"http://后面這兩個字段一個是數據集的名字和命名空間,這個在后面的配置中要用到。 }

      1

      2

      3

      4

      5

      6

      7

      8

      上面的配置每個節點都配置一份,切分數據集時,訓練集切了兩份,驗證集只有一份,所以驗證集配置成一樣的,訓練我在fate01和fate03上使用的breast_1_train.csv,在fate02上用breast_2_train.csv,大家根據自己的情況修改配置文件即可。

      下面執行上傳數據的操作,有兩種方式上傳數據,一種是用fate_flow_client.py上傳數據,一種使用flow命令上傳數據,我在使用flow上傳數據時遇到一些問題,所以先演示如何使用fate_flow_client.py上傳數據。具體的詳細使用可以查閱官方的文檔。

      官方文檔:上傳數據指南 — FATE documentation

      啟動虛擬環境,并進入chapter05下面,如圖:

      然后執行:

      python ../fate_flow/python/fate_flow_client.py -f upload -c upload_train.json

      1

      -f :函數名稱

      -c :配置文件

      將驗證集也上傳上去:

      fate02和fate03重復上面的步驟,把訓練集和測試傳上去。

      到這里數據集已經上傳,接著就可以開始做訓練了。

      3 模型訓練

      為了讓任務模型的構建更加靈活,目前 FATE 使用了一套自定的領域特定語言 (DSL) 來描述任務。在 DSL 中,各種模塊(例如數據讀寫 data_io,特征工程 feature-engineering, 回歸 regression,分類 classification)可以通向一個有向無環圖 (DAG) 組織起來。通過各種方式,用戶可以根據自身的需要,靈活地組合各種算法模塊。

      除此之外,每個模塊都有不同的參數需要配置,不同的 party 對于同一個模塊的參數也可能有所區別。為了簡化這種情況,對于每一個模塊,FATE 會將所有 party 的不同參數保存到同一個運行配置文件(Submit Runtime Conf)中,并且所有的 party 都將共用這個配置文件。這個指南將會告訴你如何創建一個 DSL 配置文件。

      官方的文檔:DSL 配置和運行配置 V1 — FATE documentation

      所以我們需要寫一個DSL配置文件和Config文件。

      1)DSL文件配置

      文件名字:test_homolr_train_job_dsl.json

      { "components" : { "dataio_0": { "module": "DataIO", "input": { "data": { "data": [ "args.train_data" ] } }, "output": { "data": ["train"], "model": ["dataio"] } }, "dataio_1": { "module": "DataIO", "input": { "data": { "data": [ "args.eval_data" ] }, "model": ["dataio_0.dataio"] }, "output": { "data": ["eval_data"] } }, "feature_scale_0": { "module": "FeatureScale", "input": { "data": { "data": [ "dataio_0.train" ] } }, "output": { "data": ["train"], "model": ["feature_scale"] } }, "feature_scale_1": { "module": "FeatureScale", "input": { "data": { "data": [ "dataio_1.eval_data" ] } }, "output": { "data": ["eval_data"], "model": ["feature_scale"] } }, "homo_lr_0": { "module": "HomoLR", "input": { "data": { "train_data": [ "feature_scale_0.train" ] } }, "output": { "data": [ "train" ], "model": ["homolr"] } }, "homo_lr_1": { "module": "HomoLR", "input": { "data": { "eval_data": [ "feature_scale_1.eval_data" ] }, "model": [ "homo_lr_0.homolr" ] }, "output": { "data": [ "eval_data" ], "model": ["homolr"] } }, "evaluation_0": { "module": "Evaluation", "input": { "data": { "data": [ "homo_lr_0.train" ] } } }, "evaluation_1": { "module": "Evaluation", "input": { "data": { "data": [ "homo_lr_1.eval_data" ] } } } } }

      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

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      93

      94

      95

      Fate實戰——實現集群橫向邏輯回歸

      96

      97

      98

      99

      100

      101

      102

      103

      104

      105

      106

      107

      108

      109

      110

      111

      112

      113

      114

      115

      116

      我在DSL里面配置了訓練集組件和驗證集組件,這個組件的配置在單機版的橫向聯邦中提到過。

      2)Config配置文件

      文件名字:test_homolr_train_job_conf.json

      { "initiator": { "role": "guest", "party_id": 9999 }, "job_parameters": { "work_mode": 1 }, "role": { "guest": [ 9999 ], "host": [ 10000,8888 ], "arbiter": [ 9999 ] }, "role_parameters": { "guest": { "args": { "data": { "train_data": [ { "name": "homo_breast_2_train", "namespace": "homo_host_breast_train" } ], "eval_data": [ { "name": "homo_breast_eval", "namespace": "homo_host_breast_eval" } ] } }, "dataio_0": { "label_name": ["y"] } }, "host": { "args": { "data": { "train_data": [ { "name": "homo_breast_1_train", "namespace": "homo_host_breast_train" }, { "name": "homo_breast_2_train", "namespace": "homo_host_breast_train" } ], "eval_data": [ { "name": "homo_breast_eval", "namespace": "homo_host_breast_eval" }, { "name": "homo_breast_eval", "namespace": "homo_host_breast_eval" } ] } }, "dataio_0": { "label_name": ["y","y"] }, "evaluation_0": { "need_run": [ false,false ] } } }, "algorithm_parameters": { "dataio_0": { "with_label": true, "label_name": "y", "label_type": "int", "output_format": "dense" }, "homo_lr_0": { "penalty": "L2", "optimizer": "sgd", "tol": 1e-05, "alpha": 0.01, "max_iter": 10, "early_stop": "diff", "batch_size": 500, "learning_rate": 0.15, "decay": 1, "decay_sqrt": true, "init_param": { "init_method": "zeros" }, "encrypt_param": { "method": null }, "cv_param": { "n_splits": 4, "shuffle": true, "random_seed": 33, "need_cv": false } } } }

      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

      30

      31

      32

      33

      34

      35

      36

      37

      38

      39

      40

      41

      42

      43

      44

      45

      46

      47

      48

      49

      50

      51

      52

      53

      54

      55

      56

      57

      58

      59

      60

      61

      62

      63

      64

      65

      66

      67

      68

      69

      70

      71

      72

      73

      74

      75

      76

      77

      78

      79

      80

      81

      82

      83

      84

      85

      86

      87

      88

      89

      90

      91

      92

      93

      94

      95

      96

      97

      98

      99

      100

      101

      102

      103

      104

      105

      106

      107

      108

      109

      110

      111

      112

      113

      114

      寫完上面的配置文件后,將他們放到guest的chapter05文件夾下面,然后就可以開始訓練了。

      在fate02的chapter05中,啟動虛擬環境,執行訓練。

      cd /data/projects/fate/chapter05 source ../bin/init_env.sh python ../python/fate_flow/fate_flow_client.py -f submit_job -c test_homolr_train_job_conf.json -d test_homolr_train_job_dsl.json

      1

      2

      3

      如果出現如下圖的錯誤,說明flow的服務沒有啟動這時候就需要重啟所有的服務,執行命令:

      cd /data/projects/common/supervisord sh service.sh restart all

      1

      2

      然后在執行提交任務的指令,出現下面的信息就說明任務提交成功。

      查看fate01、fate02、fate03的運行狀態,如下圖:

      看到下圖所有的訓練組件變成綠色,恭喜你,成功了!!!

      機器學習

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。

      上一篇:如何在XLS表格中直接得到函數公式
      下一篇:excel圖表怎么將十進制數轉換成指定進制的數
      相關文章
      国产午夜亚洲精品国产| 国产V亚洲V天堂无码久久久| 亚洲国产精品综合久久一线| 亚洲人成综合网站7777香蕉| 亚洲日韩乱码中文无码蜜桃臀| 亚洲成Av人片乱码色午夜| 国产亚洲美女精品久久久| 亚洲成A人片在线观看中文| www.91亚洲| 久99精品视频在线观看婷亚洲片国产一区一级在线 | mm1313亚洲精品国产| 国产成人精品久久亚洲高清不卡| 亚洲精品色播一区二区| 亚洲国产精品精华液| 国产精品亚洲一区二区三区在线观看 | 亚洲αⅴ无码乱码在线观看性色| 亚洲爆乳无码精品AAA片蜜桃| 国产AV无码专区亚洲AV蜜芽| 亚洲heyzo专区无码综合| 久久久久亚洲AV无码去区首| 国产精品亚洲二区在线| 亚洲毛片av日韩av无码 | 亚洲午夜电影一区二区三区| 亚洲一区免费在线观看| 亚洲一卡2卡三卡4卡无卡下载 | 亚洲精品制服丝袜四区| 久久亚洲AV无码精品色午夜麻| 久久久亚洲精品国产| 亚洲视频一区网站| 67194在线午夜亚洲| 亚洲欧美一区二区三区日产| 337p日本欧洲亚洲大胆人人| 亚洲精品视频在线看| 亚洲自偷自偷在线制服| 午夜亚洲国产理论秋霞| 亚洲一区二区三区91| 亚洲а∨精品天堂在线| 国产精品亚洲不卡一区二区三区| 久久亚洲高清观看| 亚洲熟妇无码久久精品| 亚洲天然素人无码专区|