Liang Depeng
Liang Depeng
> ## 如何在这个project里添加checkpointing (讨论) > 因为libai里添加checkpointing需要显示指定模块,但是如果跑的是flowvision里实现的模型,就没办法知道具体的模块,那应该如何添加checkpointing呢 我的想法是,在这个project下给每个 flowvision 都实现一个默认的 checkpointing 的配置函数,存在一个字典里,在实例化的时候 VisionModel wrapper的时候,给 VisionModel 类添加设置对应的 checkpointing 配置 static method。 简单尝试了一下,应该是可行的: ```python3 def set_activation_checkpoint_for_resnet50(): print("resnet50") def set_activation_checkpoint_for_vit(): print("vit") def set_activation_checkpoint_for_googlenet(): print("googlenet")...
我觉得 libai 和 flow-text 各自的定位还需要更清晰一些,有一些点我也没太想明白,需要再讨论 1. 最好两者功能上和提供的组件上没有太多的交集,最好是可以复用对方的组件不用重复造轮子 2. Libai 的定位 - 基于 transformer 的大规模模型预训练解决方案,提供如何从单机丝滑拓展到大规模预训练的示例 - 提供丰富的预训练的模型库 ? - 对于数据加载和预处理 dataloader 这块是否需要放到 libai 这个库,而应该把 cv 的数据加载和预处理用 flow-vision?nlp 的数据集加载和预处理用 flow-text? 3. flow-text...
> > > > 1. 关于 bert 的预训练模型我觉得两边都可以做,区别在于 flow-text 提供的能力是单卡就能 train 的 bert,主要是提供非常简单的模型写法,比如不用考虑 sbp 之类的问题,提供 nn.Module 就可以,用户小规模也能使用;而 LiBai 可以提供的能力是可以支持非常大的 bert 模型,这边对于代码的可读性要求会低一些,会有更多和分布式相关的内容; > 2. dataloader 的部分我觉得各自做就好了,因为 dataloader 一般也很难做到完全复用,而且不同的库的定位导致他们面对的数据规模是不同的,很难用同一套东西在两边复用; 感觉可以
> > consistent + graph 应该是最终的训练选择,但是 graph 对于 debug 不太便利,所以考虑 consistent + eager 进行 debug,我觉得应该完全放弃对 ddp 这种方式的支持,首先 ddp 只能做数据并行,另外和 consistent 不兼容,如要要加上去的话需要修改很多代码 > > 我不是说支持ddp这个模块,而是设计一个类似于ddp的模块,这个模块可以封装在model的外层,负责将原始的单机单卡model变为分布式model。但原始模型可能无法放入到单个gpu中,所以eager模式可能无法使用,只能以一种lazy的方法,在调用模型或者调用我们设计的这个模块时,把模型的参数在各自的机器上初始化。 ddp 就表示只能做分布式数据并行,如果是封装拓展单卡到多卡模型的模块,应该要换个名字,比如 dhp ( distributed hybrid...
> 德澎你这个测试,是在哪台机器上做的? @Ldpe2G 金山还是类脑 之前是在金山上做的
得看下是哪个模块导致这个
### 这组配置可以跑起来 ```python3 train.train_micro_batch_size = 8 train.num_accumulation_steps = 2 train.test_micro_batch_size = 16 ``` ### 这组配置虽然不会报错,但是会卡住,有几张卡利用率 100%,其他为0% ```python3 train.train_micro_batch_size = 32 train.num_accumulation_steps = 4 train.test_micro_batch_size = 128 ``` `num_accumulation_steps` 的设置是不是不能超过 网络流水的...
> > 这组配置虽然不会报错,但是会卡住,有几张卡利用率 100%,其他为0% > > 8卡3D并行也就是 2+2+2 吗?这种现象很大可能跟 nccl 启动顺序不一致所致。nccl_use_compute_stream 这个选项开启了吗? 是的,我看下
我这边试验了一下,关掉能跑起来
```C++ void Kernel::Launch(KernelContext* ctx) const { LOG(INFO) WillForward(ctx, this); Forward(ctx); ctx->DidForward(ctx, this); LOG(INFO)