Anaconda複製移植

Anaconda複製移植

2020-5-27

背景說明
有兩臺服務器分別爲CPU、GPU,其中CPU連接外網,GPU與CPU在同一個局域網中,需要通過CPU作爲跳板登陸GPU,且GPU不可以直接訪問外網。
任務說明:想要在GPU上安裝anaconda同時配置gpu版本的pytorch。
由於不能通過GPU服務器直接訪問外網,所以需要通過CPU服務器來間接實現。
主要嘗試了兩種方法。

1. 利用anaconda版本控制功能
  1. 在CPU上安裝anaconda,並在其中安裝適配GPU上CUDA版本的Pytorch,具體安裝功能可以參考pytorch官網。
  2. 在GPU上離線安裝anaconda(需要與CPU上的anaconda版本相同,不然可能出現衝突),假設anaconda安裝位置爲path_to_anaconda/anaconda
    離線安裝方法可以參考這裏
  3. 將CPU上完整的anaconda文件包複製到GPU中如下位置:path_to_anaconda/anaconda/envs/
  4. 在GPU上先查看一下已有的anaconda名稱,命令:conda info --envs,然後根據列出來的anaconda的位置判斷哪一個是我們剛剛複製過來的,然後激活:conda activate anaconda_name

這樣,就成功的通過離線的方式在GPU上安裝了pytorch,此時GPU上有兩個版本的anaconda,其中 base 爲第一次安裝的,anaconda3是作爲帶有pytorch版本的。可以根據需要通過conda的版本控制功能進行靈活切換。

conda activate anaconda_path //激活路徑爲anaconda_path的anaconda
conda deactiva   //註銷當前激活的anaconda(不會刪除)

注:這裏需要進一步註明的是,上面是我在摸索整個流程的過程中採用的方案。更加完善的方法是,避免在CPU的base上安裝其不適配的pytorch,應該現在CPU的anaconda/envs配置另外一個anaconda,再通過版本控制來對這一個anaconda安裝適配GPU的pytorch,然後將該anaconda複製到GPU的path_to_anaconda/anaconda/envs/,這樣會更合適,也避免了對CPU上anaconda的影響。

2. 在線anaconda環境複製移植

這種方法不適合我上面提到的背景,但是是我一開始調研的時候發現的一種anaconda環境在不同平臺上進行復制移植的方法。
比如我們在一臺機器上配置好了我們需要的anaconda,裏面也額外安裝了一些包,之後有有一個新的機器,我們希望在這個機器上也配置一個相同的anaconda環境。不想要再重新開始,就可用以下方法來實現:

整個完整的安裝過程由於環境是離線的所以沒跑通,不過研究的時候也踩了坑,就先記錄一下。

  1. conda 導出已有環境
conda env export >  name.yaml

已有的conda環境會被保存在 name.yamll文件中,這樣可以根據該.yaml文件在其他機器上覆現當前環境。

  1. 復現環境

將已有的.yaml文件複製到需要配置相同環境的機器上,並執行:

conda env create -f  name.yaml

這是根據其他網上資料找的步驟,但是我自己實際操作時卻遇到了問題,復現環境時遇到了如下錯誤:

在這裏插入圖片描述
這裏/usr/local/anaconda3的確爲另外一個在GPU上安裝的anaconda,但我不可能把這個刪掉。查看 env.yaml文件的內容:

在這裏插入圖片描述
在這裏插入圖片描述

紅色圈圈標出的地方爲name.yaml文件的開頭和結尾,爲環境的信息。
而用conda info --envs查看GPU服務器當前的conda環境發現,已在/usr/local/anaconda3/位置有一個名稱爲base的conda,所以想要用name.yaml在GPU上再復現一個相同名稱的conda會有衝突。
解決辦法:將name.ymal文件開頭的"name:base"更改一下,比如改爲"name:base2",然後再執行命令:

conda env create -f  name.yaml

就不會再報這個錯誤了,但是我的服務器由於不能聯網無法下載相應的庫所以還是沒有辦法復現成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章