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 .