KubeFATE を使用してマルチマシンのフェデレーテッド ラーニング環境をデプロイする (2)

目次

1. 準備作業

2. 導入操作

1. デプロイメント スクリプト ファイルを生成してデプロイします (デプロイメント マシン (マシン A) で操作します)。

2. 導入が成功したかどうかを確認する

3. 接続性の検証

3. 簡単なトレーニングと推論

1. データをアップロードする

2. 研修の実施

3. トレーニング結果の表示

4. デプロイメントの削除


1. 準備作業

  1. 2 つのホスト (物理マシンまたは仮想マシン、Ubuntu または Centos7 システム、root ユーザーとしてログイン可能)
  2. すべてのホストに Docker をインストールする
  3. すべてのホストに Docker-Compose をインストールする
  4. 導入マシンはインターネットに接続できるため、ホストは相互に通信できます。
  5. 実行中のマシンは FATE のコンポーネント イメージをダウンロードしました

dockerとdocker-composeのインストール方法とFATEイメージのダウンロード方法は前回の記事で紹介しています。

https://blog.csdn.net/SAGIRIsagiri/article/details/124105064 https://blog.csdn.net/SAGIRIsagiri/article/details/124105064

ここの 2 つのマシンはどちらも仮想マシン (CentOS 7 システム) であり、ここではマシン A とマシン B と呼ばれます。マシン A は、デプロイメント マシンとターゲット マシンの両方として機能します。マシン A の IP アドレスは 192.168.16.129 で、IP アドレスは 192.168.16.129 です。マシン B のアドレスは 192.168.16.130 で、すべて root としてログインしています。

2. 導入操作

1. デプロイメント スクリプト ファイルを生成してデプロイします (デプロイメント マシン (マシン A) で操作します)。

//下载并解压Kubefate1.3的kubefate-docker-compose.tar.gz资源包
# curl -OL https://github.com/FederatedAI/KubeFATE/releases/download/v1.3.0/kubefate-docker-compose.tar.gz

# tar -xzf kubefate-docker-compose.tar.gz        //进行解压

# cd docker-deploy/            //进入docker-deploy目录
 
# vi parties.conf              //编辑parties.conf配置文件
 
user=root                                   
dir=/data/projects/fate                     
partylist=(10000 9999)          //此处为两个集群的ID            
partyiplist=(192.168.16.129 192.168.16.130)       //此处写入两个目标机的IP
servingiplist=(192.168.16.129 192.168.16.130)     //此处写入两个目标机的IP
exchangeip=
 
# bash generate_config.sh          //生成部署文件
 
# bash docker_deploy.sh all        //执行启动部署集群脚本
//需要输入几次目标机的root密码

2. 導入が成功したかどうかを確認する

ターゲット マシン A と B でそれぞれ確認します。

