Kerasの最新動向:AI開発を加速する進化 🚀

AI / 機械学習

Kerasは、Pythonで書かれた高水準ニューラルネットワークAPIであり、そのシンプルさと柔軟性から多くの開発者や研究者に愛用されています。元々は独立したライブラリでしたが、TensorFlowに統合され、その公式高水準APIとして広く使われるようになりました。しかし、AI開発の世界は常に進化しており、Kerasも例外ではありません。近年、特に大きな変革がありました。この記事では、Kerasの最新動向、特にマルチバックエンドサポートの復活やエコシステムの進化に焦点を当てて解説します。

Keras 3の登場:マルチバックエンド時代の再来 🎉

Kerasの歴史の中で最も注目すべき最新動向は、Keras 3のリリースです。2023年秋にプレビュー版(keras-core)が登場し、2023年11月末に正式リリースされました。Keras 3はKeras APIの完全な再実装であり、最大の目玉はマルチバックエンドサポートの復活です。

初期のKerasはTensorFlow、Theano、CNTKなど複数のバックエンドをサポートしていましたが、バージョン2.4以降はTensorFlowとの統合が進み、実質的にTensorFlow専用の高水準API (tf.keras) となっていました。しかし、Keras 3ではこの流れが変わり、以下の主要な機械学習フレームワークをバックエンドとして選択できるようになりました。

  • TensorFlow
  • PyTorch
  • JAX
  • OpenVINO (推論のみ)

これにより、開発者はプロジェクトの要件や好みに応じて、最適なバックエンドフレームワークを選択し、切り替えることが可能になります。例えば、GPUでの学習・推論パフォーマンスはモデルによって異なりますが、一般的にJAXが高い性能を示すことが多い一方で、非XLAのTensorFlowが速い場合もあります。Keras 3では、コードを変更することなくバックエンドを切り替えられるため、常に最高のパフォーマンスを追求できます。

TensorFlow 2.16以降では、Keras 3がデフォルトのKerasバージョンとして採用され、tf.kerasは同梱されなくなりました。ただし、TensorFlowの依存パッケージとしてKeras 3がインストールされるため、TensorFlow標準の高水準APIとしての位置づけは維持されています。

バックエンドの設定方法

バックエンドは、環境変数 KERAS_BACKEND を設定するか、ローカルの設定ファイル ~/.keras/keras.json (Windowsでは <ユーザーディレクトリ>/.keras/keras.json) を編集することで指定できます。設定はimport kerasを実行する前に行う必要があります。

環境変数での設定例 (Linux/macOS):

export KERAS_BACKEND="torch" # PyTorchを指定
python your_script.py

設定ファイルの例 (keras.json):

{
    "floatx": "float32",
    "epsilon": 1e-07,
    "backend": "jax",  <!-- ここでバックエンドを指定 -->
    "image_data_format": "channels_last"
}

Keras 3の主要な特徴とメリット ✨

Keras 3は単なるマルチバックエンド対応にとどまらず、多くの新機能とメリットを提供します。

  • パフォーマンスの最適化: バックエンドを動的に選択できるため、モデルごとに最適なパフォーマンスを達成できます。特にJAXバックエンドはGPUやTPUでの高いパフォーマンスが期待されます。XLA (Accelerated Linear Algebra) コンパイレーションの活用もパフォーマンス向上に寄与します。
  • エコシステムの拡大: Keras 3で作成したモデルは、PyTorchのModuleとしてインスタンス化したり、TensorFlowのSavedModel形式でエクスポートしたり、ステートレスなJAX関数として利用したりできます。これにより、PyTorchエコシステムのパッケージ、TensorFlowのデプロイツール、JAXの大規模分散学習基盤など、各フレームワークの強みを最大限に活用できます。
  • クロスフレームワーク言語: keras.ops 名前空間を通じて、NumPy APIの完全な実装や、softmax, binary_crossentropy, convなどのニューラルネットワーク固有の関数が提供されます。keras.opsのみを使用すれば、カスタムレイヤー、損失関数、メトリクス、オプティマイザなどを、TensorFlow、PyTorch、JAXのいずれでも動作するように一度だけ記述できます。
    import keras
    import keras.ops as ops
    
    class MyCustomLayer(keras.layers.Layer):
        def __init__(self, units=32, **kwargs):
            super().__init__(**kwargs)
            self.units = units
    
        def build(self, input_shape):
            self.w = self.add_weight(
                shape=(input_shape[-1], self.units),
                initializer="random_normal",
                trainable=True,
            )
            self.b = self.add_weight(
                shape=(self.units,), initializer="zeros", trainable=True
            )
    
        def call(self, inputs):
            # keras.ops を使用することで、バックエンド非依存の計算を記述
            return ops.matmul(inputs, self.w) + self.b
    
        def get_config(self):
            config = super().get_config()
            config.update({"units": self.units})
            return config
    
    # このレイヤーは TensorFlow, PyTorch, JAX のいずれでも動作します
    layer = MyCustomLayer(64)
    
  • 大規模分散学習の強化 (JAXバックエンド): 新しいkeras.distribution APIにより、JAXバックエンド上でデータ並列、モデル並列、およびそれらの組み合わせを容易に実装できます。モデル定義、訓練ロジック、シャーディング設定を分離することで、開発・保守が容易な分散学習ワークフローを実現します。
  • ステートレスAPI: JAXのステートレスな性質に合わせて、レイヤー、モデル、メトリクス、オプティマイザなどをステートレスに設計できます。
  • 段階的な複雑性の開示: Kerasの哲学である「シンプルさは維持しつつ、高度なワークフローも可能にする」はKeras 3でも健在です。初心者はシンプルなAPIで始められ、熟練者は低レベル機能にアクセスして複雑なモデルやカスタムロジックを実装できます。

