0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

使用NVIDIA FLARE开发更具通用性的AI模型

星星科技指导员 来源:NVIDIA 作者:Holger Roth 2022-04-15 09:42 次阅读

联邦学习( FL )已成为许多实际应用的现实。它使全球范围内的跨国合作能够构建更健壮、更通用的机器学习人工智能模型。

NVIDIA FLARE v2.0 是一款开源的 FL SDK ,通过共享模型权重而非私有数据,数据科学家可以更轻松地协作开发更具通用性的健壮人工智能模型。

对于医疗保健应用程序,这在数据受患者保护、某些患者类型和疾病的数据可能稀少,或者数据在仪器类型、性别和地理位置上缺乏多样性的情况下尤其有益。

查看标志

NVIDIA FLARE 代表 联合学习应用程序运行时环境 。它是引擎的基础NVIDIA Clara Train FL 软件,它已经被用于医学成像、遗传分析、肿瘤学和 COVID-19 研究中的人工智能应用。 SDK 使研究人员和数据科学家能够将其现有的机器学习和深度学习工作流调整为分布式范例,并使平台开发人员能够为分布式多方协作构建安全、隐私保护的产品

NVIDIA FLARE 是一个轻量级、灵活且可扩展的分布式学习框架,在 Python 中实现,与您的基础培训库无关。您可以在 PyTorch , TensorFlow ,甚至只是 NumPy 中实现自己的数据科学工作流,并在联邦设置中应用它们。

也许您希望实现流行的 联邦平均( FedAvg )算法 。从初始全局模型开始,每个 FL 客户机在其本地数据上训练模型一段时间,并将模型更新发送到服务器进行聚合。然后,服务器使用聚合更新来更新下一轮培训的全局模型。此过程将反复多次,直到模型收敛。

NVIDIA FLARE 提供可定制的控制器工作流,以帮助您实施 FedAvg 和其他 FL 算法,例如, 循环重量转移 。它安排不同的任务,例如深度学习培训,在参与的 FL 客户机上执行。工作流使您能够从每个客户端收集结果(例如模型更新),并将其聚合以更新全局模型,并将更新的全局模型发回以供继续培训。图 1 显示了原理。

每个 FL 客户机充当工人,请求执行下一个任务,例如模型培训。控制器提供任务后,工作人员执行任务并将结果返回给控制器。在每次通信中,可以有可选的过滤器来处理任务数据或结果,例如, homomorphic encryption 和解密或差异隐私。

pYYBAGJYzbmADPypAABc33uq4sk944.png

图 1 。 NVIDIA FLARE 工作流

实现 FedAvg 的任务可以是一个简单的 PyTorch 程序,它为 CIFAR-10 训练一个分类模型。您当地的培训师可能看起来像下面的代码示例。为了简单起见,我跳过了整个培训循环。

import torch
import torch.nn as nn
import torch.nn.functional as F from nvflare.apis.dxo import DXO, DataKind, MetaKey, from_shareable
from nvflare.apis.executor import Executor
from nvflare.apis.fl_constant import ReturnCode
from nvflare.apis.fl_context import FLContext
from nvflare.apis.shareable import Shareable, make_reply
from nvflare.apis.signal import Signal
from nvflare.app_common.app_constant import AppConstants class SimpleNetwork(nn.Module): def __init__(self): super(SimpleNetwork, self).__init__() self.conv1 = nn.Conv2d(3, 6, 5) self.pool = nn.MaxPool2d(2, 2) self.conv2 = nn.Conv2d(6, 16, 5) self.fc1 = nn.Linear(16 * 5 * 5, 120) self.fc2 = nn.Linear(120, 84) self.fc3 = nn.Linear(84, 10) def forward(self, x): x = self.pool(F.relu(self.conv1(x))) x = self.pool(F.relu(self.conv2(x))) x = torch.flatten(x, 1) # flatten all dimensions except batch x = F.relu(self.fc1(x)) x = F.relu(self.fc2(x)) x = self.fc3(x) return x class SimpleTrainer(Executor): def __init__(self, train_task_name: str = AppConstants.TASK_TRAIN): super().__init__() self._train_task_name = train_task_name self.device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") self.model = SimpleNetwork() self.model.to(self.device) self.optimizer = torch.optim.SGD(self.model.parameters(), lr=0.001, momentum=0.9) self.criterion = nn.CrossEntropyLoss() def execute(self, task_name: str, shareable: Shareable, fl_ctx: FLContext, abort_signal: Signal) -> Shareable: """ This function is an extended function from the superclass. As a supervised learning-based trainer, the train function will run training based on model weights from `shareable`. After finishing training, a new `Shareable` object will be submitted to server for aggregation.""" if task_name == self._train_task_name: epoch_len = 1 # Get current global model weights dxo = from_shareable(shareable) # Ensure data kind is weights. if not dxo.data_kind == DataKind.WEIGHTS: self.log_exception(fl_ctx, f"data_kind expected WEIGHTS but got {dxo.data_kind} instead.") return make_reply(ReturnCode.EXECUTION_EXCEPTION) # creates an empty Shareable with the return code # Convert weights to tensor and run training torch_weights = {k: torch.as_tensor(v) for k, v in dxo.data.items()} self.local_train(fl_ctx, torch_weights, epoch_len, abort_signal) # compute the differences between torch_weights and the now locally trained model model_diff = ... # build the shareable using a Data Exchange Object (DXO) dxo = DXO(data_kind=DataKind.WEIGHT_DIFF, data=model_diff) dxo.set_meta_prop(MetaKey.NUM_STEPS_CURRENT_ROUND, epoch_len) self.log_info(fl_ctx, "Local training finished. Returning shareable") return dxo.to_shareable() else: return make_reply(ReturnCode.TASK_UNKNOWN) def local_train(self, fl_ctx, weights, epoch_len, abort_signal): # Your training routine should respect the abort_signal. ... # Your local training loop ... for e in range(epoch_len): ... if abort_signal.triggered: self._abort_execution() ... def _abort_execution(self, return_code=ReturnCode.ERROR) -> Shareable: return make_reply(return_code)

