SAM2本地编译部署
记录一下本地部署SAM2遇到的坑和解决办法;
硬件信息:Windows11、4060笔记本
本地部署运行的是small权重模型
默认Pycharm、Anaconda已安装好
一、下载安装VS2022
二、下载CUDA12.1并安装
https://developer.nvidia.com/cuda-12-1-0-download-archive?target_os=Windows&target_arch=x86_64&target_version=11&target_type=exe_local
三、创建conda虚拟环境,安装/升级python到3.10
conda create -n sam2
conda activate sam2
conda install python=3.10.14
四、安装CUDA12.1对应版本的Pytorch 2.3.1等
conda install pytorch==2.3.1 torchvision==0.18.1 torchaudio==2.3.1 pytorch-cuda=12.1 -c pytorch -c nvidia
五、此时使用编译SAM2会失败
修改两点内容
1.修改源码中setup.py中如下内容,新增一行 “-allow-unsupported-compiler”
"nvcc": [
"-DCUDA_HAS_FP16=1",
"-D__CUDA_NO_HALF_OPERATORS__",
"-D__CUDA_NO_HALF_CONVERSIONS__",
"-D__CUDA_NO_HALF2_OPERATORS__",
"-allow-unsupported-compiler" # Add this argument #这一行新增
],
2.修改VS2022文件夹中的\Microsoft Visual Studio\2022\Community\VC\Tools\MSVC\14.41.34120\include\yvals_core.h 文件内容
#if defined(__CUDACC__) && defined(__CUDACC_VER_MAJOR__)
#if __CUDACC_VER_MAJOR__ < 12 || (__CUDACC_VER_MAJOR__ == 12 && __CUDACC_VER_MINOR__ < 4)
_EMIT_STL_ERROR(STL1002, "Unexpected compiler version, expected CUDA 12.4 or newer.");
#endif
<4 改为 <1
#if defined(CUDACC) && defined(CUDACC_VER_MAJOR)
#if __CUDACC_VER_MAJOR__ < 12 || (__CUDACC_VER_MAJOR__ == 12 && __CUDACC_VER_MINOR__ < 1)
_EMIT_STL_ERROR(STL1002, “Unexpected compiler version, expected CUDA 12.4 or newer.”);
#endif
六、编译SAM2
在SAM2源码文件夹编译SAM2
pip install --no-build-isolation -e .
编译过程中会自动安装所需安装包,如果安装失败,则进入conda环境自己换源安装