Dziękujemy za zapoznanie się z Google I/O. Zobacz wszystkie sesje na żądanie Oglądaj na żądanie

Buforowanie modeli pobranych 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 odczytywać ze zdalnego magazynu do TensorFlow. Tak czy inaczej, wywołania funkcji tensorflow_hub w rzeczywistym kodzie Pythona mogą i powinny nadal używać kanonicznych adresów URL modeli tfhub.dev , które można przenosić między systemami i nawigacyjny dla 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 ją uzyskać za pomocą funkcji hub.resolve(handle) .

Buforowanie skompresowanych pobrań

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

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 polecenia --tfhub_cache_dir . Domyślna lokalizacja pamięci podręcznej /tmp/tfhub_modules (lub cokolwiek, do czego jest oceniany os.path.join(tempfile.gettempdir(), "tfhub_modules") ) powinna działać w większości przypadków.

Użytkownicy, którzy preferują 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ącą linię do ~/.bashrc

export TFHUB_CACHE_DIR=$HOME/.cache/tfhub_modules

...zrestartuj powłokę, a następnie ta lokalizacja zostanie użyta. Korzystając z trwałej lokalizacji, należy pamiętać, że nie ma automatycznego czyszczenia.

Odczyt ze zdalnego magazynu

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

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

lub ustawiając flagę wiersza polecenia --tfhub_model_load_format na UNCOMPRESSED . W ten sposób katalog pamięci podręcznej nie jest potrzebny, 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 notatnikach Colab

Na colab.research.google.com pobieranie skompresowanych modeli spowoduje konflikt ze środowiskiem wykonawczym TPU, ponieważ obciążenie obliczeniowe jest delegowane na inną maszynę, która 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 ma dostęp pracownik TPU

Najłatwiejszym rozwiązaniem jest poinstruowanie biblioteki tensorflow_hub , aby odczytała modele z zasobnika GCS TF Hub, jak wyjaśniono powyżej. Użytkownicy z własnym zasobnikiem 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 .

,

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 odczytywać ze zdalnego magazynu do TensorFlow. Tak czy inaczej, wywołania funkcji tensorflow_hub w rzeczywistym kodzie Pythona mogą i powinny nadal używać kanonicznych adresów URL modeli tfhub.dev , które można przenosić między systemami i nawigacyjny dla 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 ją uzyskać za pomocą funkcji hub.resolve(handle) .

Buforowanie skompresowanych pobrań

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

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 polecenia --tfhub_cache_dir . Domyślna lokalizacja pamięci podręcznej /tmp/tfhub_modules (lub cokolwiek, do czego jest oceniany os.path.join(tempfile.gettempdir(), "tfhub_modules") ) powinna działać w większości przypadków.

Użytkownicy, którzy preferują 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ącą linię do ~/.bashrc

export TFHUB_CACHE_DIR=$HOME/.cache/tfhub_modules

...zrestartuj powłokę, a następnie ta lokalizacja zostanie użyta. Korzystając z trwałej lokalizacji, należy pamiętać, że nie ma automatycznego czyszczenia.

Odczyt ze zdalnego magazynu

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

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

lub ustawiając flagę wiersza polecenia --tfhub_model_load_format na UNCOMPRESSED . W ten sposób katalog pamięci podręcznej nie jest potrzebny, 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 notatnikach Colab

Na colab.research.google.com pobieranie skompresowanych modeli spowoduje konflikt ze środowiskiem wykonawczym TPU, ponieważ obciążenie obliczeniowe jest delegowane na inną maszynę, która 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 ma dostęp pracownik TPU

Najłatwiejszym rozwiązaniem jest poinstruowanie biblioteki tensorflow_hub , aby odczytała modele z zasobnika GCS TF Hub, jak wyjaśniono powyżej. Użytkownicy z własnym zasobnikiem 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 .