microsoft / microsoft/TRELLIS.2

terminate called without an active exception on multi-GPU training

Open
#88 9 comments 6 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Python
Stars
11.3k
Forks
1.4k
PR merge metrics
No merged PRs in 30d

Description

Environment:

4x NVIDIA GPUs (H100/A100)
PyTorch 2.x, CUDA 12.8
NCCL 2.26.2
NCCL_IB_DISABLE=1, NCCL_P2P_DISABLE=1
Problem: Multi-GPU ShapeVAE training crashes with terminate called without an active exception during SPARSE backend initialization (flex_gemm + flash_attn). Single GPU training works fine.

Error output:

[SPARSE] Conv backend: flex_gemm; Attention backend: flash_attn
[SPARSE] Conv backend: flex_gemm; Attention backend: flash_attn
terminate called without an active exception
terminate called without an active exception
...

Observations:

DDP initialization completes successfully
Crash occurs when multiple GPUs simultaneously initialize SPARSE conv/attention backends
Appears to be a race condition in flex_gemm or flash_attn backend initialization
No Python traceback - crash happens at C++ level
Expected behavior: Multi-GPU training should work as single-GPU does.

Workaround tried (failed):

  1. Setting NCCL environment variables
export NCCL_DEBUG=INFO
export NCCL_ASYNC_ERROR_HANDLING=1
export PL_TORCH_DISTRIBUTED_DEBUG=DETAIL
export NCCL_BLOCKING_WAIT=1
export NCCL_IB_DISABLE=1 
export NCCL_P2P_DISABLE=1 
export MASTER_ADDR=localhost
export MASTER_PORT=29501
  1. Skipping initial snapshot

@JeffreyXiang Can u give some advice? Thanks!

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing ShapeVAE multi-GPU training with the listed PyTorch, CUDA, NCCL, flex_gemm, and flash_attn setup, then compare it with single-GPU training. Trace SPARSE backend initialization around the reported C++-level termination; done means multi-GPU training completes without the crash.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
distributed-systems, machine-learning
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Mostly clear
Newbie friendliness
38/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.