联系我们

4000 555 018
(7×24)
正睿服务器  >  新闻中心  >  技术文章
新闻中心

加速联邦学习:利用Intel® Gaudi® 2 加速器提升效率

间隙填充
正睿科技  发布时间:2024-02-26 17:36:46  浏览数:127

走进联邦学习

0.jpg

今天,我们非常激动地向大家介绍适用于Gaudi 2实例的Open Federated Learning(简称OpenFL)。在这篇博文中,我们将一步步指导您了解如何通过Intel Developer Cloud轻松访问和使用OpenFL在Gaudi 2实例上进行联邦学习。

Intel Gaudi 2 AI加速器支持OpenFL Intel Gaudi 2人工智能加速器支持OpenFL,这是一个用于联邦学习的Python库,它能够在不泄露敏感信息的情况下实现多方协同训练。

OpenFL:深度学习中立框架 OpenFL是一个与深度学习框架无关的框架。借助插件机制,用户可以使用任意深度学习框架如TensorFlowPyTorch来训练统计模型。

关于OpenFL OpenFL项目最初由Intel Labs和Intel物联网集团共同开发,目前得到了社区的广泛支持。团队热烈欢迎并鼓励任何有助于改进文档、提供反馈意见或提出改进建议的贡献者参与其中。

1708941457600038197.png

Intel® Gaudi® AI 加速器概览

Intel Gaudi 2 深度学习处理器是一种专为深度学习任务设计的AI加速器,能显著提升深度学习训练和推理性能。

Intel Gaudi 加速器架构

Intel Gaudi 架构包含了计算、内存和网络三个主要子系统,并从底层设计出发以优化深度学习训练与推理负载。

计算架构具有异构性,包含两种计算引擎:矩阵乘法引擎(MME)以及全可编程张量处理核心集群(TPC)。其中,MME专门负责执行所有可以转换为矩阵乘法的操作(如全连接层、卷积运算、批量GEMM等),而TPC则是一个专为深度学习操作定制的VLIW SIMD处理器,用于加速其他各类运算。

其异构架构包括了一组全可编程的张量处理核心(TPC)、相关的开发工具与库,以及一个可配置的矩阵数学引擎。TPC核心是一个具有针对训练工作负载进行高效服务优化的指令集和硬件结构的VLIW SIMD处理器。它具有可编程性,为用户提供最大程度的创新灵活性,并结合了许多面向工作负载的功能特性,例如:

1.GEMM运算加速

2.张量寻址功能

3.隐藏延迟的能力

4.随机数生成

5.特殊函数的高级实现

Intel Gaudi 加速器架构是首款在芯片上集成了融合以太网(Converged Ethernet)上的远程直接内存访问(RDMA over Converged Ethernet,简称RoCE v2)引擎的深度学习训练处理器。这些引擎在训练过程中处理单元间的通信中发挥着至关重要的作用。通过原生集成RoCE技术,用户可以在服务器内部及机架内(垂直扩展,scale-up)以及跨多个机架(水平扩展,scale-out)使用相同的扩展技术。网络连接可以直接在Gaudi处理器之间建立,也可以通过任意数量的标准以太网交换机实现,从而极大地提升了大规模分布式训练时的数据交互效率和系统性能。

英特尔Gaudi 2处理器

英特尔Gaudi 2处理器提供高达2.4太比特的网络带宽,得益于芯片上原生集成了24个100 Gbps RoCE V2 RDMA网络接口控制器(NICs),从而支持通过直接路由或标准以太网交换机实现多个Gaudi处理器之间的高效通信。Gaudi 2的内存子系统包含了96 GB的HBM2E内存,能提供高达2.45 TB/秒的带宽,此外还配备了48 MB的本地SRAM,具备充足的带宽确保MME、TPC、DMA控制器以及RDMA NICs能够并行运行。

针对视觉应用,英特尔Gaudi 2加速器特别集成了独立工作的媒体解码器,能够处理所有主流格式(如HEVC、H.264、VP9、JPEG等)的完整预处理流程,并且还能执行将数据准备输入到AI管道所需的后解码图像转换操作。

