机器学习平台建设(六)

news2024/9/28 9:29:27

四、OpenPAI

前文介绍了机器学习平台的功能以及建设机器学习平台要考虑的因素。本节会介绍OpenPAI,即微软的开源机器学习平台。它可用于企业私有部署,也可部署在云平台中。它解决了建模训练时的算力和资源管理的问题。OpenPAI的开发很活跃,问题也能得到及时响应,还在积极开发新功能中。

OpenPAI代码及文档地址:https://github.com/Microsoft/pai

特点

OpenPAI是为数不多的用于私有部署的机器学习平台。在微软内部管理了几百块GPU,应用规模上得到了很好的验证。同时支持数台服务器的小规模部署。

OpenPAI和Visual Studio、Visual Studio Code的工具 AI工具集成在了一起,利用这些强大的集成开发环境同时,也可以方便的提交并管理训练任务、数据资源。

OpenPAI是通用的机器学习平台。理论上支持任何计算密集型,甚至存储密集型的任务。通过预先配置的Docker,已经支持了包括TensorFlow,Keras,CNTK等流行的计算框架,并支持框架自带的分布式训练任务。硬件上已支持GPU、内存、CPU的分配,通过扩展,还可以支持更多的硬件类型。

架构

OpenPAI基于Kubernetes的容器化,Yarn的资源分配,并集成了HDFS作为存储管理等开源组件构建的通用的机器学习平台。用户提交作业(即机器学习训练任务)后,就会自动分配资源,创建Docker实例,并运行指定的命令。因此,OpenPAI是一个通用的算力管理平台。通过提供一系列预构建好的Docker,OpenPAI可以方便的执行TensorFlow, Keras,CNTK等流行的机器学习框架的训练任务。

OpenPAI将复杂性包装了起来,只有master和worker两种角色。Master提供了web api和界面,以及Kubernetes的master节点等;worker用于运行实际计算的docker实例。

下图为OpenPAI的架构示意图。

算力管理

OpenPAI提供了作业的队列管理。另外,通过自己配置Docker,还能搭建出Jupyter Notebook这样的交互式开发训练环境。

在其队列管理中,用户只需要声明每个作业需要的资源类型,给定所需的docker镜像路径,代码位置等信息,即可等待系统分配资源,并运行训练作业。

OpenPAI的作业支持机器学习框架的分布式运算。如,可指派两个实例作为参数服务器,另外4个实例作为计算节点。OpenPAI开始执行此作业时,会先保留足够的资源,然后启动这些节点,开始分布式计算。在节点启动后,OpenPAI即可知道所有节点的IP、ssh端口等信息,并将这些信息通过环境变量或命令行参数的方式传给运行的脚本,从而让每个节点能发现其它所有节点。

在多用户的情况下,OpenPAI通过Virtual Cluster来解决资源分配问题。虚拟 Cluster可理解为虚拟的集群。不同的Virtual Cluster有不同的资源配额,可以将用户分配到一个或多个Virtual Cluster中。如果某个Virtual Cluster使用的资源超了,并且其它Virtual Cluster有空闲资源,则OpenPAI会使用空闲资源来运行。通过这样的管理,能实现多种场景。如:两个小团队各分配一个50%资源的Virtual 簇。团队A每天都有训练任务在持续进行,对资源的需求是越多越好。而团队B的资源使用是突发性的,一旦有需求,希望其能尽快完成。平时,团队A会使用团队B的空闲资源来加速自己的训练,一旦团队B有了突发任务,团队A占用团队B的训练任务就会被停下来,让团队B的任务先训练。又如,将生产需要的模型训练和试验需要的模型训练都在一个集群中进行,各用一个Virtual 簇。给生产分配100%的资源,而模型试验分配0%的资源。这样,一旦生产资源有空闲就可用于试验,但会优先保障生产资源。

作业

提交给OpenPAI的每个训练任务,称为作业(Job)。作业由一个json配置文件描述。通过Visual Studio Tools for AI以及 Visual Studio Code Tools for AI可以方便的提交训练作业和最新的代码。

作业配置

