This TensorFlow binary is optimized to use available CPU instructions in performance-critical operations.
To enable the following instructions: SSE3 SSE4.1 SSE4.2 AVX AVX2 AVX512F AVX512_VNNI AVX512_BF16 FMA, in other operations, rebuild TensorFlow with the appropriate compiler flags.
使用 pip 直接從 Python Package Index 安裝 TensorFlow,之後 import 時,會冒出上面這則提示。
我目前使用的 CPU 是 AMD Ryzen 5 8500G,雖然內建的 GPU 不在 TensorFlow 支援之列(更嚴謹地說,是不在 AMD ROCm 框架支援之列),但是既然 CPU 有 AVX-512 指令集可用,那聊勝於無、不用白不用。
但是為了要啟用 AVX-512,就得自己編譯 TensorFlow,並指定需要的編譯旗標。
網上不少過時、無效的指引,這篇也不知道何時會過時、無效,純粹做個筆記。
- 用 virtualenv 安裝目前 TensorFlow 支援的 Python 3.12 版本(發文當下 Python 最新正式版是 3.13,不過 TensorFlow 還不支援)。裝好後,在 terminal 下啟用 (activate) 這個 virtualenv。
- 裝 LLVM & Clang 17(是的,發文當下 TensorFlow 也只支援 Clang 17 版)
- 裝 patchelf
- 裝 Bazelisk 這個 TensorFlow 使用的建置系統 Bazel 的版本管理器兼指令 wrapper(有點拗口?)
- 下載 TensorFlow 原始碼
- 找一處容量比 OS 預設的 /tmp(暫存檔專用目錄)更充裕的地方,建個目錄,設定
export TMPDIR=$PWD
,不然最後在打包 wheel package 階段,會因為 /tmp 容量不足而失敗 - 進到 TensorFlow 目錄下,執行
./configure
回答幾個配置問題,如果前面幾點都有妥當安裝配置好,應該是一路 Enter 使用偵測到的預設值即可 - 執行
bazelisk build //tensorflow/tools/pip_package:wheel --repo_env=WHEEL_NAME=tensorflow_cpu --copt="-march=native"
讓它建置出「偵測到可用、但預設未啟用」(如原始訊息所示)的那些 CPU 加速指令集的 TensorFlow,這步驟需要一點時間。 - 順道一提,如果好奇
-march=native
背後做了哪些工,可以跑bash -c 'echo | clang-17 -E - -march=native -###'
(如果缺乏這樣的好奇心,我覺得也…沒事) - 先解除安裝既有的 TensorFlow,改安裝剛剛建置好、產出的 wheel package:
pip install bazel-bin/tensorflow/tools/pip_package/wheel_house/tensorflow_cpu-2.20.0-cp312-cp312-linux_x86_64.whl
之後 import tensorflow as tf
時,理應就不會看到最上面那段訊息了。
發佈留言