宁睿 发表于 2024-12-29 00:03:18

Linux上复现Vision Mamba记录

一、环境设置

      需要安装的环境:Python3.10+cuda11.8+torch2.1.1
      由于Mamba中的某些包只支持Linux体系,因此是最好选择Linux体系。
1.安装cuda

使用如下下令查察显卡支持的最高cuda版本,待安装的cuda版本需低于该版本。如图,我的显卡最高支持cuda12.2.vision_mamba最好安装cuda11.8的版本 
nvidia-smi
https://i-blog.csdnimg.cn/direct/dcad86e721064997a657799d60f15617.png
在官网找到11.8:CUDA Toolkit Archive | NVIDIA Developer
https://i-blog.csdnimg.cn/direct/06ed6047d31e45c2acca3e8ea3ca2402.png
(在下令行中查察自己体系的版本号和发行版本:)
lsb_release -a https://i-blog.csdnimg.cn/direct/5f35cfab688d4bc19643d43b86822d23.png
按照自己的版本号举行选择,得到两行下令.
https://i-blog.csdnimg.cn/direct/8c8a8a5222fc4b14b9b271787bd2384e.png
可以直接在下令行中输入以上下令举行安装,但是时间比较久。
因此我们可以复制下令行后面的链接直接举行下载,之后上传到Ubuntu体系上。链接如下:https://developer.download.nvidia.com/compute/cuda/11.8.0/local_installers/cuda_11.8.0_520.61.05_linux.run
直接复制该链接会弹出下载任务,将其保存在Ubuntu体系的home/root文件夹下。使用下令行进入该文件夹下:
cd home/root 输入第二条指令举行安装
sudo sh cuda_11.8.0_520.61.05_linux.run 安装过程中会弹出第一个对话框,这里默认已经安装过Nvidia驱动,因此选择  continue 。
在弹出的第二个对话框中输入 accept 。按下回车键
末了选择 install
安装成功
https://i-blog.csdnimg.cn/direct/97059950ede444b4ba511a555a165334.png
2.设置环境变量

首先在linux中安装vim编辑器:
sudo apt-get install vim-gtk 为方便使用,对vim举行简单设置(可跳过)
开始对vim举行设置
首先进入vim设置文件
sudo vim /etc/vim/vimrc 按下 "i" 进入编辑模式
set ai                  自动缩进,与上一行保持一致的自动空格
set ic                  在查询模型与匹配模式下忽略大小写
set number                左侧显示行号
set showmatch             显示括号配对,并高亮显示相匹配的括号
set showmode            文本输入模型下,加亮显示模式指示器
set showcmd               在状态栏显示所执行的指令,未完成的指令片段
set warn                  长行显示自动折行
set cindent               以C/C++模式缩进
set ruler               打开状态栏标尺
set scrolloff=6         设置光标离窗口上下6行时窗口自动滚动
set tabstop=4             设置Tab长度为4
set wrap                  自动换行显示
syntax enable
syntax on               自动语法高亮
将上述设置粘贴在文件末尾
按 “Esc” 退出编辑模式  按“Shift+:” 输入下令“wq”保存并退出(注:Shift后的:必须是英笔墨符)
设置结束
在下令行中输入
sudo vim ~/.bashrc
在打开的文件末尾添加
export PATH=/usr/local/cuda-11.8/bin${PATH:+:${PATH}}
export LD_LIBRARY_PATH=/usr/local/cuda-11.8/lib64${LD_LIBRARY_PATH:+:${LD_LIBRARY_PATH}}
export CUDA_HOME=/usr/local/cuda-11.8
更新体系环境
source ~/.bashrc
sudo ldconfig
查察安装的cuda版本
nvcc -V
https://i-blog.csdnimg.cn/direct/7cf5df44bcb64c0298893b4b05d37c2b.png
显示11.8即安装成功.
3.安装Python3.10版本

参考这篇博客举行安装:Ubuntu python3.10 安装教程,并更新python,pip默认指向为python3.10, pip3(超详细教程)_ubuntu安装python3.10-CSDN博客
4.创建虚拟环境

这里如果安装了anaconda可以使用conda下令举行创建,可以参考这篇博客举行linux上安装Anaconda并创建一个虚拟环境_在虚拟机使用conda搭建python3.10环境linux-CSDN博客我使用的是venv创建虚拟环境
首先进入项目文件夹,创建虚拟环境,名称自己起
cd vision_mamba
python3 -m venv <name> 使用source下令找到环境中bin文件下的activate文件来激活环境
(by the way :退出环境直接在终端输入 “deactivate”  )
source vision_mamba/<环境名>/bin/activate https://i-blog.csdnimg.cn/direct/be6e0661af234ab5811c20fd7f4e4b16.png
我的环境名称是 vim ,但是我的环境没有创建在vision_mamba文件夹下,vision_mamba文件中原本含有vim文件。因此,为防止混淆,发起最好使用别的名称作为虚拟环境的名称。
5.安装Pytorch

