LoginSignup
2
5

conda 備忘録: スパコンとUbuntuで Python環境構築

Last updated at Posted at 2020-04-10

Minicondaにおけるcondaの備忘録です.スパコンWisteria-Oスパコン ITO のログインノード(bashです)において,Minicondaでローカル環境を構築します.ライセンスの関係で,Anacondaは不可,Miniconda + conda-forge とする必要があるようです.Linux(bash)環境一般に適用できると思います.また,Intel の Python 向け Distribution を積極的に活用します.
追記(2023.10.11): Minicondaのインストール方法を改訂しました.
追記(2022.4.24): Minicondaのアンインストールに失敗した後の後遺症でVsCodeのRemote-SSHに不具合
追記(2021.1.22): ITO-AのPython実行で Segmentation fault に悩まされましたが,以下のインストールに追記した方法で回避されました.
追記(2020.4.11): Python向け Intel Distribution は不具合に遭遇しましたので,積極的に活用することは止めました.

Miniconda のインストール

追記(2021.1.22;2023.10.11):ITO-AでPython環境の原因不明のコンフリクトが発生しました.~/.bashrc の最後の方に export PYTHONPATH= を追記して,PYTHONPATH を消去しておきます.あるいは unset PYTHONPATH を追記しておきます.これは Intel oneAPI のIntel PythonやシステムにインストールされたPythonとのコンフリクトでしたので,setvars.sh をsourceした直後に追記するのが有効です.

ローカル環境にMiniconda をインストールし,仕事毎に仮想環境を作って運用するのがお勧めです.
ログインノードでログインし,ホームディレクトリで以下を実行します.

mkdir -p ~/miniconda3
wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh -O ~/miniconda3/miniconda.sh
bash ~/miniconda3/miniconda.sh -b -u -p ~/miniconda3
rm -rf ~/miniconda3/miniconda.sh
~/miniconda3/bin/conda init bash

再ログインすると (base) 環境が使えます.最初にconda-forgeをデフォルトにし,updateします.

conda config --add channels conda-forge
conda update conda

さらに,ログインしたときに自動的に (base) 環境がアクティべートされるのを抑止します.

conda config --set auto_activate_base false

再ログインすると反映されます.baseをアクティベートするには以下のようにします.

conda activate base

もし仮想環境が存在すれば,baseの代わりに仮想環境名を指定して直接アクティベートできます.
なお,これにより ~/.condarc に 以下が追記されます.上記コマンドを使わず,このファイルを直接書き換えても同じです.

auto_activate_base: false

Miniconda のアンインストール

Miniconda のアンインストールは簡単ですので,挙動がどうしてもおかしくなってきたら,アンインストールし,再度インストールするのがお勧めです.
Minicondaがインストールされているディレクトリをすべて消去します.

$ rm -rf ~/miniconda3

さらに,ホームディレクトリに作成されている,関連する隠しファイルや隠しディレクトリ(存在するもののみ)を以下のように削除します.

$ rm -rf ~/.condarc ~/.conda

最後に,ホームディレクトリに存在する,.bashrc ファイルの以下のような部分を削除します.

# >>> conda initialize >>>
# !! Contents within this block are managed by 'conda init' !!
__conda_setup="$('/home/usr1/m70161a/miniconda3/bin/conda' 'shell.bash' 'hook' 2> /dev/null)"
if [ $? -eq 0 ]; then
    eval "$__conda_setup"
else
    if [ -f "/home/usr1/m70161a/miniconda3/etc/profile.d/conda.sh" ]; then
        . "/home/usr1/m70161a/miniconda3/etc/profile.d/conda.sh"
    else
        export PATH="/home/usr1/m70161a/miniconda3/bin:$PATH"
    fi
fi
unset __conda_setup
# <<< conda initialize <<<

Windows 10での注意

アプリと機能で削除する前に,envspkgsフォルダを削除しておきます.これをしないとアンインストールに非常に時間がかかることがあります.
最後にminiconda3.conda .jupyter .matplotlib .ipython等のフォルダを削除します.

Windows 10 のMinicondaのアンインストール失敗後の不具合

2022.4.24追記

原因不明ですが,Minicondaのアンインストールに失敗し,関連するレジストリを手動で消去したことがあります.それ以降,PowerShellでバッチファイルが起動しなくなり,不思議に思っていました.その後,WindowsのVScodeを用いて,ITOのファイルを編集をしようとして,remote-ssh接続を試みましたが,何度やってもうまく行かない不具合に悩まされました.その症状と解決策は こちらの記事 にある通りで,この現象を理解したのは こちらの記事 のおかげです.

