Resolve ImportError to use PyTorch Lightning on Azure Machine Learning Compute Instance
Azure Machine Learning の Compute Instance には様々な Machine Learning / Deep Learning 用のライブラリがインストールされていますが、 Chainer や PyTorch Lightning を利用する場合、シェルを使用して手動でインストールする必要があります。
このインストールは conda install pytorch-lightning -c conda-forge
で完了させることができますが、 PyTorch Lightning のインポート時にエラーが発生します。本記事ではこの問題の解決方法を解説します。
問題
発生状況
- Azure Machine Learning Compute Instance に PyTorch Lightning をインストール
- Ubuntu 18.04.5 LTS
- Anaconda
- Jupyter で PyTorch Lightning を import
import pytorch_lightning as pl
エラー1
1 | ImportError: /anaconda/envs/azureml_py38/lib/python3.8/site-packages/horovod/torch/mpi_lib_v2.cpython-38-x86_64-linux-gnu.so: undefined symbol: _ZNK2at6Tensor6deviceEv |
horovod は、 TensorFlow, Keras, PyTorch, Apache MXNet 用の分散学習フレームワークです。
上記エラーは、 horovod.torch が使用する CPython の Shared Object の1つに、未定義のシンボルが存在するために発生しています。
解決手順
解決手順(エラー1)
horovod を再インストールします。その前段で、 GNU C Compiler と GNU C++ Compiler のアクティベーション・スクリプトをインストールします。
1 | pip uninstall horovod |
エラー2
conda run pip install --no-cache-dir horovod
が失敗します。エラーは以下の通りです。
1 | ModuleNotFoundError: No module named '_sysconfigdata_x86_64_conda_linux_gnu' |
この名前のライブラリが、少なくとも Python の Library path には存在しないということです。
解決手順(エラー2)
_sysconfigdata_x86_64_conda_linux_gnu
を探して Python の Library path に配置し、その上で再度 horovod のインストールを行います。
1 | sudo updatedb |
updatedb
は、ファイルシステム上のデータに関するデータベースを更新します。そのデータベースを使用する locate
により、ファイル等を高速に検索することができます。grep
での絞り込みの際に指定している azureml_py38
は、エラー1を参考にしたものです。
上記 locate
コマンドの出力は以下の通りです。
1 | /anaconda/envs/azureml_py38/lib/python3.8/_sysconfigdata_x86_64_conda_cos6_linux_gnu.py |
ModuleNotFoundError
となっていたライブラリは、 Library path 上に異なる名前のファイルとして存在していました。これを horovod のインストール時に必要なファイル名で配置します。
1 | EXISTING_PATH="/anaconda/envs/azureml_py38/lib/python3.8/_sysconfigdata_x86_64_conda_cos6_linux_gnu.py" |
解説を見やすくするために冗長な記述をしました。実際には環境変数を使わずに cp
の引数に直接指定する形で結構です。
解決手順(エラー1)(contd.)
上記が完了したら、再度 horovod をインストールします。
1 | pip install --no-cache-dir horovod |
今度は成功するはずです。
horovod の再インストールに成功したら、 Jupyter kernel を restart して完了です。
まとめ
Azure Machine Learning の Compute Instance で PyTorch Lightning を利用する際に直面するエラーの解決について解説しました。少し手間ですが、 PyTorch Lightning は実装の上で有用なライブラリですので、 Azure Machine Learning と併せて試してみてください。