Window 下 Vim 环境安装踩坑问题汇总及解决方法

导航

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

目录

  • 导航
  • 背景
  • Windows 下环境准备
  • Windows 下适合于Vim的 `mamba-ssm` 的编译

背景

Vim 官方代码链接为:https://github.com/hustvl/Vim,在原来博客 “Mamba 环境安装踩坑问题汇总及解决方法” 基础上,不绕过selective_scan_cuda进行 Vim 环境安装,这样可以获得和 Linux 一样的速度。注意,Vim (Vision Mamba)和 Vmamba (VMamba: Visual State Space Model)虽然都是基于mamba,但是它们不是同一篇!

安装问题 / 资源自取 / 论文合作想法请+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 环境安装踩坑问题汇总及解决方法” 。
然后下载 Vim 的官方代码:

git clone https://github.com/hustvl/Vim.git
  1. causal-conv1d 的安装,Vim 官方代码仓里给了其源码,因此只需要利用其源码安装即可,类似 “Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)”
cd causal-conv1d
set CAUSAL_CONV1D_FORCE_BUILD=TRUE
pip install .

官方没有编译好的适用于Windows版本的 whl,因此需要用上述步骤来手动编译。
笔者编译好了 Windows 下的 causal_conv1d-1.0.0-cp310-cp310-win_amd64.whl,亦可直接下载安装(只适用于torch 2.1)。

pip install causal_conv1d-1.0.0-cp310-cp310-win_amd64.whl

完成前期工作后进入下一步正式编译。注意安装成功后会在相应环境(xxx\conda\envs\xxx\Lib\site-packages\)中生成 causal_conv1d_cuda.cp310-win_amd64.pyd 文件,此文件对应 causal_conv1d_cuda 包。

Windows 下适合于Vim的 mamba-ssm 的编译

Vim 官方对 mamba-ssm 的源码进行了修改,所以其与原版有不同。

既可以在安装完原版的基础上再修改相应环境(xxx\conda\envs\xxx\Lib\site-packages\)中的源码文件,参考“Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)”。

也可以直接强行利用Vim的源码进行编译。方法如下:

cd mamba-1p1p1  # 先切换到Vim 下面的这个目录
  • 在mamba-1p1p1下的 setup.py 修改第41行配置:
FORCE_BUILD = os.getenv("MAMBA_FORCE_BUILD", "TRUE") == "TRUE"

修改第261行配置为(可选,相当于在 BuildExtension 后多加了一个.with_options(use_ninja=False)):

cmdclass={"bdist_wheel": CachedWheelsCommand, "build_ext": BuildExtension.with_options(use_ninja=False)}
  • 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/selective_scan_bwd_kernel.cuhcsrc/selective_scan/selective_scan_fwd_kernel.cuh 文件开头加入:
#ifndef M_LOG2E
#define M_LOG2E 1.4426950408889634074
#endif
  • 完成上述修改后,执行 pip install . 一般即可顺利编译,成功安装。
  • 本人编译好的Windows 下的适用于Vim的whl 也有:mamba-ssm-1.1.1 (只适用于torch 2.1),可直接下载安装或联系本人vx自取。利用 whl 安装命令为:
pip install mamba_ssm-1.1.1-cp310-cp310-win_amd64.whl

由于此时没有绕过selective_scan_cuda,在虚拟环境中(xxx\conda\envs\xxx\Lib\site-packages\)产生了 selective-scan-cuda.cp310-win-amd64.pyd 文件,所以运行速度较快。

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

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

相关文章

操作系统重点总结

文章目录 1. 操作系统重点总结1.1 操作系统简介1.1.1 操作系统的概念和功能1.1.2 操作系统的特征1.1.2.1 并发1.1.2.2 共享1.1.2.3 虚拟1.1.2.4 异步 1.1.3 操作系统的发展与分类1.1.4 中断和异常1.1.5 系统调用1.1.6 操作系统的体系结构1.1.7 操作系统简介总结 1.2 进程1.2.1 …

使用YApi平台来管理接口

快速上手 进入YApi官网&#xff0c;进行注册登录https://yapi.pro/添加项目 3. 添加分类 4. 添加接口 5. 添加参数 添加返回数据 可以添加期望 验证 YAPI&#xff08;Yet Another Practice Interface&#xff09;是一个现代化的接口管理平台&#xff0c;由淘宝团队…

【Python Tips】使用func_timeout库实现os.system()命令行的超时报错检测

一、引言 有时候在python项目代码中使用 os.system() 使用命令行调用外部程序或者函数时&#xff0c;由于我们不知道外部程序会不会因为一些未知原因崩掉&#xff0c;但我们又不想项目代码因此中断&#xff0c;因此&#xff0c;我们可以使用已有的func_timeout库来实现超时检测…

Python性能优化:代码加速与内存管理技巧

在Python编程中&#xff0c;性能优化往往是一个重要但常被忽视的话题。尽管Python以其简洁易读的语法和强大的标准库赢得了广泛的开发者基础&#xff0c;但在处理大规模数据或高性能要求的应用时&#xff0c;其解释执行和动态类型系统的特性可能会成为性能瓶颈。本文将探讨一系…

企业邮箱如何进行邮件监控

企业邮箱监控保障资产安全、合规性&#xff0c;防范网络攻击&#xff0c;提升员工行为。核心要素包括内容扫描、行为分析、合规性检查等。实施策略涉及技术选择、政策制定、员工培训。企业邮箱如何进行邮件监控呢&#xff1f;Zoho邮箱的eDiscovery功能可实现长期邮件保存和监控…

基于百度paddle检索系统的召回

