🏃♀️Runhouse🏠
👵 欢迎回家!
Runhouse 能够在研究和生产环境中实现快速、高效的机器学习开发。 它允许你将 Python 函数和类分发到任何你自己的云计算基础设施上,并像调用本地函数一样即时调用它们。这意味着:
- 你可以从笔记本电脑原生地在远程 GPU 或其他强大的基础设施(如 Ray、Spark 或 Kubernetes)上运行和调试代码。然后,你的应用程序代码可以在 CI/CD 或生产环境中原样运行,仍然将工作分派到远程基础设施。
- 你的应用程序(包括基础设施步骤)以代码的形式被捕获,消除了手动繁琐工作,并可以在团队内部以及在研究和生产环境中完全复现。
- 你拥有无与伦比的灵活性来扩展和优化成本,团队通常可以节省约 50% 的成本。
跨集群、地区或云的编排变得轻而易举,复杂的逻辑(如扩展、容错或多步骤工作流)也是如此。
Runhouse 适用于哪些情况?
- 当研究到生产的过程缓慢且痛苦时,既由于研究和生产数据/环境的不匹配,也由于编排器管道缺乏可调试性。
- 如果团队需要一种与基础设施无关的方式来执行 Python,以灵活地在异构计算环境中运行单一工作流,甚至可以在多个云提供商上运行。
- 结束对 SageMaker 或 Vertex 等一体化平台的挫折感,转向更灵活的解决方案来开发和部署 ML 代码。
- 随着组织从一次性 ML 项目转向规模化 ML 飞轮,ML 成熟度不断提高。
亮点:
- 🚀 立即将 Python 函数、类和数据分发到远程基础设施,并像调用本地函数一样即时调用它们。部署/重新部署几乎是即时的,日志会实时回传,使迭代速度极快。
- 🐍 无需 DSL、装饰器、yaml、CLI 咒语或样板代码。只需使用你自己的常规 Python 代码,就可以部署到任何运行 Python 的地方。
- 👩🔬 无需特殊打包或部署处理;研究和生产代码完全相同。可以从 CI/CD、编排器或应用程序中像调用微服务一样调用 Runhouse 部署的函数。
- 👩🎓 自带基础设施,支持广泛且不断增长 - Ray、Kubernetes、AWS、GCP、Azure、本地、本地部署等。
- 👩🚀 极高的可复现性和可移植性。没有锁定,因为当你想要转移、扩展或选择最便宜的定价时,更改基础设施就像更改指定不同集群的一行代码一样简单。
- 👷♀️ 将 Python 函数或类作为强大的服务共享,包括 HTTPS、身份验证、可观察性、扩展、自定义域名、密钥、版本控制等。
- 👩🍳 支持复杂的工作流或服务和高级逻辑,因为你的组件是解耦的,而且基础设施/模块可以通过代码进行交互。
Runhouse API 非常简单。将你的模块(函数和类)发送到计算基础设施上的环境(工作进程)中,如下所示:
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__":
gpu = rh.cluster(name="rh-a10x", instance_type="A10G:1", provider="aws").up_if_not()
sd_env = rh.env(reqs=["torch", "transformers", "diffusers"], name="sd_env")
# 部署函数和环境(同步本地代码更改并安装依赖项)
remote_sd_generate = rh.function(sd_generate).to(gpu, env=sd_env)
# 这个调用实际上是对远程服务器上运行的应用程序的 HTTP 请求
imgs = remote_sd_generate("A hot dog made out of matcha.")
imgs[0].show()
# 你也可以直接通过 HTTP 调用它,例如从其他机器或语言
print(remote_sd_generate.endpoint())
使用上述简单结构,您可以构建、调用和共享:
- 🛠️ AI基础组件:预处理、训练、微调、评估、推理
- 🚀 高阶服务:多步推理、端到端工作流、评估测试、超参数优化
- 🧪 用户验收测试端点:为客户团队提供即时端点进行测试和集成
- 🦺 最佳实践工具:个人身份信息模糊处理、内容审核、数据增强
🛋️ 使用Runhouse Den进行基础设施监控、资源共享和版本控制
通过Runhouse Den(这个代码库的配套产品),您可以解锁独特的可观察性和共享功能。
将函数或类发送到远程计算后,Runhouse允许您将其作为服务持久化并共享,将原本冗余的AI活动转变为团队或公司内的通用模块化组件。
- 这使共享资源可观察。通过Den,您可以看到资源被调用的频率(以及由谁调用),以及它所在机器的GPU利用率。
- 这提高了成本效益 - 想象10个ML管道和研究人员调用相同的共享预处理、训练、评估或批量推理服务,而不是每个人都分配自己的计算资源。
- 这提高了速度和可复现性。避免为每个管道部署略有不同的代码,改进方法一旦发布就可以部署给所有人。
从任何地方登录以保存、共享和加载资源,并在单一界面上观察使用情况、日志和计算利用率:
runhouse login
或从Python中:
import runhouse as rh
rh.login()
扩展上面的示例,通过Den共享和加载我们的应用:
remote_sd_generate.share(["my_pal@email.com"])
# 现在可以从任何地方重新加载服务存根,您和您的合作者随时可用
# 注意,即使您更新、移动或扩展服务,此代码也无需更改
remote_sd_generate = rh.function("/your_username/sd_generate")
imgs = remote_sd_generate("更多抹茶热狗。")
imgs[0].show()
🏗️ 支持的计算基础设施
如果您没有看到您喜欢的计算设施,请联系我们(发邮件至 first name@run.house)。
- 本地 - 支持
- 单机 - 支持
- Ray集群 - 支持
- Kubernetes - 支持
- 亚马逊云服务(AWS)
- EC2 - 支持
- EKS - 支持
- SageMaker - 支持
- Lambda - Alpha
- 谷歌云平台(GCP)
- GCE - 支持
- GKE - 支持
- 微软Azure
- 虚拟机 - 支持
- AKS - 支持
- Lambda Labs - 支持
- Modal Labs - 计划中
- Slurm - 探索中
👨🏫 了解更多
🐣 入门:安装、设置和快速演示。
📖 文档: 详细的API参考、基本API示例和演示、端到端教程,以及高级架构概述。
👩💻 博客:深入探讨Runhouse功能、使用案例和AI基础设施的未来。
👾 Discord:加入我们的社区提问、分享想法并获取帮助。
𝑋 Twitter:关注我们获取更新和公告。
🙋♂️ 获取帮助
在Discord上给我们发消息,给我们发邮件(first name@run.house),或创建一个issue。
👷♀️ 贡献
我们欢迎贡献!请查看贡献指南。