facebookresearch / facebookresearch/scenescript

🚧 [Environment Setup Problem] Installing TorchSparse with GPU Support Was Exhausting — Sharing My Full Debug Journey and Asking for Help 🙏

Open
#11 2 comments 0 reactions 0 assignees View on GitHub
Dominant language
Python
Stars
384
Forks
31
PR merge metrics
No merged PRs in 30d

Description

Hi everyone,

I recently tried to setup `torchsparse` configuration accroding the repo, and I want to share my experience setting it up — in case it helps others — and also to **ask the community if anyone has a better way to handle this**.

### 🧠 The Goal

I wanted to build and use `torchsparse` **with GPU acceleration**, because the project heavily relies on point cloud processing and performance is critical. However, I faced a long and frustrating journey of dependency hell, compilation errors, and CUDA version mismatches.

---

## 1️⃣ Initial Setup (That Failed)

My **initial environment** looked like this:

```txt
- OS: Ubuntu 22.04
- Python: 3.11
- PyTorch: 2.4.0
- CUDA: 12.1 (System-installed)
```

I tried installing `torchsparse` using:

```bash
pip install git+https://github.com/mit-han-lab/torchsparse.git
```

This failed with the following errors:

```bash
: fatal error: cuda_runtime.h: No such file or directory
compilation terminated.
```

Digging into it further, I realized:
- `torchsparse` officially supports only **Python ≤ 3.10**, **PyTorch ≤ 2.0.x**, and **CUDA 11.x**
- My setup had **newer versions across the board**, leading to a chain of problems

---

## 2️⃣ Major Issues Encountered

### 🔥 2.1 Compatibility Matrix Explosion

| Component | My Version | Required by TorchSparse |
|----------|------------|--------------------------|
| Python | 3.11 | ≤ 3.10 |
| PyTorch | 2.4.0 | 1.13.1 – 2.0.x |
| CUDA | 12.1 | 11.1 – 11.8 |
| GCC | 13.3.0 | CUDA 11.8 only supports up to GCC 11 |

So, out of the box, **nothing aligned** with what `torchsparse` expected.

---

### 🧱 2.2 Missing CUDA Headers

The compiler failed to locate:
- `cuda_runtime.h`
- `cuda_fp8.hpp`

Despite having `nvcc` in the path, it turned out that:
- My **system CUDA** was incorrectly linked
- **Conda environment CUDA paths** weren’t being picked up by the build system

I later found that `/usr/local/cuda/bin/nvcc` was actually a **symbolic link pointing into my conda environment**, which further confused everything.

---

### ⚠️ 2.3 CUDA + GCC Incompatibility

Even after manually setting `CUDA_HOME` and `CPATH`, I was still getting macro-related compile errors like:

```
missing binary operator before token "("
(__CUDA_ARCH_HAS_FEATURE__(SM100_ALL)) || ...
```

These errors came from `cuda_fp8.hpp`, and were related to the `__CUDA_ARCH_HAS_FEATURE__` macro not being defined.

Turns out: **GCC 13 is not supported by CUDA 11.8**, which `torchsparse` depends on.

---

## 🛠️ 3️⃣ What I Tried (and What Didn't Work)

### ✔️ I tried to patch the setup:
- Added `--allow-unsupported-compiler` to `setup.py`
- Manually created `cuda_patch.h` with missing macro definitions:
```c
#ifndef __CUDA_ARCH_HAS_FEATURE__
#define __CUDA_ARCH_HAS_FEATURE__(x) 0
#endif
```

### ✔️ Installed GCC 11 using conda:
```bash
conda install -c conda-forge gcc_linux-64=11 gxx_linux-64=11
```

### ✔️ Set all CUDA environment variables:
```bash
export CUDA_HOME=/home/user/miniconda3/envs/scenescript
export CUDACXX=$CUDA_HOME/bin/nvcc
export CPATH=$CUDA_HOME/include:$CUDA_HOME/targets/x86_64-linux/include
export TORCH_CUDA_ARCH_LIST="7.5"
```

### ✔️ Tried building directly from source:
```bash
pip install -v -e .
```

Still failed. Tried switching PyTorch versions, adding missing headers, using legacy CUDA... Nothing worked cleanly.

---

## ✅ 4️⃣ Final Working Solution: CPU-Only Mode

In the end, I **gave up on GPU support** and switched to CPU-only mode.

Here's how:

```bash
# Create compatible environment
conda create -n scenescript python=3.10 pytorch=2.0.0 pytorch-cuda=11.8 -c pytorch -c nvidia -y
conda activate scenescript

# Set CPU mode
export FORCE_CPU=1

# Install TorchSparse (CPU-only)
pip install git+https://github.com/mit-han-lab/torchsparse.git
```

This finally worked. It compiled the CPU backend only and skipped all CUDA files.

---

## 🤕 5️⃣ Summary of Pain Points

| Area | Problem |
|-------------------|-------------------------------------------------------------------------|
| Python version | Too new |
| PyTorch version | Incompatible with TorchSparse |
| CUDA version | Too new, unsupported by TorchSparse |
| GCC version | Too new for CUDA 11.8 |
| Header files | Missing CUDA headers, macro errors |
| Symbolic links | Confusion caused by `/usr/local/cuda/bin/nvcc` pointing to conda binary |
| Setup script | Needed multiple modifications + patch headers |
| Compilation | Dozens of failed attempts, long logs |

---

## 💬 6️⃣ Question to the Community

I’m now running TorchSparse in **CPU mode** just to get things going, but obviously I’d prefer GPU acceleration.

Has anyone found:
- A clean environment configuration that works out-of-the-box for **GPU-enabled TorchSparse**?
- A Dockerfile or prebuilt conda env that sets this up correctly?
- A way to use TorchSparse with newer CUDA (12.x) or PyTorch 2.1+?

Even partial success stories are welcome 🙏

---

## 📎 Notes & Tips for Others

- Try to match PyTorch and CUDA versions exactly as expected by the library
- Check GCC version compatibility if building from source
- Avoid mixing system and conda-level CUDA paths
- If all else fails, CPU mode **does work** for now

---

Thank you in advance to anyone who reads this or shares tips. I hope this post can also help others who are banging their head against this build setup like I was!

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.