Trellis 2 Successfully Running on ROCm 7.11 with AMD RX 9070 XT

Getting Trellis 2 Running on AMD Hardware
A developer has successfully run Trellis 2 on an AMD RX 9070 XT GPU using ROCm 7.11 on Linux Mint 22.3. This addresses common issues where users encountered geometry cutoff, preview failures, and other errors when attempting to run Trellis 2 on AMD hardware.
Key Issues and Solutions
The developer identified two main problems that were causing most failures:
1. ROCm Instability with High N Tensors
ROCm operations become unstable with large tensors, causing overflows or NaN values. The original code in linear.py in the sparse folder used:
def forward(self, input: VarLenTensor) -> VarLenTensor:
return input.replace(super().forward(input.feats))The fix implements chunked processing to avoid ROCm issues:
ROCM_SAFE_CHUNK = 524_288
def rocm_safe_linear(feats: torch.Tensor, weight: torch.Tensor, bias=None) -> torch.Tensor:
"""F.linear with ROCm large-N chunking workaround."""
N = feats.shape[0]
if N <= ROCM_SAFE_CHUNK:
return F.linear(feats, weight, bias)
out = torch.empty(N, weight.shape[0], device=feats.device, dtype=feats.dtype)
for s in range(0, N, ROCM_SAFE_CHUNK):
e = min(s + ROCM_SAFE_CHUNK, N)
out[s:e] = F.linear(feats[s:e], weight, bias)
return out
def forward(self, input):
feats = input.feats if hasattr(input, 'feats') else input
out = rocm_safe_linear(feats, self.weight, self.bias)
if hasattr(input, 'replace'):
return input.replace(out)
return out
2. Broken hipMemcpy2D in CuMesh
The hipMemcpy2D function in CuMesh was causing vertices and faces to drop off or become corrupted. The original CuMesh initialization used:
void CuMesh::init(const torch::Tensor& vertices, const torch::Tensor& faces) {
size_t num_vertices = vertices.size(0);
size_t num_faces = faces.size(0);
this->vertices.resize(num_vertices);
this->faces.resize(num_faces);
CUDA_CHECK(cudaMemcpy2D(
this->vertices.ptr,
sizeof(float3),
vertices.data_ptr(),
sizeof(float) * 3,
sizeof(float) * 3,
num_vertices,
cudaMemcpyDeviceToDevice
));
...
} The fix replaces the 2D copy with a 1D version:
CUDA_CHECK(cudaMemcpy(
this->vertices.ptr,
vertices.data_ptr(),
num_vertices * sizeof(float3),
cudaMemcpyDeviceToDevice
)); Results and Performance
With these fixes, the developer successfully got the image-to-3D pipeline working, including preview rendering (without normals) and final GLB export. On a test image with 21,204 tokens, the process took approximately 280 seconds from start to preview generation. The run used 1024 resolution with all samplers set to 20 steps.
📖 Read the full source: r/LocalLLaMA
👀 See Also

How OpenCLAW Memory Actually Works: Fixing Agent 'Forgetting'
OpenCLAW agents don't have persistent memory between conversations - they reconstruct context from files like SOUL.md, USER.md, and MEMORY.md each time. Common 'forgetting' issues stem from old sessions, unstructured memory files, and storing important info in chat history instead of permanent files.

Building API endpoints with Claude: Practical prompt engineering lessons from a 70+ endpoint project
A developer built 70+ LinkedIn automation API endpoints with Claude writing 80% of the code, discovering that treating prompts like contracts with explicit constraints works better than natural language instructions for action-taking agents.

iOS Developer Shares Claude Code Best Practices After Shipping Multiple Apps
An iOS developer with cybersecurity background outlines specific practices for using Claude Code effectively, including environment separation, observability setup, and avoiding technical debt accumulation.

OpenClaw Mega Cheatsheet: Your Gateway to AI Coding Mastery
Dive into the OpenClaw Mega Cheatsheet from r/openclaw—a comprehensive guide packed with essential tips for AI coding and automation enthusiasts.