記事の通り,レジストリの以下の部分を(私の場合は後者のみ存在)を削除することで,この問題がすべて解決しました.

HKEY_LOCAL_MACHINE\Software\Microsoft\Command Processor\AutoRun
HKEY_CURRENT_USER\Software\Microsoft\Command Processor\AutoRun

パッケージのリポジトリについて(channel

2022.4.24追記: Anacondaはライセンスの関係で使用を止めました.Miniconda + conda-forgeとします.
パッケージ の リポジトリ(保管場所) を channel といいます.様々な機関(個人)がパッケージを提供しています.Anaconda Cloud(Anaconda によるパッケージ管理サービス) で調べることができます.例えば,TensorFlow については こちらのページ にあるように,数多くの channel が存在します.channelには代表的なものが存在し,通常はそれらの代表的な channel からパッケージをインストールするのが普通です.しかし,専門的なパッケージになると,channel を指定したインストールが必要になる場合もあります.
公式リポジトリの channel は defaults です.また,コミュニティベースのリポジトリの conda-forge は公式channelよりも多くのパッケージが管理されており,しばしば利用されます.

channel の操作

channelの一覧を取得する方法,channelを追加・削除する方法,およびchannelの優先順位を変更する方法を紹介します.

channel 一覧の取得 conda config --get channels

現在の channel の一覧を確認してみましょう.Minicondaインストール直後は何も表示されないようです.

conda config --get channels

conda-forge をデフォルトにします.conda-forgehighest priority (先頭)となっていますので,conda-forge のパッケージが優先的にインストールされる状態です.

conda config --add channels conda-forge
conda config --get channels

以降では channel操作 を項目別に紹介します.

channelを先頭に追加 conda config --add channels channel_name

Intel が提供する intel channel を先頭(highest priority)に追加します.

$ conda config --add channels intel

$ conda config --get channels
--add channels 'defaults'   # lowest priority
--add channels 'conda-forge'
--add channels 'intel'   # highest priority

channelを削除 conda config --remove channels channel_name

intel の channelを削除します.

$ conda config --remove channels intel

$ conda config --get channels
--add channels 'defaults'   # lowest priority
--add channels 'conda-forge'   # highest priority

channel を末尾に追加 conda config --append channels channel_name

intelのchannelを末尾(lowest priority)に追加します.

$ conda config --append channels intel

$ conda config --get channels
--add channels 'intel'   # lowest priority
--add channels 'defaults'
--add channels 'conda-forge'    # highest priority

先頭 channel を変更 conda config --add channels channel_name

既に存在する intel の channel を先頭(highest priority)にします.先頭にするには, --add です.末尾にするには,--append です.

$ conda config --add channels intel
Warning: 'intel' already in 'channels' list, moving to the top

$ conda config --get channels
--add channels 'defaults'   # lowest priority
--add channels 'conda-forge'
--add channels 'intel'   # highest priority

ファイルでchannelの設定

channel は ~/.condarc に以下のように設定されます.これを直接編集することも可能です.

channels:
  - conda-forge
  - defaults

仮想環境

Miniconda のデフォルト環境(base)でパッケージをインストールしていくと,しばしば依存関係に不具合が生じ,Miniconda の再インストールに陥ることがあります.そのため,目的別に仮想環境(virtual environment,略して v_env)を用意するのが鉄則です.

仮想環境の構築 conda create -n v_env [python=version]

仮想環境 my_env を構築します.

$ conda create -n my_env

Pythonのバージョンを指定することもできます.以下ではバージョン3.6を指定しました.

$ conda create -n my_env python=3.6

インテルディストリビューションを用いた仮想環境 my_intel_env を構築するには,次のように特別な操作が必要です.

$ conda create -n my_intel_env intelpython3_core python=3

intelpython3_core の部分を intelpython3_full に変更すると,完全なインテルディストリビューションが構築されます.また,python=3 を python=2 に変更すると,Python のバージョンが 2 になります.なお,Python 2 を使用することは普通はありません.

仮想環境の確認 conda info -e

利用可能な仮想環境と選択されている環境を確認します.実行結果は スパコンITO での筆者の環境で,m00000a はスパコンのユーザーホームディレクトリ名(仮称)です.* が現在選択されている環境で,base になっています.

$ conda info -e
# conda environments:
#
base                  *  /home/usr1/m00000a/local/miniconda3
my_env                   /home/usr1/m00000a/local/miniconda3/envs/my_env
my_intel_env             /home/usr1/m00000a/local/miniconda3/envs/my_intel_env

仮想環境に入る conda activate v_env

仮想環境my_intel_envを有効にし(アクティベート),仮想環境を確認します.

$ conda activate my_intel_env

$ conda info -e
# conda environments:
#
base                     /home/usr1/m00000a/local/miniconda3
my_env                   /home/usr1/m00000a/local/miniconda3/envs/my_env
my_intel_env          *  /home/usr1/m00000a/local/miniconda3/envs/my_intel_env
  • が 移動し,仮想環境の my_intel_env がアクティベートされたことが分かります.

仮想環境から抜ける conda deactivate

仮想環境から抜け,base に戻るには conda deactivate を実行します.conda info -e を実行すると,* が base に戻っていることが確認できます.

$ conda deactivate

$ conda info -e
# conda environments:
#
base                  *  /home/usr1/m00000a/local/miniconda3
my_env                   /home/usr1/m00000a/local/miniconda3/envs/my_env
my_intel_env             /home/usr1/m00000a/local/miniconda3/envs/my_intel_env

仮想環境を削除 conda remove -n v_env --all

仮想環境 my_env を削除するには以下のようにします.

$ conda remove -n my_env --all

パッケージの管理

仮想環境 my_intel_env において,パッケージを管理しましょう.

準備

現在は base 環境とします.最初に conda を最新にします.

$ conda update conda

次にパッケージをインストールする仮想環境 my_intel_env をアクティベートします.

$ conda activate my_intel_env

パッケージのインストール conda install package_list

パッケージ名をスペース区切りで並べ,複数のパッケージを一括してインストールすることもできます.以下に例を示します.

$ conda install jupyterlab matplotlib netCDF4 pandas xarray

channelを指定したパッケージのインストール conda install -c channel_name package_list

専門性が高くなると,channel を指定したパッケージのインストールが必要になる場合があります.また,channelを指定することで,どの channel からパッケージをインストールするか,明確になり,お勧めです.
anaconda channel から tensorflow をインストールするには次のようにします.

$ conda install -c anaconda tensorflow

また,仮想環境を構築する際にもchannelを指定できます.以下は,anaconda channelを指定して,仮想環境 tf を構築する例です.

$ conda create -c anaconda -n tf

インストール済みのパッケージの確認 conda list

現在の環境においてインストール済みのパッケージを確認するには以下のようにします.

$ conda list

-n に仮想環境名を与えると,その仮想環境でインストール済みのパッケージを確認できます.

$ conda list -n my_env

パッケージのアンインストール conda uninstall package_list

パッケージ xarray のアンインストールは以下のようにします.複数のパッケージをスペース区切りで並べれば一括でアンインストールできます.

$ conda uninstall xarray 

仮想環境設定の書き込み conda env export -n v_env > file.yaml

仮想環境の情報をファイルに書き込んでおくと,他のマシンで同じ環境を構築することが簡単にできるようになります.base で実行します.仮想環境 my_intel_env の環境をmy_intel_env.yaml ファイルに書き込みます.このyamlファイルは現在のディレクトリに作成されます.なお,yaml の説明は Wikipedia英語版)を参照ください.

