Buforowanie pobierania modeli z TF Hub

Przegląd

Biblioteka tensorflow_hub obsługuje obecnie dwa tryby pobierania modeli. Domyślnie model jest pobierany jako skompresowane archiwum i buforowany na dysku. Po drugie, modele można bezpośrednio wczytać ze zdalnej pamięci do TensorFlow. Tak czy inaczej, wywołania funkcji tensorflow_hub w rzeczywistym kodzie Pythona mogą i powinny w dalszym ciągu korzystać z kanonicznych adresów URL modeli tfhub.dev, które można przenosić między systemami i po których można nawigować w celu uzyskania dokumentacji. W rzadkich przypadkach, gdy kod użytkownika wymaga rzeczywistej lokalizacji systemu plików (po pobraniu i dekompresji lub po przekształceniu uchwytu modelu w ścieżkę systemu plików), można go uzyskać za pomocą funkcji hub.resolve(handle) .

Buforowanie skompresowanych plików do pobrania

Biblioteka tensorflow_hub domyślnie buforuje modele w systemie plików, gdy zostały pobrane z tfhub.dev (lub innych witryn hostingowych ) i zdekompresowane. Ten tryb jest zalecany w większości środowisk, z wyjątkiem sytuacji, gdy jest mało miejsca na dysku, ale przepustowość sieci i opóźnienia są doskonałe.

Domyślną lokalizacją pobierania jest lokalny katalog tymczasowy, ale można ją dostosować, ustawiając zmienną środowiskową TFHUB_CACHE_DIR (zalecane) lub przekazując flagę wiersza poleceń --tfhub_cache_dir . Domyślna lokalizacja pamięci podręcznej /tmp/tfhub_modules (lub inna os.path.join(tempfile.gettempdir(), "tfhub_modules") ) powinna działać w większości przypadków.

Użytkownicy, którzy wolą trwałe buforowanie podczas ponownego uruchamiania systemu, mogą zamiast tego ustawić TFHUB_CACHE_DIR na lokalizację w swoim katalogu domowym. Na przykład użytkownik powłoki bash w systemie Linux może dodać następujący wiersz do ~/.bashrc

export TFHUB_CACHE_DIR=$HOME/.cache/tfhub_modules

...uruchom ponownie powłokę, a następnie ta lokalizacja zostanie użyta. Korzystając z trwałej lokalizacji, należy pamiętać, że nie następuje automatyczne czyszczenie.

Odczyt z magazynu zdalnego

Użytkownicy mogą poinstruować bibliotekę tensorflow_hub , aby bezpośrednio odczytywała modele ze zdalnej pamięci masowej (GCS) zamiast pobierać je lokalnie za pomocą

os.environ["TFHUB_MODEL_LOAD_FORMAT"] = "UNCOMPRESSED"

lub ustawiając flagę wiersza poleceń --tfhub_model_load_format na UNCOMPRESSED . W ten sposób nie jest potrzebny żaden katalog buforujący, co jest szczególnie przydatne w środowiskach, które zapewniają mało miejsca na dysku, ale szybkie połączenie internetowe.

Działa na TPU w notebookach Colab

Na colab.research.google.com pobieranie skompresowanych modeli będzie powodować konflikt ze środowiskiem wykonawczym TPU, ponieważ obciążenie obliczeniowe jest delegowane na inny komputer, który domyślnie nie ma dostępu do lokalizacji pamięci podręcznej. Istnieją dwa obejścia tej sytuacji:

1) Użyj zasobnika GCS, do którego pracownik TPU ma dostęp

Najłatwiejszym rozwiązaniem jest poinstruowanie biblioteki tensorflow_hub , aby odczytała modele z segmentu GCS TF Hub, jak wyjaśniono powyżej. Użytkownicy posiadający własny segment GCS mogą zamiast tego określić katalog w swoim zasobniku jako lokalizację pamięci podręcznej za pomocą kodu podobnego

import os
os.environ["TFHUB_CACHE_DIR"] = "gs://my-bucket/tfhub-modules-cache"

...przed wywołaniem biblioteki tensorflow_hub .

2) Przekieruj wszystkie odczyty przez hosta Colab

Innym obejściem jest przekierowanie wszystkich odczytów (nawet dużych zmiennych) przez hosta Colab:

load_options =
tf.saved_model.LoadOptions(experimental_io_device='/job:localhost')
reloaded_model = hub.load("https://tfhub.dev/...", options=load_options)

Uwaga: więcej informacji na temat prawidłowych uchwytów znajdziesz tutaj .