Índice
2. Verifique se a implantação foi bem-sucedida
3. Verificação de conectividade
3. Treinamento e raciocínio simples
3. Veja os resultados do treinamento
1. Trabalho de preparação
- Dois hosts (máquina física ou máquina virtual, sistema Ubuntu ou Centos7, permitindo login como usuário root)
- Instale o Docker em todos os hosts
- Instale o Docker-Compose em todos os hosts
- A máquina de implantação pode ser conectada à Internet, para que os hosts possam se comunicar entre si.
- A máquina de corrida baixou as imagens componentes do FATE
Como instalar o docker e docker-compose e como baixar a imagem FATE são apresentados no artigo anterior.
As duas máquinas aqui são máquinas virtuais, sistema CentOS 7, aqui elas são chamadas de máquina A e máquina B. A máquina A serve tanto como máquina de implantação quanto como máquina de destino. O endereço IP da máquina A é 192.168.16.129, e o IP o endereço da máquina B. é 192.168.16.130, todos logados como root.
2. Operações de implantação
1. Gere o arquivo de script de implantação e implante-o (opere na máquina de implantação, que é a máquina 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. Verifique se a implantação foi bem-sucedida
Verifique nas máquinas de destino A e B, respectivamente.
# 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. Verificação de conectividade
Execute o seguinte comando na máquina de implantação (Máquina 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代表多机
Um teste bem-sucedido retornará o seguinte conteúdo
"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"
Desta forma, o ambiente de aprendizagem federado FATE entre as duas máquinas é concluído.
3. Verifique a função Serving-Service
Use os dois clusters FATE implantados para treinamento simples e testes de inferência. O conjunto de dados usado para treinamento é "peito", que é um conjunto de dados de teste simples que vem com o FATE. Ele é colocado em "exemplos/dados" e é dividido em Lá são duas partes "breast_a" e "breast_b". O anfitrião participante do treinamento segura "breast_a", enquanto o convidado segura "breast_b". O convidado e o anfitrião realizam em conjunto o treinamento de regressão logística no conjunto de dados. O modelo finalmente treinado é enviado ao FATE Serving para inferência online.
1. Carregar dados
As seguintes operações são realizadas na máquina 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
As seguintes operações são realizadas na máquina 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. Realize treinamentos
# 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. Veja os resultados do treinamento
Abra o navegador em 127.0.0.1:8080 para entrar no fatboard e visualizar os resultados do treinamento da tarefa de visualização.
4. Excluir implantação
Se a implantação precisar ser removida, todos os clusters FATE poderão ser interrompidos executando o seguinte comando na máquina de implantação:
# bash docker_deploy.sh --delete all
Se quiser excluir completamente o FATE implantado na máquina em execução, você pode fazer login nos nós separadamente e executar o comando:
# cd /data/projects/fate/confs-<id>/ //此处的ID就是集群的ID
# docker-compose down
# rm -rf ../confs-<id>/