微软 Open PAI 平台搭建操作指南

版权声明:本文章版权所有 违者必究 https://blog.csdn.net/weixin_43943117/article/details/84869278

# 微软 Open PAI 平台搭建操作指南
**OpenPAI架构与功能简介**
OpenPAI是由微软亚洲研究院和微软(亚洲)互联网工程院联合研发的,支持多种深度学习、机器学习及大数据任务,可提供大规模GPU集群调度、集群监控、任务监控、分布式存储等功能,且用户界面友好,易于操作,让人工智能堆栈变得简单、快速、可扩展。
OpenPAI的架构如下图所示,用户通过Web Portal调用REST Server的API提交作业(Job)和监控集群,其它第三方工具也可通过该API进行任务管理。随后REST Server与Launcher交互,以执行各种作业,再由Launcher Server处理作业请求并将其提交至Hadoop YARN进行资源分配与调度。可以看到,OpenPAI给YARN添加了GPU支持,使其能将GPU作为可计算资源调度,助力深度学习。其中,YARN负责作业的管理,其它静态资源(下图蓝色方框所示)则由Kubernetes进行管理。
 OpenPAI架构![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206153820656.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
       
OpenPAI完全基于微服务架构,所有的OpenPAI服务和AI Job均在容器中运行,这样的设计让OpenPAI的部署更加简单,无论是在Ubuntu裸机集群还是在云服务器上,仅需运行几个脚本即可完成部署。这同时也使其能够支持多种不同类型的AI任务,如CNTK、TensorFlow、PyTorch等不同的深度学习框架。此外,用户通过自定义Job容器即可支持新的深度学习框架和其他机器学习、大数据等AI任务,具有很强的扩展性。

 在运维方面,OpenPAI提供了AI任务在线调试、错误报警、日志管理、性能检测等功能,显著降低了AI平台的日常运维难度。同时,它还支持MPI、RDMA网络,可满足企业对大规模深度学习任务的性能要求。
 
不仅如此,OpenPAI还实现了与Visual Studio的集成。Visual Studio Tools for AI是微软Visual Studio 2017 IDE的扩展,用户在Visual Studio中就可以开发、调试和部署深度学习和AI解决方案。集成后,用户在Visual Studio中调试好的模型可便捷地部署到OpenPAI集群中。

**OpenPAI平台具体搭建步骤:**

准备工作:三台主机。一个集群部署主机A,一个主节点主机B,一个从节点主机C。
 ![本例集群配置图示](https://img-blog.csdnimg.cn/20181206154957743.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
环境要求:
推荐Ubuntu 16.04 LTS(暂不支持CentOS等其它Linux系统)。
静态IP地址。(同一网段。)
能够访问外网,可下载Docker Hub的镜像文件。
为集群中每台机器提供统一的用户名密码,并有sudo权限。(主从节点用户名密码一致)
有统一的时间同步服务(默认即可)。
推荐干净环境进行安装。如果已经安装了Docker,API版本必须大于等于1.26。
各台计算机之间网络可达。
硬件配置:
根据官方文档,集群节点的内存至少12GB,推荐分配多一点,本例中分配了64GB。
https://github.com/Microsoft/pai/wiki/Resource-Requirement
![在这里插入图片描述](https://img-blog.csdnimg.cn/2018120615531419.png)
磁盘内存主节点最低60GB(根目录),从节点尽量大一些50GB以上(本例分配了128GB),CPU核心数最低6核。(本例中分配了8核)
---在主机A上构建环境dev-box---
1.安装用于配置的docker
即管理、安装整个OpenPAI的docker(在官方文档中称为dev-box)。以后的管理、配置工作都会在这个docker中进行。登录进某台计算机(可选用集群中的机器),确保有sudo权限。然后按顺序执行下列命令。安装docker,如果安装有更新的版本可跳过。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206155502361.png)
注意:集群安装时需要用另外一台独立于集群的专门电脑来安装!
(Notice that dev-box should run on a machine outside of PAI cluster, it shouldn't run on any PAI cluster node.)
2.构建dev-box的docker镜像
(1)从dockerhub自动拉取官方的image文件
https://github.com/Microsoft/pai/blob/master/docs/pai-management/doc/cluster-bootup.md#customizeddeploy
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206155539344.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206155600613.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
 (2)从官方源码Dockerfile文件手动构建
    克隆openpai源码文件
git clone https://github.com/Microsoft/pai
    找到官方dev-box的Dockerfile文件
cd pai/src/dev-box/build
cp dev-box.dockerfile Dockfile
vim Dockfile打开文件,把95行的COPY build/start-script.sh /usr/local修改成COPY start-script.sh /usr/local保存退出
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206155756490.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
    开始构建dev-box
sudo docker build -t dev-box .
    运行部署容器
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206155816939.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
    进入容器
sudo run -it dev-box /bin/bash
Tip:由于官方dockerhub文件版本没有更新过来,所以本实例为手动部署。
3. 配置quick-start.yaml文件
在dev-box文件夹下准备文件:/ pai / deployment / quick-start /
路径下有一个示例文件:/pai/deployment/quick-start/quick-start-example.yaml
示例yaml文件如下所示。请注意,您应该相应地更改机器的IP地址和ssh信息。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206160016251.png)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206160033530.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206160215774.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
Tip:IP配置使用本地IP,或者是Azure服务器的内网IP。
4. 生成OpenPAI配置文件
在quick-start.yaml准备就绪后,使用它生成四个配置yaml文件,如下所示。
生成配置文件
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206160424654.png)
https://github.com/Microsoft/pai/blob/master/docs/pai-management/doc/how-to-write-pai-configuration.md#appendix
以上的命令将在root目录生成pai-config文件,其中有以下四个yaml文件。
cluster-configuration.yaml
k8s-role-definition.yaml
kubernetes-configuration.yaml
serivices-configuration.yaml
5.检查配置文件
https://github.com/Microsoft/pai/blob/master/docs/pai-management/doc/how-to-write-pai-configuration.md
    配置cluster-configuration.yaml文件
主要配置集群主机的硬件配置及其系统型号。
 ![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206160500697.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
    配置kubernetes-configuration.yaml
替换Google的registry为国内openpai的registry
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206160517171.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70) 
    配置services-configuration.yaml
加一句nvidia-drivers-version: 384.111,配置GPU驱动版本
把data-path的值改为”/mnt/datastorage”(mnt是可以动态增加的,所以把HDFS存储位置放在mnt目录下会好一些。)
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206160540678.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70) 
6.启动Kubernetes
准备好配置文件后,可以使用paictl工具启动Kubernetes服务:
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206160725512.png)
该paictl工具执行以下操作:
    kubectl在当前计算机(开发框)中安装命令。
