11# 添加新的并行技术
22
3- 为了方便科研人员和工程师们更方便地拓展我们的框架来兼容一些新的大规模分布式训练算法,我们对训练过程中的几个组件进行了解耦,您可以通过继承基类的方式
4- 来实现新的并行技术。
3+ 为了方便科研人员和工程师们更方便地拓展我们的系统来兼容一些新的大规模分布式训练算法,我们对训练过程中的几个组件进行了解耦,您可以通过继承基类的方式来实现新的并行技术。
54
65主要的组件如下所示:
76
1110
1211## 进程组初始化器
1312
14- 并行化一般是通过进程组来进行管理的,同属于一个并行化算法的进程将被分到一个进程组中,如果系统中存在多种不同的并行化技术,那么需要创建多个不同的进程组。
15- ColossalAI为用户提供了一个全局上下文变量来便捷地管理他们的进程组。如果您希望增加新的进程组,您可以定义一个新的类并且在您的配置文件中进行设置。下方的
16- 代码块中介绍了如果在系统中加入您的新并行技术以及如何进行初始化。
13+ 并行化一般是通过进程组来进行管理的,同属于一个并行化算法的进程将被分到一个进程组中,如果系统中存在多种不同的并行化技术,那么需要创建多个不同的进程组。Colossal-AI为用户提供了一个全局上下文变量来便捷地管理他们的进程组。如果您希望增加新的进程组,您可以定义一个新的类并且在您的配置文件中进行设置。下方的代码块介绍了如何在系统中加入您的新颖并行技术以及如何进行初始化。
1714
18151 . 在` colossalai.context.parallel_mode.ParallelMode ` 中添加新的并行模式。
1916``` python
@@ -28,9 +25,7 @@ class ParallelMode(Enum):
2825 NEW_MODE = ' new_mode' # define your mode here
2926```
3027
31- 2 . 创建一个` ProcessGroupInitializer ` 的子类,您可以参考` colossalai.context.dist_group_initializer ` 中给出的例子。前六个参数将由` ParallelContext `
32- 决定。如果您需要设置新的参数,您可以用新的参数替换下面例子中的` arg1 ` 与` arg2 ` 。最后,您需要使用` @DIST_GROUP_INITIALIZER.register_module ` 装饰器
33- 在我们的注册表注册您的初始化器。
28+ 2 . 创建一个` ProcessGroupInitializer ` 的子类,您可以参考` colossalai.context.dist_group_initializer ` 中给出的例子。前六个参数将由` ParallelContext ` 决定。如果您需要设置新的参数,您可以用新的参数替换下面例子中的` arg1 ` 与` arg2 ` 。最后,您需要使用` @DIST_GROUP_INITIALIZER.register_module ` 装饰器在我们的注册表中注册您的初始化器。
3429``` python
3530# sample initializer class
3631@DIST_GROUP_INITIALIZER.register_module
@@ -55,14 +50,13 @@ class MyParallelInitializer(ProcessGroupInitializer):
5550 pass
5651```
5752
58- 在此之后,您可以将您的初始化器插入到当前的mode-to-initialize映射` colossalai.constants.INITIALIZER_MAPPING ` 中,您也可以通过更改该文件来动态变更名称与
59- 并行模式的映射。
53+ 在此之后,您可以将您的初始化器插入到当前的mode-to-initialize映射` colossalai.constants.INITIALIZER_MAPPING ` 中,您也可以通过更改该文件来动态变更名称与并行模式的映射。
6054
6155``` python
6256colossalai.constants.INITIALIZER_MAPPING [' new_mode' ] = ' MyParallelInitializer'
6357```
6458
65- 3 . 在配置文件中设置您的初始化器, 如果您的初始化器需要参数,您可以自行传入, 下面的代码可以让` ParallelContext ` 来创建您的初始化器并初始化您需要的进程组。
59+ 3 . 在配置文件中设置您的初始化器。 如果您的初始化器需要参数,您可以自行传入。 下面的代码可以让` ParallelContext ` 来创建您的初始化器并初始化您需要的进程组。
6660
6761``` python
6862parallel = dict (
@@ -73,9 +67,7 @@ parallel = dict(
7367
7468## 梯度处理器
7569
76- 梯度处理器的功能是对模型参数的梯度进行all-reduce操作。由于不同的并行技术可能需要不同的all-reduce操作,用户们可以通过继承
77- ` colossalai.engine.gradient_handler.BaseGradientHandler ` 来执行其个性化操作。目前,ColossalAI使用普通的数据并行梯度处理器,该处理器在所有的数据
78- 并行rank上执行all-reduce操作,且当ColossalAI监测到当前系统使用了数据并行时,该处理器会被自动创建。您可以使用下方代码块中的代码添加您自定义的梯度处理器:
70+ 梯度处理器的功能是对模型参数的梯度进行all-reduce操作。由于不同的并行技术可能需要不同的all-reduce操作,用户们可以通过继承` colossalai.engine.gradient_handler.BaseGradientHandler ` 来执行其个性化操作。目前,Colossal-AI使用普通的数据并行梯度处理器,该处理器在所有的数据并行rank上执行all-reduce操作,且当Colossal-AI检测到当前系统使用了数据并行时,该处理器会被自动创建。您可以使用下方代码块中的代码添加您自定义的梯度处理器:
7971
8072``` python
8173from colossalai.registry import GRADIENT_HANDLER
@@ -99,5 +91,4 @@ dist_initializer = [
9991
10092## 调度器
10193
102- 调度器中指定了在前向传播和后向传播时需要执行哪些操作,ColossalAI提供了支持流水线和不支持流水线的调度器。如果您想要修改前向传播和后向传播的执行方式,您可以
103- 继承` colossalai.engine.BaseSchedule ` 并实现您想要的操作。您也可以在训练模型之前将您的调度器添加到我们的引擎中来。
94+ 调度器中指定了在前向传播和后向传播时需要执行哪些操作,Colossal-AI提供了流水线和非流水线的调度器。如果您想要修改前向传播和后向传播的执行方式,您可以继承` colossalai.engine.BaseSchedule ` 并实现您想要的操作。您也可以在训练模型之前将您的调度器添加到我们的引擎中来。
0 commit comments