$ conda env export -n my_intel_env > my_intel_env.yaml

ただし,仮想環境を作成しただけで,パッケージを何もインストールしていない状態では,うまくいかないようです.

仮想環境の再構築 conda env create -f file.yaml

my_intel_env.yamlを使って別のマシンで環境を再構築するには以下の様にします.

$ conda env create -f my_intel_env.yaml

スパコン ベンダー環境のクローン作成

スパコンITOではベンダーがインストールしている Intel Python の環境があります.これをそのまま使用する場合は上記のインストール作業は不要ですが,そのままではパッケージのインストールができません.そのため,ベンダー環境のクローンをローカルの仮想環境として作成する必要があります.この方法はベンダー環境に依存し,必ずしも十分にメンテされているわけではないので,お勧めはできません.実際,筆者は numpy が import できない不具合に遭遇しました.以下に参考まで,まとめておきます.本件は九州大学情報基盤研究開発センターの利用相談で得た情報です.

サーバーの conda 環境をローカルにクローンする

仮想環境名を intel2019up4 として以下のように構築します.実行には時間がかかります(7分程度でした).クローン可能な対象はベンダーの整備状況に依存します.

$ source /home/app/intel/intel2019_up4/intelpython3/bin/activate
$ conda create -n intel2019up4 --clone="/home/app/intel/intel2019_up4/intelpython3"
$ source activate intel2019up4

確認してみましょう.

$ conda info -e
# conda environments:
#
intel2019up4          *  /home/usr1/m00000a/.conda/envs/intel2019up4
root                     /home/app/intel/intel2019_up4/intelpython3

この環境を抜けるには以下の様にします.

$ source deactive intel2019up4
2
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
5