【Mamba】Mamba的部署

ubuntu系统安装11.6+版本的cuda

可以参考这两篇博客
ubuntu22.04多版本安装cuda及快速切换(cuda11.1和11.8)_ubuntu调整cuda版本
【Linux】在一台机器上同时安装多个版本的CUDA(切换CUDA版本)_linux安装多个cuda

安装CUDA

https://developer.nvidia.com/cuda-toolkit-archive

找到11.8版本的cuda
依次选择Linux x86_64 Ubuntu 22.04 runfile(local)

wget https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.runsudo sh cuda_11.8.0_520.61.05_linux.run
sudo sh cuda_11.8.0_520.61.05_linux.run

运行上述两个命令
在这里插入图片描述
用enter把Driver去掉勾选 然后用方向键移动到最下面的enter然后回车

在这里插入图片描述选择no

在这里插入图片描述

出现这样说明cuda安装成功
我们暂时先不去修改环境变量,为了不影响现有的CUDA环境。之后会用脚本进行切换

安装cuDNN

https://developer.nvidia.com/rdp/cudnn-archive

从这里下载cuDNN

在这里插入图片描述
我们输入

cd /usr/local/
ls

现在有三个版本的cuda文件

我们将下载的cudnn解压到对应的文件夹下面并且赋予执行权限

在这里插入图片描述

sudo cp include/cudnn.h /usr/local/cuda-11.8/include
sudo cp lib/libcudnn*   /usr/local/cuda-11.8/lib64
sudo chmod a+r /usr/local/cuda-11.8/include/cudnn.h
sudo chmod a+r /usr/local/cuda-11.8/lib64/libcudnn*

切换CUDA版本

我们使用以下命令在/usr/local/ 目录下新建一个switch-cuda的脚本

sudo vim /usr/local/switch-cuda.sh

把以下代码复制粘贴进去

	#!/usr/bin/env bash# Copyright (c) 2018 Patrick Hohenecker## Permission is hereby granted, free of charge, to any person obtaining a copy# of this software and associated documentation files (the "Software"), to deal# in the Software without restriction, including without limitation the rights# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell# copies of the Software, and to permit persons to whom the Software is# furnished to do so, subject to the following conditions:## The above copyright notice and this permission notice shall be included in all# copies or substantial portions of the Software.## THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE# SOFTWARE.# author:   Patrick Hohenecker <mail@paho.at># version:  2018.1# date:     May 15, 2018set -e# ensure that the script has been sourced rather than just executedif [[ "${BASH_SOURCE[0]}" = "${0}" ]]; thenecho "Please use 'source' to execute switch-cuda.sh!"exit 1fiINSTALL_FOLDER="/usr/local"  # the location to look for CUDA installations atTARGET_VERSION=${1}          # the target CUDA version to switch to (if provided)# if no version to switch to has been provided, then just print all available CUDA installationsif [[ -z ${TARGET_VERSION} ]]; thenecho "The following CUDA installations have been found (in '${INSTALL_FOLDER}'):"ls -l "${INSTALL_FOLDER}" | egrep -o "cuda-[0-9]+\\.[0-9]+$" | while read -r line; doecho "* ${line}"doneset +ereturn# otherwise, check whether there is an installation of the requested CUDA versionelif [[ ! -d "${INSTALL_FOLDER}/cuda-${TARGET_VERSION}" ]]; thenecho "No installation of CUDA ${TARGET_VERSION} has been found!"set +ereturnfi# the path of the installation to usecuda_path="${INSTALL_FOLDER}/cuda-${TARGET_VERSION}"# filter out those CUDA entries from the PATH that are not needed anymorepath_elements=(${PATH//:/ })new_path="${cuda_path}/bin"for p in "${path_elements[@]}"; doif [[ ! ${p} =~ ^${INSTALL_FOLDER}/cuda ]]; thennew_path="${new_path}:${p}"fidone# filter out those CUDA entries from the LD_LIBRARY_PATH that are not needed anymoreld_path_elements=(${LD_LIBRARY_PATH//:/ })new_ld_path="${cuda_path}/lib64:${cuda_path}/extras/CUPTI/lib64"for p in "${ld_path_elements[@]}"; doif [[ ! ${p} =~ ^${INSTALL_FOLDER}/cuda ]]; thennew_ld_path="${new_ld_path}:${p}"fidone# update environment variablesexport CUDA_HOME="${cuda_path}"export CUDA_ROOT="${cuda_path}"export LD_LIBRARY_PATH="${new_ld_path}"export PATH="${new_path}"echo "Switched to CUDA ${TARGET_VERSION}."set +ereturn

