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 zdalnej pamięci masowej do TensorFlow. W obu przypadkach, wywołania funkcji tensorflow_hub w rzeczywistym kodzie Pythona mogą i powinny nadal korzystać z kanonicznych adresów URL modeli tfhub.dev, które są przenośne między systemami i umożliwiają nawigację w dokumentacji. W rzadkich przypadkach, gdy kod użytkownika potrzebuje rzeczywistej lokalizacji systemu plików (po pobraniu i dekompresji lub po przekształceniu uchwytu modelu na ś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 po ich pobraniu z tfhub.dev (lub innych serwisów hostingowych ) i rozpakowaniu. Ten tryb jest zalecany w większości środowisk, z wyjątkiem sytuacji, gdy przestrzeń dyskowa jest ograniczona, a 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 poleceń --tfhub_cache_dir . Domyślna lokalizacja pamięci podręcznej /tmp/tfhub_modules (lub dowolna inna, do której odnosi się os.path.join(tempfile.gettempdir(), "tfhub_modules") powinna działać w większości przypadków.
Użytkownicy preferujący trwałe buforowanie po ponownym uruchomieniu systemu mogą zamiast tego ustawić zmienną TFHUB_CACHE_DIR w lokalizacji w swoim katalogu domowym. Na przykład, użytkownik powłoki bash w systemie Linux może dodać następujący wiersz do pliku ~/.bashrc :
export TFHUB_CACHE_DIR=$HOME/.cache/tfhub_modules
...zrestartuj powłokę, a ta lokalizacja zostanie użyta. Używając stałej lokalizacji, pamiętaj, że nie ma automatycznego czyszczenia.
Odczyt z pamięci zdalnej
Użytkownicy mogą polecić bibliotece tensorflow_hub bezpośrednie odczytywanie modeli ze zdalnego magazynu (GCS) zamiast pobierania ich lokalnie, wykonując następujące czynności:
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 katalog buforujący, co jest szczególnie przydatne w środowiskach o małej ilości miejsca na dysku, ale szybkim połączeniu internetowym.
Uruchamianie na TPU w notebookach Colab
W witrynie colab.research.google.com pobieranie skompresowanych modeli będzie kolidować 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 tego problemu:
1) Użyj kontenera GCS, do którego ma dostęp pracownik TPU
Najprostszym rozwiązaniem jest poinstruowanie biblioteki tensorflow_hub , aby odczytała modele z kontenera GCS TF Hub, jak wyjaśniono powyżej. Użytkownicy posiadający własny kontener GCS mogą zamiast tego określić katalog w swoim kontenerze jako lokalizację pamięci podręcznej za pomocą kodu takiego jak:
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 .