Keras Core 0.1 : Keras for TensorFlow, JAX, & PyTorch (翻訳/解説)
翻訳 : (株)クラスキャット セールスインフォメーション
作成日時 : 07/13/2023 (0.1.0)
* 本ページは以下のドキュメントを翻訳した上で適宜、補足説明したものです:
* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。
- 人工知能研究開発支援
- 人工知能研修サービス(経営者層向けオンサイト研修)
- テクニカルコンサルティングサービス
- 実証実験(プロトタイプ構築)
- アプリケーションへの実装
- 人工知能研修サービス
- PoC(概念実証)を失敗させないための支援
- お住まいの地域に関係なく Web ブラウザからご参加頂けます。事前登録 が必要ですのでご注意ください。
◆ お問合せ : 本件に関するお問い合わせ先は下記までお願いいたします。
- 株式会社クラスキャット セールス・マーケティング本部 セールス・インフォメーション
- sales-info@classcat.com ; Web: www.classcat.com ; ClassCatJP
Keras Core 0.1 : Keras for TensorFlow, JAX, & PyTorch
Keras Core は Keras 3.0 のプレビュー版です。Keras 3.0 は 2023 年秋に一般公開されて tf.keras を置き換える予定です。
Keras Core は TensorFlow, JAX と PyTorch の上で Keras ワークフローを実行することを可能にします。それはまた (層、モデルやメトリクスのような) Keras コンポーネントを低位 TensorFlow, JAX と PyTorch ワークフローの一部としてシームレスに統合することも可能にします。
- Keras Core アナウンスメント で更に学習してください。
- Keras Core イントロダクション Colab で始めましょう。
- Contribute to the project on GitHub at github.com/keras-team/keras-core.
主要な利点
- 貴方のモデルについて常に最高のパフォーマンスを得られます。私たちのベンチマークでは、通常は JAX が GPU, TPU と CPU 上で最高の訓練と推論パフォーマンスを提供することを見出しました — しかし結果はモデルにより様々です、非 XLA TensorFlow が場合によっては GPU 上でより高速であるためです。貴方のモデルについて最高のパフォーマンスを提供するバックエンドをコードを変更する必要性なしに動的に選択できる機能は、最高の達成可能な効率で訓練してサービスを提供できることが常に保証されていることを意味します。
- モデルに対して利用可能なエコシステムの表面 (surface) を最大化します。任意の Keras Core モデルは PyTorch Module としてインスタンス化したり、TensorFlow SavedModel としてエクスポートしたり、あるいはステートレス JAX 関数としてインスタンス化することができます。これは、Keras Core モデルを PyTorch エコシステムパッケージと共に使用したり、幅広い TensorFlow 配備 & プロダクションツールと共に使用したり、そして JAX の大規模 TPU 訓練インフラと共に使用することができることを意味します。Keras Core API を使用して一つの model.py を書けば、ML の世界が提供するすべてにアクセスできます。
- オープンソースモデルのリリースの配布を最大化します。事前訓練済みモデルのリリースを望みますか?それをできるだけ多くの人が利用できることを望みますか?それを純粋な TensorFlow や PyTorch で実装する場合、マーケットのおよそ半分が利用可能になります。それを Keras Core で実装すれば、選択したフレームワークに関係なく (Keras ユーザでない場合でも) 誰でもすぐに利用可能となります。追加の開発コストなしにインパクトが 2 倍になります。
- 任意のソースからデータパイプラインを使用できます。Keras Core の fit()/evaluate()/predict() ルーチンは、使用しているバックエンドに関係なく、tf.data.Dataset オブジェクト、PyTorch DataLoader オブジェクト、NumPy 配列, Pandas dataframes と互換性があります。PyTorch DataLoader 上で Keras Core + TensorFlow モデルを訓練したり、tf.data.Dataset 上で Keras Core + PyTorch モデルを訓練することができます。
インストール
Keras Core を pip でインストールできます :
pip install keras-core
それから Python でそれをインポートできます :
import keras_core as keras
Keras Core は tensorflow がインストールされていることを必要とすることに注意してください、tf.nest Python datastructure 前処理ユティリティを使用するからです。将来的には、この依存関係は除去され、使用することを意図した特定のバックエンド・フレームワークをインストールする必要があるだけになります。
Note on cuDNN: 同じ環境内で GPU 上で Keras Core を複数のフレームワークで使用することを意図する場合、3 つのバックエンド・フレームワークの最新版はそれぞれ異なる cuDNN バージョンを要求する傾向があることに留意してください。そのため、すべてが同じ cuDNN バージョンで動作するフレームワークのバージョンの組み合わせを見つける必要があります (その一方で、Keras Core は各バックエンド・フレームワークの最新版とその前のバージョンの両方で動作することが想定されます、これは柔軟性を与えます)。
バックエンド・フレームワークのバージョンと cuDNN のバージョンの正しい組み合わせは、Colab でデフォルトで何がインストールされているか を確認することで見つけられます、Colab も同じバージョン互換性問題に直面するからです。
(訳注: 以下の引用は 07/12/2023 現在のものです)
!nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver Copyright (c) 2005-2022 NVIDIA Corporation Built on Wed_Sep_21_10:33:58_PDT_2022 Cuda compilation tools, release 11.8, V11.8.89 Build cuda_11.8.r11.8/compiler.31833905_0
import torch
import tensorflow
import jax
print(f"tensorflow: {tensorflow.__version__}")
print(f"jax: {jax.__version__}")
print(f"torch: {torch.__version__}")
tensorflow: 2.12.0 jax: 0.4.10 torch: 2.0.1+cu118
バックエンドの設定
keras-core パッケージがどのバックエンドを使用するべきかを設定するため、環境変数 KERAS_BACKEND をエクスポートすることができて、あるいは ~/.keras/keras.json (keras_core をインポートするときに自動的に作成されます) にあるローカル config ファイルを編集することもできます。利用可能なバックエンドオプションは : “tensorflow”, “jax”, “torch” です。
例 :
$ export KERAS_BACKEND="jax"
$ python train.py
あるいは代わりに :
$ KERAS_BACKEND=jax python train.py
In Colab, you can use :
import os
os.environ["KERAS_BACKEND"] = "jax"
バックエンドは keras_core をインポートする前に設定される必要があり、そしてバックエンドはパッケージがインポートされた後には変更できないことに注意してください。
常に同じバックエンドを使用したい場合には、デフォルトのバックエンドを指定するために ~/.keras/keras.json を編集するだけで良いです。
KerasCV と KerasNLP を Keras Core で使用する
バージョン 0.6.0 の時点で、keras-nlp と keras-cv は両方とも keras-core によるマルチバックエンドをそのままでサポートしています。マルチバックエンド・サポートで実行するために keras-nlp と keras-cv を設定する 2 つの方法があります :
- KERAS_BACKEND 環境変数。設定された場合、keras-cv と keras-nlp は指定されたバックエンドで keras-core を使用していきます。
- .keras/keras.json, .keras/keras_nlp.json, .keras/keras_cv.json config ファイル (これらは最初に keras-cv または keras-nlp をインポートするときに自動的に作成されます) :
- keras-nlp に常に keras-core を使用させるには、.keras/keras_nlp.json で “multi_backend”: True を設定します。
- keras-cv に常に keras-core を使用させるには、.keras/keras_cv.json で “multi_backend”: True を設定します。
その設定ステップが完了すれば、keras-nlp をインポートしてそれを選択したバックエンドの上で使用し始めることができます :
import keras_nlp
gpt2_lm = keras_nlp.models.GPT2CausalLM.from_preset("gpt2_base_en")
gpt2_lm.generate("My trip to Yosemite was", max_length=200)
Same with keras-cv:
import keras_cv
import keras_core as keras
filepath = keras_core.utils.get_file(origin="https://i.imgur.com/gCNcJJI.jpg")
image = np.array(keras.utils.load_img(filepath))
image_resized = ops.image.resize(image, (640, 640))[None, ...]
model = keras_cv.models.YOLOV8Detector.from_preset(
"yolo_v8_m_pascalvoc",
bounding_box_format="xywh",
)
predictions = model.predict(image_resized)
以上