在Databricks中从Azure Data Lake加载TensorFlow Keras模型遇未实现错误
解决TensorFlow加载ADLS abfss路径模型的UnimplementedError问题
TensorFlow本身不支持abfss文件系统协议,这就是你报错的核心原因。下面是几个可行的解决办法:
方法1:用Databricks挂载后的本地路径加载
Databricks会把挂载的ADLS容器映射到/dbfs/mnt/路径下,你已经确认路径连接正常,直接用映射后的路径加载即可:
model = tf.keras.models.load_model("/dbfs/mnt/dev/hkay/project_name/model/keras2.tf", compile=False)
如果还没挂载ADLS容器,参考这个命令:
dbutils.fs.mount( source = "abfss://dev@abcproddatalake.dfs.core.windows.net", mount_point = "/mnt/dev", extra_configs = {"fs.azure.account.key.abcproddatalake.dfs.core.windows.net": dbutils.secrets.get(scope="your-secret-scope", key="adls-account-key")} )
方法2:给TensorFlow添加abfss支持
安装tensorflow-io库,让TensorFlow能识别abfss协议:
# 先安装库(如果集群没预装) %pip install tensorflow-io # 注册Azure文件系统 import tensorflow_io as tfio tfio.experimental.cloud.configure_azure(account_name="abcproddatalake") # 直接用abfss路径加载模型 model = tf.keras.models.load_model("abfss://dev@abcproddatalake.dfs.core.windows.net/hkay/project_name/model/keras2.tf", compile=False)
如果用服务principal认证,需要提前设置环境变量:
import os os.environ["AZURE_TENANT_ID"] = dbutils.secrets.get(scope="your-scope", key="tenant-id") os.environ["AZURE_CLIENT_ID"] = dbutils.secrets.get(scope="your-scope", key="client-id") os.environ["AZURE_CLIENT_SECRET"] = dbutils.secrets.get(scope="your-scope", key="client-secret")
方法3:先拷贝模型到DBFS临时目录
考虑到模型有1.6GB,直接远程加载可能有性能问题,可以先把模型拷贝到DBFS本地目录再加载:
# 从ADLS拷贝模型到DBFS临时目录 dbutils.fs.cp("abfss://dev@abcproddatalake.dfs.core.windows.net/hkay/project_name/model/keras2.tf", "dbfs:/tmp/keras2.tf", recurse=True) # 加载模型 model = tf.keras.models.load_model("/dbfs/tmp/keras2.tf", compile=False) # 用完可以删除临时文件(可选) dbutils.fs.rm("dbfs:/tmp/keras2.tf", recurse=True)
额外检查项
- 确认集群的Spark版本和TensorFlow版本兼容,版本不匹配可能导致隐性问题
- 检查ADLS路径下的
keras2.tf目录是否完整,要包含saved_model.pb、variables文件夹等所有模型文件
内容的提问来源于stack exchange,提问作者hkay
相关产品推荐
相关产品推荐