基于Kubernetes相关的配置文件cluster-configuration.yaml,kubernetes-configuration.yaml和k8s-role-definition.yaml。
    用于kubectl在目标计算机上启动Kubernetes。
完成此步骤后,可以通过访问Kubernetes Dashboard来检查Kubernetes的状态:http://<master>:9090
其中,<master>表示Kubernetes主节点的负载均衡器的IP地址。当只有一个主节点且未使用负载均衡器时,通常是主节点本身的IP地址。(本地安装可以在http://master:9090端口查看kubenetsde的dashboard,Azure服务器话,需要开启主节点的9090端口)
7.启动所有PAI服务
当Kubernetes启动并运行时,可以使用paictl工具将PAI服务部署到它:
cd /pai
#cmd should be executed under /pai directory in the dev-box.
python paictl.py service start -p ~/pai-config [ -n service-name ]
如果-n参数被指定,只有给定的服务,例如rest-server,webportal,watchdog等,将被部署。如果没有,将部署所有PAI服务。在后一种情况下,上面的命令执行以下操作:
•    基于cluster-configuration.yaml生成与Kubernetes相关的配置文件。
•    用于kubectl在Kubernetes上设置配置映射和创建pod。
Tip:可以使用命令 sudo docker logs kubelet  查看安装日志。
8.配置服务器网络规则(本地单机集群无需配置)
以Azure云为例:
 只需要在主节点的入站规则中,打开80端口就好了。
**访问OpenPAI平台:**
使用命令sudo docker logs kubelet 查看平台是否安装完成,在浏览器键入主节点IP地址就可以访问openpai的dashboard页面。默认账户是admin密码是admin-password。
**运行管理界面:**
OpenPAI提供了友好的用户界面,操作简单,便于用户进行集群监控、任务提交等。例如,主界面上显示了集群的GPU利用率、节点总数、CPU利用率、网络状况等。当某项数据异常时,OpenPAI将启动报警机制通知用户,并在UI上以颜色改变的形式进行提醒(如变成红色等)。
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206182056424.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
:---------:PAI 主页面
![集群Job概览,点击Job名称可以查看详细信息及日志信息](https://img-blog.csdnimg.cn/20181206182132477.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
:---------:集群Job概览,点击Job名称可以查看详细信息及日志信息
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206182333790.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
:---------:Job运行状态页显示容器的IP地址、端口和GPU位置,该页面还提供远程SSH登录容器的信息
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206182426470.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
:---------:集群中机器运行状况概览,不同颜色展现了不同的忙闲程度
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206182504841.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
:---------:集群中每台机器上的Service运行状况
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206182538920.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
:---------:主节点页面信息
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206182601793.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
:---------:工作节点页面信息
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206182624904.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
:---------:任务提交界面
![在这里插入图片描述](https://img-blog.csdnimg.cn/2018120618264430.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
:---------:K8S仪表盘
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206182703990.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
:---------:K8S集群节点
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206182724105.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
:---------:平台市场
![在这里插入图片描述](https://img-blog.csdnimg.cn/20181206182749489.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80Mzk0MzExNw==,size_16,color_FFFFFF,t_70)
:---------:帮助文档

猜你喜欢

转载自blog.csdn.net/weixin_43943117/article/details/84869278