Kerasエコシステムの進化:KerasCV, KerasNLPからKerasHubへ 🧩

Kerasのエコシステムも進化を続けています。特にコンピュータビジョン(CV)と自然言語処理(NLP)のためのライブラリであるKerasCVKerasNLPは、Keras 3のマルチバックエンドに対応しています(バージョン0.6.0以降)。これにより、これらのライブラリで提供される事前学習済みモデルやコンポーネントを、TensorFlow、PyTorch、JAX上で利用できます。

さらに最近(2024年9月頃)、KerasCVとKerasNLPは統合され、新しいKerasHubパッケージとして再編されました。GitHubリポジトリもkeras-nlpからkeras-hubに名称変更されています。

KerasHubへの移行

既存のKerasNLPユーザーは、インポート文をimport keras_nlpからimport keras_hubに変更するだけで、KerasHubを利用できます。KerasCVユーザーもKerasHubに移行することで、一貫したモデル読み込みAPIやフレームワークの柔軟性といったメリットを享受できます。

インストール:

pip install --upgrade keras-hub

KerasNLPからの移行例:

# 変更前
# import keras_nlp
# classifier = keras_nlp.models.BertClassifier.from_preset(...)

# 変更後
import keras_hub
classifier = keras_hub.models.BertClassifier.from_preset(
    "bert_base_en_uncased",
    num_classes=2
)

KerasHubは、事前学習済みモデルのワンストップショップとして機能し、様々なタスクに対応したモデル(例: Gemma, Stable Diffusion 3, BERTなど)を統一されたインターフェースで簡単に利用できるようにします。これにより、開発者は最新のモデルを迅速にプロジェクトに組み込むことができます。

今後の展望とコミュニティ 🔭🤝

Keras 3の登場により、Kerasは再びマルチフレームワークの中心的な存在となり、AI開発の柔軟性と効率性を大きく向上させました。今後の開発ロードマップでは、以下のような機能強化が予定されています(2024年4月時点のロードマップより)。

  • Core Keras: 分散モデル(シャーディングされた重みファイル)の保存サポート実装など。
  • モデルのエクスポート: ONNXやTensorRTへのエクスポート機能の実装(バックエンド非依存)、各種サービングオプション(SavedModel, ONNX, TensorRT, TorchServe等)の説明ガイド作成など。
  • 分散学習: TensorFlowおよびPyTorchバックエンドにおけるkeras.distribution APIの実装。
  • パフォーマンス: PyTorchコンパイルのサポート、プロファイラーコールバックの追加など。

Kerasは、250万人以上の開発者に利用されており、CERN、NASA、Waymo、YouTubeなど、多くの組織や企業で採用されています。活発なコミュニティと豊富なドキュメント(日本語含む)もKerasの強みであり、初心者から研究者まで幅広いユーザーをサポートしています。Keras 3の登場により、このコミュニティはさらに多様化し、フレームワーク間の知識共有や協力が促進されることが期待されます。

Kerasは、Keras 3のリリースによって大きな進化を遂げました。マルチバックエンドサポートの復活は、開発者にフレームワーク選択の自由を与え、各エコシステムの強みを活かすことを可能にします。keras.opsによるクロスフレームワーク開発や、keras.distributionによる高度な分散学習サポートなど、多くの新機能が追加されています。

また、KerasCVとKerasNLPがKerasHubへと統合されたことで、事前学習済みモデルの利用がさらに簡便になりました。これにより、開発者は最先端のAIモデルを迅速に試すことができます。

常に進化を続けるKerasは、そのシンプルさ、柔軟性、そして強力なエコシステムによって、今後もAI / 機械学習開発における重要なツールであり続けるでしょう。最新動向を把握し、Keras 3のパワーを活用することで、より効率的で高性能なAIアプリケーション開発が可能になります。ぜひ、Keras 3の世界を探求してみてください!🚀

コメント

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