1

以下错误和解决方案适用于通过 YAML 在portainer中部署堆栈,但它们肯定可以应用于 docker。

环境:

PYTORCH="1.8.0"
CUDA="11.1"
CUDNN="8"
GPUs: Geforce RTX 3090

尝试使用单个 GPU训练模型时,会引发共享内存大小超出范围错误。

此外,当我使用更多 GPU (4) 时,我得到了一个不同的错误,即

RuntimeError: NCCL error in: /opt/conda/conda-bld/pytorch_1614378083779/work/torch/lib/c10d/ProcessGroupNCCL.cpp:825, unhandled system error, NCCL version 2.7.8

但是,如果您启用NCCL 的调试,您会注意到它的根源实际上是共享内存大小错误。

4

1 回答 1

1

似乎默认情况下,共享内存的大小限制为64mb。因此,如本期所示,解决此错误的方法增加共享内存的大小。

因此,想到的第一个想法就是shm_size: 9gb在堆栈的 YAML 文件中简单地定义一些东西。但是,这可能无法如本期所示。

因此,最后,我不得不使用以下解决方法(也在此处描述,但记录不充分):

volumes:
      - data-transfer:/mnt/data_transfer
      - type: tmpfs
        target: /dev/shm
        tmpfs:
          size: 9000000000

但是,要使其正常工作,您应该确保堆栈 YAML 文件的版本是最新版本(否则您可能会遇到语法错误),例如 3.7。完整的堆栈 YAML 文件:

version: '3.7'

services:
  mmaction2:
    shm_size: 256m # doesn't work
    image: something 
    tty: true
    volumes:
      - data-transfer:/mnt/data_transfer
      - type: tmpfs
        target: /dev/shm
        tmpfs:
          size: 9000000000 # ~9gb

volumes:
  # local
  data-transfer:
    driver: local
    name: data-transfer 
于 2021-04-12T10:24:31.973 回答