# docker ps                    //集群A(ID 10000)
CONTAINER ID   IMAGE                                      COMMAND                  CREATED          STATUS          PORTS                                                                                            NAMES
6186cc50baa1   federatedai/serving-proxy:1.2.2-release    "/bin/sh -c 'java -D…"   14 minutes ago   Up 12 minutes   0.0.0.0:8059->8059/tcp, :::8059->8059/tcp, 0.0.0.0:8869->8869/tcp, :::8869->8869/tcp, 8879/tcp   serving-10000_serving-proxy_1
870a3048336b   federatedai/serving-server:1.2.2-release   "/bin/sh -c 'java -c…"   14 minutes ago   Up 12 minutes   0.0.0.0:8000->8000/tcp, :::8000->8000/tcp                                                        serving-10000_serving-server_1
9a594365a451   redis:5                                    "docker-entrypoint.s…"   14 minutes ago   Up 12 minutes   6379/tcp                                                                                         serving-10000_redis_1
44a0df69d2b1   federatedai/egg:1.3.0-release              "/bin/sh -c 'cd /dat…"   18 minutes ago   Up 17 minutes   7778/tcp, 7888/tcp, 50000-60000/tcp                                                              confs-10000_egg_1
22fe1f5e1ec1   federatedai/federation:1.3.0-release       "/bin/sh -c 'java -c…"   18 minutes ago   Up 17 minutes   9394/tcp                                                                                         confs-10000_federation_1
f75f0405b4bc   mysql:8                                    "docker-entrypoint.s…"   18 minutes ago   Up 17 minutes   3306/tcp, 33060/tcp                                                                              confs-10000_mysql_1
a503e90b1548   redis:5                                    "docker-entrypoint.s…"   18 minutes ago   Up 17 minutes   6379/tcp                                                                                         confs-10000_redis_1
b09a08468ad3   federatedai/proxy:1.3.0-release            "/bin/sh -c 'java -c…"   18 minutes ago   Up 17 minutes   0.0.0.0:9370->9370/tcp, :::9370->9370/tcp                                                        confs-10000_proxy_1
# docker ps                    //集群B(ID 9999)
CONTAINER ID   IMAGE                                    COMMAND                  CREATED          STATUS          PORTS                                       NAMES
27262d0be615   federatedai/roll:1.3.0-release           "/bin/sh -c 'java -c…"   10 minutes ago   Up 9 minutes    8011/tcp                                    confs-9999_roll_1
e0b244d55562   federatedai/meta-service:1.3.0-release   "/bin/sh -c 'java -c…"   11 minutes ago   Up 10 minutes   8590/tcp                                    confs-9999_meta-service_1
6e249db9451c   federatedai/egg:1.3.0-release            "/bin/sh -c 'cd /dat…"   12 minutes ago   Up 10 minutes   7778/tcp, 7888/tcp, 50000-60000/tcp         confs-9999_egg_1
8db5215d3998   mysql:8                                  "docker-entrypoint.s…"   12 minutes ago   Up 11 minutes   3306/tcp, 33060/tcp                         confs-9999_mysql_1
d16f4c43fb05   federatedai/proxy:1.3.0-release          "/bin/sh -c 'java -c…"   12 minutes ago   Up 11 minutes   0.0.0.0:9370->9370/tcp, :::9370->9370/tcp   confs-9999_proxy_1
b5062d978a12   federatedai/federation:1.3.0-release     "/bin/sh -c 'java -c…"   12 minutes ago   Up 11 minutes   9394/tcp                                    confs-9999_federation_1
ad673a6e2c4a   redis:5                                  "docker-entrypoint.s…"   12 minutes ago   Up 11 minutes   6379/tcp                                    confs-9999_redis_1

3. 接続性の検証

デプロイメントマシン (マシン A) で次のコマンドを実行します。

# docker exec -it confs-10000_python_1 bash        //进入部署机的python容器

# cd /data/projects/fate/python/examples/toy_example  //进入测试脚本文件夹

# python run_toy_example.py 10000 9999 1           //运行测试脚本,1代表多机

テストが成功すると、次のコンテンツが返されます。

"2019-08-29 07:21:25,353 - secure_add_guest.py[line:96] - INFO: begin to init parameters of secure add example guest"
"2019-08-29 07:21:25,354 - secure_add_guest.py[line:99] - INFO: begin to make guest data"
"2019-08-29 07:21:26,225 - secure_add_guest.py[line:102] - INFO: split data into two random parts"
"2019-08-29 07:21:29,140 - secure_add_guest.py[line:105] - INFO: share one random part data to host"
"2019-08-29 07:21:29,237 - secure_add_guest.py[line:108] - INFO: get share of one random part data from host"
"2019-08-29 07:21:33,073 - secure_add_guest.py[line:111] - INFO: begin to get sum of guest and host"
"2019-08-29 07:21:33,920 - secure_add_guest.py[line:114] - INFO: receive host sum from guest"
"2019-08-29 07:21:34,118 - secure_add_guest.py[line:121] - INFO: success to calculate secure_sum, it is 2000.0000000000002"

このようにして、2 台のマシン間の FATE 連合学習環境が完成します。

3. サービス提供機能の検証

単純なトレーニングと推論テストには、デプロイされた 2 つの FATE クラスターを使用します。トレーニングに使用されるデータ セットは、FATE に付属する単純なテスト データ セットである「breast」です。「examples/data」に配置され、そこに分割されますトレーニングに参加するホストは「breast_a」、ゲストは「breast_b」を保持します。ゲストとホストは共同でデータセットに対してロジスティック回帰トレーニングを実行します。最終的にトレーニングされたモデルは、オンライン推論のために FATE Serving にプッシュされます。

