Обзор
The tensorflow_hub library currently supports two modes for downloading models. By default, a model is downloaded as a compressed archive and cached on disk. Secondly, models can directly be read from remote storage into TensorFlow. Either way, the calls to tensorflow_hub functions in the actual Python code can and should continue to use the canonical tfhub.dev URLs of models, which are portable across systems and navigable for documentation. In the rare case that user code needs the actual filesystem location (after downloading and decompressing, or after resolving a model handle into a filesystem path), it can be obtained by the function hub.resolve(handle) .
Кэширование сжатых файлов
Библиотека tensorflow_hub по умолчанию кэширует модели в файловой системе после их загрузки с tfhub.dev (или других хостинговых сайтов ) и распаковки. Этот режим рекомендуется для большинства сред, за исключением случаев, когда места на диске мало, но пропускная способность сети и задержка превосходны.
По умолчанию место загрузки указывается в локальный временный каталог, но его можно изменить, установив переменную среды TFHUB_CACHE_DIR (рекомендуется) или передав флаг командной строки --tfhub_cache_dir . В большинстве случаев должно работать местоположение кэша по умолчанию /tmp/tfhub_modules (или любое другое значение, которое определяется при os.path.join(tempfile.gettempdir(), "tfhub_modules") .
Пользователи, предпочитающие постоянное кэширование после перезагрузки системы, могут вместо этого установить параметр TFHUB_CACHE_DIR в каталог своей домашней директории. Например, пользователь оболочки bash в системе Linux может добавить в файл ~/.bashrc следующую строку:
export TFHUB_CACHE_DIR=$HOME/.cache/tfhub_modules
...перезапустите оболочку, и тогда будет использоваться это местоположение. При использовании постоянного местоположения имейте в виду, что автоматическая очистка не производится.
Чтение из удалённого хранилища
Пользователи могут указать библиотеке tensorflow_hub считывать модели непосредственно из удаленного хранилища (GCS) вместо загрузки моделей локально с помощью следующей команды:
os.environ["TFHUB_MODEL_LOAD_FORMAT"] = "UNCOMPRESSED"
или установив флаг командной строки --tfhub_model_load_format в UNCOMPRESSED . Таким образом, не требуется каталог кэширования, что особенно полезно в средах с ограниченным дисковым пространством, но быстрым интернет-соединением.
Запуск на TPU в блокнотах Colab
На colab.research.google.com загрузка сжатых моделей будет конфликтовать с средой выполнения TPU, поскольку вычислительная нагрузка по умолчанию делегируется другой машине, которая не имеет доступа к местоположению кэша. Существует два способа обойти эту проблему:
1) Используйте хранилище GCS, к которому может получить доступ сотрудник TPU.
Простейшее решение — указать библиотеке tensorflow_hub считывать модели из хранилища GCS в TF Hub, как описано выше. Пользователи, имеющие собственное хранилище GCS, могут вместо этого указать каталог в своем хранилище в качестве места для кэша с помощью кода, подобного следующему:
import os
os.environ["TFHUB_CACHE_DIR"] = "gs://my-bucket/tfhub-modules-cache"
...перед вызовом библиотеки tensorflow_hub .
2) Перенаправить все операции чтения через хост Colab.
Ещё один обходной путь — перенаправить все операции чтения (даже больших переменных) через хост Colab:
load_options =
tf.saved_model.LoadOptions(experimental_io_device='/job:localhost')
reloaded_model = hub.load("https://tfhub.dev/...", options=load_options)
Примечание: Дополнительную информацию о допустимых никнеймах можно найти здесь .