简介
在做毕设的过程中,碰到了sklearm的svm过慢的问题,因为sklearm的svm无法支持多线程,甚至只能调用一个核心,因此上网学习有无更快的svm库,直到我找到了thundersvm,开启了一条安装的不归路。。。。。。。
初期
一开始安装时,直接使用
pip install thundersvm
确实能安装成功,但是无法import,一import就报错,报错如下
>>> import thundersvm
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Anaconda3\envs\test2\lib\site-packages\thundersvm\__init__.py", line 10, in <module>
from .thundersvm import *
File "C:\Anaconda3\envs\test2\lib\site-packages\thundersvm\thundersvm.py", line 52, in <module>
raise FileNotFoundError("Please build the library first!")
FileNotFoundError: Please build the library first!
原因是没有生成对应的thundersvm的库lib,而生成这个库lib才是折磨人的事情
开始
- 先从github上(https://github.com/Xtra-Computing/thundersvm)将压缩包下载下来。
并且解压缩到一个文件夹中,文件夹取名为thundersvm - 需要先安装好CUDA,怎么安装的就不教了,网上很多教程
- 安装cmake,版本最好是3.27左右,如果报错了,可以尝试换更高或者更低的版本,下载地址:Index of /files (cmake.org)
- 最后是下载visual studio,看别人的博客有vs2017的,2016的,这里我使用的是vs2019,重点来了,在安装vs时需要勾选以下内容,不然后面安装thundersvm时会报错(折磨了我三天,吐了)
做完后记得重启一下。参考博客这才是完美的答案--解决CMake时“could not find any instance of Visual Studio”的问题_could not find any instance of visual studio.-CSDN博客
- 安装完之后,在之前解压缩的thundersvm文件夹中创建一个名字为build的文件夹,进入该build文件夹后运行如下命令:cmake .. -DBUILD_SHARED_LIBS=TRUE -G"Visual Studio 16 2019" -A x64,若运行成功则有下图
若不成功可以多换几个命令尝试下。参考博客:CMake Error: Could not create named generator Visual Studio 17 2022 win32-CSDN博客
- 到这一步恭喜你成功一半了,因为你已经生成了最重要的thundersvm.sln解决方案,此时在建立的build文件夹中,应该会有thundersvm.sln的文件,双击它用vs2019打开,并点击vs上方的生成->生成解决方案
- 到这已经快接近尾声了,此时thundersvm所要的库已经准备好了。接下类首先使用anaconda,先激活你要安装的虚拟环境,并进入thundersvm文件夹下的python,运行以下代码(最好用管理员打开)
python setup.py install
-
如果到这,基本大多数人都结束了,你可以激活环境,import thundersvm试一下了。但是有些人还是显示还有个特别恶心人的一个点,在python3.8版本以上的,调用会报以下错误
原因是这段程序放在python3.6环境中运行是没有问题的,但是python3.8环境中会报错。具体原因在于python3.8变更了Windows下动态链接库(DLL)的加载规则。新的规则提高了安全性,默认情况下仅能从可信的位置加载DLL依赖,一定程度上比避免诸如DLL劫持之类的安全风险。参考博客:Win10中Python3.8调用动态链接库时报错:FileNotFoundError: Could not find module解决方案_try using the full path with constructor syntax.-CSDN博客于是加上了以上的代码:
from ctypes import CDLL import os dll_path = r"d:\\Anaconda3\\envs\\pytorch\\lib\\site-packages\\thundersvm-0.3.4-py3.9.egg\\thundersvm\\thundersvm.dll" # 替换为实际的 DLL 文件路 tem = CDLL(dll_path, winmode=0)
最后再import就成功了。
历时三天,真的快累死了,。。。。。。。。。。。。。。。。。。
以下是参考的博客:
【工具配置】【Windows】【cmake】安装thundersvm,GPU_thundersvm使用-CSDN博客
Windows10下 GPU版本的thundersvm的安装经验-CSDN博客
CMake Error: Could not create named generator Visual Studio 17 2022 win32-CSDN博客
CMake Error: Could not create named generator Visual Studio 16 2019解决方法-CSDN博客