人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载本文档面向在集群环境中开展大模型训练的工程团队系统讲解在 PaddleNLPPaddleFleetX体系中完成分布式训练的两种主流路径一是在自建 Kubernetes 集群上通过 paddle-operator 以声明式方式提交 PaddlePaddle 分布式任务二是借助公有云/私有云的容器引擎或 AI 开发平台快速拉起训练环境。读完本文你将掌握 paddle-operator 的完整安装、paddlejob 任务定义Collective 与 ParameterServer 两种模式、多机多卡paddle.distributed.launch启动方式以及 GPT 大模型在集群上的配置实践。一、集群部署概览从单机训练到集群分布式训练大模型如 GPT-175B无法在单卡甚至单机上完成训练必须依赖多机多卡的集群环境。PaddlePaddle 的分布式能力为这类场景提供了两类核心运行模式Collective 模式所有训练进程对等协作通过 NCCL/GLOO 等集合通信原语完成梯度同步适用于数据并行、张量并行、流水线并行等策略。ParameterServerPS模式区分参数服务器server与训练节点trainer适合超大稀疏模型与弹性扩展场景。集群部署的本质就是把上述分布式训练进程以容器的方式编排到多台物理节点上并处理好调度、资源分配、网络互通与日志回收。PaddleFleetX即本仓库 slm/model_zoo/gpt-3 所承载的框架在架构上恰好打通了这两层如下图所示。从图中可以看到集群部署依赖的正是底层Fleet分布式模块与NCCL/GLOO通信 API前者提供张量并行MP、流水线并行PP、分片优化Sharding、重计算Recompute、混合精度FP16等大模型训练技术后者负责跨节点、跨设备的集群通信。上层框架只负责把训练流程描述清楚具体多机调度交给 Kubernetes 与 paddle-operator 完成。二、Kubernetes 部署paddle-operator 安装全流程2.1 paddle-operator 是什么paddle-operator 是为在 Kubernetes 上运行 PaddlePaddle 任务而实现的 Kubernetes Operator它通过添加自定义资源类型PaddleJob并部署 controller 与一系列 Kubernetes 原生组件实现了简单定义即可运行 PaddlePaddle 任务的声明式管理。目前它支持Collective 分布式任务ParameterServerPS分布式任务单节点任务。任务完成后可通过cleanPodPolicy配置 pod 的删除策略详见第三节。2.2 前置条件安装 paddle-operator 前需要具备以下条件组件版本要求Kubernetes 集群v1.16kubectl 命令行工具v1.16部署所需的配置文件和示例清单位于 paddle-operator 的deploy目录下目录结构如下deploy |-- examples | |-- resnet.yaml | |-- wide_and_deep.yaml | |-- wide_and_deep_podip.yaml | |-- wide_and_deep_service.yaml | -- wide_and_deep_volcano.yaml |-- v1 | |-- crd.yaml | -- operator.yaml可以通过git clone或者直接复制文件内容保存到本地后使用。2.3 安装 CRD自定义资源定义首先创建 PaddleJob 自定义资源定义CRD。既可以直接从远程地址创建也可以使用本地保存的文件kubectl create -f https://raw.githubusercontent.com/PaddleFlow/paddle-operator/dev/deploy/v1/crd.yaml或者使用本地文件kubectl create -f deploy/v1/crd.yaml创建成功后通过以下命令确认 CRD 已注册kubectl get crd NAME CREATED AT paddlejobs.batch.paddlepaddle.org 2021-02-08T07:43:24Z当paddlejobs.batch.paddlepaddle.org出现在 CRD 列表中说明自定义资源注册成功。2.4 部署 controller接下来部署 operator 本体controller 组件kubectl create -f https://raw.githubusercontent.com/PaddleFlow/paddle-operator/dev/deploy/v1/operator.yaml或者使用本地文件kubectl create -f deploy/v1/operator.yaml2.5 验证部署结果部署完成后在paddle-system命名空间下查看 controller Pod 的运行状态kubectl -n paddle-system get pods NAME READY STATUS RESTARTS AGE paddle-controller-manager-698dd7b855-n65jr 1/1 Running 0 1mREADY为1/1、STATUS为Running即表示部署正常。进一步通过 controller 日志确认组件运行无误kubectl -n paddle-system logs paddle-controller-manager-698dd7b855-n65jr2.6 提交 demo 任务验证效果使用官方示例清单提交一个 PS 模式示例任务wide_and_deepkubectl -n paddle-system create -f deploy/examples/wide_and_deep.yaml通过kubectl get pdjpdj为 PaddleJob 的缩写查看任务状态kubectl -n paddle-system get pdj NAME STATUS MODE AGE wide-ande-deep-service Completed PS 4m4s从输出可以看到示例训练任务已正确完成运行模式为PS。STATUSCompleted表示任务正常结束训练进行中时可以随时用如下命令查看 pod 状态kubectl -n paddle-system get pods任务完成/失败后的 pod 是否保留、何时删除由cleanPodPolicy字段控制具体取值与效果见第三节。2.7 卸载如需卸载整套部署组件执行kubectl delete -f deploy/v1/crd.yaml -f deploy/v1/operator.yaml注意重新安装时建议先卸载再安装避免旧资源残留影响新部署。三、paddlejob 任务提交两种模式的完整配置3.1 Collective 模式示例resnet GPU 训练以resnet示例为例这是Collective 模式使用 GPU 进行训练。与 PS 模式不同它只需要配置worker并在 worker 中声明所需的 GPU 资源。准备配置文件resnet.yamlapiVersion: batch.paddlepaddle.org/v1 kind: PaddleJob metadata: name: resnet spec: cleanPodPolicy: Never worker: replicas: 2 template: spec: containers: - name: paddle image: registry.baidubce.com/paddle-operator/demo-resnet:v1 command: - python args: - -m - paddle.distributed.launch - train_fleet.py volumeMounts: - mountPath: /dev/shm name: dshm resources: limits: nvidia.com/gpu: 1 volumes: - name: dshm emptyDir: medium: Memory该配置中值得注意的关键点spec.workerCollective 模式下的训练角色统一由 worker 承担replicas: 2表示拉起 2 个训练副本配合各自声明的 GPU即 2 卡训练。spec.cleanPodPolicy: Never任务结束后保留 pod便于查看日志也可按需改为其他取值由 operator 在任务完成/失败后按策略回收 pod。commandargs容器启动命令使用python -m paddle.distributed.launch train_fleet.py即通过 PaddlePaddle 分布式启动器运行训练脚本这正是集群内每个 worker 实际执行分布式训练的方式。resources.limits.nvidia.com/gpu: 1声明每个 worker 需要 1 张 GPUKubernetes 将据此调度与绑定 GPU 设备。/dev/shm挂载emptyDirmedium: Memory这里需要添加 shared memory 挂载以防止缓存出错是分布式训练容器化的常见要求。注意本示例采用内置 flower 数据集程序启动后会进行下载根据网络环境可能等待较长时间。3.2 提交任务使用 kubectl 提交 yaml 配置文件即可创建 PaddleJob 任务kubectl -n paddle-system create -f resnet.yaml提交后controller 会自动完成 Pod 的创建、调度与训练进程拉起用户只需通过kubectl get pdj/kubectl get pods观察状态即可。四、从单机到多机的飞桨分布式启动实践在 Kubernetes 之外集群部署还有一个常见形态直接在多台裸机或云主机上启动多机多卡训练。PaddlePaddle 通过python -m paddle.distributed.launch提供跨节点启动能力这也是 paddlejob 示例中 worker 实际执行的命令。4.1 多机多卡启动命令--master 与 --nnodes结合本仓库 quick_start.md 中的多机训练说明多机分布式训练需要用到两个最重要的启动参数--nnodes分布式任务的节点个数一般为参与任务的机器数量默认为 1单机任务也可用环境变量PADDLE_NNODES设置--master分布式信息同步的主节点地址ip:port格式可由第一个启动的节点自动打印也可手动设置为参与任务的任意节点 ip 与任意可用端口或用环境变量PADDLE_MASTER设置。一个典型的多机训练命令如下需要在每个节点上都运行将示例 IP 替换为真实机器 IP 与可用端口python -m paddle.distributed.launch --master10.10.10.1:8099 --nnodes2 \ ./tools/train.py -c \ ./ppfleetx/configs/nlp/gpt/pretrain_gpt_6.7B_sharding16.yaml该示例为 16 卡任务sharding_degree: 16需保证参与训练的总卡数为 16。如果不知道机器 IP可以不设置--master先在一台机器上启动然后根据日志提示复制命令在其他机器上启动即可。若需在显存较小的环境训练可通过-o Model.hidden_size2048之类的覆盖参数减小模型规模。更多 launch 启动参数与用法可通过python -m paddle.distributed.launch --help查看。4.2 GPT 集群训练配置数据并行、Sharding 与混合并行集群训练的效果取决于分布式策略的编排而策略统一由 YAML 配置中的Distributed字段控制。以 pretrain_gpt_6.7B_sharding16.yaml 为例Distributed: dp_degree: mp_degree: 1 pp_degree: 1 sharding: sharding_degree: 16 sharding_stage: 2 sharding_offload: False reduce_overlap: True broadcast_overlap: True该配置表示6.7B 模型采用Sharding分组切片并行stage 2、分片度为 16 的策略训练开启梯度 reduce 与参数 broadcast 通信重叠以提升效率。更大规模的 GPT-175B 训练则采用混合并行MPPPSharding见 pretrain_gpt_175B_mp8_pp16.yamlDistributed: dp_degree: mp_degree: 8 pp_degree: 16 sharding: sharding_degree: 1 sharding_stage: 1 sharding_offload: False reduce_overlap: False broadcast_overlap: False该配置对应8 路张量并行 16 段流水线并行即 128 卡规模的混合并行训练配合Model中的use_recompute: True、recompute_granularity: core_attn、sequence_parallel: True等重计算与序列并行开关控制显存与吞吐。仓库中对应的集群训练入口脚本见 pretrain_gpt_175B_mp8_pp16.sh启动命令为python -m paddle.distributed.launch --log_dir $log_dir --devices 0,1,2,3,4,5,6,7 \ ./tools/train.py \ -c ./ppfleetx/configs/nlp/gpt/pretrain_gpt_175B_mp8_pp16.yaml在多机场景下只需为每个节点上的 launch 命令补充--nnodes与--master参数即可将同样的配置扩展到整个集群。4.3 集群环境验证与常见问题集群部署中约七成的问题源于环境而非代码。在正式启动多机训练前建议按本仓库 deployment_faq.md 中的流程逐项验证单机环境验证用nvidia-smi确认 CUDA 版本、显存占用与 GPU 空闲状态用python -c import paddle; paddle.utils.run_check()确认 PaddlePaddle 安装正确预期输出PaddlePaddle works well on N GPUs。分布式环境验证在其中一个节点执行python -m paddle.distributed.launch run_check默认验证 2 机更多节点加--nnodes4根据提示把打印出的命令复制到其他节点执行若各节点输出Distributed training completed与Exit code 0即为正常。网络排查hostname -i获取本机 IP跨节点ping与curl ip:port验证连通性设置NCCL_DEBUGINFO查看 NCCL 版本各节点需一致且高于 2.8与所选网卡NCCL_SOCKET_IFNAME可指定网卡名。常见错误NCCL error(5) invalid usage多为同一 GPU 被多个进程占用可用CUDA_VISIBLE_DEVICES隔离NCCL error(2) unhandled system error多为/dev/shm太小Docker 场景需加--shm-size 32G之类参数——这与第三节中 PaddleJob 配置里挂载/dev/shm的做法是一致的。五、公有云与私有云部署5.1 容器引擎方案在公有云上运行 PaddlePaddle 分布式任务推荐通过选购容器引擎托管 Kubernetes服务的方式各大云厂商都推出了基于标准 Kubernetes 的云产品购买并创建集群后按第二节的教程安装 paddle-operator 即可使用操作路径与自建集群完全一致。常见可选方案如下云厂商容器引擎产品说明百度云CCE容器引擎基于标准 Kubernetes可直接创建集群并部署 paddle-operator阿里云ACK容器服务 Kubernetes 版托管/专有 Kubernetes 集群兼容标准 kubectl 操作华为云CCE云容器引擎提供 Kubernetes 集群托管能力支持 GPU 节点池选择容器引擎后通常需要关注三点GPU 节点池是否可用、节点间网络是否互通建议同 VPC、/dev/shm 与磁盘容量是否满足训练要求。5.2 百度 BML 全功能 AI 开发平台若希望省去集群搭建与运维成本可以使用百度提供的全功能 AI 开发平台BMLBaidu Machine Learning。BML 将数据集管理、模型开发、分布式训练调度与模型服务集成为一体用户可以直接在平台上选择 GPU 资源、按上文介绍的 YAML 配置与 launch 命令提交训练任务无需自行维护 Kubernetes 集群。详细的使用方式可参考 BML 官方文档进入产品页后查看使用教程栏目。此外在裸机/云主机直连的场景中也可参考 docker_install.md 先在每台节点上完成 Docker 与 GPU 运行时nvidia-container-runtime的安装再通过--nethost、--shm-size32G等参数拉起训练容器配合paddle.distributed.launch完成多机分布式训练。六、总结集群部署是大模型训练从能跑走向规模化的关键一环。本文围绕 PaddleNLP/PaddleFleetX 体系的集群场景给出了两条完整路径Kubernetes 路径安装 paddle-operator通过声明式 PaddleJob 资源一键提交 Collective/PS 分布式任务由 controller 完成 pod 编排、GPU 调度与生命周期管理裸机/云主机路径使用python -m paddle.distributed.launch --master --nnodes直接跨节点启动结合 pretrain_gpt_base.yaml 及其衍生的 DP/Sharding/MP/PP 配置把单机训练平滑扩展到多机多卡。无论选择哪条路径部署前都应先完成 deployment_faq.md 中的环境验证确保 CUDA、NCCL、网络与共享内存全部就绪训练任务的组织形式单卡、数据并行、混合并行、自动并行可进一步参考 projects/gpt/docs/README.md 中各篇训练指南。赞分享人工智能大模型预训练微调LoRARLHF强化学习分布式训练【免费下载链接】PaddleNLPEasy-to-use and powerful LLM and SLM library with awesome model zoo.项目地址https://gitcode.com/gh_mirrors/pa/PaddleNLP点击查看免费下载相关推荐N_m3u8DL-RE 多流下载完整指南如何用管道符一次选出多条音视频流N_m3u8DL RE 多流下载完整指南如何用管道符一次选出多条音视频流 想让 N_m3u8DL RE 同时把法语和英语两条音轨都拿下来或者 4K 和 10CLI音视频MXNet 云端部署与 AWS GPU 集群分布式训练实战指南MXNet 云端部署与 AWS GPU 集群分布式训练实战指南 深度学习训练往往需要极其强大的硬件资源且使用时长难以预先精确预估同时MXNet 框架本身能人工智能深度学习机器学习MXNet分布式训练多GPU与集群部署实战MXNet分布式训练多GPU与集群部署实战 本文深入探讨了MXNet分布式训练的核心架构、通信机制和部署实践。首先介绍了基于参数服务器Parameter S深度学习人工智能机器学习分布式训练创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考 SEO 优化官网定制响应式建站教育培训建站