作业的json文件包含了训练任务的基本信息。下文是简化了的任务示例,对主要的参数进行介绍,以方便理解OpenPAI的用法。

  1. 普通作业

    {
        "jobName": "mnist_024",
        "image": "openpai/pai.example.tensorflow",
        "codeDir": "hdfs://\<ip address\>:\<port\>/folder/mnist",
        "taskRoles": [
            {
            "taskNumber": 1,
            "cpuNumber": 4,
            "memoryMB": 4096,
            "gpuNumber": 2,
            "command": "python \$PAI_WORK_DIR/mnist/mnist.py"
            }
        ]
    }

jobName:这是每个作业的名称,需要全局唯一。

image:这是作业运行的docker镜像的地址。示例中是OpenPAI预构建的TensorFlow的镜像地址。

codeDir:它表示了将要运行的代码位置。在docker启动后,会将此目录的内容拷贝到docker中的/root下。例如本例中,会将mnist目录内容拷贝到docker中的/root/mnist下。

taskRoles:这是作业需要的docker实例的定义模板数组。数组中每个项目是一个docker模板的定义。

taskNumber:这个docker模板在实例化时的数量,即这个模板创建几个docker实例。在单机运行的docker实例中,这个数字应为1。

cpuNumber、memoryMB、gpuNumber:对应于其名字,分别为CPU、内存、GPU的数量。这为当前任务模板定义了要使用资源的规格。OpenPAI会根据这些信息来分配计算节点。

command:这是Docker实例启动后,运行的命令。这条命令运行结束后,Docker会被销毁。如果命令行返回值不为0,任务会被标记为失败。

  1. 分布式作业

    {
    "jobName": "mnist_024",
    "image": "openpai/pai.example.tensorflow",
    "codeDir": "hdfs://\<ip address\>:\<port\>/folder/mnist",
    "taskRoles": [
            {
                "name": "ps_server",
                "taskNumber": 2,
                "cpuNumber": 2,
                "memoryMB": 8192,
                "gpuNumber": 0,
                "command": "python code/tf_cnn_benchmarks.py
                --ps_hosts=\$PAI_TASK_ROLE_ps_server_HOST_LIST
                --worker_hosts=\$PAI_TASK_ROLE_worker_HOST_LIST --job_name=ps"
            },
            {
                "name": "worker",
                "taskNumber": 2,
                "cpuNumber": 2,
                "memoryMB": 16384,
                "gpuNumber": 4,
                "command": "python code/tf_cnn_benchmarks.py
                --variable_update=parameter_server --data_dir=\$PAI_DATA_DIR
                --ps_hosts=\$PAI_TASK_ROLE_ps_server_HOST_LIST
                --worker_hosts=\$PAI_TASK_ROLE_worker_HOST_LIST --job_name=worker"
            }
        ]
    }

这是利用TensorFlow分布式训练功能的作业配置。此配置会分配两个参数服务器以及两个计算节点。分布式作业的具体内容和普通作业类似,但会有多个taskRoles中的节点。它们会被分配不同的资源。可以看到taskNumber数量为2,表示每种角色需要两个docker实例。

在command参数中可以看到有一些$开头的变量。这些是OPENPAI内置变量。可以将分布式系统各个角色的主机地址、ssh端口传给所有节点。这样,在任何分布式组网的系统中,都能够拿到所有的节点信息。

提交作业

Visual Studio和Visual Studio Code中的插件管理可以找到Tools for AI插件。的工具 AI是微软为机器学习准备的扩展。配合Visual Studio和Visual Studio Code的集成开发环境,为机器学习开发提供了更强大的支持。

Tools for AI其中一项功能就是远程训练任务管理,它支持OpenPAI作为远程服务器,能够提交、管理任务,管理存储。具体使用方法可参考OpenPAI的官方文档。

下图为Visual Studio中OpenPAI的任务提交界面。

下图为Visual Studio中OpenPAI的作业管理界面。

下图为Visual Studio中OpenPAI的存储管理界面。

下图为Visual Studio Code中OpenPAI的作业管理界面。

下图为Visual Studio Code中OpenPAI的存储管理界面。

运维

OpenPAI可以管理大规模的GPU平台,提供了负载、服务器健康等多种工具。通过运维工具,能够观察集群的负载情况,找到集群瓶颈。另外,还能细粒度的看到某台服务器的负载情况,了解每台服务器的健康状况。通过OpenPAI平台,能够看到每个组件和每个作业的日志文件,进行更详细的分析。

通过OpenPAI的web界面,也可以提交、管理训练作业。

下图为OpenPAI的集群仪表盘。

下图为OpenPAI的服务器列表。

下图为某台服务器的负载情况

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1396538.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工业设备管理系统:助力企业实现数字化转型

随着工业4.0和智能制造的快速发展&#xff0c;数字化转型已成为企业提升竞争力、适应市场变化的必然选择。工业设备管理系统作为数字化转型的关键组成部分&#xff0c;能够为企业提供实时监控、数据分析、预警和远程控制等功能&#xff0c;助力企业实现数字化转型的目标。 一、…

【办公类-21-02】20240118育婴员操作题word打印2.0

作品展示 把12页一套的操作题批量制作10份&#xff0c;便于打印 背景需求 将昨天整理的育婴师操作题共享&#xff0c; 因为题目里面有大量的红蓝颜色文字&#xff0c;中大班办公室都是黑白单面手动翻页打印。只有我待的教务室办公室有彩色打印机打印&#xff08;可以自动双面…

【GPU调用及CUDA安装 看完全会!】使用gpu进行各类训练/运行代码

检查 是否有GPU 打开任务管理器&#xff0c;我这边显示有gpu 查看有没有安装cuda nvidia-smi我没有CUDA 安装CUDA https://developer.nvidia.com/cuda-toolkit-archive 选择自定义安装 不要勾选Visual Studio 记录下面安装目录&#xff0c;如果后续环境变量没有自动…

Docker(五)访问仓库

作者主页&#xff1a; 正函数的个人主页 文章收录专栏&#xff1a; Docker 欢迎大家点赞 &#x1f44d; 收藏 ⭐ 加关注哦&#xff01; 访问仓库 仓库&#xff08;Repository&#xff09;是集中存放镜像的地方。 一个容易混淆的概念是注册服务器&#xff08;Registry&#xf…

Linux下使用Docker部署MinIO实现远程上传

&#x1f4d1;前言 本文主要是Linux下通过Docker部署MinIO存储服务实现远程上传的文章&#xff0c;如果有什么需要改进的地方还请大佬指出⛺️ &#x1f3ac;作者简介&#xff1a;大家好&#xff0c;我是青衿&#x1f947; ☁️博客首页&#xff1a;CSDN主页放风讲故事 &#…

【Docker】在Windows操作系统上安装Docker

欢迎来到《小5讲堂》&#xff0c;大家好&#xff0c;我是全栈小5。 这是《Docker容器》序列文章&#xff0c;每篇文章将以博主理解的角度展开讲解&#xff0c; 特别是针对知识点的概念进行叙说&#xff0c;大部分文章将会对这些概念进行实际例子验证&#xff0c;以此达到加深对…

2024-01-15(SpringMVCMybatis)

1.拦截器&#xff1a;如果我们想在多个handler方法(controller中的方法)执行之前或者之后都进行一些处理&#xff0c;甚至某些情况下需要拦截掉&#xff0c;不让handler方法执行&#xff0c;那么就可以使用SpringMVC为我们提供的拦截器。 拦截器和过滤器的区别&#xff1a;过滤…

java使用jsch处理软链接判断是否文件夹

前言 这一次主要是碰到一个问题。因为使用jsch去读取文件的时候&#xff0c;有一些文件它是使用软链接制作的一个映射。因为这里面有一个问题。如果它是软链接你就无法判断他到底是文件。还是文件夹&#xff1f;因为他没有提供可以直接读取的方法&#xff0c;用权限信息去判断…

Freemarker的基本语法及入门基础

freemarker的基本语法及入门基础 一、freemarker模板文件(*.ftl)的基本组成部分 1. 文本&#xff1a;直接输出的内容部分 2. 注释&#xff1a;不会输出的内容&#xff0c;格式为<#-- 注释内容 --> 3. 取值(插值)&#xff1a;代替输出数据模型的…

基于Spring+mybatis+vue的饮食分享系统(Java毕业设计)

大家好&#xff0c;我是DeBug&#xff0c;很高兴你能来阅读&#xff01;作为一名热爱编程的程序员&#xff0c;我希望通过这些教学笔记与大家分享我的编程经验和知识。在这里&#xff0c;我将会结合实际项目经验&#xff0c;分享编程技巧、最佳实践以及解决问题的方法。无论你是…

