2. 快速入门
2.1. 安装依赖
安装DLRover的 host 系统必须满足如下条件:
已安装配置Kubernetes集群,Kubernetes版本 ≥ 1.21
工作节点已正确安装相应曦云系列GPU的内核驱动
已安装Helm
已部署沐曦GPU k8s插件 metax-gpu-extensions
2.2. 基于k8s部署DLRover
DLRover的k8s微服务通过Helm Chart进行部署,放在离线安装包中。
2.2.1. Helm方式安装DLRover Operator
执行以下命令,解压DLRover压缩包。
$ mkdir k8s $ tar -C k8s -xvzf dlrover-package-0.11.1.tar.gz ./dlrover-0.11.1.tgz ./dlrover-0.4.0-py3-none-any.whl ./dlrover-images.0.11.1.run ./py_xpu_timer-1.1+lite-py3-none-any.whl ./py_xpu_timer-1.1+maca231-cp310-cp310-linux_x86_64.whl ./py_xpu_timer-1.1+maca231-cp38-cp38-linux_x86_64.whl ./mxomclient_0.11.1.amd64.deb
假设容器仓库路径为domain/project,执行以下命令,通过Docker将容器镜像推送至仓库。
./dlrover-images.0.7.12.run push domain/project
安装Helm Chart。
helm install dlrover-0.7.12.tgz \ --create-namespace -n dlrover \ --generate-name \ --wait
可在命令中增加
--set option=value设置可选参数,参见 3.1.1 Helm Chart的配置。验证部署。
部署后,执行以下命令,可以看到
dlrover-controller-manager-pod的运行状态为Running。$ kubectl get pod -n dlrover … dlrover-controller-manager-7756646b5f-4c2wh 2/2 Running
2.2.2. Helm方式升级DLRover Operator
通过 helm upgrade 升级安装在 dlrover namespace下的Helm Chart。
通过
helm命令查询名称。$ helm list -n dlrover NAME NAMESPACE dlrover-xxx dlrover
通过
helm命令升级DLRover。$ helm upgrade dlrover-xxx -n dlrover dlrover-0.7.12.tgz --set option=groupScheduler.enable=False -f value.yaml
2.2.3. Helm方式卸载DLRover Operator
通过
helm命令查询名称。$ helm list -n dlrover NAME NAMESPACE dlrover-xxx dlrover
通过
helm命令卸载DLRover。$ helm uninstall dlrover-xxx -n dlrover
2.3. 基于k8s提交训练任务
2.3.1. 基础训练镜像中集成DLRover
基于基础训练镜像,安装 DLRover 的 Python wheel包。
FROM your-base-image:tag
…
pip install dlrover-0.3.5-py3-none-any.whl
2.3.2. 编写训练任务的配置文件
根据DLRover ElasticJob 的CRD(Custom Resource Definition)描述,编写训练任务的YAML文件。
YAML文件如下:
apiVersion: elastic.iml.github.io/v1alpha1
kind: ElasticJob
metadata:
name: fine-tuning-llama2
namespace: dlrover
spec:
distributionStrategy: AllreduceStrategy
optimizeMode: single-job
replicaSpecs:
worker:
replicas: 4 # 任务数量
template:
spec:
restartPolicy: Never
containers:
- name: main
# yamllint disable-line rule:line-length
image: registry.cn-hangzhou.aliyuncs.com/intell-ai/dlrover:llama-finetuning # 训练镜像
imagePullPolicy: Always
command: # 训练执行命令
- /bin/bash
- -c
- "dlrover-run --nnodes=$NODE_NUM \
--nproc_per_node=1 --max_restarts=1 \
./examples/pytorch/llama2/fine_tuning.py \
./examples/pytorch/llama2/btc_tweets_sentiment.json"
resources:
limits:
cpu: "8"
memory: 16Gi
metax-tech.com/gpu: 8 # 单个任务申请的GPU数量
YAML文件中的主要参数说明参见 3.1.2 提交训练任务的配置。
其中 command 部分指定训练的命令,命令中通过 dlrover-run 指定训练框架,框架基于PyTorch的分布式弹性训练,在各个GPU节点分别启动代理,和DLRover的master做交互。dlrover-run 的主要配置参见 3.1.3 dlrover-run的配置。
2.3.3. 下发训练任务
执行以下命令下发训练任务:
kubectl apply -f xxx.yaml
或者
kubectl create -f xxx.yaml
任务下发后,可执行以下命令查询任务的下发和完成情况:
kubectl get elasticjob -n dlrover NAME PHASE AGE demo-xxx Succeeded 19h kubectl get pods -n dlrover NAME READY STATUS RESTARTS AGE demo-xxx-edljob-worker-0 0/1 Completed 0 19h demo-xxx-edljob-worker-1 0/1 Completed 0 19h dlrover-controller-manager-64c5846678-ml858 2/2 Running 0 20d elasticjob-demo-xxx-dlrover-master 0/1 Completed 0 19h
2.3.4. 删除训练任务
执行以下命令删除训练任务:
kubectl delete -f xxx.yaml