Almacenamiento de blobs en Azure con TensorFlow

Ver en TensorFlow.org Ejecutar en Google Colab Ver fuente en GitHub Descargar libreta

Descripción general

Este tutorial muestra cómo utilizar leer y escribir archivos en Azure Blob de almacenamiento con TensorFlow, a través de la integración del sistema de archivos de Azure TensorFlow IO.

Se necesita una cuenta de Azure Storage para leer y escribir archivos en Azure Blob Storage. La clave de almacenamiento de Azure debe proporcionarse a través de la variable de entorno:

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

El nombre de la cuenta de almacenamiento y el nombre del contenedor son parte del nombre de archivo uri:

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

En este tutorial, para fines de demostración se puede opcionalmente configuración azurita , que es un emulador de Azure Storage. Con el emulador Azurite es posible leer y escribir archivos a través de la interfaz de almacenamiento de blobs de Azure con TensorFlow.

Configuración y uso

Instale los paquetes necesarios y reinicie el tiempo de ejecución

try:
  %tensorflow_version 2.x 
except Exception:
  pass

!pip install tensorflow-io

Instalar y configurar Azurite (opcional)

En caso de que una cuenta de Azure Storage no esté disponible, se necesita lo siguiente para instalar y configurar Azurite que emula la interfaz de Azure Storage:

npm install azurite@2.7.0
[K[?25hnpm WARN deprecated request@2.87.0: request has been deprecated, see https://github.com/request/request/issues/3142
[K[?25hnpm 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.

+ azurite@2.7.0
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

Leer y escribir archivos en Azure Storage con TensorFlow

El siguiente es un ejemplo de lectura y escritura de archivos en Azure Storage con la API de TensorFlow.

Se comporta del mismo modo que otros sistemas de archivos (por ejemplo, POSIX o GCS) en TensorFlow vez tensorflow-io paquete es importado, como tensorflow-io se registrará automáticamente azfs esquema para su uso.

La clave de almacenamiento Azure debe proporcionarse a través TF_AZURE_STORAGE_KEY variable ambiental. De lo contrario TF_AZURE_USE_DEV_STORAGE podría fijarse a True usar emulador de azurita en su lugar:

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!

Configuraciones

Las configuraciones de Azure Blob Storage en TensorFlow siempre se realizan a través de variables ambientales. A continuación se muestra una lista completa de configuraciones disponibles:

  • TF_AZURE_USE_DEV_STORAGE : Se establece en 1 para utilizar el emulador de almacenamiento de desarrollo local para las conexiones como 'az: //devstoreaccount1/container/file.txt'. Esto tomará precedencia sobre todas las demás configuraciones de forma unset de usar cualquier otro tipo de conexión
  • TF_AZURE_STORAGE_KEY clave de cuenta para la cuenta de almacenamiento en uso:
  • TF_AZURE_STORAGE_USE_HTTP : ajustar a cualquier valor si no desea utilizar la transferencia https. unset a utilizar por defecto de https
  • TF_AZURE_STORAGE_BLOB_ENDPOINT : Se establece en el punto final de almacenamiento de blob - por defecto es .core.windows.net .