此外,英特尔Gaudi 2加速器全面支持深度学习所需的各种流行数据类型,包括FP32、TF32、BF16、FP16和FP8(分别对应E4M3和E5M2两种模式)。在矩阵乘法引擎(MME)中,所有这些数据类型都会被累积进一个FP32累加器进行计算。

1708941531731061311.png

英特尔Gaudi加速器在PyTorch开发与适应方面的概述

针对PyTorch迁移的详细讨论,请参考Gaudi2 PyTorch迁移指南。简要来说,将PyTorch模型迁移到Intel Gaudi加速器上的过程可以概括为以下几个步骤:

导入Habana Torch库:

nimport habana_frameworks.torch.core as htcore

目标指定为Gaudi HPU设备:

device = torch.device("hpu")

在Lazy模式下,需要在所有训练脚本中,在执行loss.backward()optimizer.step()之后立即添加mark_step()

htcore.mark_step()

从上述描述可以看出,所需的更改非常直接明了,仅需添加几行代码即可完成对Intel Gaudi加速器的支持与适配。

英特尔开发者云介绍与概览

英特尔开发者云由一组基于英特尔硬件的深度学习服务器集群构成,其中包括Intel Gaudi 2加速器。

开发者若要访问英特尔开发者云,可按照以下步骤操作:

访问英特尔开发者云并按照入门部分的指引进行: 进入官方网站注册成为企业账户,并通过输入客户信息和审核服务条款加入该计划。如果你是大学或政府机构相关的开发者,请在注册时明确标明您的隶属关系。同时,也可以考虑加入英特尔合作伙伴联盟会员计划

设置SSH访问密钥以访问开发者云 需要配置SSH密钥以便于登录和管理开发者云资源。

获取云积分 通过输入支付信息购买或使用优惠券兑换获得云积分,以用于支付开发者云中的资源使用。

登录并选择资源 完成上述步骤后,您可以在登录状态下进入硬件目录,选择并访问Intel Gaudi 2实例。

查阅详细指南 请参考《英特尔开发者云快速入门指南》,获取连接至开发者云及运行模型的详细步骤说明。

使用Intel Gaudi 2加速器进行OpenFL与MedMNIST 2D实验的编码细节:

本部分我们将探讨如何在配备了Intel Gaudi 2 AI加速器的情况下,将联邦学习框架应用于基于PyTorch实现的、使用了MedMNIST_2D数据集的实验中。具体来说,我们将参照arXiv上详细描述的文章及其Python包PyPI中的内容,展示一个利用Intel Gaudi 2加速器和联邦学习框架来加速处理Pytorch版MedMNIST 2D任务的实施示例。

MedMNIST v2是一个大型、类似于MNIST的标准生物医学图像集合,包括12个2D数据集和6个3D数据集。这些图像已经被预处理为28 x 28(2D)或28 x 28 x 28(3D)尺寸,并带有分类标签。MedMNIST v2涵盖了生物医学图像的主要数据模态,旨在针对不同数据规模下的轻量级2D和3D图像执行分类任务。在本次实验中,我们将借助OpenFL框架和Intel Gaudi 2加速器的优势,加快对MedMNIST 2D数据集上的模型训练速度及性能优化。

英特尔开发者云环境设置:

本示例在使用Intel Gaudi 2加速器的英特尔开发者云环境中进行了测试。

要访问并使用Intel Developer Cloud上的Intel Gaudi 2加速器实例,请遵循上文第3部分详述的步骤进行操作。

在英特尔开发者云提供的Intel Gaudi加速器实例中,已经预装了适用于Intel Gaudi 2加速器的SynapseAI SW Stack软件堆栈。

此外,我们采用了基于Habana构建的Docker容器,该容器是通过以下基础Dockerfile构建而成:

现在创建一个包含以下内容的Dockerfile,并将其命名为Dockerfile_Habana:

FROM vault.habana.ai/gaudi-docker/1.12.0/ubuntu20.04/habanalabs/pytorch-installer-2.0.1:latest
ENV HABANA_VISIBLE_DEVICES=all
ENV OMPI_MCA_btl_vader_single_copy_mechanism=none

