Docker 共享内存大小超出范围或未处理的系统错误,NCCL 版本 2.7.8
Docker shared memory size out of bounds or unhandled system error, NCCL version 2.7.8
以下错误和解决方案用于在 portainer 中通过 YAML 部署堆栈,但它们肯定可以应用于 docker 否则。
环境:
PYTORCH="1.8.0"
CUDA="11.1"
CUDNN="8"
GPUs: Geforce RTX 3090
尝试使用单个 GPU train a model 时,会抛出共享内存大小超出范围的错误。
此外,当我使用更多 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
但是,如果您 enable debugging 的 NCCL,您会注意到它的根源实际上是共享内存大小错误。
好像默认共享内存的大小是有限制的64mb. The solution to this error therefore, as shown in this问题是增加共享内存的大小。
因此,我想到的第一个想法就是在堆栈的 YAML 文件中简单地定义类似 shm_size: 9gb
的内容。但是,这可能无法正常工作,例如 this 问题。
因此,最后,我不得不使用以下解决方法(也描述了 here,但记录不完整):
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
以下错误和解决方案用于在 portainer 中通过 YAML 部署堆栈,但它们肯定可以应用于 docker 否则。
环境:
PYTORCH="1.8.0"
CUDA="11.1"
CUDNN="8"
GPUs: Geforce RTX 3090
尝试使用单个 GPU train a model 时,会抛出共享内存大小超出范围的错误。
此外,当我使用更多 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
但是,如果您 enable debugging 的 NCCL,您会注意到它的根源实际上是共享内存大小错误。
好像默认共享内存的大小是有限制的64mb. The solution to this error therefore, as shown in this问题是增加共享内存的大小。
因此,我想到的第一个想法就是在堆栈的 YAML 文件中简单地定义类似 shm_size: 9gb
的内容。但是,这可能无法正常工作,例如 this 问题。
因此,最后,我不得不使用以下解决方法(也描述了 here,但记录不完整):
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