01.08 緊急事案対応 ~OpenAI_Gym用python仮想環境不具合~

【現 象】
2023年度より全く新しいシリーズ「ゼロから作るDeepLearning4~強化学習編~」がスタートします。これに際し事前準備として「openai_gym」のデモンストレーションを行おうとすると様々な問題があることが発覚しました。


・ 別PCでの起動
従来システム移行が完了していないPC「DELL G15 Ryzen (AMD Ryzen7 5800H) GeForceRTX3060」へHP手順でインストールしたところ全く動作しませんでした。同様に従来動かしていたG5 5090も動作不能にになっていました。


・ ソフトウエア上の問題点
起動時のエラーは下記です。


 UserWarning: WARN: Gym minimally supports python 3.6 as the python foundation not longer supports the version, please update your version to 3.7+ [0m
"Gym minimally supports python 3.6 as the python foundation not longer supports the version, please update your version to 3.7+"

どうやら 以前作成した時には「python3.6」の仮想環境で動作させていたものが、現在では依存関係あるモジュールのいくつかが、既に「python3.6」では動作しなくなっています。


・ CUDAのバージョン
新しいPC G15はGPUがAMDであるため、windowsと同じ手順でCUDAが動作せず、AMD用のCUDAを別の手順でインストールする必要があり現在まで出来ておらず、tensorflowはGPU未使用タイプでインストールします。このためインストールはtensorflow0.14.0をインストールしたため動作しましたが、旧PC G5は下記のようにCUDAart64_100出エラー、つまりCUDAV10.0を指定して使用しているため、GPU対応での駆動はでき無いことが分かりました。

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "SpaceInvaders-v0-run.py", line 12, in 
    from stable_baselines.common.vec_env import DummyVecEnv
  File "C:\ProgramData\Anaconda3\envs\openai_gym\lib\site-packages\stable_baselines\__init__.py", line 3, in 
    from stable_baselines.a2c import A2C
  File "C:\ProgramData\Anaconda3\envs\openai_gym\lib\site-packages\stable_baselines\a2c\__init__.py", line 1, in 
    from stable_baselines.a2c.a2c import A2C
  File "C:\ProgramData\Anaconda3\envs\openai_gym\lib\site-packages\stable_baselines\a2c\a2c.py", line 5, in 
    import tensorflow as tf
  File "C:\ProgramData\Anaconda3\envs\openai_gym\lib\site-packages\tensorflow\__init__.py", line 28, in 
    from tensorflow.python import pywrap_tensorflow  # pylint: disable=unused-import
  File "C:\ProgramData\Anaconda3\envs\openai_gym\lib\site-packages\tensorflow\python\__init__.py", line 49, in 
    from tensorflow.python import pywrap_tensorflow
  File "C:\ProgramData\Anaconda3\envs\openai_gym\lib\site-packages\tensorflow\python\pywrap_tensorflow.py", line 30, in 
    self_check.preload_check()
  File "C:\ProgramData\Anaconda3\envs\openai_gym\lib\site-packages\tensorflow\python\platform\self_check.py", line 82, in preload_check
    % (build_info.cudart_dll_name, build_info.cuda_version_number))
ImportError: Could not find 'cudart64_100.dll'. TensorFlow requires that this DLL be installed in a directory that is named in your %PATH% environment variable. Download and install CUDA 10.0 from this URL: https://developer.nvidia.com/cuda-90-download-archive


・ python仮想環境名破壊
一般的にはcondaによるpython仮想環境情報を表示すると下記のように表示されます。

openai_gym) d:\VisualStudio2017\Python3.5_GPU\OpenAI_Gym>conda info -e
# conda environments:
#
base                     C:\ProgramData\Anaconda3
openai_gym            *  C:\ProgramData\Anaconda3\envs\openai_gym
py36                     C:\ProgramData\Anaconda3\envs\py36
py38                     C:\ProgramData\Anaconda3\envs\py38