您可以看到您的任务实现可以执行许多不同的任务。您可以计算每个客户机上的摘要统计信息,并与服务器共享(记住隐私限制),执行本地数据的预处理,或者评估已经训练过的模型。

在 FL 培训期间,您可以在每轮培训开始时绘制全局模型的性能。对于本例,我们在 CIFAR-10 的异构数据拆分上运行了八个客户端。在下图(图 2 )中,我显示了默认情况下 NVIDIA FLARE 2.0 中可用的不同配置:

FedAvg

FedProx

FedOpt

使用同态加密进行安全聚合的 FedAvg ( FedAvg HE )

poYBAGJYzcCADwrRAABs3gmM85Q462.png

图 2 。训练期间不同 FL 算法全局模型的验证精度

虽然 FedAvg 、 FedAvg HE 和 FedProx 在这项任务中的性能相当,但您可以使用 FedOpt 设置观察到改进的收敛性,该设置使用 SGD with momentum 来更新服务器上的全局模型。

整个 FL 系统可以使用管理 API 进行控制,以自动启动和操作不同配置的任务和工作流。 NVIDIA 还提供了一个全面的资源调配系统,可在现实世界中轻松安全地部署 FL 应用程序,同时还提供了运行本地 FL 模拟的概念验证研究。

poYBAGJYzceAejT8AADeGNbDAM0088.png

图 3 。 NVIDIA FLARE 供应、启动、操作( PSO )组件及其 API

开始

NVIDIA FLARE 使 FL 可用于更广泛的应用。潜在使用案例包括帮助能源公司分析地震和井筒数据、制造商优化工厂运营以及金融公司改进欺诈检测模型。

关于作者

Holger Roth 是 NVIDIA 的高级应用研究科学家,专注于医学成像的深度学习。在过去几年中,他一直与临床医生和学者密切合作,为放射应用开发基于深度学习的医学图像计算和计算机辅助检测模型。他拥有博士学位。来自英国伦敦大学学院。

审核编辑:郭婷

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • NVIDIA
    +关注

    关注

    14

    文章

    4985

    浏览量

    103037
  • 计算机
    +关注

    关注

    19

    文章

    7494

    浏览量

    87935
  • 深度学习
    +关注

    关注

    73

    文章

    5503

    浏览量

    121154