按ESC 输入:x 回车保存退出

然后我们再进入/usr/local/

/usr/local/
source switch-cuda.sh

在这里插入图片描述

自动显示我们目前已经安装的CUDA版本
然后我们输入以下命令切换到刚才安装的11.8版本

source switch-cuda.sh 11.8

然后我们看到系统提示我们已经切换到了11.8版本的cuda,为了确认,我们再检查一下
在这里插入图片描述
输入命令

nvcc -V

显示已经切换了版本

Mamba安装

参考教程
【Mamba安装】99%的人都出错!带你手把手解决selective_scan_cuda冲突问题

环境要求

GitHub - state-spaces/s4: Structured state space sequence models

这个是原始版本的Mamba的环境要求
在这里插入图片描述

可以看到,他的要求是

  • Python 3.9+
  • Pytorch 1.10+
  • cuda 11.6+

GitHub - hustvl/Vim: [ICML 2024] Vision Mamba: Efficient Visual Representation Learning with Bidirectional State Space Model

这个是Vim(Vision Mamba)的部署要求

在这里插入图片描述

我们这里以Vim的安装部署要求来,因为Vim依赖于Mamba

  • Python 3.10
  • Pytorch 2.1.1
  • cuda 11.8

新建一个虚拟环境

我们新建一个叫做Vim的虚拟环境

 conda create -n Vim python=3.10conda activate Vim

在这里去找pytorch的安装版本

https://pytorch.org/

在这里插入图片描述

找到2.1.1版本的pytorch

conda install pytorch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 pytorch-cuda=11.8 -c pytorch -c nvidia

安装packaging

conda install packaging

安装causal-conv1d和mamba-ssm(重点!!!)

首先可以参考一下以前的一些经验和踩坑记录

[最佳实践] conda环境内安装cuda 和 Mamba的安装

运行Mamba项目时无法直接用pip install安装causal_conv1d和mamba_ssm_pip install causal-conv1d

总结一下,常规的方法是直接用pip install
命令如下:

pip install causal_conv1d
python setup.py install

但是有特别大的概率会报各种错误,比如:

  1. Building wheel for causal-conv1d (setup.py) ... error
  2. error: command '/usr/bin/gcc' failed with exit code 1
  3. RuntimeError: Error compiling objects for extension
  4. ERROR: Could not build wheels for causal-conv1d, which is required to install pyproject.toml-based projects
    一种解决方案是git clone源码然后编译

另外一个办法是下载编译好的whl在本地安装或者直接下载源码编译

Releases · Dao-AILab/causal-conv1d

在这里插入图片描述

下载了causal_con1d 的v1.2.0版本的whl

以及

GitHub - state-spaces/mamba: Mamba SSM architecture

在这里插入图片描述
下载了mamba-ssm1.2.0的源码

在这里插入图片描述
放到虚拟环境的文件夹下,打开mamba-1.2.0文件夹

在这里插入图片描述

打开setup.py

修改。
在这里插入图片描述
首先把这三行给注释掉

在这里插入图片描述
然后再加上这三行

然后是第264行 修改

在这里插入图片描述

改成下面的

在这里插入图片描述
不用ninja去构建

保存退出

然后安装causal_conv1d

 pip install causal_conv1d-1.2.0.post2+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl

在这里插入图片描述

显示成功了

为了验证是否成功

import causal_conv1d

在这里插入图片描述

目测是没有问题的,但是很多博客显示这里还会报错,如果报错,就下载causal_conv1d的源码进行编译

编译的时候
Anaconda3/envs/Vim/lib/python3.10/site-packages/torch/utils下

找到cpp_extension.py 修改

手动加入11.8

在这里插入图片描述
修改后

在这里插入图片描述
然后我们编译 mamba-ssm

安装命令是

pip install . --no-cache-dir --verbose

在这里插入图片描述

报错

显示是cuda版本的问题

