? ♀️runhouse?
? ¡Bienvenido a casa!
Runhouse permite un desarrollo de aprendizaje automático rápido y rentable a través de la investigación y la producción. Le permite enviar funciones y clases de Python a cualquiera de su propia infraestructura de cálculo de la nube, y llamarlos ansiosamente como si fueran locales. Esto significa:
- Puede ejecutar y depurar de forma nativa su código en GPU remotas u otras infra potentes, como Ray, Spark o Kubernetes, de su computadora portátil. Su código de aplicación luego se ejecuta en CI/CD o producción, aún enviando trabajo a infra remota.
- Su aplicación, incluidos los pasos de infraestructura, se captura en código de una manera que elimina los gruñidos manuales y es exactamente reproducible en su equipo y en la investigación y la producción.
- Su flexibilidad para escala y optimización de costos es inigualable, ya que los equipos a menudo ven ahorros de costos de ~ 50%.
Orquestación a través de grupos, regiones o nubes es trivial, al igual que la lógica compleja como la escala, la tolerancia a las fallas o los flujos de trabajo de múltiples pasos.
¿Para qué es Runhouse?
- Cuando la investigación a la producción es lenta y dolorosa, tanto debido a los datos/entornos de investigación y producción no coincidentes como a la falta de depugabilidad de las tuberías de orquestadores.
- Si los equipos necesitan una forma infraenóstica de ejecutar Python para ejecutar de manera flexible un solo flujo de trabajo a través de un cómputo heterogéneo, incluso ejecutándose en múltiples proveedores de nubes.
- Finalizar la frustración en las plataformas en la caja como Sagemaker o Vertex, y pasar a una solución más flexible para desarrollar e implementar el código ML.
- Creciente madurez de ML, a medida que las organizaciones pasan de proyectos de ML únicos a volantes de ML a escala.
Reflejos:
- Enviar funciones, clases y datos de Python a infra remoto instantáneamente, y llámalos ansiosamente como si fueran locales. El despliegue/redistribución es casi instantáneo y los registros se transmiten hacia atrás, lo que hace que la iteración sea extremadamente rápida.
- ? Sin DSL, decoradores, Yaml, encantamientos de CLI o calderas. Solo su propia Python regular, desplegable para cualquier lugar donde ejecute Python.
- ? ? No se necesita un envasado especial o procesamiento de implementación; La investigación y el código de producción son idénticos. Llame a las funciones desplegadas de Runhouse de CI/CD, orquestadores o aplicaciones como un micro-servicio.
- ? ? BYO-INFRA con apoyo extenso y creciente: Ray, Kubernetes, AWS, GCP, Azure, Local, On-Prem y más.
- ? Reproducibilidad extrema y portabilidad. No hay bloqueo, porque cuando desea cambiar, escalar o elegir el precio más barato, cambiar de infra es tan fácil como cambiar 1 línea especificando un clúster diferente.
- ? ♀️ Compartir funciones o clases de Python como servicios robustos, incluidos HTTPS, autenticación, observabilidad, escala, dominios personalizados, secretos, versiones y más.
- ? ? Admite flujos de trabajo o servicios complejos y lógica avanzada, ya que sus componentes están desacoplados y los módulos infra/módulos son interactables con el código.
La API Runhouse es simple. Envíe sus módulos (funciones y clases) a los entornos (procesos de trabajadores) en la infra calculadora, como esta:
import runhouse as rh
from diffusers import StableDiffusionPipeline
def sd_generate ( prompt , ** inference_kwargs ):
model = StableDiffusionPipeline . from_pretrained ( "stabilityai/stable-diffusion-2-base" ). to ( "cuda" )
return model ( prompt , ** inference_kwargs ). images
if __name__ == "__main__" :
img = rh . Image ( "sd_image" ). install_packages ([ "torch" , "transformers" , "diffusers" ])
gpu = rh . cluster ( name = "rh-a10x" , instance_type = "A10G:1" , provider = "aws" , image = img ). up_if_not ()
# Deploy the function and environment (syncing over local code changes and installing dependencies)
remote_sd_generate = rh . function ( sd_generate ). to ( gpu )
# This call is actually an HTTP request to the app running on the remote server
imgs = remote_sd_generate ( "A hot dog made out of matcha." )
imgs [ 0 ]. show ()
# You can also call it over HTTP directly, e.g. from other machines or languages
print ( remote_sd_generate . endpoint ()) Con la estructura simple anterior, puede construir, llamar y compartir:
- Primitivas de IA : preprocesamiento, capacitación, ajuste fino, evaluación, inferencia
- Servicios de orden superior : inferencia de varios pasos, flujos de trabajo E2E, guanteletes de evaluación, HPO
- ? Puntos finales de UAT : puntos finales instantáneos para que los equipos de clientes prueben e integren
- ? Servicios públicos de la mejor práctica : ofuscación de PII, moderación de contenido, aumento de datos
? ️ Monitoreo de infra, intercambio de recursos y versiones con Runhouse Den
Puede desbloquear características únicas de observabilidad y compartir con Runhouse Den, un producto complementario de este repositorio.
Una vez que haya enviado una función o clase a un cálculo remoto, Runhouse le permite persistir y compartirla como un servicio, convirtiendo las actividades de IA redundantes en componentes modulares comunes en su equipo o empresa.
- Esto hace que el recurso compartido sea observable. Con Den, puede ver con qué frecuencia se llamaba un recurso (y por quién), y cuál era la utilización de la GPU de la caja en la que estaba.
- Esto mejora el costo: piense en 10 ml de tuberías e investigadores que llaman al mismo servicio de preprocesamiento, capacitación, evaluación o inferencia por lotes, en lugar de asignar sus propios recursos de cómputo
- Esto mejora la velocidad y la reproducibilidad. Evite implementar un código ligeramente diferente por tubería e implementa los resultados de un método mejorado a todos una vez publicados.
Inicie sesión desde cualquier lugar para guardar, compartir y cargar recursos y observar el uso, registros y calcular la utilización en un solo panel de vidrio:
o de Python:
import runhouse as rh
rh . login ()
Extendiendo el ejemplo anterior para compartir y cargar nuestra aplicación a través de Den:
remote_sd_generate . share ([ "[email protected]" ])
# The service stub can now be reloaded from anywhere, always at yours and your collaborators' fingertips
# Notice this code doesn't need to change if you update, move, or scale the service
remote_sd_generate = rh . function ( "/your_username/sd_generate" )
imgs = remote_sd_generate ( "More matcha hotdogs." )
imgs [ 0 ]. show ()
Infra de cómputo compatible
Comuníquese (primer nombre en Run.house) si no ve su cómputo favorito aquí.
- Local - Apoyado
- Caja única - compatible
- Ray Cluster - compatible
- Kubernetes - compatible
- Servicios web de Amazon (AWS)
- EC2 - Apoyado
- EKS - Apoyado
- Lambda - alfa
- Plataforma en la nube de Google (GCP)
- GCE - Apoyado
- GKE - Apoyado
- Microsoft Azure
- VMS - Soporte
- AKS - Apoyado
- Lambda Labs - Soporte
- Laboratorios modales - planeado
- Slurm - Exploratorio
? ? Obtenga más información
? Comenzando : instalación, configuración y un tutorial rápido.
Docios : referencias de API detalladas, ejemplos básicos de API y tutoriales, tutoriales de extremo a extremo y descripción general de la arquitectura de alto nivel.
? Blog : inmersiones profundas en características de Runhouse, casos de uso y el futuro de AI Infra.
? Discord : Únase a nuestra comunidad para hacer preguntas, compartir ideas y obtener ayuda.
? Twitter : síganos para obtener actualizaciones y anuncios.
? ️ Obteniendo ayuda
Envíenos un mensaje en Discord, envíenos un correo electrónico (nombre en Run.house) o cree un problema.
? ♀️ contribuyendo
¡Agradecemos las contribuciones! Por favor, consulte la contribución.