Hugging Face Transformers v4.2.0 TensorFlow パフォーマンスおよびサービングのアップデート
Hugging Face は、堅牢性と推論速度を向上させるために、いくつかの主要なモデルの TensorFlow 実装を更新しました。これらの改善は、特に BERT、RoBERTa、ELECTRA、および MPNet を対象としており、graph/eager モード、TensorFlow Serving、および CPU、GPU、TPU デバイス全体でパフォーマンスの向上を提供します。
計算パフォーマンスの向上
Transformers v4.2.0 は、TensorFlow モデルの計算速度を大幅に向上させます。GPU V100 を使用し、シーケンス長 128 で v4.2.0 の BERT 実装を Google の公式実装と比較したベンチマークでは、v4.2.0 バージョンは最大 ~10% 高速です。
| Batch size | Google implementation (ms) | v4.2.0 implementation (ms) | Relative difference |
|---|---|---|---|
| 1 | 6.7 | 6.26 | 6.79% |
| 2 | 9.4 | 8.68 | 7.96% |
| 4 | 14.4 | 13.1 | 9.45% |
| 8 | 24 | 21.5 | 10.99% |
| 16 | 46.6 | 42.3 | 9.67% |
| 32 | 83.9 | 80.4 | 4.26% |
| 64 | 171.5 | 156 | 9.47% |
| 128 | 338.5 | 309 | 9.11% |
さらに、v4.2.0 の実装は 4.1.1 リリースで見られたバージョンよりも 2 倍高速です。
TensorFlow Serving の統合
本番環境でこれらのパフォーマンス向上を活用するために、Hugging Face は、HTTP および gRPC API を介してモデルをデプロイできる TensorFlow Extended (TFX) のコンポーネントである TensorFlow Serving との統合を最適化しました。
SavedModel フォーマット
TensorFlow Serving は、モデルが SavedModel フォーマットであることを要求します。これは、モデルのアーキテクチャと重みをスタンドアロンのパッケージとして含んでいます。このフォーマットにより、元のソースコードなしでモデルを実行でき、C++、Java、Go、および JavaScript などのバックエンドをサポートします。
Transformers v4.2.0 以降、SavedModel の作成には 3 つの主要な強化が含まれます:
- Flexible Sequence Length: シーケンス長は、実行間で自由に変更できます。
- Input Availability: すべてのモデル入力が推論に使用可能です。
- Grouped Outputs:
output_hidden_states=Trueまたはoutput_attentions=Trueが使用される場合、hidden statesまたはattentionは単一の出力にグループ化されます。
カスタムサービングシグネチャ
ユーザーはモデルをサブクラス化して、カスタムサービングシグネチャを定義できます。これは、input_ids (token IDs) の代わりに inputs_embeds (token embeddings) を渡す場合に必要です。serving メソッドをオーバーライドし、特定の input_signature を持つ @tf.function デコレータを使用することで、開発者は SavedModel に期待される入力の名前、データ型、および形状を正確に定義できます。
デプロイメントワークフロー
感情分類のための BERT モデルのデプロイは、3 つのステップのプロセスで行われます:
- Model Creation: モデル (例:
nateraw/bert-base-uncased-imdb) をロードし、model.save_pretrained("my_model", saved_model=True)を使用して保存することで、h5 重みとともにSavedModelバージョンを生成します。 - Containerization: Docker を使用して
tensorflow/servingイメージをプルし、SavedModelをコンテナの models フォルダにコピーし、MODEL_NAME環境変数に設定してイメージをコミットします。 - Inference: REST API (HTTP POST リクエスト経由) または gRPC API (
tensorflow_serving.apisを使用) を使用して、デプロイされたモデルにクエリを送信します。
将来の方向性
Hugging Face は、デプロイメントパイプラインをさらに簡略化するために、前処理ステージを SavedModel に直接統合することを目指しています。