所谓召回&#xff0c;无非就是用一段不规则文本模拟用户query查询&#xff0c;而要召回的是标准的titlekey,这些是要构建索引库的&#xff0c;所有相似文本对的第二个文本必须要在索引库里存在&#xff0c;不然就没法评估,因为标记都是0,还有召回1&#xff0c;召回5等,并不是什…

在Ubuntu 22 VPS服务器上更改phpMyadmin端口的方法

更改 Ubuntu 22 VPS服务器上的 phpMyAdmin 端口可以增强安全性和可管理性。但是具体应该怎么操作呢&#xff1f;接下来将带您了解在Ubuntu 22 VPS 服务器上更改phpMyadmin的端口全过程&#xff0c;一起来看看吧。 准备你的环境 在开始之前&#xff0c;让我们先确保你已做好一…

【前端逆向】最佳JS反编译利器,原来就是chrome!

有时候需要反编译别人的 min.js。 比如简单改库、看看别人的 min,js 干了什么&#xff0c;有没有重复加载&#xff1f;此时就需要去反编译Javascript。 Vscode 里面有一些反编译插件&#xff0c;某某Beautify等等。但这些插件看人品&#xff0c;运气不好搞的话&#xff0c;反…

Vue 项目中 marked.js 怎么定制链接的点击行为

在 Vue 3 组件中使用 marked.js 并定义有效的 handleLinkClick 函数&#xff0c;你可以采用以下几种方法&#xff1a; 使用组件方法和全局函数 在你的 Vue 组件中定义 handleLinkClick 方法&#xff0c;然后将其暴露到全局作用域&#xff1a; <template><div v-htm…

嵌入式软件文件目录

以下是一个清爽的文件夹分类建议&#xff0c;适用于大多数嵌入式软件项目&#xff1a; 1. 根目录 README.md&#xff1a;项目简介、安装步骤、配置说明等。LICENSE&#xff1a;项目使用的许可证文件。 2. 源代码目录 2.1 src 存放所有源代码文件。 2.2 子目录划分 bsp&a…

实验2-3-8 计算火车运行时间

//实验2-3-8 计算火车运行时间 /* 输入格式&#xff1a;输入在一行中给出2个4位正整数&#xff0c;其间以空格分隔&#xff0c;分别表示火车的出发时间和到达时间。 每个时间的格式为2位小时数&#xff08;00-23&#xff09;和2位分钟数&#xff08;00-59&#xff09;&#xff…

Mysql中DML的几种操作

DML&#xff08;Data Manipulation Language&#xff0c;数据操纵语言&#xff09;是SQL中用于添加、删除、更新和查询数据库记录的一类语句。在MySQL中&#xff0c;DML主要包括以下几种操作&#xff1a; 1. 插入&#xff08;INSERT&#xff09; 用途&#xff1a;向表中插入新…

类方法的分析和举例

在Python中&#xff0c;类方法是一种与类相关联的方法&#xff0c;而不是与类的实例相关联。类方法可以通过在方法定义时使用classmethod装饰器来创建。类方法的第一个参数通常是cls&#xff0c;它代表类本身&#xff0c;而不是类的实例。 class MyClass:class_attribute &qu…

ArcGIS for js SketchViewModel绘制点、线、面和圆(vue代码)

引入依赖&#xff08;前提要加载地图&#xff09;&#xff1a; import SketchViewModel from "arcgis/core/widgets/Sketch/SketchViewModel.js";import GraphicsLayer from "arcgis/core/layers/GraphicsLayer.js"; 创建SketchViewModel对象&#xff1a…

dockerfile部署镜像 ->push仓库 ->虚拟机安装建木 ->自动部署化 (详细步骤)

目录 创建私服仓库 vi /etc/docker/daemon.json vim deploy.sh判断脚本内容 创建 建木 后端部署 命名空间 设置密码用户名 创建git仓库 gitignore文件内容 图形项目操作 git maven docker镜像 点击流程日志 vim /etc/docker/daemon.json 执行部署脚本 ip 开发…

【嵌入式英语教程--4】C语言中的控制结构

C语言中的控制结构 英文原文 Control structures in the C programming language allow you to control the flow of execution in your programs. This includes decision-making constructs like if, else, and switch, as well as looping constructs such as for, while,…

RuntimeError: No CUDA GPUs are available

RuntimeError: No CUDA GPUs are available 目录 RuntimeError: No CUDA GPUs are available 【常见模块错误】 【解决方案】 解决步骤如下&#xff1a; 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科…

Redis:集群测试及删除key

集群性能测试&#xff1a; redis-benchmark -h localhost -p 6379 -c 100 -n 100000 其中代表100个并发连接&#xff0c;100000个请求&#xff0c;检测host为localhost 端口为6379的redis服务器性能 命令删除相关key&#xff1a; src/redis-cli -h 127.0.0.1 -p 6379 -a …

Spring 高级解析 07

文章目录 1. Spring 概述&#xff08;基本情况&#xff09;1.1 Spring 的优势1.2 Spring 的核⼼结构 2. 核⼼思想 IoC 和 AOP2.1 什么是IoC&#xff1f;2.2 什么是AOP2.3 AOP在解决什么问题 3. Spring IoC ⾼级应⽤3.1 BeanFactory与ApplicationContext区别3.1.1 BeanFactory3.…

Android虚假定位的实现与防护

Android中常用的定位方式 一&#xff0c;GPS定位 定义&#xff1a;全球卫星定位系统&#xff0c;直接和卫星交互&#xff0c;获取设备经纬度 优点&#xff1a; 走卫星通信通道&#xff0c;无需打开Wifi或流量就能获得位置信息 精确度最高&#xff0c;几米到几十米 缺点&a…