Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)
导航
- Mamba 及 Vim 安装问题参看本人之前博客:Mamba 环境安装踩坑问题汇总及解决方法
- Linux 下Vmamba 安装教程参看本人之前博客:Vmamba 安装教程(无需更改base环境中的cuda版本)
- Windows 下 VMamba的安装参看本人之前博客:Windows 下 VMamba 安装教程(无需更改base环境中的cuda版本且可加速)
目录
- 导航
- 背景
- Windows 下环境准备
- Windows 下 `mamba-ssm` 的编译
- Windows 下 `mamba-ssm` 的编译出现的问题及解决(20240714)
- 1. 基本报错信息
- 2. "M_LOG2E" is undefined
- 3. error C2975: “kIsVariableC_”
- 4. error C2975: “kNRows_”
背景
Mamba 官方代码链接为:https://github.com/state-spaces/mamba,在原来博客 “Mamba 环境安装踩坑问题汇总及解决方法” 基础上,不绕过selective_scan_cuda,进行 Mamba 环境安装,这样可以获得和 Linux 一样的速度1。
(安装问题 / 资源自取 / 论文合作想法请+vx:931744281
)
Windows 下环境准备
- 前期环境准备,同原来博客 “Mamba 环境安装踩坑问题汇总及解决方法” ,具体为:
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
其中 triton-2.0.0-cp310-cp310-win_amd64.whl
获取参看原来博客 “Mamba 环境安装踩坑问题汇总及解决方法” 。
causal-conv1d
的安装,同原来博客 “Mamba 环境安装踩坑问题汇总及解决方法” ,具体细化为:
git clone https://github.com/Dao-AILab/causal-conv1d.git
cd causal-conv1d
git checkout v1.1.1 # 安装最新版的话,此步可省略
set CAUSAL_CONV1D_FORCE_BUILD=TRUE
pip install .
官方没有编译好的适用于Windows版本的 whl,因此需要用上述步骤来手动编译。笔者编译好了 Windows 下的 causal_conv1d-1.1.1-cp310-cp310-win_amd64.whl,亦可直接下载安装。
pip install causal_conv1d-1.1.1-cp310-cp310-win_amd64.whl
mamba-ssm
环境准备,下载工程文件,即
git clone https://github.com/state-spaces/mamba.git
cd mamba
git checkout v1.1.1 # 安装最新版的话,此步可省略
注意,上述过程中,新版 mamba-ssm 需要搭配新版 causal-conv1d,要不然函数不兼容。完成前期工作后进入下一步正式编译。
Windows 下 mamba-ssm
的编译
- 在mamba源码
setup.py
修改第41行配置:
FORCE_BUILD = os.getenv("MAMBA_FORCE_BUILD", "TRUE") == "TRUE"
- 将
csrc/selective_scan/selective_scan_fwd_kernel.cuh
的void selective_scan_fwd_launch
函数改为
void selective_scan_fwd_launch(SSMParamsBase ¶ms, cudaStream_t stream) {// Only kNRows == 1 is tested for now, which ofc doesn't differ from previously when we had each block// processing 1 row.static constexpr int kNRows = 1;BOOL_SWITCH(params.seqlen % (kNThreads * kNItems) == 0, kIsEvenLen, [&] {BOOL_SWITCH(params.is_variable_B, kIsVariableB, [&] {BOOL_SWITCH(params.is_variable_C, kIsVariableC, [&] {BOOL_SWITCH(params.z_ptr != nullptr , kHasZ, [&] {using Ktraits = Selective_Scan_fwd_kernel_traits<kNThreads, kNItems, kNRows, kIsEvenLen, kIsVariableB, kIsVariableC, kHasZ, input_t, weight_t>;// constexpr int kSmemSize = Ktraits::kSmemSize;static constexpr int kSmemSize = Ktraits::kSmemSize + kNRows * MAX_DSTATE * sizeof(typename Ktraits::scan_t);// printf("smem_size = %d\n", kSmemSize);dim3 grid(params.batch, params.dim / kNRows);auto kernel = &selective_scan_fwd_kernel<Ktraits>;if (kSmemSize >= 48 * 1024) {C10_CUDA_CHECK(cudaFuncSetAttribute(kernel, cudaFuncAttributeMaxDynamicSharedMemorySize, kSmemSize));}kernel<<<grid, Ktraits::kNThreads, kSmemSize, stream>>>(params);C10_CUDA_KERNEL_LAUNCH_CHECK();});});});});
}
- 将
csrc/selective_scan/static_switch.h
的BOOL_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
)
- 在
csrc/selective_scan/cus/selective_scan_bwd_kernel.cuh
和csrc/selective_scan/cus/selective_scan_fwd_kernel.cuh
文件开头加入:
#ifndef M_LOG2E
#define M_LOG2E 1.4426950408889634074
#endif
- 完成上述修改后,执行
pip install .
一般即可顺利编译,成功安装。 - 本人编译好的Windows 下的whl 也有:mamba-ssm-1.1.3 ,可直接下载安装或联系本人vx自取。利用 whl 安装命令为:
pip install mamba-ssm-1.1.3-cp310-cp310-win-amd64.whl
由于此时没有绕过selective_scan_cuda,在虚拟环境中产生了 selective-scan-cuda.cp310-win-amd64.pyd 文件,所以运行速度较快。
Windows 下 mamba-ssm
的编译出现的问题及解决(20240714)
1. 基本报错信息
如果不进行修改利用 `pip install .`` 直接编译源码时会出现如下报错:
subprocess.CalledProcessError: Command '['ninja', '-v']' returned non-zero exit status 1.The above exception was the direct cause of the following exception:Traceback (most recent call last):File "/data/xxx/anaconda3/envs/xxx/lib/python3.10/site-packages/torch/utils/cpp_extension.py", line 2116, in _run_ninja_buildraise RuntimeError(message) from eRuntimeError: Error compiling objects for extension[end of output]
这是最基本的报错信息,只要编译出错就会输出这些,如果在其上面没有看到具体报错,可在 setup.py
里面,将
cmdclass={"bdist_wheel": CachedWheelsCommand, "build_ext": BuildExtension}
改为
cmdclass={"bdist_wheel": CachedWheelsCommand, "build_ext": BuildExtension.with_options(use_ninja=False)}
pytorch默认使用ninjia作为backend2,禁用掉可以看到具体的报错,但是编译速度实测会变慢,所以解决bug后可以改回来。
注:有的博客将 anaconda环境下的 lib/python3.6/site-packages/torch/utils/cpp_extension.py文件里的[‘ninja’,‘-v’]改成[‘ninja’,‘–v’] 或者[‘ninja’,‘–version’] 是错误的做法,治标不治本。
2. “M_LOG2E” is undefined
在Windows下会出现如下大量报错:
xxx\mamba-1.1.3\csrc\selective_scan\selective_scan_bwd_kernel.cuh(221): error: identifier "M_LOG2E" is undefined
出现这种情况的原因,可参考 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.”
因此,只需在csrc/selective_scan/cus/selective_scan_bwd_kernel.cuh
和 csrc/selective_scan/cus/selective_scan_fwd_kernel.cuh
文件加入以下代码即可
#ifndef M_LOG2E
#define M_LOG2E 1.4426950408889634074
#endif
3. error C2975: “kIsVariableC_”
在Windows下会出现如下大量报错:
error C2975: “kIsVariableC_”:“Selective_Scan_bwd_kernel_traits”的模板参数无效,应为编译时常量表达式
将csrc/selective_scan/static_switch.h
函数里的 constexpr
改为 static constexpr
,参考 issue。具体步骤参看前一节。
4. error C2975: “kNRows_”
在Windows下会出现如下大量报错:
xxx\mamba-1.1.3\csrc\selective_scan\selective_scan_fwd_kernel.cuh(314): error C2975: “kNRows_”:“Selective_Scan_fwd_kernel_traits”的模板参数无效,应为编译时常量表达式
将csrc/selective_scan/selective_scan_fwd_kernel.cuh
函数 void selective_scan_fwd_launch
里的 constexpr
改为 static constexpr
,参考 issue。具体步骤参看前一节。
Windows Support #12 ↩︎
出现错误“subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1”解决方法 ↩︎
相关文章:
Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)
导航 Mamba 及 Vim 安装问题参看本人之前博客:Mamba 环境安装踩坑问题汇总及解决方法Linux 下Vmamba 安装教程参看本人之前博客:Vmamba 安装教程(无需更改base环境中的cuda版本)Windows 下 VMamba的安装参看本人之前博客…...

前端项目本地的node_modules直接上传到服务器上无法直接使用(node-sasa模块报错)
跑 jekins任务的服务器不能连接外网下载依赖包,就将本地下载的 node_modules直接上传到服务器上,但是运行时node-sass模块报错了ERROR in Missing binding /root/component/node_modules/node-sass/vendor/linux-x64-48/binding.node >> 报错信息类…...

Hadoop3:动态扩容之新增一台机器的初始化工作
一、需求描述 给Hadoop集群动态扩容一个节点 那么,这个节点是全新的,我们需要做哪些准备工作,才能将它融入集群了? 二、初始化配置 1、修改IP和hostname vim /etc/sysconfig/network-scripts/ifcfg-ens33 vim /etc/hostname2、…...

【正点原子i.MX93开发板试用连载体验】录音小程序采集语料
本文最早发表于电子发烧友论坛:【新提醒】【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 接下来就是要尝试训练中文提示词。首先要进行语料采集,这是一…...
【EasyExcel】动态替换表头内容并应用样式
1.定义实体类 import com.alibaba.excel.annotation.ExcelProperty; import com.alibaba.excel.annotation.ContentStyle; import com.alibaba.excel.metadata.BorderStyleEnum; import com.alibaba.excel.metadata.VerticalAlignmentEnum; import com.alibaba.excel.metadata.…...

RocketMQ实现分布式事务
RocketMQ的分布式事务消息功能,在普通消息基础上,支持二阶段的提交。将二阶段提交和本地事务绑定,实现全局提交结果的一致性。 1、生产者将消息发送至RocketMQ服务端。 2、RocketMQ服务端将消息持久化成功之后,向生产者返回Ack确…...
【Rust练习】2.数值类型
练习题来自https://practice-zh.course.rs/basic-types/numbers.html 1 // 移除某个部分让代码工作 fn main() {let x: i32 5;let mut y: u32 5;y x;let z 10; // 这里 z 的类型是? }y的类型不对,另外,数字的默认类型是i32 fn main() {let x: i…...

通过 PPPOE 将 linux 服务器作为本地局域网 IPv4 外网网关
将 linux 服务器作为本地外网网关,方便利用 Linux 生态中的各种网络工具,对流量进行自定义、精细化管理… 环境说明 拨号主机:CentOS 7.9, Linux Kernel 5.4.257 拨号软件: rp-pppoe-3.11-7.el7.x86_64初始化 1、升级系统到新的稳定内核&a…...

gin源码分析
一、高性能 使用sync.pool解决频繁创建的context对象,在百万并发的场景下能大大提供访问性能和减少GC // ServeHTTP conforms to the http.Handler interface. // 每次的http请求都会从sync.pool中获取context,用完之后归还到pool中 func (engine *Engin…...

数学建模入门
目录 文章目录 前言 一、数学建模是什么? 1、官方概念: 2、具体过程 3、适合哪一类人参加? 4、需要有哪些学科基础呢? 二、怎样准备数学建模(必备‘硬件’) 1.组队 2.资料搜索 3.常用算法总结 4.论文撰写的…...

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十二)-无人机群在物流中的应用
引言 本文是3GPP TR 22.829 V17.1.0技术报告,专注于无人机(UAV)在3GPP系统中的增强支持。文章提出了多个无人机应用场景,分析了相应的能力要求,并建议了新的服务级别要求和关键性能指标(KPIs)。…...
同三维T80006EH2-4K30编码器视频使用操作说明书:高清HDMI编码器,高清SDI编码器,4K超清HDMI编码器,双路4K超高清编码器
同三维T80006EH2-4K30编码器视频使用操作说明书:高清HDMI编码器,高清SDI编码器,4K超清HDMI编码器,双路4K超高清编码器 T80006EH2-4K30编码器 同三维,十多年老品牌,我们一直专注:视频采集卡、视频…...

DHCP原理及配置
目录 一、DHCP原理 DHCP介绍 DHCP工作原理 DHCP分配方式 工作原理 DHCP重新登录 DHCP优点 二、DHCP配置 一、DHCP原理 1 DHCP介绍 大家都知道,现在出门很多地方基本上都有WIFI,那么有没有想过这样一个问题,平时在家里都是“固定”的…...

异步日志:性能优化的金钥匙
一、背景 2024 年 4 月的一个宁静的夜晚,正当大家忙完一天的工作准备休息时,应急群里“咚咚咚”开始报警,提示我们余利宝业务的赎回接口成功率下降。 通过 Monitor 监控发现,该接口的耗时已经超过了网关配置的超时阈值(2s)&#…...

matlab仿真 模拟调制(上)
(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第五章内容,有兴趣的读者请阅读原书) 1.幅度调制 clear all ts0.0025; %信号抽样时间间隔 t0:ts:10-ts;%时间矢量 fs1/ts;%抽样频率 dffs/length(t); %fft的频率分…...

【数据结构】--- 堆的应用
个人主页:星纭-CSDN博客 系列文章专栏 :数据结构 踏上取经路,比抵达灵山更重要!一起努力一起进步! 一.堆排序 在前一个文章的学习中,我们使用数组的物理结构构造出了逻辑结构上的堆。那么堆到底有什么用呢&…...

0基础学会在亚马逊云科技AWS上利用SageMaker、PEFT和LoRA高效微调AI大语言模型(含具体教程和代码)
项目简介: 小李哥今天将继续介绍亚马逊云科技AWS云计算平台上的前沿前沿AI技术解决方案,帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS上的AI软甲开发最佳实践,并应用到自己的日常工作里。本次介绍的是如何在Amazon SageMaker上…...

护网HW面试——redis利用方式即复现
参考:https://xz.aliyun.com/t/13071 面试中经常会问到ssrf的打法,讲到ssrf那么就会讲到配合打内网的redis,本篇就介绍redis的打法。 未授权 原理: Redis默认情况下,会绑定在0.0.0.0:6379,如果没有采用相关…...
C++ //练习 15.8 给出静态类型和动态类型的定义。
C Primer(第5版) 练习 15.8 练习 15.8 给出静态类型和动态类型的定义。 环境:Linux Ubuntu(云服务器) 工具:vim 解释 静态类型:在编译时已知,是在变量声明时的类型或表达式生成的…...

阿里云ECS服务器安装jdk并运行jar包,访问成功详解
安装 OpenJDK 8 使用 yum 包管理器安装 OpenJDK 8 sudo yum install -y java-1.8.0-openjdk-devel 验证安装 安装完成后,验证 JDK 是否安装成功: java -version设置 JAVA_HOME 环境变量: 为了确保系统中的其他应用程序可以找到 JDK&…...
[2025CVPR]DeepVideo-R1:基于难度感知回归GRPO的视频强化微调框架详解
突破视频大语言模型推理瓶颈,在多个视频基准上实现SOTA性能 一、核心问题与创新亮点 1.1 GRPO在视频任务中的两大挑战 安全措施依赖问题 GRPO使用min和clip函数限制策略更新幅度,导致: 梯度抑制:当新旧策略差异过大时梯度消失收敛困难:策略无法充分优化# 传统GRPO的梯…...

调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
FastAPI 教程:从入门到实践
FastAPI 是一个现代、快速(高性能)的 Web 框架,用于构建 API,支持 Python 3.6。它基于标准 Python 类型提示,易于学习且功能强大。以下是一个完整的 FastAPI 入门教程,涵盖从环境搭建到创建并运行一个简单的…...

前端导出带有合并单元格的列表
// 导出async function exportExcel(fileName "共识调整.xlsx") {// 所有数据const exportData await getAllMainData();// 表头内容let fitstTitleList [];const secondTitleList [];allColumns.value.forEach(column > {if (!column.children) {fitstTitleL…...

相机从app启动流程
一、流程框架图 二、具体流程分析 1、得到cameralist和对应的静态信息 目录如下: 重点代码分析: 启动相机前,先要通过getCameraIdList获取camera的个数以及id,然后可以通过getCameraCharacteristics获取对应id camera的capabilities(静态信息)进行一些openCamera前的…...

ServerTrust 并非唯一
NSURLAuthenticationMethodServerTrust 只是 authenticationMethod 的冰山一角 要理解 NSURLAuthenticationMethodServerTrust, 首先要明白它只是 authenticationMethod 的选项之一, 并非唯一 1 先厘清概念 点说明authenticationMethodURLAuthenticationChallenge.protectionS…...

【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...

基于IDIG-GAN的小样本电机轴承故障诊断
目录 🔍 核心问题 一、IDIG-GAN模型原理 1. 整体架构 2. 核心创新点 (1) 梯度归一化(Gradient Normalization) (2) 判别器梯度间隙正则化(Discriminator Gradient Gap Regularization) (3) 自注意力机制(Self-Attention) 3. 完整损失函数 二…...