Linux下Vision Mamba環境配置+多CUDA版本切換

上篇文章大致講了下Vision Mamba的相關知識,網上關于Vision Mamba的配置博客太多,筆者主要用來整合下。
筆者在Win10和Linux下分別嘗試配置相關環境。
Win10下配置 失敗 \textcolor{red}{失敗} 失敗,最后出現的問題如下:
https://blog.csdn.net/weixin_46135891/article/details/137141378
有解決方法還請留言。

配置Linux下的Vision Mamba還是比較方便的,

目錄

  • 前言
  • CUDA,cudnn下載以及安裝
    • CUDA
    • cudnn
  • 多CUDA環境切換
  • Vision Mamba環境配置
    • mamba-1.1.1
    • casual-conv1d-1.1.3
    • 其他組件
  • 測試代碼
  • vision mamba的簡單運行
  • 參考博客

前言

筆者在linux下選用CUDA 11.8 \textcolor{red}{11.8} 11.8版本,也比較推薦讀者使用此版本,方便后續環境配置。

CUDA,cudnn下載以及安裝

CUDA

CUDA官網:https://developer.nvidia.com/cuda-11-8-0-download-archive?
筆者Linux版本是Ubuntu20.20的,固下載如下文件:cuda_11.8.0_520.61.05_linux.run

Cudnn官網:https://developer.nvidia.com/rdp/cudnn-archive
選擇適配CUDA11.8的版本即可, 筆者選用cudnn 8.9.7 (for CUDA 11.x)
選擇 --Local Installer for Linux x86_64 (Tar) 下載離線包

首先安裝CUDA,采用離線安裝方式,

sudo sh  cuda_11.8.0_520.61.05_linux.run

首先accpet,
然后具體配置的時,去掉Deiver,只保留 CUDA 相關。
如下圖類似,(下圖取自網絡,不是筆者的CUDA11.8的實時截圖)
在這里插入圖片描述
然后正常安裝即可,一般安裝在了 /usr/local/CUDA-11.8

配置CUDA環境

export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/cuda/lib64
export PATH=/usr/local/cuda/bin:$PATH
export CUDA_HOME=/usr/local/cuda
export LIBRARY_PATH=/usr/local/cuda/lib64

如果/usr/local/中沒有自動生成CUDA文件, 手動生成CUDA軟連接

sudo ln -s /usr/local/cuda-11.8 /usr/local/cuda

cudnn

解壓縮
tar -xvf cudnn-XX-linux-x64-vXXX.XXX.XX.tgz ## 這是最開始下載的cudnn文件

再將 剛剛解壓的 cuDNN里面的對應文件拷貝至CUDA指定路徑:

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 /usr/local/cuda-11.8/lib64/libcudnn*

一切弄完后,重啟電腦。

多CUDA環境切換

如果讀者只有一個cudaXX.X版本的文件夾可以不用看此處,此節涉及多cuda環境切換。

在/usr/local 路徑下,分別執行

nvcc -V
stat cuda

如果指向同一個cuda版本,那么該版本就是正在使用的版本,而且沒意外的話,應該都是cuda-11.8
輸出類似如下:(下圖取自網絡,不是筆者的CUDA11.8的實時截圖)
在這里插入圖片描述

如果要切換另一個cuda版本:

sudo rm -rf /usr/local/cuda     ##這一步是去除軟連接
sudo ln -s  /usr/local/cuda-XX.X  /usr/local/cuda   ##指定XX.X 為想要使用的版本

然后重新執行

nvcc -V
stat cuda

發現輸出的cuda版本同時發生了變化,此時就更換成功了

比如 將cuda11.8 設置為想要的版本:

sudo rm -rf /usr/local/cuda     
sudo ln -s  /usr/local/cuda-11.8  /usr/local/cuda

Vision Mamba環境配置

重啟后,電腦就有了CUDA-11.8,下面我們來具體配置Vision Mamba的環境。
筆者推薦Anaconda創建虛擬環境

