使用 TensorFlow 的 Azure Blob 存储

在 TensorFlow.org 上查看 在 Google Colab 中运行 在 GitHub 上查看源代码 下载笔记本

概览

本教程展示了如何使用 TensorFlow IO 的 Azure 文件系统集成,在 Azure Blob 存储 上读写文件。

需要一个 Azure 存储帐户才能在 Azure Blob 存储上读写文件。应通过环境变量提供 Azure 存储密钥

os.environ['TF_AZURE_STORAGE_KEY'] = '<key>'

存储帐户名称和容器名称是文件名 URI 的一部分

azfs://<storage-account-name>/<container-name>/<path>

在本教程中,出于演示目的,您可以选择设置 Azurite,它是一个 Azure 存储仿真器。使用 Azurite 仿真器,可以通过 TensorFlow 的 Azure Blob 存储接口读写文件。

设置和使用

安装所需软件包,并重新启动运行时

try:
  %tensorflow_version 2.x 
except Exception:
  pass

!pip install tensorflow-io

安装并设置 Azurite(可选)

如果 Azure 存储帐户不可用,则需要安装和设置模拟 Azure 存储界面的 Azurite

npm install [email protected]
npm WARN deprecated [email protected]: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN saveError ENOENT: no such file or directory, open '/content/package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.
npm WARN enoent ENOENT: no such file or directory, open '/content/package.json'
npm WARN content No description
npm WARN content No repository field.
npm WARN content No README data
npm WARN content No license field.

+ [email protected]
added 116 packages from 141 contributors in 6.591s
# The path for npm might not be exposed in PATH env,
# you can find it out through 'npm bin' command
npm_bin_path = get_ipython().getoutput('npm bin')[0]
print('npm bin path: ', npm_bin_path)

# Run `azurite-blob -s` as a background process. 
# IPython doesn't recognize `&` in inline bash cells.
get_ipython().system_raw(npm_bin_path + '/' + 'azurite-blob -s &')
npm bin path:  /content/node_modules/.bin

使用 TensorFlow 读写 Azure 存储中的文件

以下是使用 TensorFlow 的 API 读写 Azure 存储中文件的示例。

导入 tensorflow-io 包后,它与 TensorFlow 中的其他文件系统(例如 POSIX 或 GCS)的行为相同,因为 tensorflow-io 将自动注册 azfs 方案以供使用。

应通过 TF_AZURE_STORAGE_KEY 环境变量提供 Azure 存储密钥。否则,可以将 TF_AZURE_USE_DEV_STORAGE 设置为 True,以改用 Azurite 模拟器

import os
import tensorflow as tf
import tensorflow_io as tfio

# Switch to False to use Azure Storage instead:
use_emulator = True

if use_emulator:
  os.environ['TF_AZURE_USE_DEV_STORAGE'] = '1'
  account_name = 'devstoreaccount1'
else:
  # Replace <key> with Azure Storage Key, and <account> with Azure Storage Account
  os.environ['TF_AZURE_STORAGE_KEY'] = '<key>'
  account_name = '<account>'

  # Alternatively, you can use a shared access signature (SAS) to authenticate with the Azure Storage Account
  os.environ['TF_AZURE_STORAGE_SAS'] = '<your sas>'
  account_name = '<account>'
pathname = 'az://{}/aztest'.format(account_name)
tf.io.gfile.mkdir(pathname)

filename = pathname + '/hello.txt'
with tf.io.gfile.GFile(filename, mode='w') as w:
  w.write("Hello, world!")

with tf.io.gfile.GFile(filename, mode='r') as r:
  print(r.read())
Hello, world!

配置

Azure Blob 存储在 TensorFlow 中的配置始终通过环境变量完成。以下是可用配置的完整列表

  • TF_AZURE_USE_DEV_STORAGE:设置为 1 以使用本地开发存储模拟器进行连接,例如“az://devstoreaccount1/container/file.txt”。这将优先于所有其他设置,因此 unset 可用于使用任何其他连接
  • TF_AZURE_STORAGE_KEY:正在使用的存储帐户的帐户密钥
  • TF_AZURE_STORAGE_USE_HTTP:如果你不想使用 https 传输,请将其设置为任何值。 unset 可用于使用默认的 https
  • TF_AZURE_STORAGE_BLOB_ENDPOINT:设置为 Blob 存储的端点 - 默认值为 .core.windows.net