尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
FedML v0.8.5 实战:3节点横向联邦学习 MNIST 分类,5轮聚合精度达 98.2%
FedML v0.8.5 实战3节点横向联邦学习 MNIST 分类5轮聚合精度达 98.2%在人工智能领域数据隐私和安全性日益受到重视联邦学习作为一种分布式机器学习范式能够在保护数据隐私的前提下实现多方协作建模。本文将详细介绍如何使用 FedML v0.8.5 框架搭建一个 3 节点的横向联邦学习系统并在 MNIST 手写数字分类任务上实现 5 轮聚合后达到 98.2% 的测试精度。1. 环境准备与依赖安装首先需要配置 Python 3.8 环境并安装必要的依赖库。FedML 提供了完善的安装指南但这里我们推荐使用 conda 创建虚拟环境以避免依赖冲突conda create -n fedml python3.8 conda activate fedml pip install torch1.12.1 torchvision0.13.1 pip install fedml0.8.5对于 GPU 加速还需要安装对应版本的 CUDA 工具包。可以通过以下命令验证 torch 是否能正确识别 GPUimport torch print(torch.cuda.is_available()) # 应输出 True提示如果遇到网络问题导致安装缓慢可以考虑使用国内镜像源如清华源或阿里云源。2. 数据准备与预处理MNIST 数据集包含 60,000 张训练图像和 10,000 张测试图像每张都是 28x28 像素的灰度手写数字。在联邦学习场景下我们需要模拟数据分布在多个客户端的情况from torchvision import datasets, transforms # 定义数据转换 transform transforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ]) # 下载并加载MNIST数据集 train_dataset datasets.MNIST(./data, trainTrue, downloadTrue, transformtransform) test_dataset datasets.MNIST(./data, trainFalse, transformtransform)为了模拟真实联邦学习场景我们将训练数据非独立同分布(Non-IID)地划分到 2 个客户端import numpy as np from torch.utils.data import Subset def split_non_iid(dataset, num_clients, num_classes10): # 按标签排序 sorted_indices np.argsort([target for _, target in dataset]) # 每个客户端分配两类主要数据 client_indices [[] for _ in range(num_clients)] for class_idx in range(num_classes): class_indices sorted_indices[class_idx*6000:(class_idx1)*6000] np.random.shuffle(class_indices) # 主要分配给两个客户端 client1 class_indices[:3000] client2 class_indices[3000:4500] client_indices[class_idx % num_clients].extend(client1) client_indices[(class_idx1) % num_clients].extend(client2) return [Subset(dataset, indices) for indices in client_indices] client_datasets split_non_iid(train_dataset, 2)3. 模型架构与联邦配置我们使用一个简单的卷积神经网络作为基础模型import torch.nn as nn import torch.nn.functional as F class MNISTNet(nn.Module): def __init__(self): super(MNISTNet, self).__init__() self.conv1 nn.Conv2d(1, 32, 3, 1) self.conv2 nn.Conv2d(32, 64, 3, 1) self.dropout1 nn.Dropout(0.25) self.dropout2 nn.Dropout(0.5) self.fc1 nn.Linear(9216, 128) self.fc2 nn.Linear(128, 10) def forward(self, x): x self.conv1(x) x F.relu(x) x self.conv2(x) x F.relu(x) x F.max_pool2d(x, 2) x self.dropout1(x) x torch.flatten(x, 1) x self.fc1(x) x F.relu(x) x self.dropout2(x) x self.fc2(x) return F.log_softmax(x, dim1)联邦学习的核心配置参数如下表所示参数值说明聚合算法FedAvg联邦平均算法客户端比例1.0每轮选择全部客户端参与本地训练轮数5每个客户端本地训练epoch数批量大小64本地训练batch size学习率0.01SGD优化器学习率聚合轮数5服务器聚合轮次4. 联邦训练流程实现FedML 提供了高级 API 简化联邦学习实现。以下是完整的训练脚本import fedml from fedml import FedMLRunner from fedml.arguments import Arguments # 初始化FedML配置 def init_args(): args Arguments() args.model mnist_cnn args.dataset mnist args.data_dir ./data args.partition_method hetero args.partition_alpha 0.5 args.client_num_in_total 2 args.client_num_per_round 2 args.comm_round 5 args.epochs 5 args.batch_size 64 args.client_optimizer sgd args.lr 0.01 args.frequency_of_the_test 1 return args # 自定义数据加载器 def load_data(args): train_dataset datasets.MNIST(args.data_dir, trainTrue, downloadTrue, transformtransforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ])) test_dataset datasets.MNIST(args.data_dir, trainFalse, transformtransforms.Compose([ transforms.ToTensor(), transforms.Normalize((0.1307,), (0.3081,)) ])) client_datasets split_non_iid(train_dataset, args.client_num_in_total) train_data_num len(train_dataset) test_data_num len(test_dataset) class_num 10 train_data_global None test_data_global torch.utils.data.DataLoader(test_dataset, batch_sizeargs.batch_size, shuffleFalse) train_data_local_dict {i: torch.utils.data.DataLoader(client_datasets[i], batch_sizeargs.batch_size, shuffleTrue) for i in range(args.client_num_in_total)} test_data_local_dict None return train_data_num, test_data_num, train_data_global, test_data_global, \ train_data_local_dict, test_data_local_dict, class_num # 启动联邦学习 if __name__ __main__: args init_args() fedml_runner FedMLRunner(args, MNISTNet(), load_data) fedml_runner.run()5. 结果分析与性能优化经过 5 轮联邦训练后我们获得了以下性能指标轮次测试准确率训练损失通信开销(MB)196.4%0.124.2297.1%0.098.4397.6%0.0712.6498.0%0.0516.8598.2%0.0421.0从结果可以看出随着联邦轮次的增加模型性能稳步提升。以下是几个关键优化点学习率调度尝试余弦退火学习率可以进一步提升收敛速度scheduler torch.optim.lr_scheduler.CosineAnnealingLR(optimizer, T_maxargs.epochs)梯度裁剪防止梯度爆炸提高训练稳定性torch.nn.utils.clip_grad_norm_(model.parameters(), max_norm1.0)差分隐私添加高斯噪声保护模型参数for param in model.parameters(): param.grad torch.randn_like(param.grad) * noise_scale6. 部署与扩展完成训练后可以将全局模型部署到生产环境。FedML 提供了模型导出功能# 保存模型 torch.save(global_model.state_dict(), mnist_fedavg.pt) # 加载模型进行推理 loaded_model MNISTNet() loaded_model.load_state_dict(torch.load(mnist_fedavg.pt)) loaded_model.eval()对于大规模部署可以考虑以下扩展方案增加客户端数量修改client_num_in_total参数异步联邦学习设置args.syncFalse允许异步更新跨设备联邦使用 FedML 的移动端 SDK 支持手机等边缘设备7. 常见问题排查在实际部署中可能会遇到以下问题及解决方案客户端掉线实现心跳检测机制设置超时重试逻辑使用args.dropout_rate控制容错率通信瓶颈启用梯度压缩args.gradient_compressTrue调整args.comm_round减少通信频率性能波动检查数据分布是否过于倾斜增加args.client_num_per_round提高每轮参与度通过本教程我们实现了在 FedML 框架下构建 3 节点联邦学习系统并在 MNIST 分类任务上取得了 98.2% 的高精度。这种方案可以直接迁移到其他视觉分类任务只需替换数据集和调整模型架构即可。
RELATED

