本文详细记录了作者在Windows环境下自编译安装Pytorch3D库(支持GPU)的完整过程,分享了安装中遇到的各种问题及解决方法。作者首先指出使用conda安装Linux打包的Pytorch3D在Windows下无法使用,随后解决了显卡支持问题,通过设置CUDA_HOME和FORCE_CUDA=1消除了RuntimeError: Not compiled with GPU support错误。文章列出了安装所需的基本条件(Python 3.10、PyTorch 2.4.0、gcc & g++ ≥ 4.9),并提供了安装PyTorch、VS2022以及从GitHub下载Pytorch3D源码的步骤。为应对国内网络问题,作者还分享了蓝奏云网盘链接。编译过程中,配置Visual Studio环境变量尤为关键,最终通过测试代码验证了Pytorch3D的安装成功及GPU支持。作者最后感慨,虽然Windows环境下折腾较多,但也锻炼了技术能力。
踩坑1
在anaconda.org里下载的压缩包然后使用conda进行安装在win10下是可以安装成功的,但是不能被使用,实际原因是这是基于Linux打包的,根本不适用windows。

踩坑2
关于显卡支持的事。第一次安装根据教程之后运行代码出现RuntimeError: Not compiled with GPU support.
于是找了找教程,发现很多人都说的不一样,不过设置了了环境变量CUDA_HOME以及FORCE_CUDA=1成功解决问题。
Pytorch3d基本条件
Python 3.10
PyTorch 2.4.0
gcc & g++ ≥ 4.9

安装PyTorch
可以使用miniconda或者anaconda新建一个环境,例如tt:
conda create -n tt python=3.10
conda activate tt然后安装Pytorch2.4+CUDA12.1:
conda install pytorch==2.4.0 torchvision==0.19.0 torchaudio==2.4.0 pytorch-cuda=12.1 -c pytorch -c nvidia安装VS2022
去VS官网下载安装即可:Visual Studio 2022 - 官网

安装的时候勾选“使用C++的桌面开发”即可。

安装完成后会有这些东西:

下载Pytorch3d
在Pytorch3d的Github上下载ZIP即可。由于国内的网络环境不稳定,这里我提供了完整的压缩包的蓝奏云网盘链接:

我下载到了D盘进行解压,得到下面的路径:

注意:新版本的pytorch3d不用修改作者的代码,要不然一直编译不出来。
编译Pytorch3d

搜索x64 Native Tools Command Prompt

首先进入pytorch目录下:
cd D:\pytorch3d-github\pytorch3d-main先配置visual studio环境变量:
set DISTUTILS_USE_SDK=1
set MSSdk=1
set FORCE_CUDA=1tips:FORCE_CUDA=1是为了防止出现RuntimeError: Not compiled with GPU support.,不过前提是你已经成功安装了CUDA并且设置了CUDA_HOME系统变量。这些都是安装GPU驱动以及Pytorch-GPU版本的前戏操作,这里我就不再赘述。

然后使用虚拟环境里的python进行安装:
D:\miniconda3\envs\tt\python.exe setup.py install(图片里漏了FORCE_CUDA)
然后就是等待了,完成安装后显示如下:

编译好了可以用conda的命令框检查环境里面有没有这个包:
conda list pytorch3d
这时已经成果安装了pytorch3d。
验证pytorch3d
为了验证你的pytorch3d以及GPU是否可用,下面给了一个测试代码:
import torch
import matplotlib.pyplot as plt
from pytorch3d.structures import Meshes
from pytorch3d.utils import ico_sphere
from pytorch3d.renderer import (
FoVPerspectiveCameras,
RasterizationSettings,
MeshRenderer,
MeshRasterizer,
SoftPhongShader,
PointLights,
TexturesVertex,
look_at_view_transform,
)
# 设置设备
device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu")
print(f"Using device: {device}")
# 创建单位球体网格
mesh = ico_sphere(level=3, device=device) # 细节更高
verts_rgb = torch.ones_like(mesh.verts_packed())[None] * 0.5 # 灰色
textures = TexturesVertex(verts_features=verts_rgb.to(device))
mesh.textures = textures
# 设置摄像头视角(距离 2.7,朝向原点)
R, T = look_at_view_transform(dist=2.7, elev=10.0, azim=45.0)
cameras = FoVPerspectiveCameras(device=device, R=R, T=T)
# 设置光源(从侧上方照射)
lights = PointLights(device=device, location=[[2.0, 2.0, 2.0]])
# 光栅化设置
raster_settings = RasterizationSettings(
image_size=512,
blur_radius=0.0,
faces_per_pixel=1,
)
# 创建渲染器
renderer = MeshRenderer(
rasterizer=MeshRasterizer(
cameras=cameras,
raster_settings=raster_settings,
),
shader=SoftPhongShader(
device=device,
cameras=cameras,
lights=lights,
)
)
# 渲染图像
images = renderer(mesh)
# 显示图像
plt.figure(figsize=(6, 6))
plt.imshow(images[0, ..., :3].cpu().numpy())
plt.title("Rendered 3D Sphere")
plt.axis("off")
plt.show()运行结果:Using device: cuda:0

一点感受
其实搞深度学习开发很多时候Ubuntu之类的环境可能更加合适,Windows虽然大部分时候都能满足使用,但是有时候比较费技术也比较花时间去折腾。
不过既然都选择搞技术了,折腾点也没啥,就当练技术了。