当前位置: 首页 > news >正文

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

安装问题 / 资源自取 / 论文合作想法请+vx931744281

Windows 下环境准备

  1. 前期环境准备,同原来博客 “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 环境安装踩坑问题汇总及解决方法” 。

  1. 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
  1. 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.cuhvoid selective_scan_fwd_launch 函数改为
void selective_scan_fwd_launch(SSMParamsBase &params, 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.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

  • csrc/selective_scan/cus/selective_scan_bwd_kernel.cuhcsrc/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.cuhcsrc/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。具体步骤参看前一节。


  1. Windows Support #12 ↩︎

  2. 出现错误“subprocess.CalledProcessError: Command ‘[‘ninja‘, ‘-v‘]‘ returned non-zero exit status 1”解决方法 ↩︎

相关文章:

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

导航 Mamba 及 Vim 安装问题参看本人之前博客&#xff1a;Mamba 环境安装踩坑问题汇总及解决方法Linux 下Vmamba 安装教程参看本人之前博客&#xff1a;Vmamba 安装教程&#xff08;无需更改base环境中的cuda版本&#xff09;Windows 下 VMamba的安装参看本人之前博客&#xf…...

前端项目本地的node_modules直接上传到服务器上无法直接使用(node-sasa模块报错)

跑 jekins任务的服务器不能连接外网下载依赖包&#xff0c;就将本地下载的 node_modules直接上传到服务器上&#xff0c;但是运行时node-sass模块报错了ERROR in Missing binding /root/component/node_modules/node-sass/vendor/linux-x64-48/binding.node >> 报错信息类…...

Hadoop3:动态扩容之新增一台机器的初始化工作

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

【正点原子i.MX93开发板试用连载体验】录音小程序采集语料

本文最早发表于电子发烧友论坛&#xff1a;【新提醒】【正点原子i.MX93开发板试用连载体验】基于深度学习的语音本地控制 - 正点原子学习小组 - 电子技术论坛 - 广受欢迎的专业电子论坛! (elecfans.com) 接下来就是要尝试训练中文提示词。首先要进行语料采集&#xff0c;这是一…...

【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的分布式事务消息功能&#xff0c;在普通消息基础上&#xff0c;支持二阶段的提交。将二阶段提交和本地事务绑定&#xff0c;实现全局提交结果的一致性。 1、生产者将消息发送至RocketMQ服务端。 2、RocketMQ服务端将消息持久化成功之后&#xff0c;向生产者返回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的类型不对&#xff0c;另外&#xff0c;数字的默认类型是i32 fn main() {let x: i…...

通过 PPPOE 将 linux 服务器作为本地局域网 IPv4 外网网关

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

gin源码分析

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

数学建模入门

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

【学习笔记】无人机(UAV)在3GPP系统中的增强支持(十二)-无人机群在物流中的应用

引言 本文是3GPP TR 22.829 V17.1.0技术报告&#xff0c;专注于无人机&#xff08;UAV&#xff09;在3GPP系统中的增强支持。文章提出了多个无人机应用场景&#xff0c;分析了相应的能力要求&#xff0c;并建议了新的服务级别要求和关键性能指标&#xff08;KPIs&#xff09;。…...

同三维T80006EH2-4K30编码器视频使用操作说明书:高清HDMI编码器,高清SDI编码器,4K超清HDMI编码器,双路4K超高清编码器

同三维T80006EH2-4K30编码器视频使用操作说明书&#xff1a;高清HDMI编码器&#xff0c;高清SDI编码器&#xff0c;4K超清HDMI编码器&#xff0c;双路4K超高清编码器 T80006EH2-4K30编码器 同三维&#xff0c;十多年老品牌&#xff0c;我们一直专注&#xff1a;视频采集卡、视频…...

DHCP原理及配置

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

异步日志:性能优化的金钥匙

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

matlab仿真 模拟调制(上)

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

【数据结构】--- 堆的应用

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

0基础学会在亚马逊云科技AWS上利用SageMaker、PEFT和LoRA高效微调AI大语言模型(含具体教程和代码)

项目简介&#xff1a; 小李哥今天将继续介绍亚马逊云科技AWS云计算平台上的前沿前沿AI技术解决方案&#xff0c;帮助大家快速了解国际上最热门的云计算平台亚马逊云科技AWS上的AI软甲开发最佳实践&#xff0c;并应用到自己的日常工作里。本次介绍的是如何在Amazon SageMaker上…...

护网HW面试——redis利用方式即复现

参考&#xff1a;https://xz.aliyun.com/t/13071 面试中经常会问到ssrf的打法&#xff0c;讲到ssrf那么就会讲到配合打内网的redis&#xff0c;本篇就介绍redis的打法。 未授权 原理&#xff1a; Redis默认情况下&#xff0c;会绑定在0.0.0.0:6379&#xff0c;如果没有采用相关…...

C++ //练习 15.8 给出静态类型和动态类型的定义。

C Primer&#xff08;第5版&#xff09; 练习 15.8 练习 15.8 给出静态类型和动态类型的定义。 环境&#xff1a;Linux Ubuntu&#xff08;云服务器&#xff09; 工具&#xff1a;vim 解释 静态类型&#xff1a;在编译时已知&#xff0c;是在变量声明时的类型或表达式生成的…...

阿里云ECS服务器安装jdk并运行jar包,访问成功详解

安装 OpenJDK 8 使用 yum 包管理器安装 OpenJDK 8 sudo yum install -y java-1.8.0-openjdk-devel 验证安装 安装完成后&#xff0c;验证 JDK 是否安装成功&#xff1a; java -version设置 JAVA_HOME 环境变量&#xff1a; 为了确保系统中的其他应用程序可以找到 JDK&…...

CNKI-download:3步实现知网文献批量下载与管理的Python自动化工具

CNKI-download&#xff1a;3步实现知网文献批量下载与管理的Python自动化工具 【免费下载链接】CNKI-download :frog: 知网(CNKI)文献下载及文献速览爬虫 (Web Scraper for Extracting Data) 项目地址: https://gitcode.com/gh_mirrors/cn/CNKI-download 你是否曾为手动…...

AI代理运行时基础设施:从上下文溢出到持久化事件日志

1. 这不是新赛道&#xff0c;是 runtime 层的“操作系统时刻”来了你有没有在深夜调试一个跑了三小时的 AI 代理&#xff0c;突然发现它开始胡言乱语&#xff1f;不是模型崩了&#xff0c;不是 prompt 写错了&#xff0c;而是——它的“记忆”被挤掉了。上下文窗口就那么大&…...

机器学习真实难点:知识断裂、工具混沌与数据偏差

1. 这不是一份职业指南&#xff0c;而是一份“入行前必读的清醒剂”“Why it’s Super Hard to be an ML Researcher or Developer?”——这个标题我第一次看到时&#xff0c;正坐在凌晨两点的实验室里&#xff0c;盯着第17版模型在验证集上掉点0.3%的结果发呆。旁边三台GPU服…...

跨系统数据搬运总是要靠人工复制粘贴?2026智能体重塑企业数据流转新范式

在2026年的今天&#xff0c;尽管通用人工智能&#xff08;AGI&#xff09;已经深度介入生产力环节&#xff0c;但走进多数企业的财务、供应链或人力资源部门&#xff0c;依然能看到员工在多个窗口间频繁切换&#xff0c;机械地重复着CtrlC和CtrlV。这种看似原始的“数据搬运”行…...

如何快速配置TQVaultAE:泰坦之旅玩家的终极装备管理与存档扩展指南

如何快速配置TQVaultAE&#xff1a;泰坦之旅玩家的终极装备管理与存档扩展指南 【免费下载链接】TQVaultAE Extra bank space for Titan Quest Anniversary Edition 项目地址: https://gitcode.com/gh_mirrors/tq/TQVaultAE TQVaultAE是《泰坦之旅周年版》玩家的开源装备…...

5分钟彻底掌握Windows驱动管理:DriverStore Explorer完全指南

5分钟彻底掌握Windows驱动管理&#xff1a;DriverStore Explorer完全指南 【免费下载链接】DriverStoreExplorer Driver Store Explorer 项目地址: https://gitcode.com/gh_mirrors/dr/DriverStoreExplorer 你是否发现Windows系统盘空间持续减少&#xff0c;却找不到原因…...

UE5官方文档(第一人称射击游戏教程)解读 第七章

好了&#xff0c;今天来到我们的第七章&#xff0c;今天将承上启下&#xff0c;延伸输入部分的工作。 配置角色移动 Coder 03 Configure Character Movement with C in Unreal Engine | Unreal Engine 5.7 Documentation | Epic Developer Community // Copyright Epic Games…...

一键搞定B站视频下载:跨平台工具BilibiliDown完整使用指南

一键搞定B站视频下载&#xff1a;跨平台工具BilibiliDown完整使用指南 【免费下载链接】BilibiliDown (GUI-多平台支持) B站 哔哩哔哩 视频下载器。支持稍后再看、收藏夹、UP主视频批量下载|Bilibili Video Downloader &#x1f633; 项目地址: https://gitcode.com/gh_mirro…...

FFXIV国际服中文汉化工具:5步实现终极中文游戏体验

FFXIV国际服中文汉化工具&#xff1a;5步实现终极中文游戏体验 【免费下载链接】FFXIVChnTextPatch 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIVChnTextPatch 还在为《最终幻想14》国际服的英文界面而烦恼吗&#xff1f;想要体验国际服的最新内容&#xff0c;却…...

2026年,探寻靠谱体育器材的终极指南

在追求健康与活力的时代&#xff0c;体育器材成为了我们运动生活中的重要伙伴。但面对市场上琳琅满目的品牌和产品&#xff0c;如何选择靠谱的体育器材成为了许多人的难题。今天&#xff0c;让我们一同探寻 2026 年靠谱体育器材的终极指南。一、品质与口碑沧州九牌体育用品制造…...