Carga de datos mediante Petastorm

En este artículo se describe cómo usar Petastorm para convertir datos de Apache Spark a TensorFlow o PyTorch. También se proporciona un ejemplo que muestra cómo usar Petastorm para preparar los datos de ML.

Nota:

El paquete petastorm está en desuso. Streaming de mosaico es el reemplazo recomendado para cargar grandes conjuntos de datos desde el almacenamiento en la nube.

Petastorm es una biblioteca de acceso a datos de código abierto. Permite el entrenamiento y la evaluación de modelos de aprendizaje profundo en un solo nodo o de forma distribuida directamente a partir de conjuntos de datos en formato Apache Parquet y conjuntos de datos que ya están cargados como DataFrames de Apache Spark. Petastorm admite marcos populares de aprendizaje automático (ML) basados en Python, como TensorFlow, PyTorch y PySpark. Para más información sobre Petastorm, consulte la documentación de la API de Petastorm.

Carga de datos de DataFrames de Spark mediante Petastorm

La API de convertidor de Petastorm Spark simplifica la conversión de datos de Spark a TensorFlow o PyTorch. El DataFrame de Spark de entrada se materializa primero en formato Parquet y, a continuación, se carga como tf.data.Dataset o torch.utils.data.DataLoader. Consulte la sección de la API de convertidor del conjunto de datos de Spark en la documentación de la API de Petastorm.

El flujo de trabajo recomendado es:

  1. Use Apache Spark para cargar y, opcionalmente, preprocesar los datos.
  2. Use el método spark_dataset_converter de Petastorm para convertir datos de un DataFrame de Spark a un conjunto Dataset de TensorFlow o a un DataLoader de PyTorch.
  3. Alimente los datos en un marco de DL para el entrenamiento o la inferencia.

Configuración del directorio de caché

El convertidor de Petastorm Spark almacena en caché el DataFrame de Spark de entrada en formato Parquet en una ubicación de directorio de caché especificada por el usuario. El directorio de caché debe ser una ruta de acceso DBFS que empiece por file:///dbfs/ como, por ejemplo, file:///dbfs/tmp/foo/, que hace referencia a la misma ubicación que dbfs:/tmp/foo/. Puede configurar el directorio de caché de dos maneras:

  • En la configuración de Spark del clúster, agregue la línea: petastorm.spark.converter.parentCacheDirUrl file:///dbfs/...

  • En el cuaderno, llame a spark.conf.set():

    from petastorm.spark import SparkDatasetConverter, make_spark_converter
    
    spark.conf.set(SparkDatasetConverter.PARENT_CACHE_DIR_URL_CONF, 'file:///dbfs/...')
    

Puede eliminar explícitamente la memoria caché después de usarlo llamando a converter.delete() o administre la memoria caché implícitamente configurando las reglas de ciclo de vida en el almacenamiento de objetos.

Databricks admite el entrenamiento de DL en tres escenarios:

  • Entrenamiento de nodo único
  • Ajuste distribuido de hiperparámetros
  • Entrenamiento distribuido

Para ver ejemplos de un extremo a otro, consulte los cuadernos siguientes:

Carga de archivos Parquet directamente mediante Petastorm

Este método se prefiere menos que la API de convertidor de Petastorm Spark.

El flujo de trabajo recomendado es:

  1. Use Apache Spark para cargar y, opcionalmente, preprocesar los datos.
  2. Guarde los datos en formato Parquet en una ruta de acceso DBFS que tenga un montaje DBFS complementario.
  3. Cargue los datos en formato Petastorm mediante el punto de montaje DBFS.
  4. Use datos en un marco de DL para el entrenamiento o la inferencia.

Consulte el cuaderno de ejemplo para obtener un ejemplo completo.

Ejemplos: preprocesar datos y entrenar modelos con TensorFlow o PyTorch

En este cuaderno de ejemplo se muestra el siguiente flujo de trabajo en Databricks:

  1. Cargar datos mediante Spark.
  2. Convertir DataFrame de Spark en un conjunto de datos de TensorFlow mediante Petastorm.
  3. Alimentar los datos a un modelo TensorFlow de un solo nodo para el entrenamiento.
  4. Alimentar los datos a una función de ajuste de hiperparámetros distribuida.
  5. Alimentar los datos a un modelo distribuido de TensorFlow para el entrenamiento.

Simplificación de la conversión de datos de Spark a un cuaderno de TensorFlow

Obtener el cuaderno

En este cuaderno de ejemplo se muestra el siguiente flujo de trabajo en Databricks:

  1. Cargar datos mediante Spark.
  2. Convertir DataFrame de Spark en un PyTorch DataLoader mediante Petastorm.
  3. Alimentar los datos a un modelo PyTorch de un solo nodo para el entrenamiento.
  4. Alimentar los datos a una función de ajuste de hiperparámetros distribuida.
  5. Alimentar los datos a un modelo distribuido de PyTorch para el entrenamiento.

Simplificación de la conversión de datos del cuaderno de Spark a PyTorch

Obtener el cuaderno

Ejemplo: preprocesamiento de datos y carga de archivos Parquet con Petastorm

En este cuaderno de ejemplo se muestra el siguiente flujo de trabajo en Databricks:

  1. Usar Spark para cargar y preprocesar datos.
  2. Guardar los datos mediante Parquet en dbfs:/ml.
  3. Cargar datos mediante Petastorm mediante el montaje FUSE file:/dbfs/ml optimizado.
  4. Alimentar los datos en un marco de DL para el entrenamiento o la inferencia.

Uso de Spark y Petastorm para preparar datos para cuadernos de aprendizaje profundo

Obtener el cuaderno