#anaconda 創建py310虛擬環境
conda create -n your_name python=3.10.13 -y

安裝對應的torch包

#安裝虛擬環境其它包(筆者是 cuda11.8,安裝pytorch如下)
pip install torch==2.1.1 torchvision==0.16.1 torchaudio==2.1.1 --index-url https://download.pytorch.org/whl/cu118

去github上下載 vision mamba源碼包
https://github.com/hustvl/Vim
下載.zip文件然后手動解壓縮

git clone https://github.com/hustvl/Vim.git

接下來先安裝兩個比較有問題的包,這兩個裝好后基本就沒什么問題了。

mamba-1.1.1

方法1
下載 mamba-1.1.1的源碼包 :https://github.com/state-spaces/mamba/archive/refs/tags/v1.1.1.zip
解壓縮 mamba-1.1.1.zip
虛擬環境 進入到這個文件夾 執行

pip install .

方法2
如果方法1不行,來執行方法2
手動下載輪子:https://github.com/state-spaces/mamba/releases/download/v1.1.1/mamba_ssm-1.1.1+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl
注:此輪子只對應cuda11.8的版本,所以筆者在文章開頭推薦讀者使用cuda11.8的環境。

然后安裝輪子

# 虛擬環境下安裝
pip install /下載路徑/mamba_ssm-1.1.1+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl

方法2的安裝一般沒什么問題,如果報超時問題,可以梯子或重復執行上面這個安裝命令

安裝好后需要執行下面這個步驟,否則后續運行會報錯:

( “TypeError: Mamba.init() got an unexpected keyword argument ‘bimamba_type’.”)

讀者把vision mamba源碼里面的mamba-ssm替換到虛擬環境里面的mamba-ssm
具體的

sudo cp -r "其他路徑/Vim-main/mamba-1p1p1/mamba_ssm" "Annotation路徑/envs/mamba的虛擬環境/lib/python3.10/site-packages/" 

casual-conv1d-1.1.3

方法1
下載casual-conv1d-1.1.3的源碼包 : https://github.com/Dao-AILab/causal-conv1d/archive/refs/tags/v1.1.3.zip
解壓縮 casual-conv1d-1.1.3.zip
虛擬環境 進入到這個文件夾 執行

pip install .

方法2
手動下載輪子:
https://github.com/Dao-AILab/causal-conv1d/releases/download/v1.1.3/causal_conv1d-1.1.3+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl
注:此輪子只對應cuda11.8的版本,所以筆者在文章開頭推薦讀者使用cuda11.8的環境。

然后安裝輪子

# 虛擬環境下安裝
pip install /下載路徑/causal_conv1d-1.1.3+cu118torch2.1cxx11abiFALSE-cp310-cp310-linux_x86_64.whl

方法2的安裝一般沒什么問題,如果報超時問題,可以梯子或重復執行上面這個安裝命令

其他組件

如果上面兩個組件都安裝上了,那么以及成功99%了

#虛擬環境下
pip install timm mlflow -i https://pypi.tuna.tsinghua.edu.cn/simple

可能有遺漏的組件,后續執行代碼的時候,缺少什么安裝同樣的方式添加

測試代碼

在 VIM-main/vim/models_mamba.py的末尾添加如下代碼


if __name__ == '__main__':# cuda or cpudevice = torch.device("cuda" if torch.cuda.is_available() else "cpu")print(device)# 實例化模型得到分類結果inputs = torch.randn(1, 3, 224, 224).to(device)model = vim_small_patch16_stride8_224_bimambav2_final_pool_mean_abs_pos_embed_with_midclstok_div2(pretrained=False).to(device)print(model)outputs = model(inputs)print(outputs.shape)# 實例化mamba模塊,輸入輸出特征維度不變 B C H Wx = torch.rand(10, 16, 64, 128).to(device)B, C, H, W = x.shapeprint("輸入特征維度:", x.shape)x = x.view(B, C, H * W).permute(0, 2, 1)print("維度變換:", x.shape)mamba = create_block(d_model=C).to(device)# mamba模型代碼中返回的是一個元組:hidden_states, residualhidden_states, residual = mamba(x)x = hidden_states.permute(0, 2, 1).view(B, C, H, W)print("輸出特征維度:", x.shape)

