Show HN:在 Apple Silicon 上原生运行 TRELLIS.2 图像转3D生成模型

Hacker News Top 工具

摘要

社区移植版:微软 TRELLIS.2 图像转3D生成模型可在 Apple Silicon Mac 上通过 PyTorch MPS 原生运行,无需 NVIDIA GPU,在 M4 Pro 上约 3.5 分钟即可生成含 40 万以上顶点的高质量 3D 网格。

我将微软的 TRELLIS.2(40亿参数图像转3D模型)移植到了 Apple Silicon,通过 PyTorch MPS 运行。原始版本需要支持 CUDA 的环境,依赖 flash_attn、nvdiffrast 以及自定义稀疏卷积内核——这些在 Mac 上均无法使用。 我替换了 CUDA 专用操作,采用了纯 PyTorch 的替代方案:一种 gather-scatter 稀疏 3D 卷积、用于稀疏 Transformer 的 SDPA 注意力机制,以及基于 Python 的网格提取(取代了 CUDA 哈希映射操作)。总修改量涉及 9 个文件,共几百行代码。 在 M4 Pro(24GB)上,从单张照片生成约 40 万个顶点的网格只需大约 3.5 分钟。虽然不如 H100(只需几秒)快,但可以离线运行,无需依赖云服务。 <a href="https://github.com/shivampkumar/trellis-mac" rel="nofollow">https://github.com/shivampkumar/trellis-mac</a>
查看原文
查看缓存全文

缓存时间: 2026/04/20 14:44

shivampkumar/trellis-mac

Source: https://github.com/shivampkumar/trellis-mac

TRELLIS.2 在 Apple Silicon 上运行

在 Mac 上原生运行 TRELLIS.2(https://github.com/microsoft/TRELLIS)图像到 3D 生成。
这是微软 TRELLIS.2 的移植版本——一个最先进的图像到 3D 模型——从仅支持 CUDA 迁移到基于 PyTorch MPS 的 Apple Silicon。
无需 NVIDIA GPU。

效果

从单张图像生成 40 万以上顶点网格,在 M4 Pro 上约 3.5 分钟
输出包括带纹理的 OBJ 和 GLB 文件(含 PBR 材质),可直接用于 3D 应用。

示例(最近邻采样,三线性插值尚在开发中)

输入生成的 3D 网格(42.4 万顶点,85.8 万三角形)

系统要求

  • macOS Apple Silicon(M1 及以上)
  • Python 3.11+
  • 建议 24GB 以上统一内存(4B 模型较大)
  • 约 15GB 磁盘空间用于模型权重(首次运行时下载)

快速开始

# 克隆此仓库  
git clone https://github.com/shivampkumar/trellis-mac.git  
cd trellis-mac  

# 登录 HuggingFace(需要获取受限模型权重)  
hf auth login  

# 申请访问以下受限模型(通常即时批准):  
# https://huggingface.co/facebook/dinov3-vitl16-pretrain-lvd1689m  
# https://huggingface.co/briaai/RMBG-2.0  

# 运行安装脚本(创建虚拟环境、安装依赖、克隆并修补 TRELLIS.2)  
bash setup.sh  

# 激活环境  
source .venv/bin/activate  

# 从图像生成 3D 模型  
python generate.py 图片路径/图片.png  

输出文件保存到当前目录(或使用 --output 指定路径)。

使用方法

# 基本用法  
python generate.py photo.png  

# 带选项  
python generate.py photo.png --seed 123 --output my_model --pipeline-type 512  

# 查看所有选项  
python generate.py --help  
选项默认值说明
--seed42生成随机种子
--outputoutput_3d输出文件名(不含扩展名)
--pipeline-type512管线分辨率:51210241024_cascade

移植内容

TRELLIS.2 依赖多个仅 CUDA 的库。此移植用纯 PyTorch 和纯 Python 替代方案替换它们:

原始 (CUDA)替换方案用途
flex_gemmbackends/conv_none.py通过 gather-scatter 实现稀疏 3D 卷积
o_voxel._C 哈希表backends/mesh_extract.py从双体素网格中提取网格
flash_attnPyTorch SDPA稀疏 Transformer 的缩放点积注意力
cumesh桩代码(优雅跳过)补洞、网格简化
nvdiffrast桩代码可微分光栅化(纹理导出)

此外,代码库中所有硬编码的 .cuda() 调用都被修改为使用当前设备。

技术细节

稀疏 3D 卷积backends/conv_none.py):通过构建活跃体素的空间哈希,收集每个核位置的邻居特征,通过矩阵乘法应用权重,并将结果 scatter-add 回去,实现子流形稀疏卷积。每个张量的邻居映射会被缓存以避免重复计算。

网格提取backends/mesh_extract.py):使用 Python 字典替代 CUDA 哈希表操作,重新实现 flexible_dual_grid_to_mesh。构建坐标到索引的查找表,找到每条边上的连通体素,并使用法线对齐启发式方法对四边形进行三角剖分。

注意力(修补的 full_attn.py):为稀疏注意力模块添加 SDPA 后端。将变长序列填充成批次,运行 torch.nn.functional.scaled_dot_product_attention,然后取消填充。

性能

在 M4 Pro(24GB)上的基准测试,管线类型 512

阶段时间
模型加载约 45 秒
图像预处理约 5 秒
稀疏结构采样约 15 秒
Shape SLat 采样约 90 秒
Texture SLat 采样约 50 秒
网格解码约 30 秒
总计约 3.5 分钟

生成过程中内存使用峰值约为 18GB 统一内存。

限制

  • 无纹理导出:纹理烘焙需要 nvdiffrast(仅 CUDA 的可微分光栅化器)。网格仅导出顶点颜色。
  • 补洞功能禁用:网格补洞需要 cumesh(CUDA)。网格可能存在小孔。
  • 比 CUDA 慢:纯 PyTorch 稀疏卷积比 CUDA flex_gemm 内核慢约 10 倍。这是主要瓶颈。
  • 不支持训练:仅推理。

许可证

本仓库中的移植代码(backends、patches、scripts)采用 MIT 许可证发布。上游模型权重受其各自许可证约束:

  • TRELLIS.2:MIT 许可证(https://github.com/microsoft/TRELLIS.2/blob/main/LICENSE)
  • DINOv3:Meta 自定义许可证(https://huggingface.co/facebook/dinov3-vitl16-pretrain-lvd1689m/blob/main/LICENSE.md)(受限模型,商用前请审核)
  • RMBG-2.0:CC BY-NC 4.0(https://huggingface.co/briaai/RMBG-2.0)(非商业用途;商业用途需向 BRIA 取得许可)

致谢

  • TRELLIS.2(https://github.com/microsoft/TRELLIS.2)by Microsoft Research —— 原始模型与代码库
  • DINOv3(https://github.com/facebookresearch/dinov3)by Meta —— 图像特征提取
  • RMBG-2.0(https://github.com/Bria-AI/RMBG-2.0)by BRIA AI —— 背景去除

相似文章