cheng peng

Results 49 comments of cheng peng

> 根据文本生成的图片都噪声特别大,或者说感觉像是随机生成的🤔 这里在对比输出的时候, 不要通过观察图片的结果, 而是在去除所有随机性的干扰以后, 用相同的输入 放到flow和torch的网络下 看看是否能得到相同的输出的tensor. 可以参考 https://github.com/Oneflow-Inc/OneTeam/issues/779#issue-1054706350 下的模型loss对齐经验 下的第一个板块. > 因为我在尽量利用libai.layers.xx等网络层,如Embedding, LayerNorm等,这些内置的参数plcament/sbp貌似都是一致(如layer_idx=0, sbp=broadcast); 另一方面,dalle2有太多参数了,目前不太想一个个去设置placement和sbp😂, 所以我基本都放在在第0块卡上。 这个我近期会提一个pr, 在libai下面不需要全部替换model中的tensor, 在model中只替换自己需要的layer即可, 其他的都默认全部转换为broadcast. > 多卡的启动 在libai下其实提供了多卡启动的脚本. https://github.com/Oneflow-Inc/libai/blob/5d5acf9aa69ab5b5da8ae9d992dce4afe0d1964c/tools/train.sh#L13-L14. 但我看到这个pr下面目前还没有config.py之类的. 所以如果你想方便启动的话. 可以参考这个 重新写一个`.sh`的shell脚本

可以加一下 requirements.txt, 在libai的环境下 还需要额外手动安装一下包 . 我这边尝试的时候发现需要手动安装的就有如下的包: ``` resize_right ftfy kornia einops ```

dalle2的可以加一个requirements.txt, ``` resize_right ftfy kornia einops ``` 再加一个下载权重的脚本, 或者有一个下载权重的readme说明也可以.

可以在reviewer里面加一下ci

目前来说我想好的整个pineline和huggingface流程差不多, 首先我们得有一个基类的pipeline作为可继承的类使用: ```python from libai.config import LazyConfig, try_get_key from libai.engine.default import DefaultTrainer from libai.utils.checkpoint import Checkpointer from libai.data.structures import DistTensorData, Instance class BasicPipeline: def __init__( self, config_file, **kwargs): self.cfg =...

对于不同的任务, 我们的inference代码会不一样, ### 分类任务 如果是对于只有encoder的分类任务, 那么模型会比较简单, 直接输出类别和分数就可以了. ### 生成任务 但是如果是包含decoder的**生成任务**, 在进行`forward()`的时候, 需要特别注意: 1. 在生成任务里面, 由于decoder当前的输出 依赖于以前的输出, 所以需要用for循环一直调用, 类似的代码如下: ```python def couplet(model, src, data_loader, config): vocab = data_loader.vocab tokenizer = data_loader.tokenizer...

> 做推理生成任务的时候,输入序列是变长的是吧,那目前只能用 eager global 来做了? 我理解 不止生成任务, 可能分类任务输入序列也是变长的, 只不过都会进行padding到max_length. 但是我感觉用eager global来做更加的灵活. 而且可能还有一种情况就是, 输入的序列, 超过了训练的max_length, 这种情况怎么弄可能还需要再讨论一下

这里提供另外一种解决方案 类似于D2的结构, 在model中也使用lazyconfig进行构建. 比如 https://github.com/facebookresearch/detectron2/blob/main/configs/common/models/retinanet.py ```python model = L(RetinaNet)( backbone=L(FPN)( bottom_up=L(ResNet)( stem=L(BasicStem)(in_channels=3, out_channels=64, norm="FrozenBN"), stages=L(ResNet.make_default_stages)( depth=50, stride_in_1x1=True, norm="FrozenBN", ), out_features=["res3", "res4", "res5"], ), in_features=["res3", "res4", "res5"], out_channels=256, top_block=L(LastLevelP6P7)(in_channels=2048, out_channels="${..out_channels}"), ),...

这个分支在libai的`master`下经过测试: 目前可以跑通的配置: - `数据并行=2` + `模型并行=2` - `数据并行=2` + `模型并行=2` + `流水并行=2` - `数据并行=2` + `流水并行=2` + `zero` - `数据并行=4` + `zero` - `模型并行=2` + `zero` `2d sbp` + `zero`...

> 这个属于上一个连接还没释放吧,过一会再跑呢? 一样的, 还是有这个错误. 我感觉可能是多卡的报错导致了这个输出信息?