Configurar rendimiento de cómputo
La configuración de recursos de proceso implica equilibrar los requisitos de rendimiento con consideraciones de costos. El aprovisionamiento excesivo conduce a gastos innecesarios, mientras que el aprovisionamiento bajo puede provocar problemas de estabilidad y una ejecución lenta de consultas. Comprender cómo configurar las opciones de proceso le ayuda a optimizar los recursos de la carga de trabajo.
Comprender los componentes de los recursos de cómputo
El rendimiento del proceso depende de tres factores clave que funcionan conjuntamente. Cada factor influye en cómo se ejecuta la carga de trabajo y en cuánto cuesta.
Los núcleos del ejecutor total determinan el paralelismo máximo disponible para procesar datos. Más núcleos permiten a Spark procesar más tareas simultáneamente. Un clúster con 8 trabajos, cada uno con 4 núcleos, proporciona un total de 32 núcleos para el procesamiento paralelo.
La memoria total del ejecutor afecta a la cantidad de datos que se pueden procesar en la memoria antes de desbordarse en el disco. Las operaciones de uso intensivo de memoria, como combinaciones y agregaciones, se benefician de configuraciones de memoria más grandes. Cuando se agota la memoria, Spark escribe datos en disco, lo que ralentiza significativamente el rendimiento.
El almacenamiento local proporciona espacio temporal para las operaciones aleatorias y el almacenamiento en caché. Durante las operaciones de shuffle, Spark escribe datos intermedios en discos locales en los nodos de trabajo. El almacenamiento local rápido reduce el tiempo invertido en estas operaciones.
Con esta comprensión de los componentes de proceso, puede tomar decisiones informadas sobre los tipos de nodo y el tamaño del clúster.
Configuración de tipos de nodo y tamaño de clúster
La selección de tipos de nodo afecta directamente al rendimiento y al costo. Las distintas familias de instancias sirven a diferentes características de carga de trabajo.
Las instancias optimizadas para memoria funcionan bien para cargas de trabajo con combinaciones, agregaciones o datos grandes que deben permanecer en memoria. Estas instancias proporcionan más RAM por núcleo, lo que reduce la probabilidad de desbordar datos en el disco. Algunos ejemplos son las máquinas virtuales de la serie E , que ofrecen altas relaciones de memoria a núcleo ideales para el análisis en memoria.
Las instancias optimizadas para computación son adecuadas para las cargas de trabajo que realizan cálculos complejos pero no requieren grandes cantidades de memoria. Los trabajos de ETL con transformaciones sencillas suelen ejecutarse de forma eficaz en estas instancias. Entre los ejemplos se incluyen las máquinas virtuales de la serie F , que proporcionan un alto rendimiento de CPU con menores ratios de memoria.
Las instancias optimizadas para almacenamiento benefician a las cargas de trabajo que leen repetidamente los mismos datos o requieren acceso rápido al disco local. Las cargas de trabajo de análisis de datos con almacenamiento en caché habilitada funcionan mejor con estas instancias. Algunos ejemplos son las máquinas virtuales de la serie L , que ofrecen un almacenamiento NVMe local rápido para cargas de trabajo de E/S elevadas.
Las instancias aceleradas por GPU proporcionan unidades de procesamiento de gráficos diseñadas para cargas de trabajo de uso intensivo de cálculo, como el aprendizaje automático, el aprendizaje profundo y el procesamiento de imágenes. Estas instancias pueden acelerar el entrenamiento del modelo entre 10 y 100 veces en comparación con los clústeres de solo CPU. Algunos ejemplos son las máquinas virtuales de la serie NC y ND con GPU NVIDIA. Las instancias de GPU requieren Aprendizaje automático en tiempo de ejecución de Databricks y funcionan mejor para tareas como el entrenamiento de redes neuronales, el ajuste de modelos de lenguaje grandes o la ejecución de inferencias en modelos complejos.
El equilibrio entre el número de trabajos y el tamaño de instancia afecta al rendimiento de forma diferente en función de la carga de trabajo. Dos trabajos con 16 núcleos y 128 GB de RAM proporcionan el mismo proceso total y memoria que ocho trabajos con 4 núcleos y 32 GB de RAM cada uno. Sin embargo, la configuración con menos trabajadores más grandes reduce el tráfico de red durante las operaciones de mezcla, mientras que más trabajadores más pequeños pueden proporcionar un mejor paralelismo para cargas de trabajo altamente distribuidas.
En el caso de las cargas de trabajo analíticas con muchas operaciones de mezcla, menos trabajadores más grandes normalmente funcionan mejor. Para un procesamiento por lotes sencillo que se beneficia del paralelismo alto, es posible que los trabajadores más pequeños sean más rentables.
Uso de tipos de nodo flexibles
Cuando Azure Databricks inicia un recurso de proceso, el proveedor de nube puede agotar ocasionalmente la capacidad del tipo de instancia especificado. Esto produce un CLOUD_PROVIDER_RESOURCE_STOCKOUT error, que puede retrasar o producir un error en la ejecución del trabajo sin advertencia.
Los tipos de nodo flexibles abordan esto al revertir automáticamente a tipos de instancia alternativos compatibles cuando el tipo preferido no está disponible. Las alternativas compatibles comparten el mismo recuento de vCPU, memoria (entre 100 y 110%), la configuración de disco local, la arquitectura de CPU y la compatibilidad con imágenes del sistema operativo como tipo de instancia principal, lo que garantiza que la carga de trabajo se ejecute correctamente independientemente del tipo que se adquiera.
Los administradores del área de trabajo habilitan esta función con el conmutador Habilitar tipos de nodos flexibles automáticamente en la configuración de administración de Proceso del área de trabajo. Una vez habilitado, todos los nuevos recursos de proceso clásicos utilizan automáticamente los tipos de instancia de respaldo. Esto resulta especialmente útil en el caso de las instancias de spot: los tipos de nodo flexibles pueden intentar la adquisición en varios tipos compatibles antes de recurrir a las instancias a petición, lo que aumenta el porcentaje de instancias de spot utilizadas y reduce los costes totales de proceso.
En el caso de las cargas de trabajo con requisitos estrictos de tipo de instancia, puede deshabilitar los tipos de nodo flexibles para un recurso de proceso individual estableciendo alternate_node_type_ids en una lista vacía a través de la API de clústeres. También puede especificar una lista de alternativas personalizada a través de la API si prefiere controlar los tipos alternativos utilizados en lugar de confiar en la selección automática.
Configuración del escalado automático
El escalado automático ajusta el número de trabajos en función de las demandas de carga de trabajo, lo que le ayuda a mantener el rendimiento al controlar los costos.
Al habilitar el escalado automático, se establecen números mínimos y máximos de trabajadores. Azure Databricks supervisa los requisitos de carga de trabajo y agrega trabajos cuando sea necesario, hasta el máximo especificado. Cuando se reduce la demanda, los trabajadores se reducen hasta el mínimo necesario.
Azure Databricks usa el escalado automático optimizado de forma predeterminada al habilitar el escalado automático. El escalado automático optimizado se escala rápidamente en dos pasos de mínimo a máximo. Se puede reducir la escala incluso cuando el clúster no está inactivo mediante la monitorización del estado del archivo aleatorio. Para tarea de cómputo, evalúa la utilización de recursos cada 40 segundos. Para computación de propósito general, comprueba cada 150 segundos.
Considere la posibilidad de escalar automáticamente las cargas de trabajo con necesidades de recursos variables durante toda la ejecución. Las sesiones de exploración de datos a menudo comienzan con pequeños ejemplos de datos y más adelante procesan conjuntos de datos más grandes. El escalamiento automático agrega trabajadores cuando procesa conjuntos de datos más grandes y los elimina cuando regresa a muestras más pequeñas.
Para cargas de trabajo predecibles que mantienen un uso coherente de recursos, un número fijo de trabajos suele proporcionar un rendimiento más estable y un planeamiento de capacidad más sencillo. La sobrecarga de las decisiones de escalado puede afectar ligeramente al rendimiento de las cargas de trabajo de estado estable.
El escalado automático funciona especialmente bien con grupos de instancias. Establezca el número mínimo de trabajadores en un valor igual o menor que el número mínimo de instancias inactivas en el grupo. Esto garantiza el escalado rápido porque las instancias ya están aprovisionadas y listas.
Configuración de los valores de finalización
La terminación automática impide que los recursos de proceso inactivos acumule costos innecesarios al tiempo que mantiene la disponibilidad de las cargas de trabajo programadas.
Al configurar la terminación automática, se especifica un período de inactividad en minutos. Si no se ejecutan comandos en el clúster durante más de este período, Azure Databricks finaliza el clúster. La configuración del clúster permanece disponible para reiniciarse cuando sea necesario.
Para cargas de trabajo interactivas como el análisis de datos, establezca el período de terminación en función de los patrones de sesión típicos. Un tiempo de espera de 45 minutos funciona bien para la mayoría de los casos de uso, lo que proporciona tiempo a los ingenieros de datos para revisar los resultados entre consultas sin dejar los clústeres inactivos durante horas.
Para un trabajo de cómputo, la terminación automática ocurre después de que se complete el trabajo. El clúster se inicia automáticamente cuando comienza la siguiente ejecución programada, por lo que no es necesario administrar el inicio manualmente.
Las instancias de spot reducen los costos, pero implican compromisos en la disponibilidad. Azure puede reclamar instancias puntuales cuando se necesite capacidad en otro lugar. En el caso de los nodos de trabajo, las instancias de spot funcionan bien porque Azure Databricks/Spark puede controlar los errores de trabajo. Sin embargo, use siempre instancias a petición para los nodos de controlador. Si se recupera el controlador, falla todo el clúster.
Habilite la desmantelamiento al usar instancias puntuales para reducir errores de tareas. Cuando una instancia puntual recibe un aviso de prelación, la desactivación migra los datos aleatorios y almacenados en caché a trabajadores saludables antes de que la instancia finalice. Esto reduce la necesidad de volver a calcular los datos perdidos.
Uso de grupos de instancias
Los grupos de instancias mantienen un conjunto de instancias inactivas listas para su uso inmediato, lo que reduce el tiempo de inicio del clúster de minutos a segundos.
Configure las instancias inactivas mínimas para que coincidan con las necesidades típicas del clúster simultáneo. Si ejecuta periódicamente tres cuadernos simultáneamente, mantenga al menos tres instancias inactivas. Estas instancias siguen estando disponibles incluso cuando no están en uso, lo que proporciona inicio instantáneo del clúster.
Establezca la capacidad máxima para controlar los costos y evitar que una carga de trabajo consuma todos los recursos disponibles. Cuando varios equipos comparten un área de trabajo, los grupos con la configuración máxima de capacidad garantizan una distribución justa de recursos. Por ejemplo, con una cuota de 100 instancias, puede crear dos grupos cada uno con un máximo de 50 instancias para dos equipos.
La configuración de terminación automática de instancia inactiva elimina las instancias que superan tu número mínimo de inactividad después del período especificado. Si establece el tiempo mínimo de inactividad en 3 y la finalización automática en 30 minutos, un grupo que escala hasta 8 instancias se reducirá nuevamente a 3 instancias después de 30 minutos de inactividad.
La precarga de una versión de Databricks Runtime en las instancias del pool acelera los lanzamientos del clúster aún más. Al crear un clúster, si selecciona el entorno de ejecución precargado, el clúster se inicia casi inmediatamente porque el tiempo de ejecución ya está instalado en instancias inactivas.
Los grupos funcionan mejor para cargas de trabajo con ciclos frecuentes de creación y finalización de clústeres. Los equipos de desarrollo que crean y destruyen clústeres a lo largo del día ven ahorros de tiempo significativos. Los trabajos de producción que se ejecutan en clústeres dedicados de ejecución prolongada no se benefician tanto de los grupos.
Equilibrar el costo y el rendimiento
Lograr el equilibrio adecuado entre el costo y el rendimiento requiere comprender las características de la carga de trabajo y ajustar las configuraciones en consecuencia.
Comience con la configuración conservadora y supervise el rendimiento. Si observa un desbordamiento frecuente en el disco o una ejecución lenta de consultas, aumente la memoria o el número de núcleos. Si el uso sigue siendo bajo, reduzca el tamaño del clúster o habilite el escalado automático.
Nota:
Use la interfaz de usuario de Spark para identificar problemas de rendimiento. Consulte la Cronología de trabajos ara encontrar etapas de larga duración y vea la Página de detalles de la etapa para mostrar estadísticas de derrames Reproducción aleatoria (memoria) y Reparto aleatorio (disco). Compare la duración de las etapas para identificar cuellos de botella y consultas lentas.
Use el proceso sin servidor cuando la carga de trabajo la admita. La arquitectura sin servidor elimina las decisiones de configuración y escala automáticamente en función de la demanda, a menudo proporcionando la mejor relación calidad-precio sin ajuste manual.
La supervisión regular le ayuda a identificar las oportunidades de optimización. Revise las métricas del clúster para ver el uso real en comparación con la capacidad aprovisionada. Ajuste los tipos de nodo, los recuentos de trabajo o la configuración de escalado en función de los patrones observados en lugar de las suposiciones.
Nota:
La supervisión y la observabilidad se tratan en detalle en un módulo posterior.