<br>
我们已将仓库名称从 XLearning 更名为 hbox。
如果你有此仓库的本地克隆,请更新你的远程 URL:
git remote set-url origin https://github.com/Qihoo360/hbox.git
Hbox 是一个结合大数据和人工智能的便捷高效的调度平台,支持多种机器学习和深度学习框架。Hbox 运行在 Hadoop Yarn 上,并已集成深度学习框架,如 TensorNet、TensorFlow、MXNet、Caffe、Theano、PyTorch、Keras、XGBoost、horovod、openmpi、tensor2tensor。支持 GPU 资源调度,运行在 docker 中,并有 restful api 管理接口。Hbox 具备令人满意的扩展性和兼容性。
架构
Hbox 有三个基本组件:
- 客户端:启动和获取应用程序的状态。
- ApplicationMaster(AM):负责内部调度和生命周期管理,包括输入数据分发和容器管理。
- 容器:执行应用程序,开始 Worker 或 PS(参数服务器)的进程,监控并报告进程状态给 AM,并保存输出结果,特别是启动 TensorFlow 应用的 TensorBoard 服务。
功能
1 支持多种深度学习框架
除了 TensorFlow 和 MXNet 框架的分布式模式,Hbox 支持所有深度学习框架的独立模式,如 Caffe、Theano、PyTorch。Hbox 还允许灵活地使用自定义版本和多版本的框架。
2 基于 HDFS 的统一数据管理
训练数据和 model 结果保存在 HDFS(支持 S3)。Hbox 通过设置 --input-strategy
参数或 hbox.input.strategy
配置来指定输入数据的 --input
策略。Hbox 支持三种方式读取 HDFS 输入数据:
- 下载:AM 遍历指定 HDFS 路径下的所有文件,并以文件形式将数据分发给工作节点。每个工作节点从远程下载文件到本地。
- 占位符:与下载模式的区别在于 AM 向工作节点发送相关的 HDFS 文件列表,而工作节点直接从 HDFS 读取数据。
- InputFormat:集成了 MapReduce 的 InputFormat 功能,Hbox 允许用户指定任何实现的 InputFormat 以读取输入数据。AM 切分输入数据,并将片段分配给不同的工作节点。每个工作节点通过管道将分配的片段传递给执行进程。
类同于读取策略,Hbox 允许通过设置 --output-strategy
参数或 hbox.output.strategy
配置来指定输出数据的 --output
策略。结果输出模式有两种:
- 上传:程序完成后,每个工作节点将输出直接上传到指定的 HDFS 路径。网页界面的“保存模型”按钮允许用户在执行过程中将中间结果上传到远程。
- OutputFormat:集成了 MapReduce 的 OutputFormat 功能,Hbox 允许用户指定任何实现的 OutputFormat 以将结果保存到 HDFS。
更多详情见 数据管理
3 可视化显示
应用程序界面可分为四部分:
- 所有容器:显示容器列表及对应用的相关信息,包括容器主机、容器角色、容器当前状态、开始时间、完成时间、当前进度。
- 查看 TensorBoard:如果设置为应用程序类型为 TensorFlow 时启动 TensorBoard 服务,则提供进入 TensorBoard 的链接以实时查看。
- 保存模型:如果应用程序有输出,用户可以在应用程序执行期间通过“保存模型”按钮将中间输出上传到指定的 HDFS 路径。上传完成后,显示中间保存路径列表。
- 工作节点指标:显示每个工作节点的资源使用信息指标。
如下所示:
4 与原生框架代码的兼容性
除了在分布式模式 TensorFlow 框架中的 ClusterSpec 自动构建,独立模式 TensorFlow 和其他深度学习框架的程序可以直接在 Hbox 上执行。
编译与部署说明
1 编译环境要求
- jdk >= 1.8
- Maven >= 3.6.3
2 编译方法
在源码根目录下运行以下命令:
./mvnw package
编译后,在根目录下的 core/target
生成一个名为 hbox-1.1-dist.tar.gz
的分发包。
解压分发包,在根目录下生成以下子目录:
- bin: 管理应用程序作业的脚本
- sbin: 历史服务的脚本
- lib: 依赖库
- libexec: 通用脚本和 hbox-site.xml 配置示例
- hbox-*.jar: HBox 的 jar 包
用户需要将 HBOX_CONF_DIR
设置为包含有效 hbox-site.xml
的文件夹,
或将该文件夹链接到 $HBOX_HOME/conf
以进行配置。
3 部署环境要求
- CentOS 7.2
- Java >= 1.8
- Hadoop = 2.6 -- 3.2 (GPU 需要 3.1+)
- [可选] 集群节点上的深度学习框架依赖环境,如 TensorFlow、numpy、Caffe。
4 Hbox 客户端部署指南
在分发包解压后的 "conf" 目录下 "$HBOX_HOME" 配置相关文件:
-
hbox-env.sh: 设置环境变量,如:
- JAVA_HOME
- HADOOP_CONF_DIR
-
hbox-site.xml: 配置相关属性。注意,历史服务相关的属性需要与启动历史服务时配置的一致。更多详情请参见 配置 部分。
-
log4j.properties:配置日志级别
5 Hbox 历史服务的启动方法 [可选]
- 运行
$HBOX_HOME/sbin/start-history-server.sh
。
快速开始
在 Hbox 客户端使用 $HBOX_HOME/bin/hbox-submit
将应用程序提交到集群。
这里是提交 TensorFlow 应用程序的示例。
1 上传数据到 hdfs
将分发包根目录下的 "data" 目录上传到 HDFS
cd $HBOX_HOME
hadoop fs -put data /tmp/
2 提交
cd $HBOX_HOME/examples/tensorflow
$HBOX_HOME/bin/hbox-submit \
--app-type "tensorflow" \
--app-name "tf-demo" \
--input /tmp/data/tensorflow#data \
--output /tmp/tensorflow_model#model \
--files demo.py,dataDeal.py \
--worker-memory 10G \
--worker-num 2 \
--worker-cores 3 \
--ps-memory 1G \
--ps-num 1 \
--ps-cores 2 \
--queue default \
python demo.py --data_path=./data --save_path=./model --log_dir=./eventLog --training_epochs=10
参数含义如下:
属性名 | 含义 |
---|---|
app-name | 应用程序名称为 "tf-demo" |
app-type | 应用程序类型为 "tensorflow" |
input | 输入文件,HDFS 路径为 "/tmp/data/tensorflow" 对应本地目录 "./data" |
output | 输出文件,HDFS 路径为 "/tmp/tensorflow_model" 对应本地目录 "./model" |
files | 应用程序和所需本地文件,包括 demo.py, dataDeal.py |
worker-memory | 工作节点进程使用的内存量为 10GB |
worker-num | 应用程序使用的工作节点容器数为 2 |
worker-cores | 工作节点进程使用的核心数为 3 |
ps-memory | 参数服务器进程使用的内存量为 1GB |
ps-num | 应用程序使用的参数服务器容器数为 1 |
ps-cores | 参数服务器进程使用的核心数为 2 |
queue | 提交应用程序的队列 |
更多详情请参见 提交参数 部分。
常见问题
作者
Hbox
由 github 上的团队设计、撰写、评审和测试:
@Yuance Li, @Wen OuYang, @Runying Jia, @YuHan Jia, @Lei Wang