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 authorization
,Hivedscheduler
,Kube Runtime
,Marketplace
,等,也包括在内。如果仍然要安装旧的基于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版本。该user
和password
是从开发箱机的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.
如消息所示,您可以使用admin
和admin-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 。