Luyang
Luyang
- [x] 使用`ep::primitive::BroadcastElementwiseUnary`重构cast kernel,同时支持stride - [x] 支持half、nv_bfloat16类型 - [x] fix cast op不支持0-size tensor的bug - [x] test case
为以下scalar math ops在kernel内增加stride支持,使其原生支持non-contiguous tensor作为输入。 ```shell #define REGISTER_SCALAR_MATH_KERNEL(device, dtype_pair) \ REGISTER_UNARY_MATH_SCALAR_ELEMWISE_USER_KERNEL(device, "scalar_add", BinaryFuncAdd, \ dtype_pair); \ REGISTER_UNARY_MATH_SCALAR_ELEMWISE_USER_KERNEL(device, "scalar_floordiv", BinaryFuncFloorDiv, \ dtype_pair); \ REGISTER_UNARY_MATH_SCALAR_ELEMWISE_USER_KERNEL(device, "scalar_fmod", BinaryFuncFMod, \ dtype_pair); \ REGISTER_UNARY_MATH_SCALAR_ELEMWISE_USER_KERNEL(device, "scalar_mul", BinaryFuncMul,...
### 简介 horovod是支持pytorch,tensorflow,mxnet多机分布式训练的库,其底层机器间通讯依赖nccl或mpi,所以安装前通常需要先安装好nccl、openmpi,且至少安装了一种深度学习框架,譬如mxnet: ```shell python3 -m pip install gluonnlp==0.10.0 mxnet-cu102mkl==1.6.0.post0 -i https://mirror.baidu.com/pypi/simple ``` ### 问题解决 安装好依赖后,可以进行horovod的安装,horovod安装时,需为NCCL指定相关变量,否则运行时可能不会走nccl通讯导致速度很慢。详细安装过程:https://github.com/horovod/horovod/blob/master/docs/gpus.rst - 安装horovod时,需指定NCCL相关变量: ```shell HOROVOD_WITH_MXNET=1 HOROVOD_GPU_OPERATIONS=NCCL HOROVOD_GPU_ALLREDUCE=NCCL HOROVOD_GPU_BROADCAST=NCCL ``` 如果不指定变量直接安装,则用horovodrun时也能运行,不过速度会很慢,因为其底层并未走nccl,直接走的是mpi通信 ### 其他 - 可以在运行时添加--log-level参数为INFO或者DEBUG来查看详细输出 ```shell...
# 踩坑经验总结 ## 1.精确到commit 首先,各个框架存在不同版本;其次,项目代码也在不断维护和更新,我们需要复现一个项目,首先需要熟读项目的readme,然后精确地匹配到对应的commit,保证代码版本和框架版本相匹配,才能将由于代码/框架版本不匹配导致各种问题的概率降至最低。 ## 2.多机问题 多机情况下常见的问题: ### horovod/mpi多机运行失败 无论是在物理机还是nvidia-ngc容器中,要运行horovod/mpi,都需要提前在节点之间配置ssh免密登录,保证用于通信的端口可以互相连通。 如: ```bash # export PORT=10001 horovodrun -np ${gpu_num} \ -H ${node_ip} -p ${PORT} \ --start-timeout 600 \ python3 train.py...
- [x] 修复https://github.com/Oneflow-Inc/OneTeam/issues/1674 中提到的问题
- [x] 修复tensor.mean,在dtype为half时报错的bug。来源:disco diffusion项目中遇到的未对齐api:https://github.com/Oneflow-Inc/OneTeam/issues/1655#issuecomment-1228168512 - [x] test case
### 问题背景 之前为了解决dataloader中worker进程初始化时fork进程和RDMA冲突(segmentation fault),在dataloader中使用了destory_rdma接口,但这个用法在lazy静态图下会有问题,具体见: - https://github.com/Oneflow-Inc/OneTeam/issues/1794#issuecomment-1328744312 - https://github.com/Oneflow-Inc/OneTeam/issues/1463#issuecomment-1330246528 ### 解决方案 此PR移除了dataloader中destory_rdma相关的改动,而采取之前的做法: - 如果确认需要在环境中使用RDMA,则需要保证RDMA init在DataLoader创建之后。由于先初始化DataLoader(初始化时即创建worker进程),后使用RDMA即可避免问题; - 通过增加一个iterator变量来控制iterator reset时机,解决了数据丢失的问题 - [x] test case:基于 @xiezipeng-ML 提供的[libai的case](https://github.com/Oneflow-Inc/OneTeam/issues/1794#issuecomment-1328170592)基于27机器测试通过