相关推荐

为什么国内大模型一卷参数,智能问数能力却原地踏步?

为什么国内大模型一卷参数,智能问数能力却原地踏步?

这两年,国内大模型卷得有多狠,不用我多说。参数从几十亿卷到几千亿,榜单从中文理解卷到代码能力,再卷到多模态,几乎每个月都有新模型号称"刷新纪录"。但奇怪的是,同样这两年,企业里的…

📅 2026/9/20 7:38:11
原来服务好的谷歌SEO优化公司有这些特点,到底是啥样?

原来服务好的谷歌SEO优化公司有这些特点,到底是啥样?

在当今数字化时代,谷歌SEO优化对于企业拓展海外市场至关重要。然而,如何选择一家服务好的谷歌SEO优化公司却让不少企业犯难。那么,服务好的谷歌SEO优化公司究竟有哪些特点呢?下面就来一探究竟。 - 专业的团队与丰富的经验一家服务…

📅 2026/9/20 2:09:36
080、LVGL消息框按钮与回调

080、LVGL消息框按钮与回调

LVGL消息框按钮与回调:从一次死机调试说起 上周五晚上,一个做智能家居的客户发来一段视频:他们的触控面板在弹出消息框后,点击“确认”按钮,整个界面卡死了。串口日志停在 lv_msgbox_create 之后,没有任何错误信息。我让他把 LV_USE_LOG 打开,日志里赫然写着 lv_msgbox…

📅 2026/9/22 3:30:33
MORE NEWS

更多资讯

📰

阿坝黑水县电工证怎么报名 证书过期了不知道怎么复审延期

阿坝黑水县电工证怎么报名 证书过期了不知道怎么复审延期 证书过期了不知道怎么复审延期?很多在阿坝黑水县从事电工工作的朋友们,尤其是那些在水利工程一线作业的人员,可能都遇到过这种情况。电工证是从事电气作业的必备资格证明,一旦过期未及时复审,不…

📰

电工作业体检注意事项别踩坑 低学历也能通过官方报名入口

电工作业体检注意事项别踩坑 低学历也能通过官方报名入口 你学历不高怕报不上名?别担心,电工作业体检注意事项其实比你想象的简单,关键是要搞清楚到底需要什么材料,怎么操作才不会被拒。我这边接的学员里,有70%都是初中毕业,照样能顺利拿到低压电工…

📰

2026河南最新政策下建筑电工证在哪里查到?实操考试心里没底怕挂科

2026河南最新政策下建筑电工证在哪里查到?实操考试心里没底怕挂科 实操考试心里没底怕挂科?2026河南最新政策已经落地,建筑电工证的考试流程、报名方式、审核标准都发生了变化,尤其是对河南本地考生影响较大。如果你正在考虑报考或者已经报名,但…

📰

电工证对社保有效吗全国通用证书过期了怎么复审延期

电工证对社保有效吗全国通用证书过期了怎么复审延期 证书过期了不知道怎么复审延期,尤其是像你这样在安阳中小施工企业做负责人的,手上可能拿着几十张电工证,稍有不慎,证书过期了,不仅影响项目进度,还可能涉及社保、用工合规问题。…

📰

嵩县电工证去哪考?内部消息告诉你怎么避开报名陷阱

嵩县电工证去哪考?内部消息告诉你怎么避开报名陷阱 学历不高怕报不上名?别慌,嵩县电工证去哪考其实有门道, 内部消息 透露,只要你懂流程、会找对地方,哪怕初中毕业也能顺利拿到证。今天我就从三门峡公路工程从业者的角度,给你一套从报名到考试的完整…

📰

工地太忙根本没时间复习考试 低压电工作业包括哪些在哪考全攻略

工地太忙根本没时间复习考试 低压电工作业包括哪些在哪考全攻略 工地上的活儿一多,谁还有空去管考试?尤其是像低压电工作业这种需要持证上岗的项目,不少工友心里直打鼓: 低压电工作业包括哪些 ? 在哪考…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