横向联邦端侧部署

查看源文件

本文档介绍如何编译,部署Federated-Client。

Linux 编译指导

系统环境和第三方依赖

本章节介绍如何完成MindSpore联邦学习的端侧编译,当前联邦学习端侧仅提供Linux上的编译指导,其他系统暂不支持。下表列出了编译所需的系统环境和第三方依赖。

软件名称

版本

作用

Ubuntu

18.04.02LTS

编译和运行MindSpore的操作系统

GCC

7.3.0到9.4.0之间

用于编译MindSpore的C++编译器

git

-

MindSpore使用的源代码管理工具

CMake

3.18.3及以上

编译构建MindSpore的工具

Gradle

6.6.1

基于JVM的构建工具

Maven

3.3.1及以上

Java项目的管理和构建工具

OpenJDK

1.8 到 1.15之间

Java项目的管理和构建工具

安装GCC

可以通过以下命令安装GCC。

sudo apt-get install gcc-7 git -y

如果要安装更高版本的GCC,使用以下命令安装GCC 8。

sudo apt-get install gcc-8 -y

或者安装GCC 9。

sudo apt-get install software-properties-common -y
sudo add-apt-repository ppa:ubuntu-toolchain-r/test
sudo apt-get update
sudo apt-get install gcc-9 -y

安装git

可以通过以下命令安装git。

sudo apt-get install git -y

安装CMake

可以通过以下命令安装CMake

wget -O - https://apt.kitware.com/keys/kitware-archive-latest.asc 2>/dev/null | sudo apt-key add -
sudo apt-add-repository "deb https://apt.kitware.com/ubuntu/ $(lsb_release -cs) main"
sudo apt-get install cmake -y

安装Gradle

可以通过以下命令安装Gradle

# 下载对应的压缩包,解压。
# 配置环境变量:
  export GRADLE_HOME=GRADLE路径
  export GRADLE_USER_HOME=GRADLE路径
# 将bin目录添加到PATH中:
  export PATH=${GRADLE_HOME}/bin:$PATH

安装Maven

可以通过以下命令安装Maven

# 下载对应的压缩包,解压。
# 配置环境变量:
  export MAVEN_HOME=MAVEN路径
# 将bin目录添加到PATH中:
  export PATH=${MAVEN_HOME}/bin:$PATH

安装OpenJDK

可以通过以下命令安装OpenJDK

# 下载对应的压缩包,解压。
# 配置环境变量:
  export JAVA_HOME=JDK路径
# 将bin目录添加到PATH中:
  export PATH=${JAVA_HOME}/bin:$PATH

验证是否成功安装

确认系统环境和第三方依赖中安装是否成功。

打开命令窗口数输入:gcc --version
输出以下结果标识安装成功:
  gcc version 版本号

打开命令窗口数输入:git --version
输出以下结果标识安装成功:
  git version 版本号

打开命令窗口数输入:cmake --version
输出以下结果标识安装成功:
  cmake version 版本号

打开命令窗口数输入:gradle --version
输出以下结果标识安装成功:
  Gradle 版本号

打开命令窗口数输入:mvn --version
输出以下结果标识安装成功:
  Apache Maven 版本号

打开命令窗口数输入:java --version
输出以下结果标识安装成功:
  openjdk version 版本号

编译选项

联邦学习device_client目录下的cli_build.sh脚本用于联邦学习端侧的编译。

cli_build.sh的参数使用说明

参数

参数说明

取值范围

默认值

-p

依赖外部包的下载存放路径

字符串

third

-c

是否复用之前下载的依赖包

on、off

on

编译示例

  1. 首先,在进行编译之前,需从gitee代码仓下载源码。

    git clone https://gitee.com/mindspore/federated.git ./
    
  2. 然后进入目录mindspore_federated/device_client,执行如下命令:

    bash cli_build.sh
    
  3. 由于端侧框架和模型是解耦的,我们提供的x86架构包mindspore-lite-{version}-linux-x64.tar.gz不包含模型相关脚本,因此需要用户自行生成模型脚本对应的jar包,我们提供的模型脚本对应jar包可采用如下方式获取:

    cd federated/example/quick_start_flclient
    bash build.sh -r mindspore-lite-java-flclient.jar #-r 后需要给出最新x86架构包绝对路径(步骤2生成,federated/mindspore_federated/device_client/build/libs/jarX86/mindspore-lite-java-flclient.jar)
    

运行以上指令后生成jar包路径为:federated/example/quick_start_flclient/target/quick_start_flclient.jar。

构建依赖环境

  1. 将文件federated/mindspore_federated/device_client/third/mindspore-lite-{version}-linux-x64.tar.gz解压后,所得到的目录结构如下所示(联邦学习l不使用的文件不展示):

    mindspore-lite-{version}-linux-x64
    ├── tools
    └── runtime
        ├── include  # 训练框架头文件
        ├── lib      # 训练框架库
           ├── libminddata-lite.a          # 图像处理静态库文件
           ├── libminddata-lite.so        # 图像处理动态库文件
           ├── libmindspore-lite-jni.so   # MindSpore Lite推理框架依赖的jni动态库
           ├── libmindspore-lite-train.a  # MindSpore Lite训练框架依赖的静态库
           ├── libmindspore-lite-train.so # MindSpore Lite训练框架依赖的动态库
           ├── libmindspore-lite-train-jni.so # MindSpore Lite训练框架依赖的jni动态库
           ├── libmindspore-lite.a  # MindSpore Lite推理框架依赖的静态库
           ├── libmindspore-lite.so  # MindSpore Lite推理框架依赖的动态库
           └── mindspore-lite-java.jar    # MindSpore Lite训练框架jar包
        └── third_party
            ├── glog
            │└── libmindspore_glog.so.0   #glog 日志动态库文件
            └── libjpeg-turbo
                └── lib
                    ├── libjpeg.so.62   # 图像处理动态库文件
                    └── libturbojpeg.so.0  # 图像处理动态库文件
    
  2. 可将路径mindspore-lite-{version}-linux-x64/runtime/lib/mindspore-lite-{version}-linux-x64/runtime/third_party/glog/以及mindspore-lite-{version}-linux-x64/runtime/third_party/libjpeg-turbo/lib/中联邦学习所依赖的so文件放入一个文件夹,比如/resource/x86libs/。然后在x86中设置环境变量(下面需提供绝对路径):

    export LD_LIBRARY_PATH=/resource/x86libs/:$LD_LIBRARY_PATH
    
  3. 设置好依赖环境之后,可参考应用实践教程实现一个端云联邦的图像分类应用(x86)在x86环境中模拟启动多个客户端进行联邦学习。