Windows 下 VMamba 安装教程(无需更改base环境中的cuda版本且可加速)

news2024/11/13 23:32:30

导航

  • Mamba 及 Vim 安装问题参看本人之前博客:Mamba 环境安装踩坑问题汇总及解决方法
  • Windows 下 Mamba 的安装参看本人之前博客:Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)
  • Linux 下VMamba 安装教程参看本人之前博客:VMamba 安装教程(无需更改base环境中的cuda版本)

目录

  • 导航
  • 背景
  • Windows 下环境准备
  • Windows 下 `selective_scan` 的编译
  • Windows 下 `selective_scan` 的编译出现的问题和解决(20240714)
    • 0. 基本报错
    • 1. error: identifier "M_LOG2E" is undefined
    • 2. error C2975: “kDeltaSoftplus_”
  • 20240715 更新
    • 3. fatal error C1083: 无法打开包括文件:“cuda_runtime.h”
    • 4. fatal error C1189: # error: unsupported Microsoft Visual Studio version!
    • 5. fatal error C1083: 无法打开包括文件: “cusparse.h”
    • 6. 正常安装 Vmamba 找不到找不到 selective_scan_cuda 模块
    • 7. 无法导入selective_scan_cuda_oflex和selective_scan_cuda_core模块
    • 8. 正常安装 Vmamba 找不到 selective_scan_cuda_core 模块

背景

最近有不少小伙伴在 Linux 上安装 Vmamba (VMamba: Visual State Space Model)时,按照官方的安装命令会遇到各种各样的错误,Linux 版本的问题可参考本人之前的博客——Vmamba 安装教程(无需更改base环境中的cuda版本),本篇主要聚焦于 Windows 下 Vmamba 环境的安装,主要参考 issue。(安装问题 / 资源自取 / 论文合作想法请加主页wx)注意,Mamba 和 Vmamba 的环境安装步骤是不同的,请加以区分。

Windows 下环境准备

  1. 运行之前需要下载好 Vmamba 官方的源码,用 git 下载方式如下:
git clone https://github.com/MzeroMiko/VMamba.git
cd VMamba
  1. 前期环境准备,同原来博客 “[Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)]” ,具体为:
conda create -n mamba python=3.10
conda activate mamba
conda install cudatoolkit==11.8
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118
pip install setuptools==68.2.2
conda install nvidia/label/cuda-11.8.0::cuda-nvcc_win-64
conda install packaging
pip install triton-2.0.0-cp310-cp310-win_amd64.whl
  1. 安装 Vmamba 其他必须包,只留最后一步编译
pip install -r requirements.txt
cd kernels/selective_scan

Windows 下 selective_scan 的编译

  • kernels/selective_scan/csrc/selective_scan/static_switch.hBOOL_SWITCH 函数改为
#define BOOL_SWITCH(COND, CONST_NAME, ...)                                           \
    [&] {                                                                            \
        if (COND) {                                                                  \
            static constexpr bool CONST_NAME = true;                                        \
            return __VA_ARGS__();                                                    \
        } else {                                                                     \
            static constexpr bool CONST_NAME = false;                                       \
            return __VA_ARGS__();                                                    \
        }                                                                            \
    }()

这一步是将 constexpr 改为 static constexpr

  • 在如下文件
    kernels/selective_scan/csrc/selective_scan/cus/selective_scan_bwd_kernel.cuh
    kernels/selective_scan/csrc/selective_scan/cus/selective_scan_fwd_kernel.cuh
    kernels/selective_scan/csrc/selective_scan/cusoflex/selective_scan_bwd_kernel_oflex.cuh
    kernels/selective_scan/csrc/selective_scan/cusoflex/selective_scan_fwd_kernel_oflex.cuh
    开头加入:
#ifndef M_LOG2E
#define M_LOG2E 1.4426950408889634074
#endif
  • 完成上述修改后,执行 pip install . 一般即可顺利编译,成功安装。
  • 本人编译好的Windows 下的whl 也有:selective-scan-0.0.2 ,可直接下载安装或联系主页vx自取。利用 whl 安装命令为:
pip install selective-scan-0.0.2-cp310-cp310-win-amd64.whl

Windows 下 selective_scan 的编译出现的问题和解决(20240714)

0. 基本报错

当编译中遇到任意错误时,均会输出下图所示的提示:
在这里插入图片描述
内容上即:

