跑教程的FCN代码,出现mxnet/mshadow/mshadow/./stream_gpu-inl.h:62: Check failed: e == cudaSuccess CUDA: an illegal memory access was encountered

跑教程的FCN代码,出现mxnet/mshadow/mshadow/./stream_gpu-inl.h:62: Check failed: e == cudaSuccess CUDA: an illegal memory access was encountered

mxnet为1.0.1版本

用单个gpu没问题,多卡就不行了。不知道什么原因

用最新的nightly build还是有这个问题吗?
pip install mxnet --pre

多GPU并行计算的时候,你需要自己检查,ndarray加载是否正确,比如我现在一个loss上需要加权重,那么w必须同时加载到每个gpu上,且每个gpu上的数据使用各自已加载到该gpu上的w参与计算:

ctx = [mx.gpu(), mx.gpu(1))
pos_weights = []
for ctx_i in ctx:    # 同时加载多个w到每个gpu上
    w = nd.array(pos_weight, ctx=ctx_i)
    pos_weights.append(w)

...

        for i, batch in enumerate(train_iter):
            Xs, ys, batch_size = _get_batch(batch, ctx)
            ls = []
            with autograd.record():
                y_hats = [net(X) for X in Xs]
                ls = [loss(y_hat, y, None, pos_weights[ctx.index(y.context)]) for y_hat, y in zip(y_hats, ys)]  # 这里的pos_weights参数就是我说的需要同时加载到各个gpu上的数据
            for l in ls:
                l.backward()

亲测解决上述问题,我觉得你应该是跟我一样的问题。
你需要检查这种数据加载的问题,是否加载到对应gpu,以及使用各自gpu上的数据