macOS (arm64) で、python で tensorflow を動かしたい。インストール方法や設定方法を教えて。kerashub からllmの小さいモデルをダウンロードして動かしたい。 26s考えました macOS の Apple Silicon(arm64)では、現在は通常の tensorflow パッケージがネイティブ対応しています。GPUを利用する場合は、Appleの tensorflow-metal プラグインを追加します。KerasHubはKeras 3上で動作し、TensorFlow・JAX・PyTorchのいずれかをバックエンドとして利用できます。 ただし、tensorflow-metal は新しいTensorFlowとの組み合わせで読み込みエラーが報告されているため、まずは以下の安定寄りの構成を推奨します。 Python 3.11 TensorFlow 2.18.1 Keras 3 KerasHub tensorflow-metal 1. arm64版Pythonの確認 ターミナルで実行します。 uname -m 次のように表示されればApple Siliconネイティブです。 arm64 Pythonも確認します。 python3 --version python3 -c "import platform; print(platform.machine())" 結果が、たとえば次のようになれば問題ありません。 Python 3.11.x arm64 x86_64 と表示される場合は、Rosetta版Pythonを使っている可能性があります。 2. HomebrewでPython 3.11を入れる Homebrewが既にある場合は、次を実行します。 brew install python@3.11 インストール場所を確認します。 brew --prefix python@3.11 Apple Silicon版Homebrewなら、通常は次の場所です。 /opt/homebrew/opt/python@3.11 3. 仮想環境を作る プロジェクト用ディレクトリを作成します。 mkdir -p ~/tensorflow-llm cd ~/tensorflow-llm Python 3.11で仮想環境を作ります。 /opt/homebrew/bin/python3.11 -m venv .venv 有効化します。 source .venv/bin/activate 確認します。 python --version python -c "import platform; print(platform.machine())" 仮想環境を終了するときは次です。 deactivate 4. TensorFlowとKerasHubをインストールする 最初にインストールツールを更新します。 python -m pip install --upgrade pip setuptools wheel GPUを使う安定寄りの構成 python -m pip install \ "tensorflow==2.18.1" \ tensorflow-metal \ keras \ keras-hub \ kagglehub \ sentencepiece Apple公式では、TensorFlow 2.13以降は tensorflow-macos ではなく通常の tensorflow をインストールする方法が案内されています。GPUを使用するには tensorflow-metal を追加します。 新しいTensorFlowで libmetal_plugin.dylib の読み込みエラーが起きる事例があるため、GPU利用時はまず tensorflow==2.18.1 を試すのが安全です。 CPUだけでよい場合 Metal関係の問題を避けて、まずモデルを動かすだけなら次でも構いません。 python -m pip install tensorflow keras keras-hub kagglehub sentencepiece この場合、tensorflow-metal はインストールしません。 5. TensorFlowの動作確認 check_tf.py を作ります。 import platform import tensorflow as tf import keras print("Architecture :", platform.machine()) print("TensorFlow :", tf.__version__) print("Keras :", keras.__version__) print("Physical devices:") for device in tf.config.list_physical_devices(): print(" ", device) print("GPU devices:") for device in tf.config.list_physical_devices("GPU"): print(" ", device) 実行します。 python check_tf.py GPUが認識されている場合は、概ね次のように表示されます。 Architecture : arm64 TensorFlow : 2.18.1 Keras : 3.x.x GPU devices: PhysicalDevice(name='/physical_device:GPU:0', device_type='GPU') Apple Siliconでは、GPU専用の独立したVRAMではなく、CPUとGPUがユニファイドメモリを共有します。そのため、LLMを読み込むとモデルの重みや中間テンソルがMac本体のメモリを消費します。 6. 簡単なGPU計算テスト import time import tensorflow as tf print("GPU:", tf.config.list_physical_devices("GPU")) device = "/GPU:0" if tf.config.list_physical_devices("GPU") else "/CPU:0" with tf.device(device): a = tf.random.normal((4096, 4096)) b = tf.random.normal((4096, 4096)) # 最初の1回は初期化時間を含む c = tf.matmul(a, b) _ = c.numpy() start = time.perf_counter() c = tf.matmul(a, b) _ = c.numpy() elapsed = time.perf_counter() - start print("Device:", device) print(f"Time: {elapsed:.3f} sec") python gpu_test.py 7. KerasHubで小型LLMを動かす Keras 3では、バックエンドを環境変数 KERAS_BACKEND で指定します。これは、keras や keras_hub をインポートする前に設定する必要があります。 Qwen3 0.6Bを試す KerasHubには約5.96億パラメータの qwen3_0.6b_en プリセットが掲載されており、比較的小型です。 run_qwen.py を次の内容で作ります。 import os # kerasをimportする前に指定する os.environ["KERAS_BACKEND"] = "tensorflow" import tensorflow as tf import keras