Show HN:在 Apple Silicon 上原生运行 TRELLIS.2 图像转3D生成模型
摘要
社区移植版:微软 TRELLIS.2 图像转3D生成模型可在 Apple Silicon Mac 上通过 PyTorch MPS 原生运行,无需 NVIDIA GPU,在 M4 Pro 上约 3.5 分钟即可生成含 40 万以上顶点的高质量 3D 网格。
查看缓存全文
缓存时间: 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
| 选项 | 默认值 | 说明 |
|---|---|---|
--seed | 42 | 生成随机种子 |
--output | output_3d | 输出文件名(不含扩展名) |
--pipeline-type | 512 | 管线分辨率:512、1024、1024_cascade |
移植内容
TRELLIS.2 依赖多个仅 CUDA 的库。此移植用纯 PyTorch 和纯 Python 替代方案替换它们:
| 原始 (CUDA) | 替换方案 | 用途 |
|---|---|---|
flex_gemm | backends/conv_none.py | 通过 gather-scatter 实现稀疏 3D 卷积 |
o_voxel._C 哈希表 | backends/mesh_extract.py | 从双体素网格中提取网格 |
flash_attn | PyTorch 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 —— 背景去除
相似文章
TRELLIS.2 图像转3D 现已可在Mac(Apple Silicon)上运行 - 无需NVIDIA GPU
一位开发者将微软的TRELLIS.2图像转3D模型移植到Apple Silicon Mac上运行,通过用PyTorch MPS等价物替换仅CUDA依赖项,实现了无需NVIDIA GPU的离线3D网格生成。
本地图像转3D(<2GB内存,<20秒,Apple Silicon,iPhone)
一种新模型可在Apple Silicon设备和iPhone上本地从单张图像生成3D模型,内存占用低于2GB,耗时不到20秒。
@PyTorch:ExecuTorch 现有一个 MLX 委托,可在 Apple Silicon GPU 上运行 PyTorch 模型。它支持大语言模型、语音转文字、以及……
ExecuTorch 现有一个 MLX 委托,可在 Apple Silicon Mac 上为 PyTorch 模型提供 GPU 加速推理,支持大语言模型、语音转文字以及通过 TorchAO 进行量化的 MoE 模型。
BaseRT:通过原生Metal在Apple Silicon上实现最佳LLM推理
BaseRT是一个专为Apple Silicon上的LLM构建的原生Metal推理运行时,在测试模型上,其解码吞吐量比llama.cpp高出1.56倍,比MLX高出1.35倍。
Unsloth 登陆 Apple Silicon - 预公告
Unsloth,一款流行的 LLM 微调库,宣布即将支持 Apple Silicon 设备,将其优化能力扩展至 NVIDIA GPU 之外。