Building wheels for collected packages: selective-scan
	Building wheel for selective-scan(setup.py)... error
	error:subprocess-exited-with-error
	
	python setup.py bdist_wheel did not run successfully.
	exit code:1
		[172 lines of output]
		No CUDA runtime is found, using CUDA_HOME='E:\Anaconda\vmamba'

		torch._version=2.1.1+cu118
		
		CUDA HOME = E:\Anaconda\vmamba
		
		CUDA version :11.8
		running bdist_wheel
		running build
		running build_ext
		E: \Anaconda\vmamballib\site-packages(torch\utilscpp_extension.py:383: UserWarning: Error checking compiler versioforcl:[WinError2]系统找不到指定的文件。
			warnings.warn(f'Error checking compiler version for {compiler}: {error}')
		building 'selective scan cudaoflex'extension
		creating E:\Desktop\ToDo\VMambalkernels\selective_scan\build
		creating E:\Desktop\ToDo\VMamba\kernels\selective_scan\build\temp.win-amd64-cpython-310

注意:此处的报错信息不包含有价值的信息,应该往下找真正的报错 error (非 warning)。

1. error: identifier “M_LOG2E” is undefined

在Windows下会出现如下报错:
在这里插入图片描述
出现这种情况的原因,可参考 issue:

Note for the owners: The reason for needing #define is stated here: https://stackoverflow.com/a/56974843:
“On windows it is using the Microsoft compiler for that. So the Microsoft compiler is correct to disallow VLA, and there is no way to avoid this AFAIK. Your code works on linux, because on linux nvcc uses the g++ host compiler, and it allows (in a non-standard-compliant way) the use of a VLA in C++ host code.”

因此,只需在四个文件下加入以下代码即可

#ifndef M_LOG2E
#define M_LOG2E 1.4426950408889634074
#endif

具体文件和步骤参看前一节。

2. error C2975: “kDeltaSoftplus_”

在Windows下会出现如下大量报错:

error C2975: “kDeltaSoftplus_”:“Selective_Scan_bwd_kernel_traits”的模板参数无效,应为编译时常量表达式

如下图所示:
在这里插入图片描述
只需把static_switch.h 函数里的 constexpr 改为 static constexpr,参考 issue。具体步骤参看前一节。

20240715 更新

3. fatal error C1083: 无法打开包括文件:“cuda_runtime.h”

如果遇到下面的错误:
在这里插入图片描述
显示为 fatal error C1083: 无法打开包括文件:“cuda_runtime.h”: No such file or directory

E:\VNambalkernels\selective _scan csrc selective _scan cusoflex selective_scan_core_bwd.cu: fatal error C1083:无法打开包括文件:“cuda_runtime.h”: No such file or directory

参考本人之前博客:VMamba 安装教程(无需更改base环境中的cuda版本),解决方案为:

conda install nvidia/label/cuda-11.8.0::cuda-cudart-dev  # 根据CUDA版本

4. fatal error C1189: # error: unsupported Microsoft Visual Studio version!

如遇到以下错误:
在这里插入图片描述
具体为fatal error C1189: #error: -- unsupported Microsoft Visual Studio version!

E:\Anaconda\vmambalincludecrt/host_config.h(153): fatal error C1189: #error:	-- unsupported Microsoft Visual Studio version! Only the versions between 2017 and 2022 (inclusive) aresupported! The nvcc flag '-allow-unsupported-compiler' can be used to override this version check; however, using an unsupported host compiler may cause compilation failure or incorrect run time execution. Use at your own risk.

此类报错只是一连串报错的结果,不包含有用的报错信息,应该在其前面寻找真正的报错原因。

5. fatal error C1083: 无法打开包括文件: “cusparse.h”

如果遇到以下报错:
在这里插入图片描述
显示为 fatal error C1083: 无法打开包括文件: “cusparse.h”: No such file or directory

E:\Anaconda\vmanba liblsite-packagesitorch include Aen/cuda/cuDAcontext.h(6): fatal eror C1083: 无法打开包括文件:“cusparse,h”; No such file or directory

这个问题同Linux下的错误,可参考本人之前博客:VMamba 安装教程(无需更改base环境中的cuda版本):

conda install nvidia/label/cuda-11.8.0::libcusparse-dev   # 根据CUDA版本

类似地,如果遭遇到

  • fatal error C1083: 无法打开包括文件: “cublas_v2.h”: No such file or directory
  • fatal error C1083: 无法打开包括文件: “cusolverDn.h”: No such file or directory
  • fatal error C1083: 无法打开包括文件: “crypt.h”: No such file or directory
    等报错,均可参考本人之前博客:VMamba 安装教程(无需更改base环境中的cuda版本)。

6. 正常安装 Vmamba 找不到找不到 selective_scan_cuda 模块

VMamba 中遇到selective_scan_cuda 模块

  • No module named 'selective_scan_cuda'

VMamba 的代码和 Mamba 是独立的,如果想有 selective_scan_cuda 包,则需要安装 mamba_ssm,参考之前博客:

  • Linux:Mamba 环境安装踩坑问题汇总及解决方法
  • Windows :Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)

注意,mamba 的这个包在Vmamba里面不是必须的。

7. 无法导入selective_scan_cuda_oflex和selective_scan_cuda_core模块

这是因为安装的是Mamba 而不是 VMamba,Mamba 安装成功后环境中本来就没有selective_scan_cuda_oflex和selective_scan_cuda_core模块,请按Vmamba 正确的顺序安装 Vmamba的环境。

8. 正常安装 Vmamba 找不到 selective_scan_cuda_core 模块

除了selective_scan_cuda_core 模块,还有可能找不到 selective_scan_cuda_nrow 模块,这是因为在编译 selective_scan 时,在 setup.py 第40行选用的模式只有 [‘oflex’]

MODES = ["oflex"]
# MODES = ["core", "ndstate", "oflex"]
# MODES = ["core", "ndstate", "oflex", "nrow"]

改为:

MODES = ["core", "oflex"]
# MODES = ["core", "ndstate", "oflex"]
# MODES = ["core", "ndstate", "oflex", "nrow"]

修改此处再编译即可。注意,该模块也不是必须的。而ndstate 在最新代码中源文件已经被删除,默认模式即可,不需要修改,不做深入研究无必要安装这个包。

Win 下面编译好的 whl 为:selective-scan-0.0.2-cp310-cp310-win-amd64.whl (包含core),selective_scan_cuda_core 模块为:selective-scan-cuda-core.cp310-win-amd64.pyd。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

前端面试题(JS篇三)

一、|| 和 && 操作符的返回值? || 和 && 首先会对第一个操作数执行条件判断,如果其不是布尔值就先进行 ToBoolean 强制类型转换,然后再执行条件判断。 对于 || 来说,如果条件判断结果为 true 就返回第一个操作数的…

磁环编码器原理

目录 概述 1 编码器介绍 2 实现原理介绍 2.1 磁环功能分析 2.2 硬件实现方式 3 编码器参数 3.1 编码器精度 3.2 影响编码器精度的因素 4 角度计算方法 4.1 单对极编码器 4.2 磁游标编码器 4.2.1 游标方案实现原理 4.2.2 一个实例磁环分析 5 磁刻线编码器 概述 本…

算法题-二叉树

二叉树 二叉树的理论知识 二叉树的种类 满二叉树 满二叉树:如果一棵二叉树只有度为0的节点和度为2的节点,并且度为0的节点在同一层,则此二叉树为满二叉树(深度为k,有2^k-1个节点的二叉树)。 完全二叉…

PostgreSQL 中如何解决因长事务阻塞导致的其他事务等待问题?

🍅关注博主🎗️ 带你畅游技术世界,不错过每一次成长机会!📚领书:PostgreSQL 入门到精通.pdf 文章目录 PostgreSQL 中如何解决因长事务阻塞导致的其他事务等待问题?一、了解长事务阻塞的原因&…

降Compose十八掌之『利涉大川』| Canvas

公众号「稀有猿诉」 原文链接 降Compose十八掌之『利涉大川』| Canvas 任何一个GUI框架都会提供大量的预定义的UI部件,让开发者构建UI页面,但有些时候预定义的部件无法满足需求,这时就需要定制,甚至是自定义绘制的内容。对…

快手ip地址为什么会乱跳城市

在数字化时代,网络IP地址已成为我们数字身份的一部分,它既是网络空间中的“门牌号”,也是我们在网络世界中的“身份证”。然而,近期有不少快手用户反映,他们的IP地址在使用过程中出现了乱跳城市的现象,引发…

用好六西格玛培训中的DOE工具,让产品和过程优化不再难——张驰咨询

在六西格玛培训中,试验设计(Design of Experiments,简称DOE)是一种至关重要的工具,它不仅有助于系统地规划和分析试验,还能显著提升产品和过程的改进效率。DOE通过最小化试验次数,同时最大化信息…

大数据基础:Hadoop之Yarn重点架构原理

