Windows11配置Mamba环境(本人亲测有效)

目录

1.前期环境配置,这里推荐使用Conda虚拟环境,没配置这个的,可以参考这个安装教程最新版最详细Anaconda新手安装+配置+环境创建教程-CSDN博客。安装完后会有一个类似Windows下的命令提示符的应用,即,Anaconda Prompt, 直接打开它。​编辑​编辑

2.再是因果卷积的安装,即 causal-conv1d。同样再之前那个界面输入以下命令:

3.Mamba-ssm环境安装。在命令行输入以下命令,这里最好是选择mamba1.1.3版本的,同时git无法连接的话,跟之前一样,直接去网址栏输入这个链接就行,然后选择1.1.3版本的。

1.前期环境配置,这里推荐使用Conda虚拟环境,没配置这个的,可以参考这个安装教程最新版最详细Anaconda新手安装+配置+环境创建教程-CSDN博客。安装完后会有一个类似Windows下的命令提示符的应用,即,Anaconda Prompt, 直接打开它。

在这个界面中输入以下命令:(这里的命令,不要直接全部复制粘贴到界面中,一个一个复制粘贴)

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 本来需要自己编译,我这里提供编译好的https://drive.google.com/file/d/1lYXEro5ZbLsRLFLOkiyoY2ePFDWRVtVr/view?usp=drive_link

2.再是因果卷积的安装,即 causal-conv1d。同样再之前那个界面输入以下命令:

git clone https://github.com/Dao-AILab/causal-conv1d.git
cd causal-conv1d
set CAUSAL_CONV1D_FORCE_BUILD=TRUE
pip install .

这里提醒一下,如果git失败了,连接不上。可以直接再网址栏输入这个GitHub - Dao-AILab/causal-conv1d: Causal depthwise conv1d in CUDA, with a PyTorch interface将causal-conv1d的压缩包下载下来,然后解压,copy到你命令行界面的工作目录,就是当前目录咯。(如果不想浪费时间,我这里直接提供Windows下编译好的https://drive.google.com/file/d/1tzunHZ3SHHyI8qNT1DfxlxBVwalqjr3R/view?usp=drive_link,可以直接下载安装(只适用于torch2.1)。同样的把这个编译好的copy到当前命令行的工作目录,再执行以下这个安装命令)。

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

3.Mamba-ssm环境安装。在命令行输入以下命令,这里最好是选择mamba1.1.3版本的,同时git无法连接的话,跟之前一样,直接去网址栏输入这个链接就行,然后选择1.1.3版本的。

git clone https://github.com/state-spaces/mamba.git
cd mamba

4.Windows下Mamba-ssn环境编译。

  • 在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 &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.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__();                                                    \
        }                                                                            \
    }()
  • 在 csrc/selective_scan/selective_scan_bwd_kernel.cuh 和 csrc/selective_scan/selective_scan_fwd_kernel.cuh 文件开头加入:
#ifndef M_LOG2E
#define M_LOG2E 1.4426950408889634074
#endif
  • 完成上述修改后,执行 pip install . 一般即可顺利编译,成功安装。
  • 我也有Windows下编译好的mamba-1.1.3的whl包,可以评论区私我获取。
  • 以上安装步骤,本人亲测有效,我的显卡配置是RTX 4070ti,cuda最高支持应该要11.8以上,太老的显示不知道是否可以安装成功,安装过程有任何问题可以评论区进行评论哦。

### 如何配置 Mamba 环境 为了确保 Mamba 环境能够顺利配置并运行,在安装过程中需要注意多个方面,包括但不限于环境变量的设定以及依赖库的安装。 #### 安装 Miniconda 或 Anaconda 考虑到 Mamba 是 Conda 的替代品,因此首先需要有一个基础的 Conda 环境。可以选择安装 Miniconda 或者完整的 Anaconda 发行版[^2]。 ```bash # 下载Miniconda脚本 wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh # 运行安装程序 bash Miniconda3-latest-Linux-x86_64.sh ``` #### 安装 Mamba 一旦有了 Conda 基础之后,就可以通过 conda 渠道来安装 mamba: ```bash conda install mamba -n base -c conda-forge ``` 这一步骤会将 mamba 添加到系统的默认环境中,并允许后续创建其他隔离的工作空间时使用它作为包管理工具。 #### 创建新的 Python 环境 利用 `mamba` 来代替传统的 `conda create` 命令可以加速整个过程并且减少冲突的可能性: ```bash mamba create --name myenv python=3.9 ``` 这里 `-n` 参数指定了新环境的名字 (`myenv`) 和所使用的 Python 版本 (这里是 3.9)。 #### 激活与停用环境 当完成了上述操作后,可以通过简单的命令激活或退出特定的虚拟环境: ```bash # 激活名为 'myenv' 的环境 conda activate myenv # 当完成工作后关闭当前活动环境 conda deactivate ``` 对于希望进一步优化性能或是遇到问题的情况,建议查阅官方文档获取更多细节和支持信息[^1]。 #### 解决常见错误提示 有时可能会碰到一些权限不足或者其他类型的报错消息;此时应当仔细阅读终端输出的信息,按照指示调整路径访问权或者尝试切换至管理员模式重试一次。另外也可以参考已有的解决方案文章了解他人是如何克服相似难题的。
评论 62
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值