執行(run) VIM-main/vim/models_mamba.py

如果沒有問題會輸出 模型架構和一些結果:

torch.Size([1, 1000])
輸入特征維度: torch.Size([10, 16, 64, 128])
維度變換: torch.Size([10, 8192, 16])
輸出特征維度: torch.Size([10, 16, 64, 128])

如果輸出以上結果,那么恭喜你,vision mamba環境配置好了

vision mamba的簡單運行

希望讀者能夠大概看下vision mamba 的readme 來看看如何進行訓練的。
也應當看看main.py的參數配置,來進行選擇如何自定義一些配置信息
如下是筆者cifar-python100的訓練參數:

(虛擬環境下,在Vim-main/vim/路徑下  terminal終端執行代碼)
CUDA_VISIBLE_DEVICES=0  python main.py  \
--model vim_small_patch16_224_bimambav2_final_pool_mean_abs_pos_embed_with_midclstok_div2 --batch-size 2 \
--drop-path 0.05 --weight-decay 0.05 --lr 1e-3 --num_workers 1 \
--data-set CIFAR \
--data-path /home/cr7/python/code/mamba_classify_test/cifer_dataset/ \
--output_dir /home/cr7/python/code/mamba_classify_test/mamba_outputs/cifar_result \
--no_amp

當然讀者也可以直接配置train.py,在pycharm里面點擊train.py執行,修改main.py的參數來進行想要的訓練了。

以下是必須配置,否則執行的時候缺少配置報錯,在main.py的對應配置地方進行修改

--batch-size , default=64  ##按照自己gpu顯存來設置 太大會爆顯存
--epochs, default=300  ## 訓練批次
--model, default="vim_small_patch16_224_bimambav2_final_pool_mean_abs_pos_embed_with_midclstok_div2"   ## 在 models_mamba.py的結尾有4個可以選擇
--data-path , default=" /home/cr7/python/code/mamba_classify_test/cifer_dataset/"   ##下載的分類數據集路徑 
--data-set, default="CIFAR"  ##分類數據集名字
--num_workers ,default =4 ##根據電腦性能 調整

注:以下是 pycharm 運行 main.py必要做的事情,否則會報錯
在main.py中的
def main(args):
添加一行 args.gpu=0 ##設置gpu的index
這里由于筆者只有一個gpu , 所以使用gpu序號0 做為訓練gpu

不添加的話,后續運行main.py會報錯:

AttributeError: 'Namespace' object has no attribute 'gpu'

輸出大致如下。