1. データをアップロードする

次の操作はマシン A で実行されます。

# docker exec -it confs-10000_python_1 bash            //进入python容器

# cd fate_flow                                         //进入fate_flow目录

# vi examples/upload_host.json                         //修改上传配置文件

{
  "file": "examples/data/breast_a.csv",
  "head": 1,
  "partition": 10,
  "work_mode": 1,
  "namespace": "fate_flow_test_breast",
  "table_name": "breast"
}

//将“breast_a.csv”上传到系统中
# python fate_flow_client.py -f upload -c examples/upload_host.json  

次の操作はマシン B で実行されます。

# docker exec -it confs-9999_python_1 bash            //进入python容器

# cd fate_flow                                         //进入fate_flow目录

# vi examples/upload_guest.json                         //修改上传配置文件

{
  "file": "examples/data/breast_b.csv",
  "head": 1,
  "partition": 10,
  "work_mode": 1,
  "namespace": "fate_flow_test_breast",
  "table_name": "breast"
}

//将“breast_b.csv”上传到系统中
# python fate_flow_client.py -f upload -c examples/upload_guest.json  

2. 研修の実施

# vi examples/test_hetero_lr_job_conf.json        //修改训练用配置文件

{
    "initiator": {
        "role": "guest",
        "party_id": 9999
    },
    "job_parameters": {
        "work_mode": 1
    },
    "role": {
        "guest": [9999],
        "host": [10000],
        "arbiter": [10000]
    },
    "role_parameters": {
        "guest": {
            "args": {
                "data": {
                    "train_data": [{"name": "breast", "namespace": "fate_flow_test_breast"}]
                }
            },
            "dataio_0":{
                "with_label": [true],
                "label_name": ["y"],
                "label_type": ["int"],
                "output_format": ["dense"]
            }
        },
        "host": {
            "args": {
                "data": {
                    "train_data": [{"name": "breast", "namespace": "fate_flow_test_breast"}]
                }
            },
             "dataio_0":{
                "with_label": [false],
                "output_format": ["dense"]
            }
        }
    },
    ....
}
//提交任务对上传的数据集进行训练
# python fate_flow_client.py -f submit_job -d examples/test_hetero_lr_job_dsl.json -c examples/test_hetero_lr_job_conf.json

//输出结果
{
    "data": {
        "board_url": "http://fateboard:8080/index.html#/dashboard?job_id=2022041901241226828821&role=guest&party_id=9999",
        "job_dsl_path": "/data/projects/fate/python/jobs/2022041901241226828821/job_dsl.json",
        "job_runtime_conf_path": "/data/projects/fate/python/jobs/2022041901241226828821/job_runtime_conf.json",
        "logs_directory": "/data/projects/fate/python/logs/2022041901241226828821",
        "model_info": {
            "model_id": "arbiter-10000#guest-9999#host-10000#model",
            "model_version": "2022041901241226828821"
        }
    },
    "jobId": "2022041901241226828821",
    "retcode": 0,
    "retmsg": "success"
}

//用命令查看训练进度,直到全部success,此处-j后跟的是上面的jobId
# python fate_flow_client.py -f query_task -j 2022041901241226828821 | grep f_status

3. トレーニング結果の表示

ブラウザー 127.0.0.1:8080 を開いて、fateboard に入り、視覚化タスクのトレーニング結果を表示します。

4. デプロイメントの削除

デプロイメントを削除する必要がある場合は、デプロイメント マシンで次のコマンドを実行して、すべての FATE クラスターを停止できます。

# bash docker_deploy.sh --delete all

実行中のマシンにデプロイされた FATE を完全に削除する場合は、ノードに個別にログインして、次のコマンドを実行します。

# cd /data/projects/fate/confs-<id>/                //此处的ID就是集群的ID
# docker-compose down
# rm -rf ../confs-<id>/

おすすめ

転載: blog.csdn.net/SAGIRIsagiri/article/details/124127258