ENV DEBIAN_FRONTEND="noninteractive" TZ=Etc/UTC
RUN apt-get update && apt-get install -y tzdata bash-completion python3-pip openssh-server vim git iputils-ping net-tools curl bc gawk && rm -rf /var/lib/apt/lists/*

RUN pip install numpy && pip install jupyterlab && pip install matplotlib && pip install openfl

RUN git clone https://github.com/securefederatedai/openfl.git /root/openfl

WORKDIR /root

此基础容器已预装了针对HPU优化的PyTorch包。

构建上述Dockerfile定义的容器,然后使用以下命令启动它:

export GAUDI_DOCKER_IMAGE="gaudi-docker-ubuntu20.04-openfl"

docker build -t ${GAUDI_DOCKER_IMAGE} -f Dockerfile_Habana .
docker run --net host -id --name openfl_gaudi_run ${GAUDI_DOCKER_IMAGE} bash

然后,通过以下命令进入容器的bash shell:

docker exec -it openfl_gaudi_run bash

一旦进入容器内部,请务必确认openfl仓库已被克隆!如未克隆,请使用以下命令克隆openfl仓库:

git clone https://github.com/securefederatedai/openfl.git

然后,检查openfl包是否已安装:

pip list | grep openfl

如果尚未安装,则使用以下命令进行安装:

pip install openfl

分步运行MedMNIST_2D教程:

将终端分为3个窗口:

第一个终端 - 用于director服务。
第二个终端 - 用于envoy服务。
第三个终端 - 用于实验运行。

在每个终端中执行以下操作:

cd openfl/openfl-tutorials/interactive_api/HPU/PyTorch_MedMNIST_2D

在第一个终端中,运行director服务。

cd director
./start_director.sh

在第二个终端中,安装所需的依赖项并运行envoy服务:

cd envoy
pip install -r requirements.txt
./start_envoy.sh env_one envoy_config.yaml
Optional: Run a second envoy in an additional terminal:

请确保在第二个终端中也完成以下步骤:

cd envoy
./start_envoy.sh env_two envoys_config.yaml

在第三个(或第四个,如果您选择运行两个envoy时)终端中,启动Jupyter Notebook并运行相关教程代码:

cd workspace
jupyter lab --allow-root HPU_Pytorch_MedMNIST_2D.ipynb

在本地主机上,通过以下命令将Jupyter Notebook的端口转发到本地主机,以便您可以在本地浏览器中查看:

ssh -NL 8888:127.0.0.1:8888 gaudi2_node

guadi2_node 是您远程连接的gaudi2节点。在您的终端中,将会显示一个指向Jupyter服务器的URL链接。请在本地浏览器中访问这个链接,待网页成功加载后,点击并打开Pytorch_MedMNIST_2D.ipynb文件来运行实验。

为了启动实验流程,请选取形似两个三角形的图标,执行“重启内核并运行所有单元格”操作。此时,您将在终端界面观察到实验正在运行的动态反馈,当整个实验顺利完成时,主终端会明确提示实验已成功结束。

总结:

本次练习生动地向AI应用开发者介绍了OpenFL在实施联邦学习框架时所蕴含的微妙理念。尽管该框架最初是为了在保持数据多样性和分布式特性的同时,保障隐私和数据安全而在模型训练中研发出来的,但其同样能够便捷地应用于其他具有相似数据隐私与安全需求的领域。

此外,通过此次示例,我们还展示了如何简易高效地利用Intel Developer Cloud上的Intel Gaudi 2加速器实例,以加快对深度学习模型及系统的验证进程。

  • 正睿合作伙伴
  • 社区
首页 | 注册 | 网站地图 | 通告 | 联系我们
CopyRight(C)2004-2022 Chongqing Zhengrui Technology Co.,Ltd. All rights reserved.
重庆正睿科技有限公司(C)版权所有 未经书面授权 不得转载、复制或建立镜像
渝ICP备11002339号-1  渝公网安备 50010702500475号