收藏 人收藏

    评论

    相关推荐

    AI大语言模型开发步骤

    开发一个高效、准确的大语言模型是一个复杂且多阶段的过程,涉及数据收集与预处理、模型架构设计、训练与优化、评估与调试等多个环节。接下来,AI部落小编为大家详细阐述
    的头像 发表于 12-19 11:29 81次阅读

    NVIDIA推出全新生成式AI模型Fugatto

    NVIDIA 开发了一个全新的生成式 AI 模型。利用输入的文本和音频,该模型可以创作出包含任意的音乐、人声和声音组合的作品。
    的头像 发表于 11-27 11:29 352次阅读

    全新NVIDIA NIM微服务实现突破进展

    全新 NVIDIA NIM 微服务实现突破进展,可助力气象技术公司开发和部署 AI 模型,实现对降雪、结冰和冰雹的预测。
    的头像 发表于 11-21 10:07 205次阅读

    使用全新NVIDIA AI Blueprint开发视觉AI智能体

    为提高生产力、优化流程和创造更加安全的空间,埃森哲、戴尔科技和联想等公司正在使用全新 NVIDIA AI Blueprint 开发视觉 AI 智能体。
    的头像 发表于 11-06 13:58 394次阅读

    NVIDIA助力提供多样、灵活的模型选择

    在本案例中,Dify 以模型中立以及开源生态的优势,为广大 AI 创新者提供丰富的模型选择。其集成的 NVIDIAAPI Catalog、NVIDIA NIM和Triton 推理服务器
    的头像 发表于 09-09 09:19 472次阅读

    NVIDIA Nemotron-4 340B模型帮助开发者生成合成训练数据

    Nemotron-4 340B 是针对 NVIDIA NeMo 和 NVIDIA TensorRT-LLM 优化的模型系列,该系列包含最先进的指导和奖励模型,以及一个用于生成式
    的头像 发表于 09-06 14:59 313次阅读
    <b class='flag-5'>NVIDIA</b> Nemotron-4 340B<b class='flag-5'>模型</b>帮助<b class='flag-5'>开发</b>者生成合成训练数据

    NVIDIA RTX AI套件简化AI驱动的应用开发

    NVIDIA 于近日发布 NVIDIA RTX AI套件,这一工具和 SDK 集合能够帮助 Windows 应用开发者定制、优化和部署适用于 Windows 应用的
    的头像 发表于 09-06 14:45 447次阅读

    Mistral AINVIDIA推出全新语言模型Mistral NeMo 12B

    Mistral AINVIDIA 于近日共同发布了一款全新的领先语言模型Mistral NeMo 12B。开发者可以轻松定制和部署该模型
    的头像 发表于 07-27 11:04 660次阅读

    NVIDIA AI Foundry 为全球企业打造自定义 Llama 3.1 生成式 AI 模型

    借助 NVIDIA AI Foundry,企业和各国现在能够使用自有数据与 Llama 3.1 405B 和 NVIDIA Nemotron 模型配对,来构建“超级
    发表于 07-24 09:39 709次阅读
    <b class='flag-5'>NVIDIA</b> <b class='flag-5'>AI</b> Foundry 为全球企业打造自定义 Llama 3.1 生成式 <b class='flag-5'>AI</b> <b class='flag-5'>模型</b>

    揭秘NVIDIA AI Workbench 如何助力应用开发

    简化和优化生成式 AI 开发的工具备受追捧,需求与日俱增。借助基于检索增强生成(RAG)(该技术通过从指定外部来源获取事实资料,来提高生成式 AI 模型的准确
    发表于 07-10 18:51 640次阅读
    揭秘<b class='flag-5'>NVIDIA</b> <b class='flag-5'>AI</b> Workbench 如何助力应用<b class='flag-5'>开发</b>

    Al大模型机器人

    丰富的知识储备。它们可以涵盖各种领域的知识,并能够回答相关问题。灵活性与通用性: AI模型机器人具有很强的灵活性和通用性,能够处理各种类型的任务和问题。持续学习和改进: 这些
    发表于 07-05 08:52

    英伟达推出AI模型推理服务NVIDIA NIM

    英伟达近日宣布推出一项革命AI模型推理服务——NVIDIA NIM。这项服务将极大地简化AI模型
    的头像 发表于 06-04 09:15 679次阅读

    NVIDIA NIM 革命性地改变模型部署,将全球数百万开发者转变为生成式 AI 开发

    来自 AI 生态系统各个领域的 150 余家合作伙伴嵌入了 NIM 推理微服务,将企业级 AI 应用的部署时间从数周缩短至几分钟 NVIDIA 开发者计划会员可免费使用 NIM 来进行
    发表于 06-03 09:12 227次阅读
    <b class='flag-5'>NVIDIA</b> NIM 革命性地改变<b class='flag-5'>模型</b>部署,将全球数百万<b class='flag-5'>开发</b>者转变为生成式 <b class='flag-5'>AI</b> <b class='flag-5'>开发</b>者

    NVIDIA与微软扩展合作,帮助开发者更快构建和部署AI应用

    NVIDIA 在 Microsoft Build 开发者大会上展示了与 Microsoft Azure 和 Windows PC 的集成解决方案,简化了 AI 模型部署并优化了路径规划
    的头像 发表于 05-23 10:14 414次阅读

    防止AI模型被黑客病毒入侵控制(原创)聆思大模型AI开发套件评测4

    在设计防止AI模型被黑客病毒入侵时,需要考虑到复杂的加密和解密算法以及模型的实现细节,首先需要了解模型的结构和实现细节。 以下是我使用Python和TensorFlow 2.x实现
    发表于 03-19 11:18