🐍

松尾・岩澤研GCP環境でのPython仮想環境構築ガイド

2024/08/07に公開

松尾研GCP環境でのPython仮想環境構築ガイド

はじめに

この記事では、東京大学松尾研究室のGoogle Cloud Platform (GCP)環境でのPython仮想環境構築について、実際の経験に基づいたガイドを提供します。特に、pyenvとMinicondaを組み合わせた効果的な環境構築方法に焦点を当てます。

背景

松尾研のGCP環境では、以下のような制約がありました:

  • sudo権限が使用できない
  • /usr/local/cudaにCUDA 12.0がすでにインストールされている
  • 新しいCUDAバージョンをインストールできない

これらの制約の中で、異なるモデルを試したり、複数の環境を構築したりする必要がありました。

解決策:pyenvとMinicondaの利用

これらの課題に対処するため、pyenvを使用してMinicondaをインストールし、仮想環境を構築することにしました。

pyenvでMinicondaを使用するメリット

  • 柔軟な環境管理: pyenvでPythonのバージョンを簡単に切り替えつつ、Minicondaのパッケージ管理機能を利用できます。
  • システムへの影響を最小化: システムのPythonに依存せず、プロジェクトごとに独立した環境を作成できます。
  • 再現性の向上: 環境をより正確に再現できるため、チーム内で同じ設定で作業しやすくなります。
  • CUDAバージョンの制御: Condaを使用することで、CUDAのバージョンをプロジェクトごとに柔軟に管理できます。
  • 依存関係の衝突回避: 異なるプロジェクトで必要なライブラリのバージョンが競合する場合でも、個別の環境で管理できます。

環境構築手順

1. pyenvのインストール

まず、pyenvをインストールします。

curl https://pyenv.run | bash

.bashrcまたは.zshrcに以下を追加します:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

2. Minicondaのインストール

pyenvを使ってMinicondaをインストールします。

pyenv install miniconda3-latest
pyenv global miniconda3-latest

3. 仮想環境の作成

Minicondaを使って仮想環境を作成します。

conda create -n myenv python=3.8
conda activate myenv

直面した問題と解決策

1. CUDAのバージョン競合問題

  • 問題: 仮想環境で/usr/local/cuda(CUDA 12.0)が参照され、必要なバージョンと異なる場合がありました。
  • 解決策: 環境変数を明示的に設定します。
export CUDA_HOME=/path/to/desired/cuda
export LD_LIBRARY_PATH=$CUDA_HOME/lib64:$LD_LIBRARY_PATH

2. 古いREADMEによる環境構築の失敗

  • 問題: GitHubなどのリポジトリにある古いREADMEの手順で環境構築を行うと、失敗することがありました。
  • 解決策:
    • 常に公式ドキュメントを参照する
    • バージョンを明示的に指定してインストールする
    • 環境構築スクリプトを作成し、定期的に更新する

3. Conda環境のアクティベーション時の環境変数管理

環境変数(特にLD_LIBRARY_PATH)を自動的に管理するスクリプトを作成しました。

アクティベーション時のスクリプト:

mkdir -p $CONDA_HOME/envs/$VENV/etc/conda/activate.d
cat << EOF > $CONDA_HOME/envs/$VENV/etc/conda/activate.d/edit_environment_variable.sh
#!/bin/bash
export ORIGINAL_LD_LIBRARY_PATH=\$LD_LIBRARY_PATH
export LD_LIBRARY_PATH=\$CONDA_HOME/envs/\$VENV/lib:\$LD_LIBRARY_PATH
EOF
chmod +x $CONDA_HOME/envs/$VENV/etc/conda/activate.d/edit_environment_variable.sh

ディアクティベーション時のスクリプト:

mkdir -p $CONDA_HOME/envs/$VENV/etc/conda/deactivate.d
cat << EOF > $CONDA_HOME/envs/$VENV/etc/conda/deactivate.d/rollback_environment_variable.sh
#!/bin/bash
export LD_LIBRARY_PATH=\$ORIGINAL_LD_LIBRARY_PATH
unset ORIGINAL_LD_LIBRARY_PATH
EOF
chmod +x $CONDA_HOME/envs/$VENV/etc/conda/deactivate.d/rollback_environment_variable.sh

4. pip install apexでCUDAが12.4に書き換わる問題

  • 問題: pip install apexを実行すると、CUDAのバージョンが12.4に書き換わってしまう。
  • 解決策: Condaのチャンネルを使用してCUDAバージョンを固定してからインストールします。
conda config --prepend channels nvidia/label/cuda-12.1.0
pip install apex

まとめ

松尾研のGCP環境での制約の中で、pyenvとMinicondaを組み合わせることで、柔軟で再現性の高いPython仮想環境を構築することができました。この方法は、環境変数の自動管理やCUDAバージョンの固定など、様々な問題に対処しつつ、プロジェクトごとに最適化された環境を提供します。

pyenvとMinicondaの組み合わせは、特に複数のプロジェクトや異なるモデルの実験を行う研究環境において、その真価を発揮します。バージョン管理の簡素化、依存関係の衝突回避、そしてCUDAバージョンの柔軟な制御など、多くの利点をもたらします。

これらの方法を活用することで、効率的な開発環境を維持しつつ、複雑な依存関係を持つプロジェクトでも安定した実験や開発が可能になりました。常に最新の情報を確認し、環境構築の手順を適宜更新していくことが重要です。

参考リンク

東大松尾・岩澤研究室 | LLM開発 プロジェクト[GENIAC]

Discussion