Esta publicación explora cómo Amazon CodeWhisperer puede ayudar con la optimización del código para la sostenibilidad mediante una mayor eficiencia de los recursos. La codificación computacionalmente eficiente en recursos es una técnica que tiene como objetivo reducir la cantidad de energía necesaria para procesar una línea de código y, como resultado, ayudar a las empresas a consumir menos energía en general. En esta era de la computación en la nube, los desarrolladores ahora están aprovechando las bibliotecas de código abierto y la potencia de procesamiento avanzada disponible para crear microservicios a gran escala que deben ser operativamente eficientes, eficientes y resilientes. Sin embargo, las aplicaciones modernas a menudo consisten en código extenso, que exige importantes recursos informáticos. Aunque el impacto ambiental directo puede no ser obvio, el código suboptimizado amplifica la huella de carbono de las aplicaciones modernas a través de factores como un mayor consumo de energía, uso prolongado de hardware y algoritmos obsoletos. En esta publicación, descubrimos cómo Amazon CodeWhisperer ayuda a abordar estas inquietudes y reducir la huella ambiental de su código.
Amazon CodeWhisperer es un compañero de codificación de IA generativa que acelera el desarrollo de software al hacer sugerencias basadas en el código existente y comentarios en lenguaje natural, lo que reduce el esfuerzo general de desarrollo y libera tiempo para generar ideas, resolver problemas complejos y crear código diferenciado. Amazon CodeWhisperer puede ayudar a los desarrolladores a optimizar sus flujos de trabajo, mejorar la calidad del código, crear posturas de seguridad más sólidas, generar conjuntos de pruebas sólidos y escribir código amigable con los recursos computacionales, lo que puede ayudarlo a optimizar la sostenibilidad ambiental. Está disponible como parte del kit de herramientas para Visual Studio Code, AWS Cloud9, JupyterLab, Amazon SageMaker Studio, AWS Lambda, AWS Glue y JetBrains IntelliJ IDEA. Amazon CodeWhisperer actualmente admite Python, Java, JavaScript, TypeScript, C#, Go, Rust, PHP, Ruby, Kotlin, C, C++, scripts de Shell, SQL y Scala.
Impacto del código no optimizado en la computación en la nube y la huella de carbono de las aplicaciones
La infraestructura de AWS es 3,6 veces más eficiente energéticamente que la media de los centros de datos empresariales estadounidenses encuestados y hasta 5 veces más eficiente energéticamente que el centro de datos empresarial europeo promedio.. Por lo tanto, AWS puede ayudar a reducir la huella de carbono de la carga de trabajo hasta en un 96 %. Ahora puede utilizar Amazon CodeWhisperer para escribir código de calidad con un uso de recursos y un consumo de energía reducidos, y cumplir objetivos de escalabilidad mientras se beneficia de la infraestructura energéticamente eficiente de AWS.
Mayor uso de recursos
El código no optimizado puede resultar en un uso ineficaz de los recursos de computación en la nube. Como resultado, es posible que se requieran más máquinas virtuales (VM) o contenedores, lo que aumenta la asignación de recursos, el uso de energía y la huella de carbono relacionada de la carga de trabajo. Es posible que encuentre aumentos en lo siguiente:
- utilización de la CPU – El código no optimizado a menudo contiene algoritmos o prácticas de codificación ineficientes que requieren ciclos de CPU excesivos para ejecutarse.
- Consumo de memoria – La gestión ineficiente de la memoria en código no optimizado puede dar lugar a una asignación o desasignación de memoria innecesaria o a una duplicación de datos.
- Operaciones de E/S de disco – El código ineficiente puede realizar operaciones excesivas de entrada/salida (E/S). Por ejemplo, si los datos se leen o escriben en el disco con más frecuencia de lo necesario, puede aumentar la utilización y la latencia de E/S del disco.
- Uso de la red – Debido a técnicas de transmisión de datos ineficaces o comunicación duplicada, un código mal optimizado puede provocar una cantidad excesiva de tráfico de red. Esto puede provocar una mayor latencia y una mayor utilización del ancho de banda de la red. Una mayor utilización de la red puede dar lugar a mayores gastos y necesidades de recursos en situaciones en las que los recursos de la red se gravan en función del uso, como en la computación en la nube.
Mayor consumo de energía
Las aplicaciones de soporte de infraestructura con código ineficiente utilizan más potencia de procesamiento. El uso excesivo de recursos informáticos debido a un código ineficiente e inflado puede resultar en un mayor consumo de energía y producción de calor, lo que posteriormente requiere más energía para la refrigeración. Junto a los servidores, también consumen energía los sistemas de refrigeración, la infraestructura para la distribución de energía y otros elementos auxiliares.
Desafíos de escalabilidad
En el desarrollo de aplicaciones, los problemas de escalabilidad pueden deberse a un código no optimizado. Es posible que dicho código no se escale de manera efectiva a medida que crece la tarea, lo que requerirá más recursos y utilizará más energía. Esto aumenta la energía consumida por estos fragmentos de código. Como se mencionó anteriormente, el código ineficiente o derrochador tiene un efecto agravante a escala.
El ahorro de energía agravado por la optimización del código que los clientes ejecutan en ciertos centros de datos se agrava aún más si tomamos en consideración que los proveedores de nube como AWS tienen docenas de centros de datos en todo el mundo.
Amazon CodeWhisperer utiliza aprendizaje automático (ML) y modelos de lenguaje grandes para brindar recomendaciones de código en tiempo real basadas en el código original y los comentarios en lenguaje natural, y proporciona recomendaciones de código que podrían ser más eficientes. La eficiencia del uso de la infraestructura del programa se puede aumentar optimizando el código utilizando estrategias que incluyen avances algorítmicos, administración efectiva de la memoria y una reducción de operaciones de E/S inútiles.
Generación, finalización y sugerencias de código.
Examinemos varias situaciones en las que Amazon CodeWhisperer puede resultar útil.
Al automatizar el desarrollo de código repetitivo o complejo, las herramientas de generación de código minimizan la posibilidad de error humano y se centran en optimizaciones específicas de la plataforma. Al utilizar patrones o plantillas establecidos, estos programas pueden producir código que se adhiera de manera más consistente a las mejores prácticas de sostenibilidad. Los desarrolladores pueden producir código que cumpla con estándares de codificación particulares, lo que ayuda a entregar un código más consistente y confiable durante todo el proyecto. El código resultante puede ser más eficiente porque elimina las variaciones de codificación humana y puede ser más legible, lo que mejora la velocidad de desarrollo. Puede implementar automáticamente formas de reducir el tamaño y la longitud del programa de aplicación, como eliminar código superfluo, mejorar el almacenamiento de variables o utilizar métodos de compresión. Estas optimizaciones pueden ayudar a optimizar el consumo de memoria y aumentar la eficiencia general del sistema al reducir el tamaño del paquete.
La IA generativa tiene el potencial de hacer que la programación sea más sostenible al optimizar la asignación de recursos. Es importante observar de manera integral la huella de carbono de una aplicación. Herramientas como Amazon CodeGuru Profiler pueden recopilar datos de rendimiento para optimizar la latencia entre componentes. El servicio de creación de perfiles examina las ejecuciones de código e identifica posibles mejoras. Luego, los desarrolladores pueden refinar manualmente el código generado automáticamente en función de estos hallazgos para mejorar aún más la eficiencia energética. La combinación de IA generativa, creación de perfiles y supervisión humana crea un circuito de retroalimentación que puede mejorar continuamente la eficiencia del código y reducir el impacto ambiental.
La siguiente captura de pantalla muestra los resultados generados desde CodeGuru Profiler en modo de latencia, que incluye E/S de red y de disco. En este caso, la aplicación todavía pasa la mayor parte de su tiempo en ImageProcessor.extractTasks
(segunda fila inferior), y casi todo el tiempo dentro es ejecutable, lo que significa que no estaba esperando nada. Puede ver los estados de estos subprocesos cambiando al modo de latencia desde el modo CPU. Esto puede ayudarle a tener una buena idea de lo que está afectando la hora del reloj de pared de la aplicación. Para obtener más información, consulte Reducción de la huella de carbono de su organización con Amazon CodeGuru Profiler.
Generando casos de prueba
Amazon CodeWhisperer puede ayudar a sugerir casos de prueba y verificar la funcionalidad del código considerando valores límite, casos extremos y otros problemas potenciales que puedan necesitar ser probados. Además, Amazon CodeWhisperer puede simplificar la creación de código repetitivo para pruebas unitarias. Por ejemplo, si necesita crear datos de muestra mediante declaraciones INSERT, Amazon CodeWhisperer puede generar las inserciones necesarias según un patrón. Los requisitos generales de recursos para las pruebas de software también se pueden reducir identificando y optimizando los casos de prueba que requieren un uso intensivo de recursos o eliminando los redundantes. Los conjuntos de pruebas mejorados tienen el potencial de hacer que la aplicación sea más respetuosa con el medio ambiente al aumentar la eficiencia energética, disminuir el consumo de recursos, minimizar los residuos y reducir la huella de carbono de la carga de trabajo.
Para obtener una experiencia más práctica con Amazon CodeWhisperer, consulte Optimizar el desarrollo de software con Amazon CodeWhisperer. La publicación muestra las recomendaciones de código de Amazon CodeWhisperer en Amazon SageMaker Studio. También demuestra el código sugerido basado en comentarios para cargar y analizar un conjunto de datos.
Conclusión
En esta publicación, aprendimos cómo Amazon CodeWhisperer puede ayudar a los desarrolladores a escribir código optimizado y más sustentable. Al utilizar modelos de aprendizaje automático avanzados, Amazon CodeWhisperer analiza su código y brinda recomendaciones personalizadas para mejorar la eficiencia, lo que puede reducir los costos y ayudar a disminuir la huella de carbono.
Al sugerir ajustes menores y enfoques alternativos, Amazon CodeWhisperer permite a los desarrolladores reducir significativamente el uso de recursos y las emisiones sin sacrificar la funcionalidad. Ya sea que esté buscando optimizar una base de código existente o asegurarse de que los nuevos proyectos utilicen eficientemente los recursos, Amazon CodeWhisperer puede ser una ayuda invaluable. Para obtener más información sobre Amazon CodeWhisperer y los recursos de sostenibilidad de AWS para la optimización de código, considere los siguientes pasos:
Sobre los autores
Isha Dua es un arquitecto de soluciones senior con sede en el área de la bahía de San Francisco. Ayuda a los clientes empresariales de AWS a crecer entendiendo sus objetivos y desafíos, y los orienta sobre cómo pueden diseñar sus aplicaciones de forma nativa en la nube y, al mismo tiempo, garantizar la resiliencia y la escalabilidad. Le apasionan las tecnologías de aprendizaje automático y la sostenibilidad ambiental.
Ajay Govindaram es arquitecto senior de soluciones en AWS. Trabaja con clientes estratégicos que utilizan ai/ML para resolver problemas comerciales complejos. Su experiencia radica en brindar dirección técnica y asistencia en el diseño para implementaciones de aplicaciones de IA/ML de modestas a grandes escalas. Su conocimiento abarca desde arquitectura de aplicaciones hasta big data, análisis y aprendizaje automático. Le gusta escuchar música mientras descansa, experimentar el aire libre y pasar tiempo con sus seres queridos.
Erick Irigoyen es arquitecto de soluciones en Amazon Web Services y se centra en clientes de la industria de semiconductores y electrónica. Trabaja en estrecha colaboración con los clientes para comprender sus desafíos comerciales e identificar cómo se puede aprovechar AWS para lograr sus objetivos estratégicos. Su trabajo se ha centrado principalmente en proyectos relacionados con Inteligencia Artificial y Machine Learning (ai/ML). Antes de unirse a AWS, fue consultor senior en la práctica de Análisis Avanzado de Deloitte, donde dirigió flujos de trabajo en varios compromisos en los Estados Unidos centrándose en Análisis e IA/ML. Erick tiene una licenciatura en Negocios de la Universidad de San Francisco y una maestría en Análisis de la Universidad Estatal de Carolina del Norte.