OpenPai 安装文档

原链接为:https://github.com/microsoft/pai/blob/v0.14.0/docs/pai-management/doc/distributed-deploy.md

中文版:https://github.com/qzwlinux/OpenPai-Install

好文推荐:https://zhuanlan.zhihu.com/p/64061072

[TOC]

选择合适版本的Dev-box

sudo docker pull docker.io/openpai/dev-box:v0.14.0

运行Dev-box

sudo docker run -itd --name=dev-box openpai/dev-box:v0.14.0 bash

在dev-box中进入工作区

注意:docker运行-d表示后台运行,使用下面 exec 命令可以进入运行中的容器

sudo docker exec -it dev-box /bin/bash
cd /pai

修改yaml文件

注意:以下操作是在容器内进行的,请勿退出容器

/pai/deployment/quick-start/quick-start-example.yaml
# quick-start.yaml

# (Required) Please fill in the IP address of the server you would like to deploy OpenPAI
machines:
  - 192.168.1.11 # 官方说明至少三台主机,实际一台也可以(主机ip或docker中的ip)
  - 192.168.1.12 
  - 192.168.1.13

# (Required) Log-in info of all machines. System administrator should guarantee
# that the username/password pair or username/key-filename is valid and has sudo privilege.
ssh-username: siton 
ssh-password: siton

# (Optional, default=None) the key file that ssh client uses, that has higher priority then password.
#ssh-keyfile-path: <keyfile-path>

# (Optional, default=22) Port number of ssh service on each machine.
#ssh-port: 22

# (Optional, default=DNS of the first machine) Cluster DNS.
#dns: <ip-of-dns>

# (Optional, default=10.254.0.0/16) IP range used by Kubernetes. Note that
# this IP range should NOT conflict with the current network.
#service-cluster-ip-range: <ip-range-for-k8s>

生成配置文件

注意:生成配置文件也是在容器中pai目录下进行的,paictl.py 文件在容器 pai/ 目录下,即需要在pai/目录下执行下方命令

python paictl.py config generate -i /pai/deployment/quick-start/quick-start-example.yaml -o ~/pai-config -f

修改配置文件

注意:生成的配置文件也是在容器里,之前犯过错误退出容器去主机里面找pai-config文件夹,没找到

生成的文件在/root/pai-config中

  1. layout.yaml
machine-sku:
  k80-node:
    mem: 40G                    #内存
    gpu:
      type: Tesla K80           #GPU类型  (如果在自己虚拟机中尝试,没有GPU,直接删除GPU的配置即可)
      count: 4                  #GPU个数
    cpu:
      vcore: 24                 #线程数
    os: ubuntu16.04             #系统类型(18.04可能也行,建议不要尝试20.04)
  p100-node:
    mem: 20G
    gpu:
      type: Tesla P100
      count: 2
    cpu:
      vcore: 24
    os: ubuntu16.04

machine-list:
  - hostname: Sitonholy         #主机名
    hostip: 192.168.199.10      #IP地址
    machine-type: k80-node      #显卡类型对应上面
  - hostname: xxx
    hostip: yyy
    machine-type: p100-node
  1. services-configuration.yaml
    tag: v0.13.0                #修改pai版本
drivers:
#  set-nvidia-runtime: false
#  # You can set drivers version here. If this value is miss, default value will be 384.111
#  # Current supported version list
#  # 384.111
#  # 390.25
#  # 410.73
#  # 418.56
  version: "410.73"             #修改驱动版本
  1. kubernetes-configuration.yaml
  load-balance-ip: 192.168.31.211  #写主节点或负载IP

  docker-registry: docker.io/mirrorgooglecontainers  #国内可以下载的镜像

部署k8s

cd /pai
./paictl.py cluster k8s-bootup -p ~/pai-config

检查k8s部署状态

运行以下命令检查k8s状态(也是在容器中执行)

kubectl get node
kubectl get pod

图片说明

上传openpai配置到k8s集群

./paictl.py config push -p ~/pai-config

部署pai集群

确认好集群在When Kubernetes is up and running

./paictl.py service start

查看集群

登录浏览器 http://masterip

图片说明

可能需要

可能遇到的问题

(1)在容器 pai/目录下执行 “生成配置文件”那个命令,结果显示 Unable to connect to port 22 on or 172.17.0.1

尝试:禁用防火墙 或 重启ssh

禁用防火墙 命令:sudo ufw disable

查看防火墙状态:sudo ufw status

开启防火墙:sudo ufw enable

重启ssh:service sshd restart

常用docker命令

1 docker images 查看镜像信息列表 镜像是静态的

2 docker ps -a 查看运行中的所有容器

3 docker pull [images]:[version]从dockerhub拉取指定镜像

4 docker run -p 8000:80 -tdi --privileged [imageID] [command] 后台启动docker,并指定宿主机端口和docker映射端口。

-i:以交互模式运行容器,通常与 -t 同时使用;

-d:后台运行容器,并返回容器ID;

-t:为容器重新分配一个伪输入终端,通常与 -i 同时使用;

--privileged 容器将拥有访问主机所有设备的权限

通常情况下 [command] 填下 /bin/bash 即可。

特殊情况下,如需要在centos镜像中使用systemctl . 则应添加--privileged 并设置[command ]为 init

5 当镜像通过run 启动后,便会载入到一个动态的container(容器)中运行,此时若需要进入终端交互模式:

sudo docker exec -it [containerID] /bin/bash

交互模式中,使用 ctrl+p+q退出交互 保持运行,使用 exit命令退出并停止容器。

6 在容器非交互模式下,通过docker start/stop 命令来启动/停止已部署的容器服务。

7 docker rm [containerID] 删除容器

8 docker rmi [imageID] 删除镜像

9 docker cp [YourHostFilePath] [containerID]:[DockerPath] 将宿主机内的指定文件传输至容器内部的指定地址。

镜像制作:

1 docker commit [containerID] [ImageName]:[Version] 将修改后的容器重新打包成镜像

2 docker commit -a "runoob.com" -m "my apache" a404c6c174a2 mymysql:v1 将容器a404c6c174a2 保存为新的镜像,并添加提交人信息和说明信息。

-a :提交的镜像作者;

-c :使用Dockerfile指令来创建镜像;

-m :提交时的说明文字;

-p :在commit时,将容器暂停。

3 docker push [ImageID] [repertory_address]提交镜像到云仓库

其他操作

1、关闭OpenPAI服务

登录dev-box,输入以下命令:

cd /pai
python paictl.py service stop

按提示输入cluster-id即可。

2、Linux内核兼容问题

发现将系统内核更新到4.4.0-148之后,显卡驱动镜像就开始报错了,包括最新的410.73版本。

目前官方的解决方法是在部署之前修改"/pai/src/drivers/deploy/drivers.yaml.template"文件,将第35行:

image: {{ cluster_cfg["cluster"]["docker-registry"]["prefix"] }}drivers-{{ cluster_cfg["drivers"]["version"] }}:{{ cluster_cfg["cluster"]["docker-registry"]["tag"] }}

修改为:

image: docker.io/openpai/drivers-418.30:v0.11.0

这个操作在目前最新的12.0上也完全,特别是后面的版本号不要变,保持11.0

整理资源,学习使用,非商业用途,侵删