Skip to main content

Federated Learning Integration

Integrate Oneliac's federated learning coordinator to train diagnosis models across multiple healthcare organizations while maintaining data privacy.

Overview​

Federated learning enables model training on encrypted data from multiple organizations without centralizing sensitive patient information.

Architecture​

Healthcare Org A          Healthcare Org B          Healthcare Org C
↓ ↓ ↓
Local Data Local Data Local Data
↓ ↓ ↓
Encrypt Data Encrypt Data Encrypt Data
↓ ↓ ↓
Train Local Model Train Local Model Train Local Model
↓ ↓ ↓
Generate Gradients Generate Gradients Generate Gradients
↓ ↓ ↓
Federated Aggregation (No raw data exposed)
↓
Global Model Update

API Endpoints​

Register Organization​

POST /api/v1/federated/organizations

Request:

{
"organization_name": "Hospital A",
"endpoint": "https://hospital-a.com/federated",
"encryption_key": "key_abc123"
}

Submit Local Gradients​

POST /api/v1/federated/gradients

Request:

{
"organization_id": "org_123",
"round": 1,
"gradients_encrypted": "0x...",
"model_version": "1.0.0",
"sample_count": 1000
}

Download Global Model​

GET /api/v1/federated/model

Response:

{
"model_version": "1.0.0",
"weights": "0x...",
"accuracy": 0.92,
"organizations_contributed": 3,
"training_round": 5
}

Implementation Example​

from oneliac.federated import FederatedLearner
from oneliac.encryption import DifferentialPrivacy

learner = FederatedLearner(
organization_id="org_123",
api_key="sk_live_..."
)

# Load local training data
local_data = load_patient_data(confidential=True)

# Train local model
model = learner.train_local(
data=local_data,
epochs=10,
batch_size=32
)

# Add differential privacy noise
dp = DifferentialPrivacy(epsilon=0.1)
encrypted_gradients = dp.add_noise_to_gradients(
model.gradients,
sensitivity=1.0
)

# Submit to federated server
learner.submit_gradients(
gradients=encrypted_gradients,
round=5
)

# Download global model
global_model = learner.download_model(version="latest")

Configuration​

Differential Privacy Parameters​

privacy_budget = {
"epsilon": 0.1, # Privacy budget
"delta": 1e-5, # Failure probability
"mechanism": "gaussian"
}

Aggregation Settings​

aggregation_config = {
"min_participants": 3,
"aggregation_method": "secure_sum",
"timeout_minutes": 30,
"max_rounds": 100
}

Validation​

Model Quality Checks​

validation_results = learner.validate_submission(
gradients=encrypted_gradients,
checks=[
"bounds_check",
"nan_check",
"privacy_check"
]
)

Privacy Metrics​

Monitor privacy guarantees:

privacy_report = learner.get_privacy_report(round=5)
print(f"Cumulative epsilon: {privacy_report.total_epsilon}")
print(f"Organizations contributed: {privacy_report.participants}")

Best Practices​

  1. Data Minimization: Only include necessary features
  2. Regular Audits: Verify model fairness across organizations
  3. Version Control: Track model versions across rounds
  4. Monitoring: Track convergence and model accuracy
  5. Communication: Use secure channels for all transmissions

Troubleshooting​

Gradient Submission Fails​

Check privacy budget hasn't been exceeded:

current_epsilon = learner.get_current_epsilon()
if current_epsilon > max_epsilon:
print("Privacy budget exhausted")

Model Divergence​

Review local data distribution:

data_stats = learner.analyze_local_data()
print(f"Label distribution: {data_stats.label_distribution}")