¡Bienvenidos de nuevo a nuestra serie sobre las mejores herramientas de código abierto! Tras explorar las 10 primeras herramientas en nuestro último artículo, hoy venimos para completar nuestro top 25 herramientas open source 2024. Si te gustaron las herramientas que compartimos la semana pasada, te van a encantar las que hemos preparado para hoy, ¡vamos a por ello!
11. Kata Containers
Kata Containers es un proyecto de código abierto que proporciona una plataforma ligera y segura para la ejecución de contenedores en entornos de nube. Se basa en tecnologías de virtualización y aislamiento para ofrecer una mayor seguridad y separación entre los contenedores, al tiempo que mantiene la eficiencia y la velocidad asociadas con el uso de contenedores.
Algunas características clave de Kata Containers incluyen:
- Virtualización ligera: Kata Containers utiliza tecnologías de virtualización ligera, como Intel VT-x y AMD-V, para ejecutar cada contenedor en su propia máquina virtual (VM) aislada. Esto proporciona un mayor grado de separación entre los contenedores, lo que ayuda a prevenir la interferencia y los ataques entre ellos.
- Seguridad mejorada: Al ejecutar cada contenedor en su propia VM, Kata Containers ofrece una mayor seguridad y aislamiento que los contenedores tradicionales. Esto ayuda a proteger los datos y las aplicaciones contra posibles vulnerabilidades y ataques.
- Compatibilidad con OCI y Docker: Kata Containers es compatible con las especificaciones de Open Container Initiative (OCI) y se puede integrar fácilmente con herramientas y plataformas de contenedores existentes, como Docker y Kubernetes.
- Rendimiento optimizado: A pesar de la virtualización adicional, Kata Containers está diseñado para ofrecer un rendimiento comparable al de los contenedores tradicionales. La implementación de tecnologías de virtualización ligera y la optimización del rendimiento permiten ejecutar contenedores de manera eficiente y rápida.
A continuación vamos a ver en detalle algunos detalles clave para poder entender bien esto que acabamos de explicar.
¿Qué es un contenedor?
Un contenedor es una unidad de software ligera y portátil que encapsula una aplicación y todas sus dependencias, incluidas las bibliotecas y archivos necesarios para ejecutarla, en un entorno autocontenido. Los contenedores permiten que las aplicaciones se ejecuten de manera consistente en cualquier entorno, ya sea en un entorno de desarrollo, en un servidor de producción o en la nube, sin importar las diferencias en la infraestructura subyacente.
Algunas características clave de los contenedores incluyen:
- Aislamiento: Los contenedores proporcionan un grado de aislamiento entre la aplicación y el sistema operativo subyacente, lo que garantiza que las aplicaciones no interfieran entre sí y que puedan ejecutarse de manera segura en el mismo host.
- Portabilidad: Los contenedores son portátiles y pueden ejecutarse en cualquier entorno que admita su motor de contenedores, lo que facilita el despliegue consistente de aplicaciones en diferentes entornos.
- Eficiencia: Los contenedores comparten el mismo kernel del sistema operativo subyacente, lo que los hace más livianos en comparación con las máquinas virtuales tradicionales. Esto permite una mayor eficiencia en el uso de recursos y una implementación más rápida.
- Escalabilidad: Los contenedores pueden escalarse fácilmente para manejar cambios en la carga de trabajo, ya sea escalando horizontalmente (agregando más contenedores) o verticalmente (aumentando los recursos de un contenedor existente).
Los contenedores se han vuelto muy populares en el desarrollo y la implementación de aplicaciones debido a su capacidad para facilitar la implementación, la administración y la escalabilidad de aplicaciones modernas en entornos de desarrollo y producción. Herramientas como Docker, Kubernetes y otros motores de contenedores han contribuido significativamente a la adopción y el éxito de los contenedores en la industria de la tecnología.
¿Qué es una máquina virtual?
Una máquina virtual (VM) es un entorno de computación virtualizado que actúa como una máquina física, pero que se ejecuta en software en lugar de hardware físico. Una VM emula una computadora completa, incluido el procesador, la memoria, el almacenamiento y otros componentes de hardware, lo que permite ejecutar sistemas operativos y aplicaciones dentro de un entorno aislado y autónomo.
Algunas características clave de las máquinas virtuales incluyen:
- Aislamiento: Cada máquina virtual se ejecuta de forma independiente en el mismo hardware físico, lo que proporciona un alto grado de aislamiento entre las máquinas virtuales y garantiza que las aplicaciones que se ejecutan en una VM no afecten a otras.
- Portabilidad: Las máquinas virtuales son portátiles y pueden moverse fácilmente entre diferentes entornos de computación, como máquinas locales, servidores remotos o nubes públicas y privadas.
- Consolidación de recursos: Las máquinas virtuales permiten la consolidación de múltiples cargas de trabajo en un solo servidor físico, lo que ayuda a maximizar la utilización de recursos y reducir los costos de infraestructura.
- Independencia de hardware: Las máquinas virtuales son independientes del hardware subyacente, lo que significa que pueden ejecutarse en diferentes tipos de hardware sin necesidad de modificaciones.
- Instantáneas y clonación: Las máquinas virtuales permiten tomar instantáneas de su estado actual, lo que facilita la creación de copias de seguridad y la recuperación de sistemas. También es posible clonar máquinas virtuales para replicar entornos de desarrollo o pruebas.
Las máquinas virtuales son ampliamente utilizadas en entornos de desarrollo, pruebas, producción y recuperación de desastres, así como en la ejecución de múltiples sistemas operativos en un mismo hardware físico. Herramientas como VMware, VirtualBox, Hyper-V y KVM son algunos ejemplos populares de software de virtualización que permiten crear y administrar máquinas virtuales.
Además: Aprende IA en 10 horas con IBM gratis
Entonces, ¿Para qué sirve Kata Containers?
Kata Containers es una tecnología de virtualización ligera diseñada específicamente para mejorar la seguridad y el aislamiento en entornos de contenedores. Aunque los contenedores proporcionan un grado de aislamiento entre aplicaciones, comparten el mismo kernel del sistema operativo subyacente, lo que puede presentar riesgos de seguridad si un contenedor se ve comprometido.
Kata Containers resuelve este problema al ejecutar cada contenedor dentro de su propia máquina virtual (VM) aislada, proporcionando un mayor nivel de seguridad y aislamiento. Esto significa que cada contenedor se ejecuta en su propio entorno de sistema operativo virtualizado, lo que previene la interferencia y los ataques entre contenedores.
En resumen, Kata Containers es útil para mejorar la seguridad y el aislamiento en entornos de contenedores, especialmente en entornos en los que la seguridad es una preocupación crítica, como entornos de nube pública o entornos de múltiples usuarios. Proporciona una capa adicional de protección al ejecutar cada contenedor dentro de su propia VM, lo que ayuda a prevenir la propagación de ataques y a garantizar la seguridad de las aplicaciones y los datos.
12. LangChain
Es un marco modular que facilita el desarrollo de aplicaciones impulsadas por modelos de lenguaje. LangChain permite que los modelos de lenguaje se conecten a fuentes de datos e interactúen con sus entornos. Los componentes de LangChain son abstracciones modulares y colecciones de implementaciones de las abstracciones. Las cadenas LangChain disponibles en el mercado son conjuntos estructurados de componentes para realizar tareas específicas de nivel superior. Puede utilizar componentes para personalizar cadenas existentes y crear cadenas nuevas.
Actualmente hay tres versiones de LangChain: una en Python , una en TypeScript/JavaScript y otra en Go. Hay aproximadamente 160 integraciones de LangChain a día de hoy y se espera que este número siga aumentando gracias a su popularidad y buena acogida por el mundo del desarrollo y la innovación.
13. Language Model Evaluation Harness
Cuando se lanza un nuevo modelo de lenguaje grande (LLM), normalmente verás un par de puntuaciones de evaluación que comparan el modelo con, por ejemplo, ChatGPT en un punto de referencia determinado.
Lo más probable es que la empresa detrás del modelo haya utilizado lm-eval-harness para generar esas puntuaciones. Creado por EleutherAI, el instituto de investigación de inteligencia artificial distribuida, lm-eval-harness contiene más de 200 puntos de referencia y es fácilmente ampliable.
El arnés incluso se ha utilizado para descubrir deficiencias en los puntos de referencia existentes , así como para impulsar la tabla de clasificación Open LLM de Hugging Face. Como en la caricatura de xkcd, es uno de esos pequeños pilares que sostienen un mundo entero.
14. Llama 2
Es la próxima generación de LLMs de AI Meta, entrenado con un 40% más de datos (2 billones de tokens de fuentes disponibles públicamente) que Llama 1 y con el doble de longitud de contexto (4096). Llama 2 es un modelo de lenguaje autorregresivo que utiliza una arquitectura transformadora optimizada.
Las versiones optimizadas utilizan ajuste fino supervisado (SFT) y aprendizaje reforzado con retroalimentación humana (RLHF) para alinearse con las preferencias humanas en cuanto a utilidad y seguridad.
Code Llama, que fue entrenado ajustando Llama 2 en conjuntos de datos específicos de código, puede generar código y lenguaje natural sobre código a partir de código o indicaciones de lenguaje natural.
15. Ollama
Ollama es una utilidad de línea de comandos que puede ejecutar Llama 2, Code Llama y otros modelos localmente en macOS y Linux, con soporte para Windows planificado. Actualmente, Ollama admite casi dos docenas de familias de modelos de lenguaje, con muchas «etiquetas» disponibles para cada familia de modelos.
Las etiquetas son variantes de los modelos entrenados en diferentes tamaños usando diferentes ajustes y cuantificados en diferentes niveles para funcionar bien localmente. Cuanto mayor sea el nivel de cuantificación, más preciso será el modelo, pero más lento se ejecutará y más memoria necesitará.
Los modelos que apoya Ollama incluyen algunas variantes sin censura. Estos se construyen utilizando un procedimiento ideado por Eric Hartford para entrenar modelos sin las censuras habituales. Por ejemplo, si le preguntas a Llama 2 cómo hacer pólvora, te advertirá que fabricar explosivos es ilegal y peligroso. Si le haces la misma pregunta a un modelo Llama 2 sin censura, te lo dirá.
Además: ¿Qué skills son necesarios para dominar la IA?
16. Polars
Quizás te preguntes por qué Python necesita otra biblioteca de gestión de marcos de datos cuando ya tenemos la librería de Pandas. Pero si miras más profundamente, descubrirás que Polars es exactamente lo que estás buscando.
Los Polars no pueden hacer todo lo que los Pandas pueden hacer, pero lo que pueden hacer, lo hacen rápidamente: hasta 10 veces más rápido que los Pandas, usando la mitad de la memoria. Los desarrolladores provenientes de PySpark se sentirán un poco más a gusto con la API de Polars que con las operaciones más esotéricas de Pandas. Si trabajas con grandes cantidades de datos, Polars te permitirá trabajar más rápido.
¿No sabes que es una librería de Python? No pasa nada
Las bibliotecas de Python son colecciones de código predefinido que ofrecen una variedad de funciones y herramientas para realizar tareas específicas. Estas bibliotecas están diseñadas para facilitar el desarrollo de aplicaciones al proporcionar funcionalidades comunes y reutilizables que los desarrolladores pueden incorporar en sus proyectos sin tener que escribir código desde cero.
Algunas características de las bibliotecas de Python son:
- Funcionalidad específica: Cada biblioteca de Python se centra en una tarea o conjunto de tareas específicas. Por ejemplo, hay bibliotecas para manipulación de datos, desarrollo web, aprendizaje automático, visualización de datos, procesamiento de texto, entre otros.
- Facilidad de uso: Las bibliotecas de Python están diseñadas para ser fáciles de usar, con una sintaxis clara y documentación detallada que describe cómo utilizar sus funciones y métodos.
- Reutilización de código: Al aprovechar las bibliotecas de Python, los desarrolladores pueden reutilizar código existente y evitar tener que reinventar la rueda al implementar funcionalidades comunes en sus proyectos.
- Contribuciones de la comunidad: Muchas bibliotecas de Python son proyectos de código abierto mantenidos por la comunidad, lo que significa que están en constante evolución gracias a las contribuciones de desarrolladores de todo el mundo.
Algunas de las bibliotecas de Python más populares incluyen:
- NumPy: Para computación científica y manipulación de matrices.
- pandas: Para análisis y manipulación de datos tabulares.
- matplotlib: Para visualización de datos.
- scikit-learn: Para aprendizaje automático y modelado predictivo.
- TensorFlow y PyTorch: Para aprendizaje profundo y redes neuronales.
- Django y Flask: Para desarrollo web.
Estas son solo algunas de las muchas bibliotecas disponibles en el ecosistema de Python, y la elección de cuáles usar dependerá del tipo de proyecto y las necesidades específicas del desarrollo.
17. PostgreSQL
PostgreSQL ha estado en desarrollo durante más de 35 años, con aportes de más de 700 contribuyentes, y tiene una participación de mercado estimada del 16,4 % entre los sistemas de gestión de bases de datos relacionales. Una encuesta reciente, en la que PostgreSQL fue la primera opción para el 45% de 90.000 desarrolladores, sugiere que el impulso no hace más que aumentar.
PostgreSQL 16, lanzado en septiembre de 2023, mejoró el rendimiento para consultas distintas agregadas y seleccionadas, aumentó el paralelismo de consultas, trajo nuevas capacidades de monitoreo de E/S y agregó controles de acceso de seguridad más detallados. También en 2023, Amazon Aurora PostgreSQL agregó pgvector para admitir incrustaciones de IA generativa, y Google Cloud lanzó una capacidad similar para AlloyDB PostgreSQL.
Además: 5 pasos para dar un giro a tu carrera profesional y trabajar en IA
18. QLoRA
Tim Dettmers y su equipo parecen tener la misión de hacer que grandes modelos de lenguaje se ejecuten en todo, hasta en la tostadora. El año pasado, su biblioteca bitsandbytes trajo la inferencia de LLM más grandes al hardware de consumo.
Este año, han recurrido a la capacitación, reduciendo las ya impresionantes técnicas LoRA para trabajar en modelos cuantificados. El uso de QLoRA significa que puede ajustar modelos masivos de más de 30 mil millones de parámetros en máquinas de escritorio, con poca pérdida de precisión en comparación con el ajuste completo en múltiples GPU.
De hecho, a veces QLoRA funciona incluso mejor. La inferencia de bits bajos y la capacitación significan que los LLM son accesibles para aún más personas, ¿y no es de eso de lo que se trata el código abierto?
19. RAPIDS
RAPIDS es una colección de bibliotecas aceleradas por GPU para tareas comunes de análisis y ciencia de datos. Cada biblioteca maneja una tarea específica, como cuDF para procesamiento de marcos de datos, cuGraph para análisis de gráficos y cuML para aprendizaje automático.
Otras bibliotecas cubren procesamiento de imágenes, procesamiento de señales y análisis espacial, mientras que las integraciones llevan RAPIDS a Apache Spark , SQL y otras cargas de trabajo. Si ninguna de las bibliotecas existentes cumple con los requisitos, RAPIDS también incluye RAFT, una colección de primitivas aceleradas por GPU para construir sus propias soluciones.
RAPIDS también trabaja mano a mano con Dask para escalar a través de múltiples nodos y con Slurm para ejecutarse en entornos informáticos de alto rendimiento.
Y, ¿Qué son Dask y Slurm?
Dask es una biblioteca de Python diseñada para facilitar el procesamiento distribuido y paralelo de datos a gran escala. Ofrece una interfaz familiar similar a NumPy y Pandas, pero escalando automáticamente la computación a través de múltiples núcleos de CPU o nodos en un clúster. Con Dask, los usuarios pueden trabajar con conjuntos de datos que superan el tamaño de la memoria disponible en una sola máquina, dividiendo los cálculos en tareas más pequeñas y distribuyéndolas en el hardware disponible de manera eficiente.
SLURM, por otro lado, es un sistema de gestión de trabajos de código abierto ampliamente utilizado en entornos de cómputo de alto rendimiento y clústeres de supercomputación. Proporciona una plataforma para la gestión eficiente de recursos, la planificación y la ejecución de trabajos en sistemas informáticos distribuidos. Con SLURM, los usuarios pueden programar y administrar trabajos, gestionar recursos, realizar planificaciones avanzadas y realizar un seguimiento detallado de la ejecución de trabajos.
En resumen, Dask y SLURM son dos herramientas esenciales en el campo de la computación distribuida y de alto rendimiento. Mientras que Dask se centra en el procesamiento distribuido de datos en Python, SLURM está diseñado para la gestión eficiente de recursos y la planificación de trabajos en clústeres de supercomputación. Ambos proporcionan capacidades avanzadas para escalar y ejecutar trabajos en sistemas informáticos distribuidos, permitiendo a los usuarios maximizar la utilización de recursos y mejorar la productividad en sus proyectos de cómputo intensivo.
Además: ¿Es el código abierto inseguro?
20. Spark NLP
Spark NLP es una biblioteca de procesamiento de lenguaje natural que se ejecuta en Apache Spark con soporte para Python , Scala y Java. La biblioteca ayuda a los desarrolladores y científicos de datos a experimentar con modelos de lenguaje grandes, incluidos modelos transformadores de Google, Meta, OpenAI y otros.
El centro de modelos de Spark NLP tiene más de 20 mil modelos y canalizaciones para descargar para traducción de idiomas, reconocimiento de entidades con nombre, clasificación de texto, respuesta a preguntas, análisis de sentimientos y otros casos de uso. En 2023, Spark NLP lanzó muchas integraciones LLM, un nuevo anotador de imagen a texto diseñado para subtitular imágenes, soporte para todos los principales sistemas de almacenamiento en la nube pública y soporte ONNX (Open Neural Network Exchange).
21. StarRocks
La analítica ha cambiado. Hoy en día, las empresas suelen ofrecer datos complejos a millones de usuarios simultáneos en tiempo real. Incluso las consultas de petabytes deben atenderse en segundos. StarRocks es un motor de consultas que combina código nativo (C++), un optimizador eficiente basado en costos, procesamiento de vectores utilizando el conjunto de instrucciones SIMD, almacenamiento en caché y vistas materializadas para manejar eficientemente uniones a escala.
StarRocks incluso proporciona un rendimiento casi nativo cuando realiza consultas directamente desde data lakes y bases de datos, incluidos Apache Hudi y Apache Iceberg. Ya sea porque estés buscando análisis en tiempo real, ofreciendo análisis de cara al cliente o simplemente quieras consultar tu datalake sin mover datos, StarRocks se merece un vistazo.
22. TensorFlow.js
TensorFlow.js incluye el poder del marco de aprendizaje automático TensorFlow de Google en un paquete de JavaScript, brindando capacidades extraordinarias a los desarrolladores de JavaScript con una curva de aprendizaje mínima. Puedes ejecutar TensorFlow.js en el navegador, en una pila de JavaScript puro con aceleración WebGL o en la biblioteca tfjs-node en el servidor. La biblioteca Node te ofrecerá la misma API de JavaScript, pero se ejecuta sobre el binario C para obtener así la máxima velocidad y uso de CPU/GPU.
Si eres un desarrollador de JavaScript interesado en adentrarte en el campo del aprendizaje automático, TensorFlow.js es una herramienta que definitivamente debes explorar. Esta contribución acerca el ecosistema de JavaScript al mundo de la inteligencia artificial, ampliando su alcance a una extensa comunidad de desarrolladores.
23. vLLM
La prisa por implementar grandes modelos de lenguaje en producción ha resultado en una oleada de marcos centrados en hacer inferencias lo más rápido posible. vLLM es uno de los más prometedores y viene completo con soporte para el modelo Hugging Face, una API compatible con OpenAI y PagedAttention, un algoritmo que logra hasta 20 veces el rendimiento de la biblioteca de transformadores de Hugging Face.
Es una de las opciones claras para ofrecer LLM en producción hoy en día, y rápidamente se están agregando nuevas funciones como la compatibilidad con FlashAttention 2.
Además: ¿Sabes cómo optimizar tu uso de ChatGPT? Aquí tienes 5 tips
24. Weaviate
El auge de la IA generativa ha provocado la necesidad de un nuevo tipo de base de datos que pueda soportar cantidades masivas de datos complejos y no estructurados. Aquí es donde entran en juego las bases de datos vectorizadas.
Weaviate ofrece a los desarrolladores mucha flexibilidad en lo que respecta al modelo de implementación, la integración del ecosistema y la privacidad de los datos. Esta herramienta combina la búsqueda de palabras clave con la búsqueda de vectores para un descubrimiento rápido y escalable de datos variados (piensa en todos los tipos que puede haber: texto, imágenes, audio, video, etc).
También tiene módulos listos para usarse en cuanto a lo que es la generación aumentada de recuperación (RAG), que proporciona a los chatbots y otras aplicaciones generativas de IA datos específicos del dominio para hacerlos más útiles.
25. Zig
De todos los proyectos de código abierto que existen actualmente, Zig puede ser el más trascendental. Zig es un esfuerzo por crear un lenguaje de programación de propósito general con controles de memoria a nivel de programa que supere a C, al tiempo que ofrece una sintaxis más potente y menos propensa a errores.
El objetivo es nada menos que reemplazar a C como el lenguaje base del ecosistema de programación. Dado que C es omnipresente, es decir, el componente más común en sistemas y dispositivos en todas partes, el éxito de Zig podría significar mejoras generalizadas en el rendimiento y la estabilidad, algo que todos deberíamos esperar. Además, Zig es un proyecto sólido y ambicioso con un enfoque de código abierto.