Centralized Learning
💻
Client
🏫
Server
🏦
Server
🏥
Server
Centralized Learning
💻
Client
🏫
Server
🏦
Server
🏥
Server
📘
📕
📗
Centralized Learning
💻
Client
🏫
Server
🏦
Server
🏥
Server
📚
📘
📕
📗
Data Privacy Issues
💻
Client
🏫
Server
🏦
Server
🏥
Server
📚
⛔
📘
🚫
📕
🚫
📗
🚫
“Move data to computation”
💻
Client
🏫
Server
🏦
Server
🏥
Server
📚
📘
📕
📗
⏳
“Move computation to data”
💻
Client
🏫
Server
🏦
Server
🏥
Server
📘
📕
📗
⏳
⏳
⏳
Federated Learning
💻
Client
🏫
Server
🏦
Server
🏥
Server
⏳
⏳
⏳
📘
🚫
📕
🚫
📗
🚫
📊📈
✅
Client & Servers
💻
Client
🏫
Server
🏦
Server
🏥
Server
Client & Servers - Data
💻
Client
🏫
Server
🏦
Server
🏥
Server
📦⚙️
📦⚙️
📦⚙️
Client & Servers - Address
💻
Client
🏫
Server
🏦
Server
🏥
Server
📦⚙️
📦⚙️
📦⚙️
🪧
🔵
🪧
🟠
🪧
🟢
Client & Servers - Connection
💻
Client
🏫
Server
🏦
Server
🏥
Server
📦⚙️
📦⚙️
📦⚙️
📊📈
🪧
🔵
🪧
🟠
🪧
🟢
Server & Clients - Reverse
💻
Server
🏫
Client
🏦
Client
🏥
Client
📦⚙️
📦⚙️
📦⚙️
📊📈
🪧
🔴
Server & Clients - Reverse
🏢
Server
📱
Client
📱
Client
📱
Client
📦⚙️
📦⚙️
📦⚙️
📊📈
🪧
🔴
Workflow
💻
Server
🏫
Client
🏦
Client
🏥
Client
📗
📦
📙
📦
📘
📦
Step 1: Model Initialization
💻
Server
🏫
Client
🏦
Client
🏥
Client
📗
📦
📙
📦
📘
📦
🔴
⚙️
Step 2: Send Global Model
💻
Server
🏫
Client
🏦
Client
🏥
Client
📗
📦
📙
📦
📘
📦
🔴
⚙️
🔴
⚙️
🔴
⚙️
🔴
⚙️
Step 3: Local Client Training
💻
Server
🏫
Client
🏦
Client
🏥
Client
📗
📦
📙
📦
📘
📦
🔴
⚙️
🔴
⚙️
🔴
⚙️
⏳
⏳
⏳
Step 3: Local Models
💻
Server
🏫
Client
🏦
Client
🏥
Client
📗
📦
📙
📦
📘
📦
🔵
⚙️
🟠
⚙️
🟢
⚙️
Step 4: Send Local Models
💻
Server
🏫
Client
🏦
Client
🏥
Client
📗
📦
📙
📦
📘
📦
🔵
⚙️
🟠
⚙️
🟢
⚙️
Step 5: Model Aggregation
💻
Server
🏫
Client
🏦
Client
🏥
Client
📗
📦
📙
📦
📘
📦
🔵
⚙️
🟠
⚙️
🟢
⚙️
🟣
⚙️
Step 5: New Global Model
💻
Server
🏫
Client
🏦
Client
🏥
Client
📗
📦
📙
📦
📘
📦
🔴
⚙️
Iterate until Convergence
💻
Server
🏫
Client
🏦
Client
🏥
Client
📗
📦
📙
📦
📘
📦
🔴
⚙️
🔴
⚙️
🔴
⚙️
🔴
⚙️
♻️
Test case
🌸
⚙️
🌍
Client
📑
🧬
🔵
💻
Server
🌏
Client
🌏
Client
📊📈
📑
🧬
🟠
📑
🧬
🟢
📍
📍
📍
Network locations
🌸
⚙️
🌍
Lisbon
📑
🧬
🔵
💻
Lisbon
🌏
Guangzhou
🌏
Macau
📊📈
📑
🧬
🟠
📑
🧬
🟢
📍
📍
📍
Detailed Workflow
💻
Flower.Server
🖥️
Flower.Client
📘
📦
🪧
Detailed Workflow: Strategy
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
strategy.Fed*(...)
Detailed Workflow: Strategies
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
strategy.Fed*(...)
strategy.FedAdam(...)
strategy.FedMedian(...)
strategy.FedAdagrad(...)
…
strategy.FedAvg(...)
Detailed Workflow: Strategy Options
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
strategy.FedAvg(options)
Detailed Workflow: Strategy Client Options
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
fraction_evaluate
min_fit_clients
min_evaluate_clients
min_available_clients
fraction_fit
…
strategy.FedAvg(options)
Detailed Workflow: Strategy Function Options
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
on_fit_config_fn
on_evaluate_config_fn
fit_metrics_aggregation_fn
evaluate_metrics_aggregation_fn
evaluate_fn
strategy.FedAvg(options)
Detailed Workflow: Start Server
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
strategy.FedAvg(options)
server.start_server(server_address,strategy)
Detailed Workflow: Start Client
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
client.start_client(server_address)
Get Initial Model Parameters
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
⚪
⚙️
⚪
⚙️
Get Initial Model Parameters
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
initialize_parameters(model)
⚪
⚙️
⚪
⚙️
Get Initial Model Parameters
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
initialize_parameters(model)
🔴
⚙️
⚪
⚙️
Federated Training
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
🔴
⚙️
get_parameters(model)
⚪
⚙️
Federated Training
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
🔴
⚙️
configure_fit(params)
get_parameters(model)
⚪
⚙️
Federated Training
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
🔴
⚙️
configure_fit(params)
get_parameters(model)
⚪
⚙️
Federated Training
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
🔴
⚙️
fit(params,config)
⚪
⚙️
Federated Training
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
🔴
⚙️
fit(params,config)
🔴
⚙️
set_parameters(model,params)
Federated Training
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
🔴
⚙️
fit(params,config)
🔵
⚙️
set_parameters(model,params)
train(model,config)
Federated Training
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
🔴
⚙️
fit(params,config)
🔵
⚙️
get_parameters(model)
Federated Training
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
🔴
⚙️
fit(params,config)
🔵
⚙️
get_parameters(model)
Federated Training
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
aggregate_fit(params,n_examples,metrics)
🔵
⚙️
🔴
⚙️
Federated Training
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
🔵
⚙️
🟡
⚙️
aggregate_fit(params,n_examples,metrics)
Centralized Evaluation
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
evaluate(params,config)
🔵
⚙️
🟡
⚙️
Centralized Evaluation
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
evaluate(params,config)
🔵
⚙️
🟡
⚙️
📙
📦
📋
🔶
Federated Evaluation
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
🟡
⚙️
configure_evaluate(params)
🔵
⚙️
Federated Evaluation
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
🟡
⚙️
evaluate(params,config)
🔵
⚙️
test(model)
📋
🔷
Federated Evaluation
🖥️
Flower.Client
📘
📦
💻
Flower.Server
🪧
🟠
aggregate_evaluate(loss,n_examples,metrics)
🔵
⚙️
🟡
⚙️
📋
🔶
📋
🔷
Workflow
aggregate_fit()
evaluate()
configure_evaluate()
aggregate_evaluate()
set_parameters()
train()
get_parameters()
evaluate()
test()
Fed*()
start_server()
Server
initialize_parameters()
Clients
get_parameters()
configure_fit()
start_client()
fit()
# rounds
Polygenic Risk Scores
Covariates
Classification
Logistic function
Logistic function: midpoint
Logistic function: steepness
Logistic function: steepness
Logistic function: parameters
Country #1 Data
Country #2 Data
Country #3 Data
Data distribution
Final Model
Final Model
Confusion matrix
Thank you for listening