(mamba_py310) cr7@cr7:~/python/code/mamba_classify_test/Vim/vim$ CUDA_VISIBLE_DEVICES=0  python main.py  \
> --model vim_small_patch16_224_bimambav2_final_pool_mean_abs_pos_embed_with_midclstok_div2 --batch-size 2 \
> --drop-path 0.05 --weight-decay 0.05 --lr 1e-3 --num_workers 1 \
> --data-set CIFAR \
> --data-path /home/cr7/python/code/mamba_classify_test/cifer_dataset/ \
> --output_dir /home/cr7/python/code/mamba_classify_test/mamba_outputs/cifar_result \
> --no_amp
Not using distributed mode
Namespace(batch_size=2, epochs=300, bce_loss=False, unscale_lr=False, model='vim_small_patch16_224_bimambav2_final_pool_mean_abs_pos_embed_with_midclstok_div2', input_size=224, drop=0.0, drop_path=0.05, model_ema=True, model_ema_decay=0.99996, model_ema_force_cpu=False, opt='adamw', opt_eps=1e-08, opt_betas=None, clip_grad=None, momentum=0.9, weight_decay=0.05, sched='cosine', lr=0.001, lr_noise=None, lr_noise_pct=0.67, lr_noise_std=1.0, warmup_lr=1e-06, min_lr=1e-05, decay_epochs=30, warmup_epochs=5, cooldown_epochs=10, patience_epochs=10, decay_rate=0.1, color_jitter=0.3, aa='rand-m9-mstd0.5-inc1', smoothing=0.1, train_interpolation='bicubic', repeated_aug=True, train_mode=True, ThreeAugment=False, src=False, reprob=0.25, remode='pixel', recount=1, resplit=False, mixup=0.8, cutmix=1.0, cutmix_minmax=None, mixup_prob=1.0, mixup_switch_prob=0.5, mixup_mode='batch', teacher_model='regnety_160', teacher_path='', distillation_type='none', distillation_alpha=0.5, distillation_tau=1.0, cosub=False, finetune='', attn_only=False, data_path='/home/cr7/python/code/mamba_classify_test/cifer_dataset/', data_set='CIFAR', inat_category='name', output_dir='/home/cr7/python/code/mamba_classify_test/mamba_outputs/cifar_result', device='cuda', seed=0, resume='', start_epoch=0, eval=False, eval_crop_ratio=0.875, dist_eval=False, num_workers=1, pin_mem=True, distributed=False, world_size=1, dist_url='env://', if_amp=False, if_continue_inf=False, if_nan2num=False, if_random_cls_token_position=False, if_random_token_rank=False, local_rank=0)
Creating model: vim_small_patch16_224_bimambav2_final_pool_mean_abs_pos_embed_with_midclstok_div2
number of params: 25450084
Start training for 300 epochs
Epoch: [0]  [    0/25000]  eta: 22:46:27  lr: 0.000001  loss: 4.2079 (4.2079)  time: 3.2795  data: 0.0525  max mem: 707
Epoch: [0]  [   10/25000]  eta: 2:23:41  lr: 0.000001  loss: 4.6698 (4.6594)  time: 0.3450  data: 0.0049  max mem: 765
Epoch: [0]  [   20/25000]  eta: 1:25:18  lr: 0.000001  loss: 4.7118 (4.7024)  time: 0.0512  data: 0.0001  max mem: 765
Epoch: [0]  [   30/25000]  eta: 1:04:32  lr: 0.000001  loss: 4.7599 (4.6847)  time: 0.0506  data: 0.0001  max mem: 765
Epoch: [0]  [   40/25000]  eta: 0:54:04  lr: 0.000001  loss: 4.7495 (4.6971)  time: 0.0513  data: 0.0001  max mem: 765
Epoch: [0]  [   50/25000]  eta: 0:47:35  lr: 0.000001  loss: 4.6873 (4.6862)  time: 0.0515  data: 0.0001  max mem: 765
Epoch: [0]  [   60/25000]  eta: 0:43:12  lr: 0.000001  loss: 4.6870 (4.6894)  time: 0.0506  data: 0.0001  max mem: 765
Epoch: [0]  [   70/25000]  eta: 0:40:04  lr: 0.000001  loss: 4.6236 (4.6846)  time: 0.0506  data: 0.0001  max mem: 765
Epoch: [0]  [   80/25000]  eta: 0:37:45  lr: 0.000001  loss: 4.5900 (4.6900)  time: 0.0512  data: 0.0001  max mem: 765
Epoch: [0]  [   90/25000]  eta: 0:36:03  lr: 0.000001  loss: 4.6688 (4.6900)  time: 0.0528  data: 0.0001  max mem: 765

參考博客

linux 下 多CUDA版本切換: https://blog.csdn.net/weixin_43408382/article/details/128358138
linux 下 vision mamba環境配置:https://blog.csdn.net/qq_52811934/article/details/136818016
linux 下 vision mamba配置的可能問題:https://blog.csdn.net/weixin_43408382/article/details/128358138

(筆者不建議參考下文博客中的cuda版本切換的方法)
linux 下 cuda11.8的安裝https://blog.csdn.net/w946612410/article/details/131786512

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/16454.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/16454.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/16454.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于物聯網架構的電子小票服務系統