使用离线安装方式,时间快且不易出错
进入PyTorch官网,选择Previous PyTorch Versions | PyTorch 选择要安装的torch版本,这里最好安装torch2.1.1
https://i-blog.csdnimg.cn/direct/6fabd613dec14176ada9b89e96d8ced2.png
可以选择下令行安装,但是这里我选择离线安装.在欣赏器中输入下令行后面的链接。
https://download.pytorch.org/whl/cu118 https://i-blog.csdnimg.cn/direct/cf724107383642a381cf9984c6266b03.png
分别选择torch2.1.1、torchvision0.16.1和torchaudio2.1.1的gpu、linux和python3.10版本举行下载。
 https://i-blog.csdnimg.cn/direct/991ec41a4e8847988def69824efaff08.png
进入保存的文件夹中
输入以下下令举行安装(pip源路径下载太慢 因此我使用的是清华源)
pip install torch-2.1.1+cu118-cp310-cp310-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install torchaudio-2.1.1+cu118-cp310-cp310-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install torchvision-0.16.1+cu118-cp310-cp310-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple 6.下载vision_mamba环境依赖

进入vim文件夹之后pip直接安装
cd vision_mamba/vim
pip install -r vim/vim_requirements.txt 7.下载causal-conv1d

同样离线下载 进入该链接,下载保存在vision_mamba文件夹下
https://github.com/Dao-AILab/causal-conv1d/releases/download/v1.1.3/causal_conv1d-1.1.3%2Bcu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl 安装 
pip install causal_conv1d-1.1.3+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple 8.下载mamba_ssm

同样离线下载 进入该链接,下载保存在vision_mamba文件夹下
https://github.com/state-spaces/mamba/releases/download/v1.1.1/mamba_ssm-1.1.1%2Bcu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl 安装
pip install mamba_ssm-1.1.1+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl -i https://pypi.tuna.tsinghua.edu.cn/simple 此时mamba_ssm相干包已经被安装在虚拟环境中,我们需要用vision_mamba官方代码中的mamba1p1p文件中的mamba_ssm文件替换掉虚拟环境中的mamba_ssm文件夹。
首先删除虚拟环境中的mamba_ssm文件夹,路径是(1)
<虚拟环境名称>/lib/python3.10/site-packages/mamba_ssm
再复制官方代码中的mamba_ssm文件,路径为(2)
vision_mamba/mamba-1p1p1/mamba_ssm 将(2)中的mamba_ssm复制到以下文件中
<虚拟环境名称>/lib/python3.10/site-packages/
至此 环境设置结束.
二、运行代码

1.以cifar数据集为例

进入vision_mamba/vim/datasets.py文件中“Ctrl+F”找到Cifar数据集导入代码,加入红框中的代码
download = True
https://i-blog.csdnimg.cn/direct/3d5c6e755e5a4bf599656819b86a4080.png
2.进入main.py文件

修改数据集路径和默认数据集
https://i-blog.csdnimg.cn/direct/f174cda3ae284262957e5778f9a21df0.png
设置输出文件夹和device
https://i-blog.csdnimg.cn/direct/8f0a7e78dc7f41d387acda9c0dd7127e.png
修改epoch和batchsize之后可以输入下令实行代码
python3.10 main.py

运行截图:
https://i-blog.csdnimg.cn/direct/e69ddf10145e41a988a37a822f0903a1.png
by the way 如果误触导致练习中断,可以在output文件夹中找到checkpoint.pth文件继续举行练习
https://i-blog.csdnimg.cn/direct/24e3952a9db34609b4ac5ad963266e7e.png
详细而言,在main.py文件中找到"resume"超参数 设置default为checkpoint.pth大概best_checkpoint.pth文件的路径。在start_epoch中设置想开始练习的轮次.
https://i-blog.csdnimg.cn/direct/bbaed04e66b3401c8b37a0013fe9b6a2.png
三、验证

1.修改超参数

1.找到main文件中的“--funtine”超参数,在default字段填写练习好的权重文件路径。
https://i-blog.csdnimg.cn/direct/c3b3ea7ecbb5413b9729d7632dc81b8d.png
2.找到main文件中的“--eval”超参数,添加default字段,将其设置为“Ture”。
https://i-blog.csdnimg.cn/direct/73ad9d3dedaf4476896c7b5f5f17c742.png
2.开始验证

 输入下令实行代码
python3.10 main.py

运行截图:
https://i-blog.csdnimg.cn/direct/35d6e12b7abd421cbaba0d06f536ca2d.png
四、练习过程中的报错

1.TypeError: VisionTransformer.forward() got an unexpected keyword argument 'if_random_cls_token_position'

由于 VisionTransformer 类的 forward() 方法不接受名为 if_random_cls_token_position 和 if_random_token_rank 的参数。然而,代码中调用了 model(samples, if_random_cls_token_position=args.if_random_cls_token_position, if_random_token_rank=args.if_random_token_rank),传递了这两个参数,因此出现了 TypeError 错误。
需要更新 train_one_epoch 函数中的调用:
https://i-blog.csdnimg.cn/direct/01318dbe50004295a2acae40d15003de.png
根据报错找到engine.py中54行的位置
https://i-blog.csdnimg.cn/direct/8f8c1302489b4ca09bebdb7a47bdf04e.png
将55行取消注释 54行注释掉
https://i-blog.csdnimg.cn/direct/1305a152154745ebbbb75d2ba327a90e.png
问题解决。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Linux上复现Vision Mamba记录