モデルのホスティングプロトコル

このドキュメントでは、すべてのモデルタイプ(TFJS、TF Lite、および TensorFlow モデル)を tfhub.dev にホストする際に使用される URL の表記法を説明します。また、tensorflow_hub ライブラリが tfhub.dev と対応サービスから TensorFlow プログラムに TensorFlow モデルを読み込むために実装する HTTP(S) ベースのプロトコルについても説明します。

モデルの読み込みと、ブラウザでモデルドキュメントの閲覧できるようにする上で、コードに同じ URL を使用できるという主な特徴があります。

全般的な URL 表記法

tfhub.dev では、次のフォーマットがサポートされています。

  • TF Hub パブリッシャは <a href="https://tfhub.dev/">https://tfhub.dev/</a><publisher> に従います。
  • TF Hub コレクションは <a href="https://tfhub.dev/">https://tfhub.dev/</a><publisher>/collection/<collection_name> に従います。
  • TF Hub モデルにはバージョン管理された <a href="https://tfhub.dev/">https://tfhub.dev/</a><publisher>/<model_name>/<version> url と、モデルの最新バージョンに解決するバージョン管理されていない url <a href="https://tfhub.dev/">https://tfhub.dev/</a><publisher>/<model_name> があります。

TF Hub モデルは、URL パラメータを tfhub.dev モデル URL にアペンドすれば、圧縮アセットとしてダウンロードすることができますが、これを実現するために必要な URL パラメータはモデルの種類によって異なります。

  • TensorFlow モデル(SavedModel 形式と TF1 Hub 形式): TensorFlow モデル URL に ?tf-hub-format=compressed をアペンドします。
  • TFJS モデル: TFJS モデル URL に ?tfjs-format=compressed をアペンドして圧縮されたアセットをダウンロードするか、リモートストレージの場合は /model.json?tfjs-format=file をアペンドして読み取ります。
  • TF Lite モデル: TF Lite モデル URL に ?lite-format=tflite をアペンドします。

例を示します。

種類 モデル URL ダウンロードの形式 URL パラメータ ダウンロード URL
TensorFlow(SavedModel、TF1 Hub 形式) https://tfhub.dev/google/spice/2 .tar.gz ?tf-hub-format=compressed https://tfhub.dev/google/spice/2?tf-hub-format=compressed
TF Lite https://tfhub.dev/google/lite-model/spice/1 .tflite ?lite-format=tflite https://tfhub.dev/google/lite-model/spice/1?lite-format=tflite
TF.js https://tfhub.dev/google/tfjs-model/spice/2/default/1 .tar.gz ?tfjs-format=compressed https://tfhub.dev/google/tfjs-model/spice/2/default/1?tfjs-format=compressed

また、モデルには、ダウンロードせずにリモートストレージから直接読み取ることのできる形式でホストされているものもあります。特に、TF.js モデルをブラウザで実行している場合や Colab で SavedModel を読み込む場合など、利用できるローカルストレージがない場合に役立つ方法です。ローカルにダウンロードせずに、リモートにホストされているモデルを読み取ると、レイテンシが高まる可能性があることに注意してください。

種類 モデル URL レスポンスの型 URL パラメータ リクエスト URL
TensorFlow(SavedModel、TF1 Hub 形式) https://tfhub.dev/google/spice/2 文字列(圧縮されていないモデルが保存されている GCS フォルダへのパス) ?tf-hub-format=uncompressed https://tfhub.dev/google/spice/2?tf-hub-format=uncompressed
TF.js https://tfhub.dev/google/tfjs-model/spice/2/default/1 .json ?tfjs-format=file https://tfhub.dev/google/tfjs-model/spice/2/default/1/model.json?tfjs-format=file

tensorflow_hub ライブラリのプロトコル

このセクションでは、tensorflow_hub ライブラリと使用するために tfhub.dev にモデルをホストする方法を説明します。tensorflow_hub ライブラリと連携する独自のモデルリポジトリをホストする場合は、HTTP(s) 配信サービスでこのプロトコルの実装が行われている必要があります。

このセクションは、TF Lite と TFJS モデルには触れていません。これらのモデルは、tensorflow_hub ライブラリでダウンロードできないためです。これらのモデルをホストする方法については、上記をご確認ください。

圧縮によるホスティング

モデルは 圧縮された tar.gz ファイルとして tfhub.dev に保存されています。デフォルトでは、tensorflow_hub ライブラリは自動的に圧縮モデルをダウンロードするようになっています。また、モデル URLに ?tf-hub-format=compressed をアペンドすると、手動でダウンロードすることも可能です。以下に例を示します。

wget https://tfhub.dev/tensorflow/albert_en_xxlarge/1?tf-hub-format=compressed

アーカイブのルートは、モデルディレクトリのルートで、この例のように SavedModel が含まれています。

# Create a compressed model from a SavedModel directory.
$ tar -cz -f model.tar.gz --owner=0 --group=0 -C /tmp/export-model/ .

# Inspect files inside a compressed model
$ tar -tf model.tar.gz
./
./variables/
./variables/variables.data-00000-of-00001
./variables/variables.index
./assets/
./saved_model.pb

レガシーの TF1 Hub 形式で使用する Tarball には、./tfhub_module.pb ファイルも含まれています。

tensorflow_hub ライブラリモデルの読み込み API の 1 つが呼び出されると(hub.KerasLayerhub.load など)、ライブラリはモデルをダウンロードして解凍し、ローカルにキャッシュします。tensorflow_hub ライブラリは、無期限にキャッシュできるように、モデル URL がバージョン管理されており、あるバージョンのモデルコンテンツがミュータブルではないことを期待しています。詳細は、モデルのキャッシングをご覧ください。

非圧縮によるホスティング

環境変数 TFHUB_MODEL_LOAD_FORMAT またはコマンドラインのフラグ --tfhub_model_load_formatUNCOMPRESSED に設定されている場合、モデルはローカルにダウンロードして解凍される代わりに、リモートストレージから(GCS)から直接読み取られます。この動作が有効である場合、ライブラリはモデル URL に ?tf-hub-format=uncompressed をアペンドします。そのリクエストは圧縮されていないモデルファイルを含む GCS のフォルダへのパスを返します。たとえば、以下の URL
<a href="https://tfhub.dev/google/spice/2?tf-hub-format=uncompressed">https://tfhub.dev/google/spice/2?tf-hub-format=uncompressed</a>
は 303 レスポンスの本文で
gs://tfhub-modules/google/spice/2/uncompressed を返します。ライブラリはこの GCS の場所からモデルを読み取ります。