tensorflow2.18をAVX無効GPU有効でビルドする (python3.11)

投稿:2025/11/07

どうでもいい経緯

kaggle-gpu-imageのコンテナ内でtensorflowを使おうとしたら

調べてみると、tensorflow1.5以降ではAVX/AVX2拡張命令を使っていて、これが古いcpuでは使えないらしい。
しかし、自分が使っているcpuは12世代のi5なのでAVX命令は使えるはず。
実際windowsでは使えて、使えないのはwslの中だけだった。 色々調べてみたが自分の力では解決できなかったので諦め。

tensorflowを使うための代替案は5つくらい

  1. windows環境で開発する
  2. hyper-vを無効化にしてVirtualBoxやVMwareを使う
    • うーん
  3. native linuxを入れる
    • だるい。pc2台あったらやってみたい。
  4. tensorflowのバージョンを1.5に下げる
    • カス
  5. tensorflowをAVX無しでビルドする
    • 面倒

今の開発環境をできるだけ崩したくないので4か5、4はカスなので5。

ビルドを始める前に、
tensorflow no avxとかで検索すると、誰かが作ったwheelファイル配られてたりするので、自分に合うものが見つかれば終了。ただしtensorflowとpythonのバージョンは超重要で、少しでも違うと動かない可能性が高い。

tensorflowをビルドする

linux/python3.11/tensorflow2.18/avx無/cuda有

cloneしてくる

git clone git@github.com:tensorflow/tensorflow.git
cd tensorflow
git checkout v2.18.0
rm -rf .git

bazelを入れる

curl -Lo /usr/local/bin/bazel https://github.com/bazelbuild/bazelisk/releases/download/v1.21.0/bazelisk-linux-amd64
chmod +x /usr/local/bin/bazel
bazel version

ビルドの設定

./configure

Rocm: No
cuda support: Yes
cuda version: 12.5.1
cudnn version: 9.2.1
clang as cuda: Yes (重要)
config opt: -mno-avx -mno-avx2 -mno-avxvnni -mno-fma -O2
android build: No

終わったら.tf_configure.bazelrcが作られる。

ビルドする

bazel build //tensorflow/tools/pip_package:wheel --repo_env USE_PYWRAP_RULES=1 --config=opt --config=cuda_wheel

8時間かかった

完成。/bazel-binフォルダが作られて、そん中のどっかにwhlファイルがある。

配布

はい。ライセンスに気をつける
dropbox