一、环境设置
需要安装的环境:Python3.10+cuda11.8+torch2.1.1
由于Mamba中的某些包只支持Linux体系,因此是最好选择Linux体系。
1.安装cuda
使用如下下令查察显卡支持的最高cuda版本,待安装的cuda版本需低于该版本。如图,我的显卡最高支持cuda12.2.vision_mamba最好安装cuda11.8的版本
在官网找到11.8:CUDA Toolkit Archive | NVIDIA Developer
(在下令行中查察自己体系的版本号和发行版本:)
按照自己的版本号举行选择,得到两行下令.
可以直接在下令行中输入以上下令举行安装,但是时间比较久。
因此我们可以复制下令行后面的链接直接举行下载,之后上传到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文件夹下。使用下令行进入该文件夹下:
输入第二条指令举行安装
- sudo sh cuda_11.8.0_520.61.05_linux.run
复制代码 安装过程中会弹出第一个对话框,这里默认已经安装过Nvidia驱动,因此选择 continue 。
在弹出的第二个对话框中输入 accept 。按下回车键
末了选择 install
安装成功
2.设置环境变量
首先在linux中安装vim编辑器:
- sudo apt-get install vim-gtk
复制代码 为方便使用,对vim举行简单设置(可跳过)
开始对vim举行设置
首先进入vim设置文件
按下 "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后的:必须是英笔墨符)
设置结束
在下令行中输入
在打开的文件末尾添加
- 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版本
显示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
复制代码
我的环境名称是 vim ,但是我的环境没有创建在vision_mamba文件夹下,vision_mamba文件中原本含有vim文件。因此,为防止混淆,发起最好使用别的名称作为虚拟环境的名称。
5.安装Pytorch
使用离线安装方式,时间快且不易出错
进入PyTorch官网,选择Previous PyTorch Versions | PyTorch 选择要安装的torch版本,这里最好安装torch2.1.1
可以选择下令行安装,但是这里我选择离线安装.在欣赏器中输入下令行后面的链接。
- https://download.pytorch.org/whl/cu118
复制代码
分别选择torch2.1.1、torchvision0.16.1和torchaudio2.1.1的gpu、linux和python3.10版本举行下载。
进入保存的文件夹中
输入以下下令举行安装(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数据集导入代码,加入红框中的代码
2.进入main.py文件
修改数据集路径和默认数据集
设置输出文件夹和device
修改epoch和batchsize之后可以输入下令实行代码
运行截图:
by the way 如果误触导致练习中断,可以在output文件夹中找到checkpoint.pth文件继续举行练习
详细而言,在main.py文件中找到"resume"超参数 设置default为checkpoint.pth大概best_checkpoint.pth文件的路径。在start_epoch中设置想开始练习的轮次.
三、验证
1.修改超参数
1.找到main文件中的“--funtine”超参数,在default字段填写练习好的权重文件路径。
2.找到main文件中的“--eval”超参数,添加default字段,将其设置为“Ture”。
2.开始验证
输入下令实行代码
运行截图:
四、练习过程中的报错
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 函数中的调用:
根据报错找到engine.py中54行的位置
将55行取消注释 54行注释掉
问题解决。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |