huang wei
huang wei
1、在4卡机器上,这样启动的时间有点久,有没有什么快一点的方法呢
> projects/DALLE2/dalle2/data/bpe_simple_vocab_16e6.txt > > 这个文件应该不用提到 git 吧,超大 这个大约3M,感觉不是很大。。
> > > projects/DALLE2/dalle2/data/bpe_simple_vocab_16e6.txt > > > 这个文件应该不用提到 git 吧,超大 > > > > > > 这个大约3M,感觉不是很大。。 > > 代码变更数量:+266,903 ok, 已经删除了
> > 在4卡机器上,这样启动的时间有点久,有没有什么快一点的方法呢 > > 启动时间比较久是指通过指定环境变量的方式启动多个进程比较繁琐,还是指import时间比较长。 如果是觉得这种启动方式繁琐的话可以参考 https://docs.oneflow.org/master/parallelism/04_launch.html 使用launch模块。 好的,我试试。 前面这个是import太久了,现在还没完成。。
> 我看这个截图里WORLD_SIZE是4,是不是没有启动其他的3个进程,此时在等待。 刚试了一下,还真是这样(之前不太清楚要开4个shell窗口)。
2、相关问题/进展记录 **进展** - 把模型从torch迁到oneflow还是比较方便的, 其中flow存在一些函数不支持或不一致的情况(如 F.pad 不支持bool类型,0.7版本缺unbind/full_like等 ),稍微修改一下就行,这一块工作量不是很大。然后是添加(copy)了[GroupNorm](https://github.com/Oneflow-Inc/oneflow/blob/master/python/oneflow/nn/modules/normalization.py#L26), [Conv2D](https://github.com/Oneflow-Inc/oneflow/blob/v0.7.0/python/oneflow/nn/modules/conv.py#L233), [ConvTransposed2D](https://github.com/Oneflow-Inc/oneflow/blob/v0.7.0/python/oneflow/nn/modules/conv.py#L744)等网络层进行适配。 - 主要耗时是在寻找训练好的模型权重,主要来自[这里](https://huggingface.co/laion/DALLE2-PyTorch/tree/main),我试了若干个,根据文本生成的图片都噪声特别大,或者说感觉像是随机生成的🤔,所以现在dalle2推理部分可以跑通,但是效果远不及预期,还需要多试试。 **其它问题** 服务器上有4块卡,但是我目前都是使用单机单卡来跑,原因有两点 1. 因为我在尽量利用libai.layers.xx等网络层,如Embedding, LayerNorm等,这些内置的参数plcament/sbp貌似都是一致(如layer_idx=0, sbp=broadcast); 另一方面,dalle2有太多参数了,目前不太想一个个去设置placement和sbp😂, 所以我基本都放在在第0块卡上。 2. 参考 > 启动时间比较久是指通过指定环境变量的方式启动多个进程比较繁琐,还是指import时间比较长。 如果是觉得这种启动方式繁琐的话可以参考 https://docs.oneflow.org/master/parallelism/04_launch.html 使用launch模块。 要使用多卡的话每次都需要起四个进程,感觉还是稍微有点麻烦😂(可能是我的使用方式有问题),所以就直接使用单卡了。 **后续计划** 1....
`nsys profile --stats=true -o dalle2 python3 test.py ` 利用nsight system工具打开上述结果,发现ComputeVarUsingWelfordWrapper耗时占比非常大,这个ComputeVarUsingWelfordWrapper具体是指什么操作呢,另外如何避免/减少它的开销? py: 3.8 oneflow: 0.8.0 
> 这个ComputeVarUsingWelfordWrapper就是var op的kernel实现,这个kernel实现的效率有问题,暂时还没有修复。如果是网络中用到了nn.GroupNorm的话,可以先按照这个pr:https://github.com/Oneflow-Inc/oneflow/pull/8905 中,修改一下GroupNorm中var的实现,可以绕过这个var kernel的问题,大大加速 修改了GroupNorm,速度提升了很多👍
oneflow版本从0.7->0.8时,对global tensor操作,Device2Device Memcpy耗时会大量增加 如下部分代码: ``` import oneflow as flow from oneflow import nn print(flow.__version__) def rotate_half(x): d = x.shape[-1] x1, x2 = x[..., :d // 2], x[..., d // 2:]...
> 在创建这个对象时会统一申请全部计算所需内存,析构时统一释放内存,因为是纯c++计算且整个过程没有内存申请操作 ft 的kv_cache 按最大所需长度max_cache_seq_len分配显存 见 https://github.com/void-main/FasterTransformer/blob/main/src/fastertransformer/models/llama/Llama.cc#L102