Linux基于thundersvm使用GPU对svm进行加速

Linux基于thundersvm使用GPU对svm进行加速

文章目录

  • Linux基于thundersvm使用GPU对svm进行加速
    • 下载方法
      • pip快速下载
        • 命令
      • 普通下载
        • 命令
        • 问题
        • 解决方法
          • 以下操作需要使用sudo权限
    • 使用thundersvm
      • 调用方式
    • 在代码中的使用
      • 训练代码更改
        • 更改内容
      • 加载模型同样需要导入thundersvm
        • 更改内容

下载方法

thundersvm—github

pip快速下载

使用pip install快速下载方式只适用于Linux的CUDA 9.0的情况

命令

pip install thundersvmpip install thundersvm-cu90-0.2.0-py3-none-linux_x86_64.whl

该wheel文件可以从thundersvm的GitHub上进行获取

image-20230629131036943

如果Linux的cuda版本不是9.0那么要使用下面的普通下载方式

普通下载

普通下载是通过git clone原项目然后在项目中进行构建的方式进行

命令

git clone https://github.com/Xtra-Computing/thundersvm.git

进入项目,构建cmake

cd thundersvm
mkdir build && cd build && cmake .. && make -j

问题

最常见的问题应该是关于 libthundersvm.so的问题

在执行上述buildmake j构建的过程中还可能会遇到一些包缺失**(比如cmake和libcurl3)**的问题

在我的情况下使用apt install安装cmake是会出现问题的,所以使用了snap

解决方法

以下操作需要使用sudo权限

首先安装libcurl3

sudo apt install libcurl3

image-20230629132446588

使用 sudo snap install cmake --classic 进行cmake的下载

image-20230629132532388

进入thundersvm刚刚创建的build目录,执行 sudo make install进行cmake的构建

image-20230629131837783

然后在程序的执行路径中导入thundersvm的路径,就可以使用了

具体使用方法如下

使用thundersvm

我使用的是thundersvm中的SVC函数

进入thundersvm项目根目录,会发现其下有一个python目录,这就是python下thundersvm的源码存放位置,要调用的thundersvm中的函数也都在这里实现

而我们要做的也就是调用该python脚本中函数

image-20230629132922133

可以看到thundersvm除了支持python之外还支持MATLAB和R语言,根据语言的函数调用方式可以进行调用然后使用GPU进行加速,实现的都是svm算法

image-20230629133011969

image-20230629133020407

接下来就是在程序中调用python目录下thundersvm目录中的thundersvm脚本

image-20230629133225019

调用方式

在代码中使用sys库引入该文件的执行路径(按道理来说cmake构建好了之后thundersvm就会添加到程序的执行路径中,然后直接import thundersvm就可以使用了,但是我在使用的时候没有识别到)

import sys
sys.path.append("thundersvm脚本的路径(建议使用绝对路径,省心)")

image-20230629133454243

将该执行路径添加之后,可以使用查看该程序中的执行路径

print(sys.path)

image-20230629133653410

可以看到我再进行cmake构建之后,thundersvm的执行路径并没有被检测到,所以需要手动添加

添加之后就可以引入thundersvm库,如果import成功即可以使用,即大功告成

import thundersvm
或
from thundersvm import SVC

这两个都一样

image-20230629133913446

看到可以使用之后就成功了,之后可以调用该库中的函数

在代码中的使用

训练代码更改

在代码中的使用非常简单, 只需要替换掉原先使用的svm函数即可

例如我要是用SVC函数进行模型的训练

之前的定义如下

from sklearn import svm
...
svc = svm.SVC(max_iter=96000, verbose=True)

更改内容

现在的定义如下

from thundersvm import SVC
...
svc = SVC(max_iter=96000, verbose=True)

即可

加载模型同样需要导入thundersvm

在使用joblib库对模型导出, 要放到混淆矩阵中进行模型性能评估时

例如如下过程将模型放到混淆矩阵中进行指标评测

import joblibjoblib.dump(model, "model.joblib") # 这里的.joblib后缀可以不加,即使不加导出的文件的类型也不会变化,但是加了可以增加识别度,让人一看就能看出来这是一个模型文件model = joblib.load('model.joblib')# 混淆矩阵
conf_mat = confusion_matrix(list(y_test), list(y_pred), labels=labels)accuracy = accuracy_score(y_test, y_pred)
precision= precision_score(y_test, y_pred)
recall = recall_score(y_test, y_pred)
f1_score = f1_score(y_test, y_pred)

如果该模型是使用thundersvm训练出来的, 那么在加载的时候也需要thundersvm

因为 ThunderSVM 使用了自己的模型格式和内部实现,与其他 SVM 库(如 scikit-learn)的模型格式不兼容, 在加载模型时,需要使用 ThunderSVM 库解析和还原模型的参数以及使用相应的算法进行预测。

更改内容

所以上述代码应该添加thundersvm的库引入, 只需添加如下代码:

