OpenPai v1.1.1安装部署手册

OpenPAI 1.1.1安装部署教程

安装指南

OpenPAI的体系结构已在v1.0.0中更新和优化。v1.0.0之前,OpenPAI基于Yarn和Kubernetes,数据由HDFS管理。从v1.0.0,OpenPAI已切换到纯基于Kubernetes的体系结构。许多新的功能,如AAD authorizationHivedschedulerKube RuntimeMarketplace,等,也包括在内。如果仍然要安装旧的基于Yarn的OpenPAI,请继续使用v0.14.0

要安装OpenPAI> = v1.0.0,请首先检查 安装要求。然后,如果您没有安装旧版本的OpenPAI,请按照从头开始安装。否则,请首先遵循“ 清理先前的部署”,然后执行“ 从头开始安装”。

安装要求

OpenPAI的部署要求您至少拥有3台单独的节点:一台DevBox节点,一台master节点和一台worker 节点。

在安装,维护和卸载期间,DevBox机器通过SSH控制master节点和worker节点。DevBox节点有且只有一台。master节点用于运行核心Kubernetes组件和核心OpenPAI服务。在大多数情况下,一台master节点就足够了。如果您希望群集具有高可用性,则可以设置多个master节点。我们建议您将仅CPU的节点用于DevBox节点和master节点。对于worker节点,所有机器均应具有GPU,并已正确安装GPU驱动程序。GPU驱动采用NVIDIA 418

安装方式1:gpu驱动安装采用下载驱动包方式安装

安装方式2:

sudo add-apt-repository ppa:graphics-drivers/ppa 

sudo apt update 

sudo apt install nvidia-418 

sudo reboot

详细信息,请在安装前检查以下要求:

  • DevBox节点

    • Kubespray要求

      • Ubuntu 16.04(18.04应该可以运行,但尚未经过全面测试。)

      • 节点可以与所有其他节点(master节点和worker节点)通信

      • SSH服务已启用并共享相同的用户名/密码并具有sudo特权

      • 到所有其他节点(主节点和工作节点)的无密码SSH,配置免密,方法如下:

        ssh-keygen -t rsa
        
        ssh-copy-id <username>@<target_host_ip>
        
      • 与包含主节点和工作节点的群集分开

    • OpenPAI要求

      • Docker已安装,用于启动DevBox容器以进行服务部署。

        # step 1: 安装必要的一些系统工具
        sudo apt-get update
        sudo apt-get -y install apt-transport-https ca-certificates curl software-properties-common
        # step 2: 安装GPG证书
        curl -fsSL https://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
        # Step 3: 写入软件源信息
        sudo add-apt-repository "deb [arch=amd64] https://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
        # Step 4: 更新并安装Docker-CE
        sudo apt-get -y update
        sudo apt-get -y install docker-ce
        
  • master节点:

    • Kubespray要求

      • 为每个节点分配一个静态IP地址,并确保节点可以相互通信。

      • 节点可以访问Internet,特别是需要访问docker hub注册表服务或其镜像的访问权限。部署过程将提取Docker映像。

      • SSH服务已启用,并且共享相同的用户名/密码并具有sudo特权。

      • 启用了NTP服务,并且etcd依赖于此。

        sudo apt-get install -y openssh-server ntp
        
    • OpenPAI要求

      • Ubuntu 16.04(18.04应该可以运行,但尚未经过全面测试。)
      • OpenPAI为运行服务保留内存和CPU,因此请确保有足够的资源来运行机器学习作业。检查硬件要求以了解详细信息。
      • OpenPAI的专用节点。OpenPAI管理节点的所有CPU,内存和GPU资源。如果还有其他工作负载,则可能由于资源不足而导致未知问题。
      • Docker已安装。
  • worker节点:

    • Kubespray要求

      • 为每个节点分配一个静态IP地址,并确保节点可以相互通信。

      • 节点可以访问Internet,特别是需要访问docker hub注册表服务或其镜像的访问权限。部署过程将提取Docker映像。

      • SSH服务已启用,并且共享相同的用户名/密码并具有sudo特权。

        sudo apt-get install -y openssh-server ntp
        
  • OpenPAI要求

    • Ubuntu 16.04(18.04应该可以运行,但尚未经过全面测试。)
    • 已安装GPU和GPU驱动程序。 您可以使用命令进行检查。如果未成功安装驱动程序,请参考FAQ中的安装指南。如果您想知道应该使用哪个版本的GPU驱动程序,请同时参阅常见问题解答。
    • Docker已安装。 您可以使用命令docker --version进行检查。如果未成功安装,请参阅Docker的安装指南。
    • 已安装nvidia-container-runtime或其他设备运行时。并配置为docker的默认运行时。请在docker -config-file中对其进行配置,因为kubespray将覆盖systemd的环境。
      • 您可以使用命令sudo docker run nvidia/cuda:10.0-base nvidia-smi进行检查。如果设置正确,此命令应输出可用GPU的信息。
      • 如果未成功设置,请参考安装指南。
    • OpenPAI为运行服务保留内存和CPU,因此请确保有足够的资源来运行机器学习作业。检查硬件要求以了解详细信息。
    • OpenPAI的专用节点。OpenPAI管理节点的所有CPU,内存和GPU资源。如果还有其他工作负载,则可能由于资源不足而导致未知问题。

    nvidia-container-runtime安装方法:

    sudo apt-get install nvidia-container-runtime
    

    docker-config-file配置方法:

    {
    "default-runtime": "nvidia",
    "runtimes": {
       "nvidia": {
           "path": "/usr/bin/nvidia-container-runtime",
           "runtimeArgs": []
       }
    }
    }
    

