训练平台多机多卡实验(二) #102

Open
opened 2024-09-19 12:55:11 +08:00 by 12390900721cs · 0 comments

本来第二章其实想写 本地物理机多机多卡互联实验,但苦于实在是没有那么多的设备,遂止,直接上训练平台做多机多卡实验了。

1.算法拷贝

实验主要是体验一下在训练平台上部署和训练的过程,我们不会自己写算法,就直接从平台上拷贝就好。

2.创建shell管理模型

平台的shell叫NoteBook,在这里可以管理我们使用的算法、镜像和选择需要使用的数据集。这里按我这么选择就好。

同样的notebook我们创造三个,每个是4卡,正好就是三机12卡来进行实验。

3.环境配置

export http_proxy=http://10.10.9.50:3000

export https_proxy=http://10.10.9.50:3000

以上是HTTP与HTTPS的代理设置,配置了HTTP与HTTPS的请求将会通过代理服务器http://10.10.9.50:3000来进行。

export no_proxy=localhost,127.0.0.1

这个变量设置了本地地址(localhost)绕过代理,即这些地址的请求不使用代理。

export HF_HOME=/code/huggingface-cache

HF_HOME设置了Hugging Face的缓存路径, 模型和数据会被缓存在该目录下,避免重复下载。

export HF_ENDPOINT=https://hf-mirror.com

HF_ENDPOINT指定 Hugging Face 的镜像地址。

export NCCL_DEBUG=INFO # 启用 NCCL 的调试信息输出,用于诊断通信问题

export NCCL_IB_DISABLE=0 # 启用 InfiniBand(用于高速网络通信)

export NCCL_IB_HCA=mlx5 # 指定 InfiniBand 的 HCA(Host Channel Adapter),mlx5 是一种 Mellanox 网卡,常用于高性能计算集群。

export NCCL_SOCKET_IFNAME=eth0 # 指定网络接口名称为 eth0,这通常是默认的以太网接口,用于 NCCL 通信。

以上是对NCCL (NVIDIA Collective Communications Library) 环境变量。这是一个搞笑的分布式通信库,主要用于多GPU或多机器间的并行训练。

export GLOO_SOCKET_IFNAME=eth0

Gloo 是另一种分布式训练库,适用于 CPU 和 GPU 的训练。GLOO_SOCKET_IFNAME=eth0 表示 Gloo 通过网络接口 eth0 进行通信。

注意三台机器都要进行这样的设置。

4.启动训练

启动训练前需要设置一台主机作为master结点,将其ip进行设置。每个主机的ip可以通过ifconfig命令进行查看。

三台主机分别设置为节点0,1,2。可以通过NODE_RANK进行设置。

NPROC_PER_NODE=4 NNODES=3 PORT=12345 ADDR=10.244.55.43 NODE_RANK=0 xtuner train code/qwen1_5_1_8b_qlora_alpaca_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3

NPROC_PER_NODE=4 NNODES=3 PORT=12345 ADDR=10.244.55.43 NODE_RANK=1 xtuner train code/qwen1_5_1_8b_qlora_alpaca_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3

NPROC_PER_NODE=4 NNODES=3 PORT=12345 ADDR=10.244.55.43 NODE_RANK=2 xtuner train code/qwen1_5_1_8b_qlora_alpaca_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3

参数解释:

  1. NPROC_PER_NODE=4:表示每个节点上运行的进程数量(即每个节点上使用的 GPU 数量)。这里是 4 个 GPU。
  2. NNODES=3:表示分布式训练中总共有 3 个节点参与训练。
  3. PORT=12345:这是分布式训练的通信端口,所有节点通过这个端口进行互相通信。
  4. ADDR=10.244.199.246:这是主节点的 IP 地址,其他节点会连接到这个地址进行训练同步。
  5. NODE_RANK=0/1/2:这是节点的编号(rank),用于标识当前节点是第几号节点。NODE_RANK=0 是主节点,NODE_RANK=1NODE_RANK=2 是其他参与的工作节点。
  6. xtuner train code/qwen1_5_1_8b_qlora_alpaca_e3_copy.py:这是运行的训练脚本路径,应该是在 code 目录下。所有节点都运行同一个训练脚本。
  7. --work-dir /userhome/xtuner-workdir:指定工作的目录,存放训练过程中产生的文件(如模型检查点、日志等)。
  8. --deepspeed deepspeed zero3:启用 DeepSpeed 进行分布式训练,并且使用 zero3(Zero Redundancy Optimizer Stage 3)技术,用于减少显存占用,优化大模型训练。

三机十二卡运行实在是快,分分钟就跑出来了。最终运行结果如图所示。