import sys
sys.path.append("thundersvm/python/thundersvm") #这里根据自己的路径进行更改from thundersvm import SVC
...

即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/4808.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Flutter 组件(二)文本 与 输入框组件

Flutter开发笔记 Flutter 组件(二)文本 与 输入框组件 - 文章信息 - Author: Jack Lee (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChineAddress of this article:https://blog.csdn.net/qq_28550263/art…

QT学习笔记4--自定义信号的槽

逻辑&#xff1a;下课后&#xff0c;老师饿了&#xff0c;学生请吃饭。 使用connect函数连接自定义的信号和槽函数。 创建类 信号 #ifndef TEACHER_H #define TEACHER_H#include <QObject>class teacher : public QObject {Q_OBJECT public:explicit teacher(QObjec…

【网络管理发展】网络杂谈(12)之网络管理未来发展趋势

涉及知识点 网络管理未来的发展方向&#xff0c;网络管理未来的发展趋势&#xff0c;个人闲谈网络管理未来发展&#xff0c;网络管理技术现状&#xff0c;应用服务供应商&#xff08;ASP&#xff09;&#xff0c;网络的远程管理&#xff0c;人工智能与未来。 原创于&#xff1…

爬虫工具-替换js文件ReRes插件/Gores插件

目录 一、ReRes插件二、Gores插件 一、ReRes插件 用途&#xff1a;爬虫逆向过程中一些文件需要替换时 ① 原始网站js文件有无限debugger&#xff0c;复制原始网站js文件&#xff0c;删掉无限debugger相关代码保存为新的js文件&#xff1b;用ReRes插件进行替换② 原始网站js文件…

【分布式存储】聊聊共识和一致性

在分布式存储系统中&#xff0c;对于提高性能、可用性、可拓展性来说都有相关机制可以保证&#xff0c;比如复制、切片等&#xff0c;但是一旦涉及到分布式系统中选主的问题&#xff0c;就比较难&#xff0c;因为网络是不可靠的&#xff0c;并且可能还有拜占庭将军问题。所以如…

线程安全的集合类

目录 一、线程安全的集合类 1.1、多线程环境下使用ArrayList 1.2、多线程使用队列 1.3、多线程环境使用哈希表 1.3.1、Hashtable 1.3.2、ConcurrentHashMap 一、线程安全的集合类 在多线程的环境下&#xff0c;多个线程对同一个共享变量进行写操作的时候&#xff0c;有可…

chatGPT流式回复是怎么实现的

chatGPT流式回复是怎么实现的 先说结论&#xff1a; chatGPT的流式回复用的就是HTTP请求方案中的server-send-event流式接口&#xff0c;也就是服务端向客户端推流数据。 那eventStream流式接口怎么实现呢&#xff0c;下面就进入正题&#xff01; 文章目录 chatGPT流式回复…

【NVIDIA】Jetson AGX Orin内核、设备树更新指南

博主未授权任何人或组织机构转载博主任何原创文章&#xff0c;感谢各位对原创的支持&#xff01; 博主链接 本人就职于国际知名终端厂商&#xff0c;负责modem芯片研发。 在5G早期负责终端数据业务层、核心网相关的开发工作&#xff0c;目前牵头6G算力网络技术标准研究。 博客…

redis-单节点安装

daemonize yes port 6379 bind 0.0.0.0 requirepass 123456 save 3600 1 300 100 60 10000dir /usr/local/redis dbfilename dump.rdb logfile redis.log pidfile redis.pid##save 3600 1 300 100 60 10000 ##3600秒(一小时),至少有一个值的话,会进行存盘 ##300秒(五分钟),至少…

Java版企业工程项目管理系统源码+java版本+项目模块功能清单+spring cloud +spring boot

工程项目各模块及其功能点清单 一、系统管理 1、数据字典&#xff1a;实现对数据字典标签的增删改查操作 2、编码管理&#xff1a;实现对系统编码的增删改查操作 3、用户管理&#xff1a;管理和查看用户角色 4、菜单管理&#xff1a;实现对系统菜单的增删改查操…

macOS上下载安装Kibana并连接ES

下载Kibana 执行以下命令进行&#xff0c;版本号根据你所用的ES版本选择&#xff0c;比如我的是7.10.0 curl -O https://artifacts.elastic.co/downloads/kibana/kibana-7.10.0-darwin-x86_64.tar.gz解压安装Kibana tar -zxvf kibana-7.10.0-darwin-x86_64.tar.gz进行config…

Java -- XXL-JOB分布式任务调度平台

XXL-JOB是一个分布式任务调度平台&#xff0c;其核心设计目标是开发迅速、学习简单、轻量级、易扩展。现已开放源代码并接入多家公司线上产品线&#xff0c;开箱即用 xxl是xxl-job的开发者大众点评的【许雪里】名称的拼音开头 官网地址 分布式任务调度平台XXL-JOB 文档地址…