公式のTensorflow1.15は、CUDA10.0までしかサポートしていません。 そのため、compute capability 7.5つまりTuring世代のGPU以降では、公式のTensorflow1.15は動きません。
それ以降のGPU(Ampere: RTX 30x0, Ada Lovelace: RTX 40x0, Hopper: H200 H100 GH200, Blackwell: RTX 50x0 世代)、Tensorflow1.15を動かすには、NVIDIAのビルドしたバイナリを使用するとよいのですが、 うまく動かなかったのでcuda12.9でビルドできるようにソースコードを一部修正してビルドしたので、置いておきます。
cuda12.9, compute capability 7.5,8.0,8.6,8.9,9.0,10.0,10.3,12.0 を指定してビルドしたTensorflow1.15
for Ubuntu 18.04 tensorflow-1.15.5-cp36-cp36m-linux_x86_64.whlsudo apt install wget libxml2 gcc g++ xz-utils patch wget https://developer.download.nvidia.com/compute/cuda/12.9.1/local_installers/cuda_12.9.1_575.57.08_linux.run sudo bash cuda_12.9.1_575.57.08_linux.run --toolkit --silent
なんかダウンロードはブラウザからしないと上手くいきません。 https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.7/local_installers/12.x/cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz/
sudo tar xvf cudnn-linux-x86_64-8.9.7.29_cuda12-archive.tar.xz --strip-components=1 --transform="s,lib$,lib64,x;s,lib/,lib64/," -C /usr/local/cuda/ --keep-directory-symlink
なんかダウンロードはブラウザからしないと上手くいきません。 https://developer.nvidia.com/downloads/compute/machine-learning/nccl/secure/2.30.3/agnostic/x64/nccl_2.30.3-1+cuda12.9_x86_64.txz/
sudo tar xvf nccl_2.30.3-1+cuda12.9_x86_64.txz --strip-components=1 --transform="s,lib$,lib64,x;s,lib/,lib64/," -C /usr/local/cuda/ --keep-directory-symlink
CUDA Toolkit 12.9をインストールします。 https://developer.nvidia.com/compute/cuda/12.9.1/network_installers/cuda_12.9.1_windows_network.exe
次のリンクからダウンロードします。 https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.7/local_installers/12.x/cudnn-windows-x86_64-8.9.7.29_cuda12-archive.zip/
展開した内容を、CUDA Toolkitをインストールしたディレクトリc:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v12.9のbin、include、libにそれぞれコピーします。 このとき管理者権限が必要です。
他人の作ったバイナリなんか信用できませんね。 というわけで、ビルド方法も書いておきます。
Ubuntu24.04のPython3.12でビルドする場合は、修正箇所が増えるので、 こちらのページを参考にしてください。
すみません、あなたの環境はWindowsでしたね。 こちらのページを参考にしてください。
Tensorflow1.15では、定義に矛盾が生じるので、コンパイル時はヘッダーを誤魔化します。
cd /usr/local/cuda-12.9/ sudo patch -p1 < cuda-12.9.patch
bazel0.26.1が必要なので、昔の置き場から持ってきてダウンロードします。最新のBazelだと上手くいきません。
wget https://releases.bazel.build/0.26.1/release/bazel-0.26.1-installer-linux-x86_64.sh bash bazel-0.26.1-installer-linux-x86_64.sh
仮想環境で作業する場合はその中で入れてください。
sudo apt install python3-dev python3-pip git unzip (cd /usr/bin && sudo ln -s python3 python) pip3 install 'numpy<2' keras_preprocessing
git clone -b r1.15 https://github.com/tensorflow/tensorflow.git
Tensorflow1.15のソースコードに、cuda12.9でビルドできるようにするためのパッチを当てます。
cd tensorflow patch -p1 < ../tensorflow-1.15.5-cuda12.9.patch
cd tensorflow ./configure
基本デフォルトでいいです。 CUDA の質問で Yes として、 Compute Capability は、7.5,8.0,8.6,8.9,9.0,10.0,10.3,12.0 を指定します。必要でないGPUのものを外すとコンパイルが速くなります。
自動で CUDA12.9 が /usr/local/cuda にあることが認識されますが、このままだとなぜかインクルードのインクルードでパスが変になってて、ビルドが失敗します。 .tf_configure.bazelrc を開いて、/usr/local/cuda を探して、パスを /usr/local/cuda-12.9 に修正します。
build --action_env CUDA_TOOLKIT_PATH="/usr/local/cuda-12.9"
bazel build --config=opt --verbose_failures //tensorflow/tools/pip_package:build_pip_package
数時間かかると思うので、ゆっくりお茶して待っててください。
./bazel-bin/tensorflow/tools/pip_package/build_pip_package /tmp/tensorflow_pkg
/tmp/tensorflow_pkg に、tensorflow-1.15.5-cp36-cp36m-linux_x86_64.whl というファイルができるので、これをインストールして使ってください。 cp36の部分は、Pythonのバージョンによって変わります。
pipでインストールしてから、GPUが認識されているかをチェックするには、以下のコードが参考になります。
import tensorflow as tf
print(tf.config.experimental.list_logical_devices("GPU"))
ライブラリの依存ファイルがロードされれば、GPUがリストされます。パスがおかしい場合はロードに失敗しているログが出ます。
a = tf.constant(5.0) b = tf.constant(6.0) c = a * b sess = tf.Session() print(sess.run(c))
上手くいっていれば、GPUでメモリが確保されるので、nvidia-smiで確認できます。
model = tf.keras.Sequential([tf.keras.Input(shape=(64,64,3)),tf.keras.layers.Conv2D(256,3),]) model.summary() x = model(tf.random_normal([1,64,64,3])) init_op = tf.initialize_all_variables() sess.run(init_op) sess.run(x)
Convとかをチェックするのは、こんな感じ。
内容について何か問題やご意見がございましたら、contact@lithium03.infoまで連絡ください。
もくじへ戻る