GitHub-Vach数字人形象——windows部署项目部署记录
Hujiazeng/Vach: Real time streaming talking head (github.com)
参考教程
annaconda安装、conda配置镜像、conda安装、配置虚拟环境
【实时流式AI数字人技术分享 (环境部署篇)】——这个up留了好几手,实际是想让人找他代安装
一步步教学在 Windows 下面安装 pytorch3d 来部署 xuniren 这个项目 - 坤坤 - 博客园 (cnblogs.com)——最重要的教程,但是项目不同
MinGW-w64的安装详细步骤(c/c++的编译器gcc、g++的windows版,win10、win11真实可用)_windows安装c++编译器-CSDN博客并配置环境变量——重要的编译工具
VS2019的安装和使用(附2019和2022官方链接,附安装包)-CSDN博客——安装使用的编译环境Visual Studio2019/2022——官网——配置环境变量找不到 cl.exe 解决办法-CSDN博客(这里也有需要下载哪个文件)
安装cudatoolkit:CUDA Toolkit - Free Tools and Training | NVIDIA Developer——可以单独安装,也可以找本地的
CUDA12.1与11.8共存的主要问题 - 知乎 (zhihu.com)及nvcc --version和nvidia-smi显示的CUDA Version不一致问题——重要的不是安装了什么,而是现在调用了什么
pytorch安装:一个最新版本、另一个找老版本——对应即可
pytorch3d安装教程:教程1、教程2——各有优势——可以使用的pytorch3d的存在的对应版本查看
NeRF环境配置
Numpy的版本查看、降级(自定版本下载)_numpy官网上下载已经过期的版本-CSDN博客——numpy版本不兼容
C1189报错,需要改cuda的源代码。fatal error C1189: #error: -- unsupported Microsoft Visual Studio version!_fatal error c1189: #error: -- unsupported microsof-CSDN博客
简介
此项目为最简单的数字人形象,无LLM和ChatTTS接口,但是非常适于入门学习。
大体流程
配置环境-下载导入模型-运行
环境配置部分
软件下载
git
这玩意是个 工具,很好用,下载完了配置环境变量即可。git clone!!!!!!!!
conda
下载annaconda,并配置环境变量(如果在安装过程中选择了配置环境变量则会自动配置)。教程
VS
VS2019的安装和使用(附2019和2022官方链接,附安装包)-CSDN博客
安装VS下载工具,然后下载下图的MSVC组件和SDK组件,win10和win11相应下载即可,并将下载后存在的cl.exe、
需要配置的环境变量Path 不是Path
安装VS后还可能遇到C报错问题,如C1189,有个印象,到时候回来看即可
可以参照此文章。更改 C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v10.0\include\crt\host_config.h wen'j文件中的‘_MSC_VER >=’后边的值,根据自己x下载的VS版本改成不会报错的即可。
zhi'j直接改成1700 2000即可,不会报错。
MinGW
直接下载文件然后配置环境变量即可,也可以下载installer。
环境变量配置(不是path)
ninja
可能会需要吧ninja的环境变量加入,但是如果没有提示就不管了。下载后加入环境变量(不是path)即可。github位置:Release v1.12.1 · ninja-build/ninja (github.com)。此部分在下文编译安装NeRF时会提到。
CUDA
cuda安装可能会有多种,且现nvidia安装游戏驱动时可能会安装一个版本。当然也可以去直接下载cudatoolkit并配置环境变量。可能会有游戏驱动和自己下载的cuda同时存在的情况,这时你想用哪个,就把相应的版本放到环境变量(Path)里并把它上移到前边,系统就会提前调用。
nvcc --version #会调用的cuda
nvidia-smi #游戏驱动一起下载的cuda
以上命令可以用来jian'y检验是否安装成功。
以下为环境变量
其中有一个cub home,这个可以有也可以没有,是cuda V 11.3之前需要的东西。可以在github的右侧Releases下载。NVIDIA/cub: [ARCHIVED] Cooperative primitives for CUDA C++. See https://github.com/NVIDIA/ccclbing并配置变量。
如果以上软件和环境变量都弄好了,恭喜你,走完70%了,接下来就是在终端里操作了。
你已经下载好了VS 2022并配置好环境变量,能在“开始”内搜索到“x64 Native Tools command Prompt for VS 2022”这个终端了,这是一个编译器(说白了就是用来安装python原本安装不了的C++的一些库的)用这个编译器就能安装了NTR,右键!管理员运行!
虚拟环境创建及配置-主打的就是一个版本对应。
在安装过程中需要安装什么第三方库就安装即可。
当然可以先安装requirements.txt的库。即到requirements.txt所在文件夹内运行(在一个镜像内读取并下载requirements.txt内的第三方库):
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple -r requirements.txt
创建虚拟环境
在终端内输入以下创建虚拟环境,在“ ”内为你的环境名称,我的叫torch3d1,在AImodel文件夹里,所以如此显示。python版本选择此项目支持的,有时新版本不支持,例如本项目需要下载pytorch3d,其支持的python版本就那些,所以需要提前看看这个pytorch3d支持哪些版本(anaconda.org)。
例如我的cuda安装的是11.8,所以以此为出发点,找到cuda对应的版本(虽然是linux但是可以编译安装,不用在意)。发现这个pytorch最多支持pyt211(即2.11版,你可以先去看看下边pytorch的安装)所以就找对应的,我的cuda版本是11.8(cu118)所以就找对应的,发现python版本可以装3.10/3.11我之前有3.10,所以在此我就安装的3.10。此时可以记住相应的pytorch版本,后续会用。
在此处根据pytorch3d版本选择好了,后续目标就很明确。
conda create -n “这里输入你的虚拟环境名称” python=3.10
激活虚拟环境
conda activate XXXXXXX(你上边创建时候的虚拟环境名称)
现在你就有了一个虚拟环境,可以在这个虚拟环境随便造,弄坏了大不了直接删掉就行。
下载项目
看看自己的文件目录在哪儿。
进入自己的工作目录,下边的代码是终端的简单操作,cd就是进入文件夹,可以先输入文件夹名称的字母然后按Tab就能快速选择。
cd D:\AImodel\
D:
#tips : cd ..为进入上一文件夹
现在git下来这个叫Vach的项目,下载的位置就是上边你进入的位置。如果结构不好看,可以在pycharm里看结构,但是操作一定要在“x64 Native Tools command Prompt for VS 2022”里操作。
git clone https://github.com/Hujiazeng/Vach.git
下载好了以后,就可以开始安装其他拓展/库了。
安装其他拓展/库
rerequirements
下边的requirements是我后续总结的,加上了最后额外需要的库。
其中numpy需要装1.26.4版本。(要2.0.0以下)
pip install -U numpy==1.26.4
pytorch
PyTorch官网
首先就是pytorch了,虽然安装是先要安装pytorch,但是现在pytorch3d的选择相对少一些,所以只能下载现有pytorch3d支持的pytorch版本,所以我们就像上边创建环境时的python版本一样,先去看看现在pytorch3d有那些支持的pytroch版本。如果你在上边选择python时已经选好了,那就下载对应的pytorch即可。我在上边选好了,就是对应版本,我需要下载旧版本,因为新版本的pytorch没有相应的pytorch3d支持,但是我也会展示下载新版本的方法,不想看可以跳过。
新版本下载:去官网,下载你的系统、安装方式(一个不行换另一个,我用的Pip)、语言、cuda版本对应的选项,最后复制下边的command,在终端输入运行即可。例如我的:我想下载稳定版、我是win系统、conda我试过下不下来我就用的pip、我用的python语言、我cuda版本是11.8(用上边下载时候的nvcc -version命令看自己的运行的版本),就进行了如此选择。
重点来了,旧版本(支持的版本)的下载。如果你想下载之前的版本(你的cuda是老的)就点
去找对应的版本,但一定要一一对应。例如我选择的pytorch3d为下图:
则我需要找到cuda v11.8、python、win系统的 2.10版本的pytorch。如下图红框。
我试了试conda下载不下来,还是用的pip哈哈哈,不过都一样。
等待下载下来即可。并可通过以下代码查看是否安装成功,且是否在使用GPU版本的pytorch:
使用方法:创建一个.py文件,在终端里输入
python "文件名".py即可,我的叫pyttest.py,我就运行python pyttest.py(当然你得在这个文件所在的文件夹内运行)。
import torch
print(torch.cuda.is_available())
def main():
print("当前使用的 PyTorch 版本:", torch.__version__)
if __name__ == "__main__":
main()
if torch.cuda.is_available():
device = torch.device("cuda")
print("Using GPU:", torch.cuda.get_device_name(0))
else:
device = torch.device("cpu")
print("Using CPU")
pytorch3d
按照正常流程,pytorch下载完了才要看pytorch3d,但是之前我们已经确定了pytorch3d的版本,所以直接安装即可。
我是在conda里下载的(这个就能下载哈哈哈)下载之前要对应之前找的pytorch3d的信息,这个下载就是直接安装,不是用安装包编译安装(即运行setup.py)但是要把它搞到对的路径上。将以下几个版本信息对应好,直接在代码里改即可。
conda install https://anaconda.org/pytorch3d/pytorch3d/0.7.5/download/linux-64/pytorch3d-0.7.5-py310_cu118_pyt210.tar.bz2
安装完成如下图:
但是这个安装,会安装到环境的Lib里 ,我们要把它放到环境的Lib的python里,才能在python里使用。
你需要找到你虚拟环境的文件夹位置。
我的路径是这个
在里边找到以下路径其中会有安装的两个文件夹
把这两个文件夹复制到这里即可。
然后再终端里输入pip list,看看有没有pytorch3d这个包,也可以顺便看看有没有torch这个包。
显示这个就表示可以了。
编译安装NeRF拓展(freqencoder、raymarching、gridencoder、shencoder)
安装前可能遇到一些问题:
首先是不能从pkg_resources导入packaging,是由于setuptools的版本太新了,要降低版本。
python -m pip install setuptools==69.5.1
先让自己的终端处于以下两个状态(终端运行):
set DISTUTILS_USE_SDK=1
set PYTORCH3D_NO_NINJA=1
这四个都类似,找到他们,修改参数、运行setup程序即可。
位置在\Vach\talkers\er_nerf内,分别进入freqencoder、raymarching、gridencoder、shencoder四个文件夹,运行setup.py 即
python setup.py install
如果直接运行setup会出现此报错,
原因是这个setup里先调用的是C++14,我们把这个注释掉。同时将最后的Bulid(编译安装相关的命令)加上新的参数:.with_options(use_ninja=False)即可。此处就是之前提到的ninja是否安装的问题。如下图:
安装完成后如下图:不同文件安装就是不同名称而已,都是0.0.0。
下载并导入模型
模型使用此项目提供的奥巴马模型。下载地址。
下载后解压放到相应文件夹即可,文件夹路径:
\Vach\talkers\er_nerf\data
保证和此结构一致
其中下载的模型文件夹的名称要命名为obama,如果你想换成自己的模型,后续进行变量名称修改即可。
运行
现在虽然到了运行部分,但是还可能遇到问题。最常见的是一些python第三方库的安装。
不过运行就完事!!!!安装啥包都会提醒。
如果提示numpy版本要小于2.0.0,则安装一个老的就行。代码如下。
pip install -U numpy==1.26.4
hai还可能进不去huggingface,可以关梯子试试,或者整个镜像
set HF_ENDPOINT=https://hf-mirror.com
https://blog.csdn.net/s1156605343/article/details/104730637
结语
本次部署最大的坑是,我同时两个项目穿插部署,其中freqencoder、raymarching、gridencoder、shencoder虽然叫的一样,但是其中的参数类型和数量都存在不同,所以要根据每个项目作者会自己更改,虽然我们也可以更改源代码,但是为了避免不必要的麻烦,还是老实安装对应的即可。下图为两个项目源代码的不同。导致参数不同。
如下为需要的参数类型:基于错误信息,你需要检查grid_encode_forward的调用,确保参数满足以下要求:
第1到第4个参数是torch.Tensor类型。
第5到第9个参数是int类型。
第10个参数是float类型。
第11个参数是Optional[torch.Tensor],意味着它可以是torch.Tensor类型或者None。
第12个参数是int类型。
第13个参数是bool类型。
第14个参数是int类型。
如下为相应的打印的参数类型:inputs <class 'torch.Tensor'>
embeddings <class 'torch.nn.parameter.Parameter'>
offsets <class 'torch.Tensor'>
outputs <class 'torch.Tensor'>
B <class 'int'>
D <class 'int'>
C <class 'int'>
L <class 'int'>
S <class 'numpy.float64'>
H <class 'int'>
dy_dx <class 'NoneType'>
gridtype <class 'int'>
align_corners <class 'bool'>