RTX 5060 TiでTensorFlowのsm_120警告を解決する方法|CUDA・cuDNN対応とPTX JIT対策

Linux系

RTX 50シリーズのGPUでTensorFlowを動かすと、「CUDA kernel binaries compatible with compute capability 12.0aがない」「PTXからJITコンパイルされる」といった警告が表示されることがあります。GPU自体は認識されて計算も実行できるため、一見問題がないように見えますが、処理速度や安定性の面では確認しておきたいポイントがあります。

この記事では、RTX 5060 TiなどCompute Capability 12.0世代のGPUでTensorFlowを利用する場合に発生するsm_120関連の警告の意味、原因、推奨される環境構成、必要に応じたTensorFlowビルド方法について解説します。

TensorFlowの「compute capability 12.0aに対応していない」という警告の意味

TensorFlow実行時に表示される「TensorFlow was not built with CUDA kernel binaries compatible with compute capability 12.0a」というメッセージは、現在インストールされているTensorFlowパッケージの中に、RTX 50シリーズ向けのCUDAカーネルバイナリ(sm_120)が含まれていないことを意味します。

NVIDIA GPUでは、GPU世代ごとにCompute Capabilityという番号が設定されています。TensorFlowはGPUごとに最適化されたCUDAカーネルをあらかじめ含めて配布していますが、新しいGPUが発売された直後は対応ビルドが間に合わないことがあります。

この場合、TensorFlowは完全に動作しないわけではなく、PTXコードを利用して実行時にGPU向けコードへ変換する「JITコンパイル」を行います。

PTX JITコンパイルで動作する場合の問題点

PTX JITによる実行は、新しいGPUを古いTensorFlowでも動かすための仕組みです。そのため、RTX 5060 TiでもGPU認識やモデル学習自体は可能です。

ただし、実行時にCUDAドライバー側でコンパイル処理が発生するため、以下のような影響が出る可能性があります。

  • 初回実行時の速度低下
  • 一部処理で最適化されたカーネルが利用できない
  • 大規模な学習処理で性能差が出る可能性
  • ptxas関連の警告が大量に表示される

例えば画像認識モデルの学習を長時間実行する場合、ネイティブなsm_120対応ビルドを利用したほうがGPU性能を最大限活用できます。

RTX 5060 Tiで推奨されるTensorFlow環境

RTX 50シリーズのような新しいGPUでは、TensorFlow本体、CUDA Toolkit、cuDNN、NVIDIAドライバーの組み合わせが重要になります。

項目 推奨確認ポイント
NVIDIA Driver RTX 50シリーズ対応の最新ドライバーを使用
CUDA GPU世代に対応したCUDAバージョンを利用
cuDNN 利用するTensorFlowが要求するバージョンを合わせる
TensorFlow sm_120対応ビルドを選択

特にTensorFlow 2.21系や開発版tf-nightlyでは、RTX 50シリーズ対応が進められていますが、インストールしたパッケージによってはまだsm_120用バイナリが含まれていない場合があります。

TensorFlowをsm_120対応にする方法

最も簡単な方法は、RTX 50シリーズ対応が追加されたTensorFlowの新しいリリースを待って利用することです。

開発版のtf-nightlyを利用する方法もありますが、必ずしもすべてのビルドでsm_120対応済みとは限りません。そのため、インストール後に対応状況を確認することが重要です。

確認方法の一例として、TensorFlowが認識しているGPU情報を確認します。

python -c "import tensorflow as tf; print(tf.config.list_physical_devices('GPU'))"

GPUが表示されても、必ずしもネイティブ対応とは限りません。警告内容やTensorFlowビルド設定を確認する必要があります。

TensorFlowをソースからビルドしてsm_120対応する方法

すぐにRTX 5060 Ti向けネイティブCUDAカーネルを利用したい場合は、TensorFlowをソースからビルドする方法があります。

ビルド時にCUDAアーキテクチャとしてsm_120を指定することで、RTX 50シリーズ向けのカーネルを含めたTensorFlowを作成できます。

一般的な流れは以下になります。

  • TensorFlowソースコードを取得する
  • Bazelなどのビルド環境を準備する
  • CUDAとcuDNNのパスを設定する
  • sm_120を含めたCUDAアーキテクチャ設定でビルドする
  • 作成されたwheelパッケージをインストールする

ただし、TensorFlow本体側がまだ正式にsm_120対応コードを含んでいない場合、単純にビルド設定を変更するだけでは十分な性能が出ない場合があります。

「Failed to compile generated PTX with ptxas」の対処方法

「Failed to compile generated PTX with ptxas. Falling back to compilation by driver.」という警告は、CUDAのptxasコンパイラによる処理に失敗し、NVIDIAドライバー側のコンパイルへ切り替えたことを示しています。

多くの場合、致命的なエラーではありませんが、CUDA ToolkitのバージョンとTensorFlowが想定しているCUDA環境が一致しているか確認する価値があります。

WSL2環境では、Windows側のNVIDIAドライバーとUbuntu側のCUDA環境の役割が異なるため注意が必要です。Windows側にはGPUドライバー、WSL側にはCUDA関連ライブラリを適切に配置する必要があります。

RTX 50シリーズではTensorFlowから移行すべきか

RTX 5060 Tiを利用している場合でも、既存システムがTensorFlowベースで構築されているなら、すぐにPyTorchへ移行する必要はありません。

現在の環境でGPU計算が正常に動作している場合、正式なsm_120対応TensorFlowが公開されるまでPTX JITで運用するという選択肢もあります。

特に既存モデルや学習パイプラインがTensorFlow専用の場合、環境を変更するコストのほうが大きくなるケースもあります。

まとめ

RTX 5060 TiでTensorFlowを利用した際に表示されるsm_120やPTX JIT関連の警告は、GPUが故障しているわけではなく、TensorFlowビルドが新しいGPU世代へ完全対応していないことが主な原因です。

現在でもPTX JITによって動作しますが、最高性能を引き出すにはsm_120対応版TensorFlowを利用するか、必要に応じてソースビルドを検討します。

まずはNVIDIAドライバー、CUDA、cuDNN、TensorFlowの組み合わせを確認し、正式対応版が提供されるまでは現在の環境で動作確認を続ける方法が現実的です。

コメント

タイトルとURLをコピーしました