横向联邦端侧部署
本文档介绍如何编译,部署Federated-Client。
Linux 编译指导
系统环境和第三方依赖
本章节介绍如何完成MindSpore联邦学习的端侧编译,当前联邦学习端侧仅提供Linux上的编译指导,其他系统暂不支持。下表列出了编译所需的系统环境和第三方依赖。
软件名称 |
版本 |
作用 |
---|---|---|
Ubuntu |
18.04.02LTS |
编译和运行MindSpore的操作系统 |
7.3.0到9.4.0之间 |
用于编译MindSpore的C++编译器 |
|
- |
MindSpore使用的源代码管理工具 |
|
3.18.3及以上 |
编译构建MindSpore的工具 |
|
6.6.1 |
基于JVM的构建工具 |
|
3.3.1及以上 |
Java项目的管理和构建工具 |
|
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 |
编译示例
首先,在进行编译之前,需从gitee代码仓下载源码。
git clone https://gitee.com/mindspore/federated.git -b r0.1 ./
然后进入目录mindspore_federated/device_client,执行如下命令:
bash cli_build.sh
由于端侧框架和模型是解耦的,我们提供的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。
构建依赖环境
将文件
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 # 图像处理动态库文件
可将路径
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
设置好依赖环境之后,可参考应用实践教程实现一个端云联邦的图像分类应用(x86)在x86环境中模拟启动多个客户端进行联邦学习。