1.電子小票物聯網架構 采用感知層、網絡層和應用層的3層物聯網體系架構模型,電子小票物聯網的架構見圖1。 圖1 電子小票物聯網架構 感知層的小票智能硬件能夠取代傳統的小票打印機,在不改變商家原有收銀系統的前提下,采集收音機待打印的購物…

react中的數據驅動視圖,useState()的使用

前端開發如今有一個很重要的思想就是數據驅動視圖,數據發生變化使ui發生變化,比如一個變量count,為0顯示三個按鈕,為1顯示一個按鈕,為2顯示兩個按鈕。這就是一個簡單的數據驅動視圖。 import { useState } from reactf…

修改 ant design tour 漫游式導航的彈窗邊框樣式

一 說明 應項目要求,調整ant design tour 彈窗邊框的樣式。tour 原本樣式是有遮罩層,因此沒有邊框看起來也不突兀。原圖如下: 但是UI設計是取消遮罩層,并設置邊框樣式。當 取消 了遮罩層,沒有設置邊框樣式的圖片如下&a…

python考試成績管理與分析:從列表到方差

新書上架~👇全國包郵奧~ python實用小工具開發教程http://pythontoolsteach.com/3 歡迎關注我👆,收藏下次不迷路┗|`O′|┛ 嗷~~ 目錄 一、考試成績的輸入與列表管理 二、成績的總分與平均成績計算 三、成績方差的計算 四、成…

雙指針用法練習題(2024/5/26)

1三數之和 給你一個整數數組 nums ,判斷是否存在三元組 [nums[i], nums[j], nums[k]] 滿足 i ! j、i ! k 且 j ! k ,同時還滿足 nums[i] nums[j] nums[k] 0 。請 你返回所有和為 0 且不重復的三元組。 注意:答案中不可以包含重復的三元…

人工智能場景下的網絡負載均衡技術

AI技術驅動智能應用井噴,智能算力增速遠超通用算力。IDC預測,未來五年,我國智能算力規模年復合增長率將超50%,開啟數據中心算力新紀元。隨著需求激增,數據中心或智算網絡亟需擴容、增速、減時延,確保網絡穩…

rockylinux 利用nexus 搭建私服yum倉庫

簡單說下為啥弄這個私服,因為自己要學習一些東西,比如新版的k8s等,其中會涉及到一些yum的安裝,為了防止因網絡問題導致yum安裝失敗,和重復下載,所以弄個私服,當然也有為了意外保障的想法&#x…

【實戰JVM】-基礎篇-01-JVM通識-字節碼詳解

【實戰JVM】-基礎篇-01-JVM通識-字節碼詳解-類的聲明周期-加載器 1 初識JVM1.1 什么是JVM1.2 JVM的功能1.2.1 即時編譯 1.3 常見JVM 2 字節碼文件詳解2.1 Java虛擬機的組成2.2 字節碼文件的組成2.2.1 正確打開字節碼文件2.2.2 字節碼組成2.2.3 基礎信息2.2.3.1 魔數2.2.3.1 主副…

【C++】右值引用 移動語義

目錄 前言一、右值引用與移動語義1.1 左值引用和右值引用1.2 右值引用使用場景和意義1.3 右值引用引用左值及其一些更深入的使用場景分析1.3.1 完美轉發 二、新的類功能三、可變參數模板 前言 本篇文章我們繼續來聊聊C11新增的一些語法——右值引用,我們在之前就已…

進程間通信的方式中,socket和消息隊列的區別

進程間通信的方式中,socket和消息隊列的區別 進程間通信方式中,socket和消息隊列的主要區別在于通信的方式和跨機通信的能力。 socket是通過網絡傳輸的方式來實現進程間通信,并且可以跨主機;而消息隊列是通過內核提供的緩沖區進…

Flutter 中的 AbsorbPointer 小部件:全面指南

