GPUサーバーでPytorchとfaiss-gpuを使うコードを実行する際に、マシンによって環境を使い分ける必要が生じたので、備忘録として方法をまとめました。
https://qiita.com/supersaiakujin/items/50def6f33b79f9a61b18
を参考に、pyenv+anacondaで環境構築しました1。
やる前に使いたいマシンのcudaバージョンを確認する必要があります。これは、
$ nvcc -V
等で確認できます。そして、
$ pyenv install -l
で表示される一覧の中から、インストールするanacondaのバージョンを決定します(以下anaconda3-5.1.0とします)。
その上で以下を順に実行します。
$ pyenv install anaconda3-5.1.0
$ pyenv local anaconda3-5.1.0
$ conda create -n 環境名
$ conda activate 環境名
# faiss-gpuのインストール
$ conda install -c pytorch faiss-gpu cudatoolkit="cudaのバージョン"
# pytorchのインストール(CUDA 11.0の場合)
$ conda install pytorch==1.7.1 torchvision==0.8.2 torchaudio==0.7.2 cudatoolkit=11.0 -c pytorch
pytorchのインストールは https://pytorch.org/get-started/previous-versions/ を見てcudaのバージョンに合わせて行います。その他、必要なライブラリをconda installします。
ここまでできたらあとはコード実行するときに
$ pyenv local anacondaバージョン名
$ conda activate 環境名
で環境を立ち上げるだけです。
(環境名) $
みたいになってくれます。環境から抜けたい時は
$ conda deactivate
以上をマシンやディレクトリごとに行えばOK!、なのですが、筆者の環境ではこのままだとscreen環境内でconda activateができないという問題があったので、対処法を書いておきます。screenを使わない方は無視してください。
この解決策は、https://stackoverflow.com/questions/50591901/screen-inside-the-conda-environment-doesnt-work/53535739 を参考にしました。
まず、
$ pyenv local anacondaバージョン名
$ which conda
でcondaコマンドのパスを調べます。これをコピーして、
. コピーしたパス/etc/profile.d/conda.sh
を~/.bash_profileに追記し、
$ source ~/.bash_profile
を実行します。こうすると、screen環境内で
$ conda activate 環境名
が使えるようになるはずです!
-
pyenv+virtualenvでやりたかったのですが、faissのインストールが上手くいかず挫折しました。 ↩