文章目录 Hadoop之Yarn重点架构原理 一、Yarn介绍 二、Yarn架构 三、Yarn任务运行流程 四、Yarn三种资源调度器特点及使用场景 Hadoop之Yarn重点架构原理 一、Yarn介绍 Apache Hadoop Yarn(Yet Another Reasource Negotiator,另一种资源协调者)是Hadoop2.x版…

Windows安装PostgreSQL

PostgreSQL是一种功能齐全的对象-关系型数据库管理系统(ORDBMS),它以加州大学伯克利分校计算机系开发的POSTGRES项目为基础,经过多年的发展,已成为一个高度可扩展、支持多种数据类型、具备复杂查询能力的数据库系统。在…

MoonBit 全新语法:级联运算符

✨MoonBit 引入了 “..” 操作符,能够优雅地对可变 API 进行链式调用,同时保持可变 API 签名的整洁(依然返回 Unit)

昇思25天学习打卡营第19天|sea_fish

打卡第19天。本次学习的内容为生成式中的Diffusion扩散模型。记录学习的过程。 模型简介 什么是Diffusion Model? 如果将Diffusion与其他生成模型(如Normalizing Flows、GAN或VAE)进行比较,它并没有那么复杂,它们都…

PHP转Go系列 | ThinkPHP与Gin框架之OpenApi授权设计实践

大家好,我是码农先森。 我之前待过一个做 ToB 业务的公司,主要是研发以会员为中心的 SaaS 平台,其中涉及的子系统有会员系统、积分系统、营销系统等。在这个 SaaS 平台中有一个重要的角色「租户」,这个租户可以拥有一个或多个子系…

Text Control 控件教程:文本和表格相互转换

文档布局中的一项典型任务是将使用制表位创建的纯文本表格转换为完全格式化的表格。在本文中,我们将向您展示如何通过检测制表位并将其转换为包含位置的表格单元格,将纯文本表格转换为表格。 TX Text Control 是一款功能类似于 MS Word 的文字处理控件&…

统计HTML 标签CSS 属性 和 JS 关键字

<!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><title>统计HTML 标签、CSS 属性 和 JS 关键字</title> </head> <style>#container {display: flex;}li {list-style: none;} </styl…

【青书学堂】2024年第一学期 平面设计(高起专) 作业

【青书学堂】2024年第一学期 平面设计(高起专) 作业 为了方便日后复习&#xff0c;青书学堂成人大专试题整理。 若有未整理的课程&#xff0c;请私信我补充&#xff0c;欢迎爱学习的同学们收藏点赞关注&#xff01;文章内容仅限学习使用&#xff01;&#xff01;&#xff01; 第…

MacCleaner Pro Mac系统综合清理工具包 释放磁盘空间,提高整体性能

MacCleaner Pro 是一款专为 Mac 用户设计的软件工具&#xff0c;用于优化和清理他们的系统。它提供了一系列功能来帮助用户加速他们的 Mac&#xff0c;释放磁盘空间&#xff0c;并提高整体性能。 MacCleaner Pro 的一些主要功能包括&#xff1a; 系统清理&#xff1a;此功能有…

捷配笔记-如何确保PCB信号完整性?

三十年的电子设计历程&#xff0c;是一段从微米到纳米的跨越之旅。1987年&#xff0c;0.5微米工艺曾被视为技术的极限&#xff0c;而如今22纳米工艺已成为行业的新标准。本文将回顾这段技术革新的历程&#xff0c;并探讨在这一过程中我们所面临的挑战与应对策略。 技术演进的里…

python自动化flask库-从数据库里取出数据

实现效果&#xff1a;写一个接口&#xff0c;从mysql数据库读到user表的数据&#xff08;用户名和密码&#xff09;&#xff0c;把数据作为回参 用到的库&#xff1a;flask&#xff0c;pymysql 代码&#xff1a; from flask import Flask, jsonify import pymysql# 连接数据…

python-箭形图案(赛氪OJ)

[题目描述] 小理学习了循环&#xff0c;老师给他出了一系列打印图案的练习&#xff0c;该任务是打印用“ ∗ ”组成的箭形图案。输入格式&#xff1a; 一行一个整数 n。输出格式&#xff1a; 针对输入的 n &#xff0c;输出用“ ∗ ”组成的箭形。 …

AirSim+PX4联合仿真

AirSim启动设置 windows上的AirSim要想通过PX4进行控制,需要配置一下参数,进入如下路径的AirSim文件,找到settings.json文件,采用记事本打开,并编辑里面的内容。 可以参考如下内容:其中ip要对应,linux上PX4导入的ip即为此处的localhostip,也是WSL服务的ip。 {"S…