Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
SE APLICA A:SDK de Azure Machine Learning v1 para Python
Importante
En este artículo se proporciona información sobre el uso del SDK de Azure Machine Learning v1. EL SDK v1 está en desuso a partir del 31 de marzo de 2025. El soporte técnico finalizará el 30 de junio de 2026. Puede instalar y usar SDK v1 hasta esa fecha.
Se recomienda realizar la transición al SDK v2 antes del 30 de junio de 2026. Para más información sobre SDK v2, consulte ¿Qué es la CLI de Azure Machine Learning y el SDK de Python v2? y la referencia del SDK v2.
En este artículo se proporciona código para importar datos, transformar datos y mover datos entre pasos en una canalización de Azure Machine Learning. Para obtener información general sobre cómo funcionan los datos en Azure Machine Learning, consulte Acceso a los datos en los servicios de Azure Storage. Para más información sobre las ventajas y la estructura de las canalizaciones de Azure Machine Learning, consulte ¿Qué son las canalizaciones de Azure Machine Learning?.
En este artículo se muestra cómo:
- Uso de objetos
Dataset
para datos preexistentes - Acceder a los datos en los pasos
- Dividir los datos de
Dataset
en subconjuntos, como los subconjuntos de entrenamiento y validación - Crear objetos
OutputFileDatasetConfig
para transferir datos al siguiente paso de la canalización - Usar objetos
OutputFileDatasetConfig
como entrada para los pasos de la canalización - Crear nuevos
Dataset
objetos a partir deOutputFileDatasetConfig
los que desea conservar
Requisitos previos
Una suscripción a Azure. Si no tiene una, cree una cuenta gratuita antes de empezar. Pruebe la versión gratuita o de pago de Azure Machine Learning.
SDK de Azure Machine Learning para Python o acceso a Estudio de Azure Machine Learning.
Un área de trabajo de Azure Machine Learning.
Cree un área de trabajo de Azure Machine Learning o use una existente mediante el SDK de Python. Importe las clases
Workspace
yDatastore
, y cargue la información de suscripción desde el archivoconfig.json
mediante la funciónfrom_config()
. Esta función busca el archivo JSON en el directorio actual de forma predeterminada, pero también puede especificar un parámetro de ruta de acceso para que apunte al archivo mediantefrom_config(path="your/file/path")
.import azureml.core from azureml.core import Workspace, Datastore ws = Workspace.from_config()
Algunos datos preexistentes. En este artículo se muestra brevemente el uso de un contenedor de blobs de Azure.
Opcional: Una canalización de aprendizaje automático existente, como la descrita en Creación y ejecución de canalizaciones de aprendizaje automático con el SDK de Azure Machine Learning.
Uso de objetos Dataset
para datos preexistentes
La mejor manera de ingerir datos en una canalización es utilizar un objeto Dataset. Dataset
los objetos representan datos persistentes que están disponibles en todo un área de trabajo.
Hay muchas maneras de crear y registrar objetos Dataset
. Los conjuntos de datos tabulares son para datos delimitados que están disponibles en uno o varios archivos. Los conjuntos de datos de archivos son para datos binarios (como imágenes) o para datos que se van a analizar. Las formas más sencillas de crear objetos Dataset
mediante programación consisten en usar los blobs existentes en el almacenamiento del área de trabajo o en direcciones URL públicas:
datastore = Datastore.get(workspace, 'training_data')
iris_dataset = Dataset.Tabular.from_delimited_files(DataPath(datastore, 'iris.csv'))
datastore_path = [
DataPath(datastore, 'animals/dog/1.jpg'),
DataPath(datastore, 'animals/dog/2.jpg'),
DataPath(datastore, 'animals/cat/*.jpg')
]
cats_dogs_dataset = Dataset.File.from_files(path=datastore_path)
Para más información sobre cómo crear conjuntos de datos con diferentes opciones y de orígenes diferentes, registrarlos y revisarlos en la interfaz de usuario de Azure Machine Learning, comprender cómo interactúa el tamaño de los datos con la capacidad de proceso y el control de versiones, consulte Creación de conjuntos de datos de Azure Machine Learning.
Paso de los conjuntos de datos al script
Para pasar la ruta de acceso del conjunto de datos al script, use el método Dataset
del objeto as_named_input()
. Puede pasar el objeto resultante DatasetConsumptionConfig
a su script como argumento o, usando el argumento inputs
en su script de canalización, puede recuperar el conjunto de datos mediante Run.get_context().input_datasets[]
.
Después de crear una entrada con nombre, puede elegir su modo de acceso (solo para FileDataset
): as_mount()
o as_download()
. Si el script procesa todos los archivos del conjunto de datos y el disco del recurso de proceso es lo suficientemente grande como para el conjunto de datos, el modo de acceso de descarga es una mejor opción. El modo de acceso de descarga evita la sobrecarga de transmitir los datos en tiempo de ejecución. Si el script accede a un subconjunto del conjunto de datos o es demasiado grande para su entorno de cómputo, use el modo de acceso montado. Para obtener más información, consulte Montaje frente a descarga.
Para pasar un conjunto de datos al paso de la canalización:
- Use
TabularDataset.as_named_input()
oFileDataset.as_named_input()
(sin s al final) para crear unDatasetConsumptionConfig
objeto - Solo para
FileDataset
: useas_mount()
oas_download()
para establecer el modo de acceso. ConTabularDataset
, no se puede establecer el modo de acceso. - Pase los conjuntos de datos a los pasos de canalización mediante
arguments
oinputs
.
En el fragmento de código siguiente se muestra el patrón común de combinar estos pasos dentro del PythonScriptStep
constructor mediante iris_dataset
(TabularDataset
):
train_step = PythonScriptStep(
name="train_data",
script_name="train.py",
compute_target=cluster,
inputs=[iris_dataset.as_named_input('iris')]
)
Nota
Debe reemplazar los valores de todos estos argumentos (es decir, "train_data"
, "train.py"
, cluster
y iris_dataset
) por sus propios datos.
El fragmento de código anterior solo muestra el formato de la llamada y no forma parte de un ejemplo de Microsoft.
También puede usar métodos como random_split()
y take_sample()
para crear varias entradas o para reducir la cantidad de datos que se pasan al paso de canalización:
seed = 42 # PRNG seed
smaller_dataset = iris_dataset.take_sample(0.1, seed=seed) # 10%
train, test = smaller_dataset.random_split(percentage=0.8, seed=seed)
train_step = PythonScriptStep(
name="train_data",
script_name="train.py",
compute_target=cluster,
inputs=[train.as_named_input('train'), test.as_named_input('test')]
)
Acceso a los conjuntos de datos del script
Las entradas con nombre para el script del paso de la canalización están disponibles como un diccionario dentro del objeto Run
. Recupere el objeto activo Run
mediante Run.get_context()
y, a continuación, recupere el diccionario de entradas con nombre mediante input_datasets
. Si ha pasado el objeto DatasetConsumptionConfig
mediante el argumento arguments
en lugar del argumento inputs
, acceda a los datos mediante ArgumentParser
código. En los siguientes fragmentos de código se muestran ambas técnicas:
Script de definición de la canalización
# Code is for demonstration only: It would be confusing to split datasets between `arguments` and `inputs`
train_step = PythonScriptStep(
name="train_data",
script_name="train.py",
compute_target=cluster,
# Datasets passed as arguments
arguments=['--training-folder', train.as_named_input('train').as_download()],
# Datasets passed as inputs
inputs=[test.as_named_input('test').as_download()]
)
El script de train.py
al que se hace referencia desde PythonScriptStep
# In pipeline script
parser = argparse.ArgumentParser()
# Retrieve the dataset passed as an argument
parser.add_argument('--training-folder', type=str, dest='train_folder', help='training data folder mounting point')
args = parser.parse_args()
training_data_folder = args.train_folder
# Retrieve the dataset passed as an input
testing_data_folder = Run.get_context().input_datasets['test']
El valor pasado es la ruta de acceso al archivo o los archivos del conjunto de datos.
Dado que los conjuntos de datos registrados son persistentes y compartidos en un área de trabajo, puede recuperarlos directamente:
run = Run.get_context()
ws = run.experiment.workspace
ds = Dataset.get_by_name(workspace=ws, name='mnist_opendataset')
Nota
Los fragmentos de código anteriores muestran la forma de las llamadas. No forman parte de un ejemplo de Microsoft. Debe reemplazar los argumentos por valores de su propio proyecto.
Uso de OutputFileDatasetConfig
para los datos intermedios
Aunque Dataset
los objetos solo representan datos persistentes, OutputFileDatasetConfig
los objetos se pueden usar para la salida de datos temporales de los pasos de canalización y para los datos de salida persistentes. OutputFileDatasetConfig
admite la escritura de datos en Blob Storage, compartición de archivos, Azure Data Lake Storage Gen1 o Data Lake Storage Gen2. Admite el modo de montaje y el modo de carga. En el modo de montaje, los archivos escritos en el directorio montado se almacenan de manera permanente cuando se cierra el archivo. En el modo de carga, los archivos escritos en el directorio de salida se cargan al final del trabajo. Si se produce un error en el trabajo o se cancela, el directorio de salida no se carga.
El OutputFileDatasetConfig
comportamiento predeterminado del objeto es escribir en el almacén de datos predeterminado del área de trabajo. Pase los OutputFileDatasetConfig
objetos a su PythonScriptStep
mediante el parámetro arguments
.
from azureml.data import OutputFileDatasetConfig
dataprep_output = OutputFileDatasetConfig()
input_dataset = Dataset.get_by_name(workspace, 'raw_data')
dataprep_step = PythonScriptStep(
name="prep_data",
script_name="dataprep.py",
compute_target=cluster,
arguments=[input_dataset.as_named_input('raw_data').as_mount(), dataprep_output]
)
Nota
Se producirá un error en las operaciones de escritura simultáneas en un objeto OutputFileDatasetConfig
. No intente usar una sola OutputFileDatasetConfig
simultáneamente. Evite compartir una sola OutputFileDatasetConfig
en situaciones de multiprocesamiento, como en el entrenamiento distribuido.
Uso de OutputFileDatasetConfig
como salidas de un paso de entrenamiento
En la canalización de PythonScriptStep
, puede recuperar las rutas de salida disponibles mediante los argumentos del programa. Si este paso es el primero e inicializará los datos de salida, debe crear el directorio en la ruta de acceso especificada. Después, puede escribir los archivos que quiera incluir en el OutputFileDatasetConfig
.
parser = argparse.ArgumentParser()
parser.add_argument('--output_path', dest='output_path', required=True)
args = parser.parse_args()
# Make directory for file
os.makedirs(os.path.dirname(args.output_path), exist_ok=True)
with open(args.output_path, 'w') as f:
f.write("Step 1's output")
Lectura de OutputFileDatasetConfig
como entradas en pasos no iniciales
Después de que el paso de canalización inicial escriba algunos datos en la ruta de acceso de OutputFileDatasetConfig
y se convierta en una salida de ese paso inicial, se puede usar como entrada para un paso posterior.
En el código siguiente:
step1_output_data
indica que la salida delPythonScriptStep
step1
se escribe en el almacén de datosmy_adlsgen2
de Data Lake Storage Gen2 en modo de acceso de carga. Para obtener información sobre cómo configurar permisos de rol para volver a escribir datos en almacenes de datos de Data Lake Storage Gen2, consulte Conexión a los servicios de almacenamiento en Azure con almacenes de datos.Después de que
step1
se complete y la salida se escriba en el destino indicado porstep1_output_data
,step2
está listo para usarstep1_output_data
como la entrada.
# Get Data Lake Storage Gen2 datastore that's already registered with the workspace
datastore = workspace.datastores['my_adlsgen2']
step1_output_data = OutputFileDatasetConfig(name="processed_data", destination=(datastore, "mypath/{run-id}/{output-name}")).as_upload()
step1 = PythonScriptStep(
name="generate_data",
script_name="step1.py",
runconfig = aml_run_config,
arguments = ["--output_path", step1_output_data]
)
step2 = PythonScriptStep(
name="read_pipeline_data",
script_name="step2.py",
compute_target=compute,
runconfig = aml_run_config,
arguments = ["--pd", step1_output_data.as_input()]
)
pipeline = Pipeline(workspace=ws, steps=[step1, step2])
Sugerencia
El proceso para leer los datos en el script step2.py
de Python es el mismo que el proceso descrito anteriormente en Conjuntos de datos de Access dentro del script. Use ArgumentParser
para agregar un argumento de --pd
en el script para acceder a los datos.
Registro de objetos OutputFileDatasetConfig
para su reutilización
Si desea que un OutputFileDatasetConfig
objeto esté disponible durante más tiempo que la duración del experimento, regístrelo en el área de trabajo para compartir y reutilizar en los experimentos:
step1_output_ds = step1_output_data.register_on_complete(
name='processed_data',
description = 'files from step1'
)
Eliminar OutputFileDatasetConfig
contenido cuando ya no sea necesario
Azure no elimina automáticamente los datos intermedios escritos con OutputFileDatasetConfig
. Para evitar cargos de almacenamiento de grandes cantidades de datos innecesarios, debe realizar una de las siguientes acciones:
Eliminar mediante programación los datos intermedios al final de un trabajo de canalización, cuando ya no son necesarios.
Use Blob Storage con una directiva de almacenamiento a corto plazo para los datos intermedios. (Consulte Optimización de los costos mediante la automatización de los niveles de acceso de Azure Blob Storage). Esta directiva solo se puede establecer en el almacén de datos no predeterminado de un área de trabajo. Use
OutputFileDatasetConfig
para exportar datos intermedios a otro almacén de datos que no sea el predeterminado.# Get Data Lake Storage Gen2 datastore that's already registered with the workspace datastore = workspace.datastores['my_adlsgen2'] step1_output_data = OutputFileDatasetConfig(name="processed_data", destination=(datastore, "mypath/{run-id}/{output-name}")).as_upload()
Revise periódicamente los datos y elimine los datos que no necesita.
Precaución
Elimine solo los datos intermedios después de 30 días a partir de la última fecha de cambio de los datos. La eliminación de datos intermedios antes podría provocar un error en la ejecución de la canalización porque la canalización supone que los datos estén disponibles durante un período de 30 días para su reutilización.
Para más información, consulte Plan para administrar los costes de Azure Machine Learning.