Flutter 中的 AbsorbPointer 小部件:全面指南 在Flutter中,AbsorbPointer是一個特殊的小部件,用于吸收(或“吞噬”)所有傳遞到其子組件的指針事件(如觸摸或鼠標點擊)。這在某些情況下非常有用&…

民國漫畫雜志《時代漫畫》第22期.PDF

時代漫畫22.PDF: https://url03.ctfile.com/f/1779803-1248634856-2c7010?p9586 (訪問密碼: 9586) 《時代漫畫》的雜志在1934年誕生了,截止1937年6月戰爭來臨被迫停刊共發行了39期。 ps: 資源來源網絡!

Typescript高級: 深入理解Extract類型

概述 在TypeScript這一逐漸成為前端開發首選的靜態類型檢查語言中&#xff0c;類型系統提供了豐富的工具來幫助開發者編寫更加健壯和可維護的代碼。其中&#xff0c;Extract<T, U>是一個強大的內置實用類型&#xff0c;用于從一個聯合類型T中提取出屬于另一個類型U的那些…

AIGC 006-textual-inversion使用文本反轉實現個性化文本到圖像生成!

AIGC 006-textual-inversion使用文本反轉實現個性化文本到圖像生成&#xff01; 文章目錄 0 論文工作1 論文方法2 效果 0 論文工作 這篇論文 (An Image is Worth One Word: Personalizing Text-to-Image Generation using Textual Inversion) 提出了一種新穎的技術&#xff0c…

Modal.method() 不顯示頭部的問題

ant-design中的Modal組件有兩種用法&#xff1a; 第一種是用標簽&#xff1a;<a-modal></a-modal> 第二種是用Api&#xff1a;Modal.info、Modal.warning、Modal.confirm...... 一開始項目中這兩種用法是混用的&#xff0c;后面UI改造&#xff0c;需要統一樣式&…

一個程序員的牢獄生涯(37)任務

星期一 任 務 我走回大鐐面前后,把雙手抱著的衣服遞給大鐐,但我并沒有把手里的東西也遞給他。現在的大鐐坐著,我站著,這個時候要給大鐐的話,肯定能被身邊的棍子或六子看到,甚至被所有號子里的人都看到。因為此時,所有人的目光都盯著我手里的衣服,盯著我和大鐐看。 “鐐…

Shell字符串變量

目標 能夠使用字符串的3種方式 掌握Shell字符串拼接 掌握shell字符串截取的常用格式 能夠定義Shell索引數組和關聯數組 能夠使用內置命令alias,echo,read,exit,declare操作 掌握Shell的運算符操作 Shell字符串變量 介紹 字符串&#xff08;String&#xff09;就是一系…

使用LabVIEW時遇到VISA屬性錯誤 -1073807331的解決方案

在LabVIEW或VeriStand中使用VISA屬性時&#xff0c;可能會遇到錯誤 -1073807331。這一錯誤的具體描述如下&#xff1a; 解決方案 導致VISA屬性出現此錯誤的原因主要有以下四種&#xff1a; 屬性不被使用的串行總線支持 示例 A.1&#xff1a;Is Port Connected VISA屬性僅支持由…

React(四)memo、useCallback、useMemo Hook

目錄 (一)memo API 1.先想一個情景 2.用法 (1)props傳入普通數據類型的情況 (2)props傳入對象的情況 (3)props傳入函數的情況 (4)使用自定義比較函數 3.什么時候使用memo&#xff1f; (二)useMemo Hook 1.用法 2.useMemo實現組件記憶化 3.useMemo實現函數記憶化 …

如何停止 iPad 和 iPhone 之間共享短信,獨立接收和發送消息

概括 在當今高度互聯的數字世界中&#xff0c;Apple 設備之間的無縫連接性提供了極大的便利&#xff0c;尤其是在消息同步方面。iPhone 和 iPad 用戶通常可以享受到設備間短信的自動同步功能&#xff0c;這意味著無論是在哪個設備上&#xff0c;用戶都可以接收和回復消息。然而…