INS-06003错误处理

在麒麟V10操作系统上安装Oracle RAC 19C&#xff0c;安装GI的建立互信步骤中&#xff0c;遇到INS-06003错误&#xff1a; [INS-06003] Failed to setup password SSH connectivity with following node(s) 查看详细信息&#xff1a; PRVG-11001: PRCZ-2136: PRCZ-2006: 此时在操…

C++ 设计模式之 中介者模式

【声明】本题目来源于卡码网&#xff08;题目页面 (kamacoder.com)&#xff09; 【提示&#xff1a;如果不想看文字介绍&#xff0c;可以直接跳转到C编码部分】 【设计模式大纲】 【简介】 -- 什么是中介者模式 &#xff08;第16种模式&#xff09; 中介者模式&#xff08;Medi…

C#控制台相关

CSharp控制台相关 在进行控制台小游戏开发时&#xff0c;常用到的控制台命令代码。 知识点一&#xff1a;输入、输出 重点&#xff1a; char c Console.ReadKey(true).KeyChar; 作用&#xff1a;可以不显示输入的这个字符&#xff0c;并且用c 记录该按键输入的数据。 知…

DC-3靶机刷题记录

靶机下载地址&#xff1a; 链接&#xff1a;https://pan.baidu.com/s/1-P5ezyt5hUbmmGMP4EI7kw?pwdrt2c 提取码&#xff1a;rt2c 参考&#xff1a; http://t.csdnimg.cn/hhPi8https://www.vulnhub.com/entry/dc-32,312/ 官网http://t.csdnimg.cn/5mVZ7DC-3 (1).pdfhttps://…

JAVAEE初阶 网络原理初识

网络原理 一.局域网1.1 局域网组件网络的几种关系 二. 广域网三. 网络通信基础概念3.1 IP3.2 端口3.3 协议3.4 拆分3.5 拆分的优点 四. TCP/IP五层模型4.1 网络设备的分层 一.局域网 局域网是 Local Area Network 简称 LAN。 局域网是本地&#xff0c;局部私自建立的一种网络。…

CSV文件中json列的处理2

如上所示&#xff0c;csv文件中包含以中括号{}包含的json字段&#xff0c;可用如下方法提取&#xff1a; import pandas as pd from datetime import date todaystr(date.today()) import jsonfilepath/Users/kangyongqing/Documents/kangyq/202401/调课功能使用统计/ file104…

开发语音产品时设计唤醒词和命令词的技巧

在实际开发语音产品过程中&#xff0c;要达到好的语音识别效果&#xff0c;除了语音算法要给力外&#xff0c;设计出好的唤醒词和命令词也能起到事倍功半的效果。所以下面介绍一下如何设计中文、英文和日文的唤醒词和命令词。 中文唤醒词设计 一般为4-6个字&#xff0c;4个字最…

天眼销会员系统上线:低至9.9/月!

天眼销是一款提供企业线索的产品&#xff0c;致力于帮助客户获取最新的企业联系方式、工商信息等关键数据。 此前天眼销的收费模式是按条数收费&#xff0c;每条0.07叠加充值优惠&#xff0c;最优惠也要差不多0.05/条。 现在新的会员系统上线了&#xff0c;比以往更加优惠&am…

VUE--组件的生命周期及其基本应用

VUE的生命周期 上图是实例生命周期的图表&#xff0c;需要注意以下几个重要时期&#xff1a; 创建期&#xff1a;beforeCreated、created 挂载期&#xff1a;beforeMount、mounted 更新期&#xff1a;beforeUpdate、updated 销毁期&#xff1a;beforeUnmount、unmounted 生命周…

图新地球-拌合站选址-上报林业局的临时征拆-图斑附图制作

0.序 做铁路、公路等工程施工时&#xff0c;需要根据不同阶段的施工方案&#xff0c;把拌合站等用地选址&#xff0c;报批给林业局进行审批。 如下图&#xff1a; 1.附图结果要求 在卫星底图基础上&#xff0c;标注选址的范围 闭合线的每个节点显示经纬度坐标&#xff08;度…