从GCS在Tensorflow TPU中加载tfdev.hub模型

问题描述

我正在使用Colab TPU实例从GCS加载tfhub.dev模型

os.environ["TFHUB_CACHE_DIR"] = "gs://BUCKETNAME/model-cache-dir/"

with strategy.scope():
     layer = hub.KerasLayer("https://tfhub.dev/google/inaturalist/inception_v3/feature_vector/4",trainable=True)

但是花费了将近15分钟的时间,最后我也得到了警告

WARNING:absl:Deleting lock file gs://BUCKETNAME/model-cache-dir/a6cc63f37ce9d4a026a90b8d56f20a387de46a3f.lock due to inactivity.

为什么会这样

我的猜测通过tensorflow进行了某种锁定,因此只有一个会话可以编辑或修改缓存文件,但在完成其操作中心后,KerasLayer不会删除导致不活动的锁。

解决方法

这可能是由于通过运行colab的计算机将文件从GCS复制到GCS的延迟所致。

有一种方法可以为TFHUB_CACHE_DIR使用默认的/ tmp位置,这可能会更快。尝试不显式设置TFHUB_CACHED_DIR,而是将LoadOptions传递给带有实验性io_device ='/ job:localhost'的hub.KerasLayer,例如

load_options = tf.saved_model.LoadOptions(experimental_io_device ='/ job:localhost') layer = hub.KerasLayer(...,load_options = load_options)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...