本来第二章其实想写 **本地物理机多机多卡互联实验**,但苦于实在是没有那么多的设备,遂止,直接上训练平台做多机多卡实验了。 ## 1.算法拷贝 实验主要是体验一下在训练平台上部署和训练的过程,我们不会自己写算法,就直接从平台上拷贝就好。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726720238985-a385ffcb-4d52-4e96-88b2-b8196db4cf13.png) ## 2.创建shell管理模型 平台的shell叫NoteBook,在这里可以管理我们使用的算法、镜像和选择需要使用的数据集。这里按我这么选择就好。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726720478594-77bc55c1-771e-4000-852f-66c79581a88c.png) 同样的notebook我们创造三个,每个是4卡,正好就是三机12卡来进行实验。 ## 3.环境配置 export http_proxy=[http://10.10.9.50:3000](http://10.10.9.50:3000) export https_proxy=[http://10.10.9.50:3000](http://10.10.9.50:3000) 以上是HTTP与HTTPS的代理设置,配置了HTTP与HTTPS的请求将会通过代理服务器[http://10.10.9.50:3000](http://10.10.9.50:3000)来进行。 export no_proxy=localhost,127.0.0.1 这个变量设置了本地地址(localhost)绕过代理,即这些地址的请求不使用代理。 export HF_HOME=/code/huggingface-cache HF_HOME设置了Hugging Face的缓存路径, 模型和数据会被缓存在该目录下,避免重复下载。 export HF_ENDPOINT=[https://hf-mirror.com](https://hf-mirror.com) HF_ENDPOINT指定 Hugging Face 的镜像地址。 export NCCL_DEBUG=INFO # 启用 NCCL 的调试信息输出,用于诊断通信问题 export NCCL_IB_DISABLE=0 # 启用 InfiniBand(用于高速网络通信) export NCCL_IB_HCA=mlx5 # 指定 InfiniBand 的 HCA(Host Channel Adapter),`mlx5` 是一种 Mellanox 网卡,常用于高性能计算集群。 export NCCL_SOCKET_IFNAME=eth0 # 指定网络接口名称为 `eth0`,这通常是默认的以太网接口,用于 NCCL 通信。 以上是对NCCL (NVIDIA Collective Communications Library) 环境变量。这是一个搞笑的分布式通信库,主要用于多GPU或多机器间的并行训练。 export GLOO_SOCKET_IFNAME=eth0 Gloo 是另一种分布式训练库,适用于 CPU 和 GPU 的训练。`GLOO_SOCKET_IFNAME=eth0` 表示 Gloo 通过网络接口 `eth0` 进行通信。 **注意三台机器都要进行这样的设置。** ## 4.启动训练 启动训练前需要设置一台主机作为master结点,将其ip进行设置。每个主机的ip可以通过ifconfig命令进行查看。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726721051765-89cbc9d3-6d58-4ea3-b67a-249251e4c9ff.png) 三台主机分别设置为节点0,1,2。可以通过NODE_RANK进行设置。 NPROC_PER_NODE=4 NNODES=3 PORT=12345 ADDR=10.244.55.43 NODE_RANK=0 xtuner train code/qwen1_5_1_8b_qlora_alpaca_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3 NPROC_PER_NODE=4 NNODES=3 PORT=12345 ADDR=10.244.55.43 NODE_RANK=1 xtuner train code/qwen1_5_1_8b_qlora_alpaca_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3 NPROC_PER_NODE=4 NNODES=3 PORT=12345 ADDR=10.244.55.43 NODE_RANK=2 xtuner train code/qwen1_5_1_8b_qlora_alpaca_e3_copy.py --work-dir /userhome/xtuner-workdir --deepspeed deepspeed_zero3 ### 参数解释: 1. **NPROC_PER_NODE=4**:表示每个节点上运行的进程数量(即每个节点上使用的 GPU 数量)。这里是 4 个 GPU。 2. **NNODES=3**:表示分布式训练中总共有 3 个节点参与训练。 3. **PORT=12345**:这是分布式训练的通信端口,所有节点通过这个端口进行互相通信。 4. **ADDR=10.244.199.246**:这是主节点的 IP 地址,其他节点会连接到这个地址进行训练同步。 5. **NODE_RANK=0/1/2**:这是节点的编号(rank),用于标识当前节点是第几号节点。`NODE_RANK=0` 是主节点,`NODE_RANK=1` 和 `NODE_RANK=2` 是其他参与的工作节点。 6. **xtuner train code/qwen1_5_1_8b_qlora_alpaca_e3_copy.py**:这是运行的训练脚本路径,应该是在 `code` 目录下。所有节点都运行同一个训练脚本。 7. **--work-dir /userhome/xtuner-workdir**:指定工作的目录,存放训练过程中产生的文件(如模型检查点、日志等)。 8. **--deepspeed deepspeed zero3**:启用 DeepSpeed 进行分布式训练,并且使用 `zero3`(Zero Redundancy Optimizer Stage 3)技术,用于减少显存占用,优化大模型训练。 三机十二卡运行实在是快,分分钟就跑出来了。最终运行结果如图所示。 ![](https://cdn.nlark.com/yuque/0/2024/png/48516026/1726721174489-7634d45c-bdb9-484d-be79-7c3fa652bde0.png)
Sign in to join this conversation.
No Milestone
No project
No Assignees
1 Participants
Notifications
Due Date
The due date is invalid or out of range. Please use the format 'yyyy-mm-dd'.

No due date set.

Dependencies

No dependencies set.

Reference: HswOAuth/llm_course#102
No description provided.