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

微软 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架构

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。

环境要求:
推荐Ubuntu 16.04 LTS(暂不支持CentOS等其它Linux系统)。
静态IP地址。(同一网段。)
能够访问外网,可下载Docker Hub的镜像文件。
为集群中每台机器提供统一的用户名密码,并有sudo权限。(主从节点用户名密码一致)
有统一的时间同步服务(默认即可)。
推荐干净环境进行安装。如果已经安装了Docker,API版本必须大于等于1.26。
各台计算机之间网络可达。
硬件配置:
根据官方文档,集群节点的内存至少12GB,推荐分配多一点,本例中分配了64GB。
https://github.com/Microsoft/pai/wiki/Resource-Requirement

磁盘内存主节点最低60GB(根目录),从节点尽量大一些50GB以上(本例分配了128GB),CPU核心数最低6核。(本例中分配了8核)
—在主机A上构建环境dev-box—
1.安装用于配置的docker
即管理、安装整个OpenPAI的docker(在官方文档中称为dev-box)。以后的管理、配置工作都会在这个docker中进行。登录进某台计算机(可选用集群中的机器),确保有sudo权限。然后按顺序执行下列命令。安装docker,如果安装有更新的版本可跳过。

注意:集群安装时需要用另外一台独立于集群的专门电脑来安装!
(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


(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保存退出

 开始构建dev-box
sudo docker build -t dev-box .
 运行部署容器

 进入容器
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信息。



Tip:IP配置使用本地IP,或者是Azure服务器的内网IP。
4. 生成OpenPAI配置文件
在quick-start.yaml准备就绪后,使用它生成四个配置yaml文件,如下所示。
生成配置文件

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文件
主要配置集群主机的硬件配置及其系统型号。

 配置kubernetes-configuration.yaml
替换Google的registry为国内openpai的registry

 配置services-configuration.yaml
加一句nvidia-drivers-version: 384.111,配置GPU驱动版本
把data-path的值改为”/mnt/datastorage”(mnt是可以动态增加的,所以把HDFS存储位置放在mnt目录下会好一些。)

6.启动Kubernetes
准备好配置文件后,可以使用paictl工具启动Kubernetes服务:

该paictl工具执行以下操作:
 kubectl在当前计算机(开发框)中安装命令。
基于Kubernetes相关的配置文件cluster-configuration.yaml,kubernetes-configuration.yaml和k8s-role-definition.yaml。
 用于kubectl在目标计算机上启动Kubernetes。
完成此步骤后,可以通过访问Kubernetes Dashboard来检查Kubernetes的状态:http://:9090
其中,表示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上以颜色改变的形式进行提醒(如变成红色等)。

:---------:PAI 主页面

:---------:集群Job概览,点击Job名称可以查看详细信息及日志信息

:---------:Job运行状态页显示容器的IP地址、端口和GPU位置,该页面还提供远程SSH登录容器的信息

:---------:集群中机器运行状况概览,不同颜色展现了不同的忙闲程度

:---------:集群中每台机器上的Service运行状况

:---------:主节点页面信息

:---------:工作节点页面信息

:---------:任务提交界面

:---------:K8S仪表盘

:---------:K8S集群节点

:---------:平台市场

:---------:帮助文档

微软OpenPAI平台搭建指南相关推荐

  1. 微软OpenPai平台部署安装(kubernetes 大数据和深度学习平台安装部署)

    (1)特别注意,机器配置必须16/32核 64G内存,曾经在虚拟机上安装部署8核/28G内存走不出来.哪怕修改pod文件memory配置 (2)另外遇到镜像下载不出来建议先下载到本地 (3)操作系统u ...

  2. 记一次CTFd平台搭建

    CTFd平台搭建指南 前言 学校要承办市赛的网络安全赛项,要求要稳定的平台,所以这一次我选择了CTFd作为本次比赛的环境.(以前内部比赛用过H1v1,偶尔会出现500的报错.)之前看到过赵师傅写的CT ...

  3. 分享--Rancher 2.1平台搭建及使用

    本文背景: 分享--Rancher 2.1平台搭建及使用 注意:           Rancher 官方 中文文档    https://docs.rancher.cn/ 以下内容来源于下方这个链接 ...

  4. 来自微软的接口设计指南

    原文地址:Microsoft API Guidelines 笔者有关于REST系列文章 笔者之前翻译过一篇来自于PayPal的RESTful API标准,其是PayPal内部遵循的RESTful的接口 ...

  5. 《网络安全测试实验室搭建指南》—第1章1.2节硬件要求

    本节书摘来自异步社区<网络安全测试实验室搭建指南>一书中的第1章1.2节硬件要求,作者[美]Michael Gregg(迈克尔 格雷格),更多章节内容可以访问云栖社区"异步社区& ...

  6. B端运营级视频服务技术平台搭建

    正文字数:4119  阅读时长:6分钟 本次LiveVideoStackCon 2020北京线下峰会我们邀请到了北京二六三企业通信有限公司技术总监李志涛来做分享.经过多年的打造,263云视频平台已经支 ...

  7. 基于微软开发平台构建和使用私有NuGet托管库

    本篇blog包含使用TFS2017,VS2017等平台和工具搭建和使用NuGet库等基本过程,为团体提供更加自动化和高效的研发活动支持. 作为以产品线或者以专属业务为扩展的项目类型的软件研发团体,都会 ...

  8. 深度解析:微软云计算平台的通信技术与应用开发

    云计算近年来非常火热,已经成为目前继SOA.Web2.0之后又一个热门的话题.Amazon.com.Google和Microsoft都相继推出了自己的云计算平台.Microsoft的云计算平台叫做Az ...

  9. 微软物联网平台再推新!

    物联网技术是工业4.0重要的一环,猴年微软物联网平台又有怎样的新年气象呢?快来看看微软Azure 物联网总监 Sam George 怎么说. 微软的使命是予力全球每一人.每一组织成就不凡.我们相信,物 ...

最新文章

  1. mysql gtid 开启失败,master--1.1.3-SNAPSHOT版本,启用GTID,启动失败
  2. 【鸿蒙 HarmonyOS】UI 组件 ( 单选按钮 | RadioButton 与 RadioContainer 组件 )
  3. 计算机教师的名言是,教师名言
  4. 华测数据导出方法_输电线路塔基测量成图方法研究与应用
  5. 加载页面就触发ajax,AJAX post方法,有时会在页面加载时触发,有时不会
  6. C++:20---成员变量初始化方式
  7. linux 引导管理器,linux系统引导管理器GRUB
  8. for循环的一个复制算法(Java)
  9. C++ Programming with TDD之一:GMOCK框架简介
  10. 计算机网络未来的发展和趋势论文,计算机网络发展论文范文
  11. Debian 中使用apt-get update 出现NO_PUBKEY 解决方法
  12. 2022年上半年网络工程师下午真题及答案
  13. FPGA是什么呢,通透讲解单片机和FPGA的区别
  14. 关于微信公众号,无法接受服务器消息的原因
  15. WPS自动生成目录,目录里显示图片如何解决
  16. 编写算法将二叉树中所有结点的左、右子树相互交换
  17. 解决Aria2 BT下载速度慢没速度的问题
  18. pytorch教程 聊天机器人(详细注释attentionrnn输入输出shape等知识点...
  19. Java and Me --HDU轩少
  20. CityMaker学习教程01 模块说明

热门文章

  1. 违背基本假设的几种情况——异方差性(R语言)
  2. 工业元宇宙三人行系列直播活动第五场在北京举办
  3. Ubuntu 添加root用户
  4. 如何利用excel计算百分位
  5. 上拉刷新下拉加载的实现
  6. 手把手教你使用Java生成助记词、私钥、地址|Java区块链钱包生成助记词、地址
  7. 诺基亚C2-03 - 简单应优先处理的诺基亚C2-03
  8. Android 第三方QQ分享功能实现
  9. HLSL 学习笔记7 Light Mode
  10. Linux权限“suid”与“guid”设置