使用仅CPU的工作程序的提示

当前,OpenPAI对只有CPU的机器支持是有限的。如果您既有GPUworker节点又有CPU节点,请首先仅使用GPU节点设置PAI。成功安装PAI后,您可以将CPU节点附加到该PAI上并设置仅CPU的虚拟集群。有关详细信息,请参阅如何使用CPU节点。如果您只有CPU节点,那么还没有官方的安装支持。

与网络相关的问题的提示

如果您遇到网络问题,例如机器无法下载某些文件或无法连接到某些Docker注册表,请结合提示的错误日志和kubespray作为关键字,然后搜索解决方案。您还可以参考安装疑难解答。

从头开始安装

除了上述要求外,此安装脚本还要求所有工作机必须是同型GPU节点,并且它们具有相同的硬件,例如CPU类型和数量,GPU类型和数量,内存大小。如果您有不同类型的工作程序,请在安装过程中首先仅包括一种类型的工作程序,然后按照如何添加和删除节点添加不同类型的工作程序。现在,请确定您的开发机,主机和工作机。

创建配置

确定所有机器之后,请在dev box机器上创建一个master.csv,一个worker.csv和一个config文件。这些文件分别代表主节点列表,工作节点列表和自定义配置。以下是这3个文件的格式和示例。

master.csv 格式

不要在该文件中插入空白行或使用空格,也不要在主机名中使用大写字母。

hostname(Node Name in k8s),host-ip
master.csv
openpai-master-01,10.1.0.1
worker.csv 格式

不要在该文件中插入空白行或使用空格,也不要在主机名中使用大写字母。

hostname(Node Name in k8s),host-ip
worker.csv
openpai-001,10.0.0.1
openpai-002,10.0.0.2
openpai-003,10.0.0.3
openpai-004,10.0.0.4
config
user: <your-ssh-username>
password: <your-ssh-password>
branch_name: pai-1.1.y
docker_image_tag: v1.1.1

# Optional

#############################################
# Ansible-playbooks' inventory hosts' vars. #
#############################################
# ssh_key_file_path: /path/to/you/key/file

#####################################
# OpenPAI's service image registry. #
#####################################
# docker_registry_domain: docker.io
# docker_registry_namespace: openpai
# docker_registry_username: exampleuser
# docker_registry_password: examplepasswd

###########################################################################################
#                         Pre-check setting                                               #
# By default, we assume your gpu environment is nvidia. So your runtime should be nvidia. #
# If you are using AMD or other environment, you should modify it.                        #
###########################################################################################
# worker_default_docker_runtime: nvidia
# docker_check: true

# resource_check: true

# gpu_type: nvidia

########################################################################################
# Advanced docker configuration. If you are not familiar with them, don't change them. #
########################################################################################
# docker_data_root: /mnt/docker
# docker_config_file_path: /etc/docker/daemon.json
# docker_iptables_enabled: false

## An obvious use case is allowing insecure-registry access to self hosted registries.
## Can be ipaddress and domain_name.
## example define 172.19.16.11 or mirror.registry.io
# openpai_docker_insecure_registries:
#   - mirror.registry.io
#   - 172.19.16.11

## Add other registry,example China registry mirror.
# openpai_docker_registry_mirrors:
#   - https://registry.docker-cn.com
#   - https://mirror.aliyuncs.com

#######################################################################
#                       kubespray setting                             #
#######################################################################

# If you couldn't access to gcr.io or docker.io, please configure it.
# gcr_image_repo: "gcr.io"
# kube_image_repo: "gcr.io/google-containers"
# quay_image_repo: "quay.io"
# docker_image_repo: "docker.io"
# kubeadm_download_url: "https://storage.googleapis.com/kubernetes-release/release/{{ kubeadm_version }}/bin/linux/{{ image_arch }}/kubeadm"
# hyperkube_download_url: "https://storage.googleapis.com/kubernetes-release/release/{{ kube_version }}/bin/linux/{{ image_arch }}/hyperkube"


# openpai_kube_network_plugin: calico

branch-name并且docker-image-tag要安装代表OpenPAI版本。该userpassword是从开发箱机的SSH用户名和密码来掌握机器和工人机器。换句话说,您应确保所有主节点和工作节点共享相同的SSH用户名和密码。至于可选配置,如果您确切知道它们是什么,请对其进行自定义。

对于Azure用户:如果要在Azure中部署OpenPAI,请取消注释openpai_kube_network_plugin: calico上面的配置文件,并将其更改为openpai_kube_network_plugin: weave。这是因为Azure不支持calico。

开始安装