G5は上記のように正常に表示されますが、新しく環境をインストールした G15は該当の「openai_gym」にアクティベートした後情報を見ると下記のようにブランクになってました。
この状態は単に他の仮想環境が見えないのではなく、この状態からpy36等他の環境に変更しようとすると環境名がないというエラーが発生し完全に消滅していることが分かりました。但し、anaconda仮想環境フォルダー内に仮想環境フォルダーは現存しておりプロンプトを再立ち上げすると元に戻ります。

openai_gym) d:\VisualStudio2017\Python3.5_GPU\OpenAI_Gym>conda info -e
# conda environments:
#
base                     C:\ProgramData\Anaconda3
                      *  C:\ProgramData\Anaconda3\envs\openai_gym
                         C:\ProgramData\Anaconda3\envs\py36
                         C:\ProgramData\Anaconda3\envs\py38


【原 因】
今回の問題は大きく「ソフトウエア上の問題」「ハードウエア上の問題」と区分する必要があるようです。

・ ソフトウエア上の問題点
ソフトウエア上の問題として強化学習時の主要でモジュール「gym」のバージョンアップに伴い内部変数やメソッドの一部を廃止したことにより、廃止した主な理由としてpythonのグレードアップに伴うものであることが判明しました。この変更による不整合によりpython3.6環境では動作しない状態になっているということです。


・ python仮想環境名破壊
python仮想環境名破壊に関し、下記のような試験をしました。
 ① openai_gym仮想環境のクローンを作成し試験した
        → 同じ現象
 ② 仮想環境を一旦削除して再度python+anaconda+tensorflowのみで再作成した
        → 同じ現象

つまり、この現象は仮想環境「openai_gym」による現象ではなく、4つ目の仮想環境「openai_gym」を作成したことによる現象であると考えられます。実際G5では何の問題もない為AMD PC特有の問題であると考えられます。


【対 策】
このためpython仮想環境名破壊は個別のPC問題として区別して考え、他の仮想環境に切り替える操作をコマンドプロンプトをクローズしてから行うという手順で解決するため、この問題はクローズします。

次に、ソフトウエア上の問題については、 2つに対策が考えられます。

① pythonを3.7にグレードアップする
python3.7にグレードアップして対応する方法です。
但しグレードアップ手順がpipバージョン指定の単純なインストールでは出来ず、 pythonを3.7にグレードアップするためには仮想環境から作り直すことになります。但し実際一括piでのインストールを試しましたが、所々エラーとなってしまい完全には移行できませんでした。この為新しいPC G15は最初から仮想環境名「openai_gym」をpython3.7で作成しましたが、G5は出来ていません。

② gymをグレードダウンする
G5はpythonバージョンは現状維持として、原因となっている外部モジュール「gym」を一度アンインストールしてグレードダウンして「v0.19.0」をしようするようにしました。

pip install "gym==0.19.0"

ただ、どちらも不整合が発生しその都度エラーが出る為、かなり時間がかかります。


・ CUDAのバージョン
CUDAは現在動作させているPCOASも使用しており、使用時の取り決めとしてバージョンを「10.1」に統一して使用すると決めたため、変更・複合保持・複合使用は不具合の原因となるため不可とし、バージョンは現状維持とします。
但し、この状態では「openai_gym」は動作しませんので、GPUを使用しない「tensorflow0.14.0」を使うこととします。
なお、tensorflow0.14.x以降の新しいtensorflowを使用している方は、確かtensorflow内部でGPUを判別し駆動するタイプに変更されGPUの有無により名称を変更しない仕様に変更されましたので、「tensorflow0.14.0」にグレードを落としてインストールしてください。

【結 果】
pythonをはじめとする様々なモジュールが依存関係にあるモジュールのアップデートで時間経過とともに動作しないようになってきております。実際にはそのためにフレームワークDeZeroを使用するようになりましたが、自然言語と強化学習は専用のモジュールを使用するしかないのが実情です。

このため、後追いで本サイトを利用している方は、色々な個所でエラーが発生する可能性がありますのでご注意ください。
【参考文献】


≪清須電脳倶楽部メインページへ戻る場合はここをクリックしてください≫
Copyright(c)2018 GGE Kiyosu Cyber Club Allrights Reserved
inserted by FC2 system