0


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

导航

安装教程导航

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

安装包导航

  • Mamba 安装教程博客中涉及到的全部安装包:mamba 安装包,包括Windows和Linux
  • Vim 安装教程博客中涉及到的全部安装包:vim 安装包,包括Windows和Linux
  • Vmamba 安装教程博客中涉及到的全部安装包:vmamba 安装包,包括Windows和Linux
  • Mamba2 及 更高版本causal_conv1d Windows安装包:mamba 2 windows安装包

目录

背景

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

本文涉及到的所有文件均可在:vim 安装包,包括Windows和Linux下载。

(安装问题 / 资源自取售后 / 论文合作想法请+vx:

931744281

Windows 下环境准备

  1. 前期环境准备,同原来博客 “Mamba 环境安装踩坑问题汇总及解决方法” ,具体为:
conda create -n mamba python=3.10
conda activate mamba
conda installcudatoolkit==11.8
pip installtorch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118
pip installsetuptools==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
setCAUSAL_CONV1D_FORCE_BUILD=TRUE
pip install.

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

pip install causal_conv1d-1.0.0-cp310-cp310-win_amd64.whl
  1. Vim 官方代码仓给的 causal-conv1d 源码有误,过于老旧且不兼容,causal-conv1d版本应≥1.1.0,类似 “Window 下Mamba 环境安装踩坑问题汇总及解决方法 (无需绕过selective_scan_cuda)”
git clone https://github.com/Dao-AILab/causal-conv1d.git
cd causal-conv1d
git checkout v1.1.1  # 安装最新版的话,此步可省略setCAUSAL_CONV1D_FORCE_BUILD=TRUE
pip install.

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

pip install causal_conv1d-1.1.1-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 函数改为
voidselective_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.staticconstexprint 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;staticconstexprint kSmemSize = Ktraits::kSmemSize + kNRows * MAX_DSTATE *sizeof(typenameKtraits::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 函数改为
#defineBOOL_SWITCH(COND, CONST_NAME,...)\[&]{\if(COND){\staticconstexprbool CONST_NAME =true;\return__VA_ARGS__();\}else{\staticconstexprbool CONST_NAME =false;\return__VA_ARGS__();\}\}()

(这两步是将

constexpr

改为

static constexpr

  • csrc/selective_scan/selective_scan_bwd_kernel.cuhcsrc/selective_scan/selective_scan_fwd_kernel.cuh 文件开头加入:
#ifndefM_LOG2E#defineM_LOG2E1.4426950408889634074#endif
  • 完成上述修改后,执行 pip install . 一般即可顺利编译,成功安装。
  • 本人编译好的Windows 下的适用于Vim的whl 也有:mamba-ssm-1.1.1 (只适用于torch 2.1,CUDA 11.8),可直接下载安装或联系本人vx自取售后。利用 whl 安装命令为:
pip install mamba_ssm-1.1.1-cp310-cp310-win_amd64.whl --no-dependencies causal_conv1d

由于此时没有绕过selective_scan_cuda,在虚拟环境中(

xxx\conda\envs\xxx\Lib\site-packages\

)产生了 selective-scan-cuda.cp310-win-amd64.pyd 文件,所以运行速度较快。

出现的问题

1. 出现

KeyError: 'HOME'

具体来说出现以下报错

Traceback (most recent call last):
  .....
  File "xxx\models\vimamba.py", line 115, in forward
    hidden_states, residual = fused_add_norm_fn(
  File "D:\Anaconda\envs\xxx\lib\site-packages\mamba_ssm\ops\triton\layernorm.py", line 478, in rms_norm_fn
    return LayerNormFn.apply(x, weight, bias, residual, eps, prenorm, residual_in_fp32, True)
  File "D:\Anaconda\envs\xxx\lib\site-packages\torch\autograd\function.py", line 539, in apply
    return super().apply(*args, **kwargs)# type: ignore[misc]
  File "D:\Anaconda\envs\xxx\lib\site-packages\mamba_ssm\ops\triton\layernorm.py", line 411, in forward
    y, mean, rstd, residual_out = _layer_norm_fwd(
  File "D:\Anaconda\envs\xxx\lib\site-packages\mamba_ssm\ops\triton\layernorm.py", line 155, in _layer_norm_fwd
    _layer_norm_fwd_1pass_kernel[(M,)](
  File "D:\Anaconda\envs\xxx\lib\site-packages\triton\runtime\jit.py", line 106, in launcher
    return self.run(*args, grid=grid, **kwargs)
  File "D:\Anaconda\envs\xxx\lib\site-packages\triton\runtime\autotuner.py", line 73, in run
    timings ={config: self._bench(*args, config=config, **kwargs)
  File "D:\Anaconda\envs\xxx\lib\site-packages\triton\runtime\autotuner.py", line 73, in<dictcomp>
    timings ={config: self._bench(*args, config=config, **kwargs)
  File "D:\Anaconda\envs\xxx\lib\site-packages\triton\runtime\autotuner.py", line 63, in _bench
    return do_bench(kernel_call)
  File "D:\Anaconda\envs\xxx\lib\site-packages\triton\testing.py", line 136, in do_bench
    fn()
  File "D:\Anaconda\envs\xxx\lib\site-packages\triton\runtime\autotuner.py", line 62, in kernel_call
    self.fn.run(*args, num_warps=config.num_warps, num_stages=config.num_stages, **current)
  File "<string>", line 41, in _layer_norm_fwd_1pass_kernel
  File "D:\Anaconda\envs\xxx\lib\site-packages\triton\compiler.py", line 1230, in compile
    so_cache_manager = CacheManager(so_cache_key)
  File "D:\Anaconda\envs\xxx\lib\site-packages\triton\compiler.py", line 1102, in __init__
    self.cache_dir = os.environ.get('TRITON_CACHE_DIR', default_cache_dir())
  File "D:\Anaconda\envs\xxx\lib\site-packages\triton\compiler.py", line 1093, in default_cache_dir
    return os.path.join(os.environ["HOME"], ".triton", "cache")
  File "D:\Anaconda\envs\xxx\lib\os.py", line 680, in __getitem__
    raise KeyError(key) from None
KeyError: 'HOME'

在Win下还需要修改 mamba 安装路径下 D:\Anaconda\envs\xxx\lib\site-packages\mamba_ssm\ops\triton\layernorm.py 文件,具体来说,是把原来 layernorm.py 里面的

deflayer_norm_fn(
    x,
    weight,
    bias,
    residual=None,
    eps=1e-6,
    prenorm=False,
    residual_in_fp32=False,
    is_rms_norm=False,):return LayerNormFn.apply(x, weight, bias, residual, eps, prenorm, residual_in_fp32, is_rms_norm)defrms_norm_fn(x, weight, bias, residual=None, prenorm=False, residual_in_fp32=False, eps=1e-6):return LayerNormFn.apply(x, weight, bias, residual, eps, prenorm, residual_in_fp32,True)

改为

deflayer_norm_fn(
    x,
    weight,
    bias,
    residual=None,
    eps=1e-6,
    prenorm=False,
    residual_in_fp32=False,
    is_rms_norm=False,):return layer_norm_ref(x, weight, bias, residual, eps, prenorm, residual_in_fp32)defrms_norm_fn(x, weight, bias, residual=None, prenorm=False, residual_in_fp32=False, eps=1e-6):return rms_norm_ref(x, weight, bias, residual, eps, prenorm, residual_in_fp32)

2. 出现

TypeError: causal_conv1d_fwd()

具体来说,出现以下报错:

conv1d_out = causal_conv1d_cuda.causal_conv1d_fwd(
TypeError: causal_conv1d_fwd(): incompatible function arguments. The following argument types are supported:

这种情况是 causal_conv1d 和 mamba_ssm 的版本兼容问题。
实测发现 Vim 官方给的 causal_conv1d 源码过于老旧,应该按照≥1.1.0的版本。

标签: vim python mamba

本文转载自: https://blog.csdn.net/yyywxk/article/details/140751923
版权归原作者 yyywxk 所有, 如有侵权,请联系我们删除。

“Window 下 Vim 环境安装踩坑问题汇总及解决方法”的评论:

还没有评论