在DevBox机器上,使用以下命令克隆OpenPAI存储库:

git clone https://github.com/microsoft/pai.git
git checkout pai-1.1.y  # change to a different branch if you want to deploy a different version
cd pai/contrib/kubespray

该文件夹pai/contrib/kubespray包含用于kubespray和OpenPAI服务的安装脚本。请运行以下脚本以首先部署Kubernetes。您应该/path/to将这些文件修改为自己的绝对路径。不要使用相对路径。这将导致错误。

/bin/bash quick-start-kubespray.sh -m /path/to/master.csv -w /path/to/worker.csv -c /path/to/config

成功启动Kubernetes后,运行以下脚本以启动OpenPAI服务。您应该/path/to将这些文件修改为自己的绝对路径。不要使用相对路径。这将导致错误。

/bin/bash quick-start-service.sh -m /path/to/master.csv -w /path/to/worker.csv -c /path/to/config

如果一切顺利,您将收到以下消息:

Kubernetes cluster config :     ~/pai-deploy/kube/config
OpenPAI cluster config    :     ~/pai-deploy/cluster-cfg
OpenPAI cluster ID        :     pai
Default username          :     admin
Default password          :     admin-password

You can go to http://<your-master-ip>, then use the default username and password to log in.

如消息所示,您可以使用adminadmin-password登录到Webportal,然后提交作业以验证安装。

检查要求的提示

如果有任何错误,请首先仔细检查环境要求。在这里提供了一个需求检查器来帮助您验证:

/bin/bash requirement.sh -m /path/to/master.csv -w /path/to/worker.csv -c /path/to/config

保留资料夹

强烈建议您保留该文件夹~/pai-deploy以用于将来的操作,例如升级,维护和卸载。此文件夹中最重要的内容是:

  • Kubernetes集群配置(默认为~/pai-deploy/kube/config):Kubernetes配置文件。它用于kubectl连接到k8s api节点。
  • OpenPAI集群配置(默认为 ~/pai-deploy/cluster-cfg):这是一个包含节点布局和OpenPAI服务配置的文件夹。

如果可能的话,您可以进行备份,~/pai-deploy以防意外删除。

除了文件夹之外,您还应该记住您的OpenPAI集群ID,该ID用于指示您的OpenPAI集群。默认值为pai。某些管理操作需要确认此群集ID。

清理先前的部署

将数据保存到其他位置

如果您之前安装过OpenPAI v1.0.0,则要安装OpenPAI> = v1.0.0,应首先清理先前的部署。您无法保留任何有用的数据:所有作业,用户信息,数据集将不可避免且不可逆地丢失。因此,如果您在以前的部署中有任何有用的数据,请确保已将它们保存到其他位置。

HDFS数据

在此之前v1.0.0,PAI将为您部署HDFS节点。之后v1.0.0,将不会部署HDFS节点,并且在升级时将删除以前的数据。以下命令可用于传输HDFS数据:

# check data structure
hdfs dfs -ls hdfs://<hdfs-namenode-ip>:<hdfs-namenode-port>/

hdfs dfs -copyToLocal hdfs://<hdfs-namenode-ip>:<hdfs-namenode-port>/ <local-folder>

<hdfs-namenode-ip>并且<hdfs-namenode-port>是PAI主站的IP,9000如果您未修改默认设置。请确保您的本地文件夹具有足够的容量来容纳要保存的数据。

工作和用户的元数据

作业和用户的元数据也将丢失,包括作业记录,作业日志,用户名,用户密码等。我们没有自动的工具来备份这些数据。如果发现有价值的数据,请手动传输。

Kubernetes上的其他资源

如果您在Kubernetes上部署了任何其他资源,请为其进行适当的备份,因为Kubernetes集群也将被破坏。

删除以前的PAI部署

要删除以前的部署,请使用以下命令:

git clone https://github.com/Microsoft/pai.git
cd pai
#  checkout to a different branch if you have a different version
git checkout pai-0.14.y

# delete all pai service and remove all service data
./paictl.py service delete

# delete k8s cluster
./paictl.py cluster k8s-clean -f -p <path-to-your-old-config>

如果找不到旧的配置,则以下命令可以帮助您检索它:

./paictl.py config pull -o <path-to-your-old-config>

您还应该通过使用root用户在每个GPU节点上执行以下命令来删除OpenPAI安装的GPU驱动程序:

#!/bin/bash

lsmod | grep -qE "^nvidia" &&
{
    DEP_MODS=`lsmod | tr -s " " | grep -E "^nvidia" | cut -f 4 -d " "`
    for mod in ${DEP_MODS//,/ }
    do
        rmmod $mod ||
        {
            echo "The driver $mod is still in use, can't unload it."
            exit 1
        }
    done
    rmmod nvidia ||
    {
        echo "The driver nvidia is still in use, can't unload it."
        exit 1
    }
}

rm -rf /var/drivers
reboot

删除后,您现在可以从头开始安装来安装OpenPAI 。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,313评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,369评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,916评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,333评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,425评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,481评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,491评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,268评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,719评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,004评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,179评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,832评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,510评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,153评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,402评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,045评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,071评论 2 352