在Vim虚拟环境下输入nvcc -V,显示的cuda 版本是11.1
很奇怪
然后在Vim的环境下 cd /usr/local/
source switch-cuda.sh 11.8 就是运行之前写的那个切换cuda版本的脚本
然后再输入nvcc -V,显示的cuda 版本是11.8
然后重新编译,OK了

编译好了

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【React打卡学习第一天】

React入门 一、简介二、基本使用1.引入相关js库2.babel.js的作用 二、创建虚拟DOM三、JSX&#xff08;JavaScript XML&#xff09;1.本质2.作用3.基本语法规则定义虚拟DOM时&#xff0c;不要写引号。标签中混入JS表达式时要用{}。样式的类名指定不要用class,要用className.内联…

solidity基础语法(以太坊solidity合约)

solidity基础语法&#xff08;以太坊solidity合约&#xff09; 1-值类型和取值范围2-引用类型3-引用类型高阶4-固定数组和动态数组 1-值类型和取值范围 https://learnblockchain.cn/docs/solidity/introduction-to-smart-contracts.html#subcurrency https://learnblockchain…

Nest.js 实战 (二):如何使用 Prisma 和连接 PostgreSQL 数据库

什么是 Prisma? Prisma 是一个开源的下一代 ORM。它包含了以下部分&#xff1a; Prisma Client: 自动生成、类型安全的查询构建器&#xff0c;用于 Node.js 和 TypeScriptPrisma Migrate: 数据迁移系统Prisma Studio: 查询和编辑数据库中数据的图形化界面 Prisma 客户端可以…

React、Vue的password输入框组件,如何关闭自动填充?

有时候我们的表单使用了一个password组件&#xff0c;这时候每次打开新建&#xff0c;都会自动获取浏览器缓存的密码&#xff0c;但是它的上一个input输入框并不是用户名&#xff0c;这时候我们希望我们的表单&#xff0c;每次点开的时候密码是空的&#xff0c;让用户自动输入&…

PyTorch张量数值计算

文章目录 1、张量基本运算2、阿达玛积3、点积运算4、指定运算设备⭐5、解决在GPU运行PyTorch的问题 &#x1f343;作者介绍&#xff1a;双非本科大三网络工程专业在读&#xff0c;阿里云专家博主&#xff0c;专注于Java领域学习&#xff0c;擅长web应用开发、数据结构和算法&am…

【设计模式】【创建型模式】【02工厂模式】

系列文章 可跳转到下面链接查看下表所有内容https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501文章浏览阅读2次。系列文章大全https://blog.csdn.net/handsomethefirst/article/details/138226266?spm1001.2014.3001.5501 目录 系…

【安全】系统安全设计规范(DOC完整版)

1.1安全建设原则 1.2 安全管理体系 1.3 安全管理规范 1.4 数据安全保障措施 1.4.1 数据库安全保障 1.4.2 操作系统安全保障 1.4.3 病毒防治 1.5安全保障措施 1.5.1实名认证保障 1.5.2 接口安全保障 1.5.3 加密传输保障 1.5.4终端安全保障 软件资料清单列表部分文档&…

只需点击几下即可从Mac恢复已删除或丢失的文件

当无聊袭来时&#xff0c;您的 Mac 不是一个有趣的朋友吗&#xff1f;它确实是您“全天候”的主力军&#xff0c;可以兼顾日常工作。而且&#xff0c;它存储了大量关键文件&#xff0c;包括视频、图片、歌曲、文档等等。 如果丢失此数据会怎样&#xff1f;你的“数字生活”可能…

Vue学习---创建非默认选项项目vue2 vue3

vue create test-vue2 选择 Manually select features 选择初始化创建的组件 空格选中然后回车 vue-cli 在询问你&#xff0c;对于 Router 你是否以它的 history 模式使用它&#xff1f;默认值是 Yes 。 如果不使用 Router 的 history 模式&#xff0c;那自然就是 hash 模式。 …

CVE-2024-24549 Apache Tomcat - Denial of Service

https://lists.apache.org/thread/4c50rmomhbbsdgfjsgwlb51xdwfjdcvg Apache Tomcat输入验证错误漏洞&#xff0c;HTTP/2请求的输入验证不正确&#xff0c;会导致拒绝服务&#xff0c;可以借助该漏洞攻击服务器。 https://mvnrepository.com/artifact/org.apache.tomcat.embed/…

