之前的直觀感覺是,一台機器一旦安裝完一個版本的cuda之后,比如cuda8或者cuda10,基本上就固定了,如果我想run別人的代碼的話,需要在不同的機器上進行切換,是一件很麻煩的事情
實際上一台機器可以安裝不同版本的cuda,軟件在用cuda 的時候回從系統變量中尋找cuda的路徑,所以只需要更改~/.bashrc中的變量值
但是針對一個用戶而言,run不同的代碼頻繁地更改.bashrc中的變量顯然是不可取的
對於anaconda用戶而言,我不同的虛擬環境不僅python版本不一致,a naive and intuitive question is that, can we gather python version and cuda version together?
實際上是可以的
用什么版本的cuda,只要是看.bashrc中的value of following variable
export CUDA_HOME=/usr/local/cuda-10.0
export LD_LIBRARY_PATH=/usr/local/cuda-10.0/lib64:"$LD_LIBRARY_PATH:/usr/loacl/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export PATH=/usr/local/cuda-10.0/bin:$PATH
所以,如果在激活虛擬環境的時候,重新輸入上面的變量,並且只在虛擬環境中有效的話,這樣就能夠在虛擬環境中使用特定的cuda
如下圖
test_cuda是我創建的虛擬環境,在如上的虛擬環境中的兩個文件夾的兩個文件,其中activate.sh輸入的內容為
ORIGINAL_CUDA_HOME=$CUDA_HOME
ORIGINAL_LD_LIBRARY_PATH=$LD_LIBRARY_PATH
ORIGINAL_PATH=$PATH
export CUDA_HOME=/usr/local/cuda-9.0
export LD_LIBRARY_PATH=/usr/local/cuda-9.0/lib64:"$LD_LIBRARY_PATH:/usr/loacl/cuda/lib64:/usr/local/cuda/extras/CUPTI/lib64"
export PATH=/usr/local/cuda-9.0/bin:$PATH
deactivate.sh輸入的內容為
export CUDA_HOME=$ORIGINAL_CUDA_HOME
export LD_LIBRARY_PATH=$ORIGINAL_LD_LIBRARY_PATH
export PATH=/usr/local/cuda-10.0/bin:$PATH
unset ORIGINAL_CUDA_HOME
unset ORIGINAL_LD_LIBRARY_PATH
意思就是把原來的變量備份一下,當激活虛擬環境的時候,export我需要的cuda版本,然后deactivate的時候,再把原來的$CUDA_HOME等變量變為原來的值
測試了一下,確實好使