【Linux杂货铺】期末总结篇3:用户账户管理命令 | 组账户管理命令

&#x1f308;个人主页&#xff1a;聆风吟_ &#x1f525;系列专栏&#xff1a;Linux杂货铺、Linux实践室 &#x1f516;少年有梦不应止于心动&#xff0c;更要付诸行动。 文章目录 第五章5.1 ⛳️Linux 账户5.2 ⛳️用户配置文件和目录&#xff08;未完待续&#xff09;5.2.1 …

南京邮电大学统计学课程实验2 用EXCEL进行参数估计假设检验 指导

一、实验描述 实验目的 1、学会用Excel进行参数估计&#xff1b; 2、学会用Excel进行z检验-双样本平均差检验&#xff1b; 实验环境 实验中使用以下软件和硬件设备 &#xff08;1&#xff09;Windows XP操作系统&#xff1b; &#xff08;2&#xff09;PC机、EXCEL软件&…

python实现九九乘法表

1.self i 1 while i<9:j 1while j< i:print("j * i ",end)print(j * i ,end)print(" ",end)j 1i 1print() 实现结果&#xff1a; 2.改进 i 1 while i<9:j 1while j< i:# print("j * i ",end)# print(j * i ,end)# print(&…

誉天人工智能AI大模型火热报名中(HCIA-AI Solution Architect课程简介)

课程亮点 1.涵盖大模型prompt、RAG、LangChain、Fine-Turning、多模态、视觉生成等主流开源大模型技术 2.OpenAl开源大模型、昇腾大模型产品丝滑融合 3.从大模型产品开发到商业闭环到产品运营一站式打造大模型高级解决方案架构师 4.金牌讲师团队昇腾计算一线专家倾力交付 5.岗位…

2024嘶吼网络安全产业图谱(高清完整版)

在数字化和智能化浪潮的推动下&#xff0c;网络安全产业正处于一个快速变革的时期。从传统的防御手段和被动的威胁应对&#xff0c;到如今主动预防和智能检测技术的普及&#xff0c;网络安全领域的焦点和需求正不断演进。为了更好的理解当前网络安全产业现状和未来发展方向&…

网络请求之urllib.parse的使用

urllib.parse的作用是解析url。 为什么要解析呢&#xff0c;我来举个例子。在百度图片里面搜一下历史人物&#xff0c;比如樱由罗&#xff1a; 点击百度一下跳转到页面如下&#xff1a; 我们找到url分析一下看看&#xff1a; https://image.baidu.com/search/index?tnbaidu…

PCL从理解到应用【06】 RANSAC原理分析 | 案例分析 | 代码实现

前言 本文分析RANSAC算法的原理&#xff0c;集合案例深入理解&#xff0c;同时提供源代码。 RANSAC&#xff0c;随机采样一致性&#xff0c;是一种迭代的算法&#xff0c;用于从一组包含异常值的数据中估计模型参数。 应用案例&#xff1a;平面拟合、线段拟合、球体拟合等。…

【C++报错已解决】 “Undefined Reference“

&#x1f3ac; 鸽芷咕&#xff1a;个人主页 &#x1f525; 个人专栏: 《C干货基地》《粉丝福利》 ⛺️生活的理想&#xff0c;就是为了理想的生活! 前言 在编译程序时&#xff0c;遇到 “Undefined Reference” 报错总是令人头疼。这个错误提示通常意味着编译器找不到某个符号…

ctfshow 信息收集(1-20)

Web1 F12查看页面元素 Ctrlu查看源码 Web2 Ctrlu查看源码 Js代码知识点 //禁用鼠标右键 window.document.oncontextmenu function() { return false; } //禁用复制 window.document.onselectstart function() { return false; } //禁用F12 document.onkeydown fun…

【数学建模】技术革新——Lingo的使用超详解

目录 基础知识 1. 变量声明 示例 2. 常量声明 语法格式 示例 3. 目标函数 语法格式 示例 4. 约束条件 语法格式 示例 5. 完整的Lingo模型示例 示例 解释 6. 整数变量声明 语法格式 示例 7. 非线性规划 示例 8. 多目标优化 语法格式 示例 9. 数据输入与…