简化任何环境下的机器学习部署。
项目描述
OpenModelZ
什么是OpenModelZ?
OpenModelZ ( mdz
) 是一个将您的模型部署到任何集群(GCP、AWS、Lambda labs、您的家庭实验室,甚至单个机器)的工具。
将模型投入生产对数据科学家和SRE来说很困难。您需要配置监控、日志记录和扩展基础设施,以及正确的安全性和权限。然后设置域名、SSL和负载均衡器。即使是单个模型的部署,这也可能需要数周或数月的工作。
现在您可以使用mdz deploy轻松部署您的模型。OpenModelZ为您处理所有基础设施设置。每个部署都获得一个公共子域名,例如 http://jupyter-9pnxd.2.242.22.143.modelz.live
,使其易于访问。
优势
OpenModelZ提供以下功能
- 📈 从0自动扩展:推理服务器数量可以根据工作量进行扩展。您可以从0开始,轻松扩展到10+个副本。
- 📦 支持任何机器学习框架:您可以使用单个命令部署任何机器学习框架(例如 vLLM/triton-inference-server/mosec 等),此外,您还可以部署您自己的自定义推理服务器。
- 🔬 支持Gradio/Streamlit/Jupyter:我们提供了一个强大的原型设计环境,支持 Gradio、Streamlit、jupyter 等。您可以在笔记本中轻松可视化模型性能并调试它,或使用单个命令部署模型的Web应用程序。
- 🏃 从单个机器到机器集群:您可以从单个机器开始,无需任何麻烦,通过单个命令
mdz server start
将其扩展到机器集群。 - 🚀 为每个部署提供公开可访问的子域名(可选):我们为每个部署分配单独的子域名,无需额外费用和努力,使每个部署都易于外部访问。
OpenModelZ是可在modelz.ai(modelz.ai)上获取的ModelZ平台的基础组件。
工作原理
获取一个服务器(可以是云VM、家庭实验室或单个机器),并运行mdz server start
命令。OpenModelZ将为您启动服务器。
$ mdz server start
🚧 Creating the server...
🚧 Initializing the load balancer...
🚧 Initializing the GPU resource...
🚧 Initializing the server...
🚧 Waiting for the server to be ready...
🐋 Checking if the server is running...
🐳 The server is running at http://146.235.213.84.modelz.live
🎉 You could set the environment variable to get started!
export MDZ_URL=http://146.235.213.84.modelz.live
$ export MDZ_URL=http://146.235.213.84.modelz.live
然后,您可以使用单个命令mdz deploy
部署模型并获取端点。
$ mdz deploy --image modelzai/gradio-stable-diffusion:23.03 --name sdw --port 7860 --gpu 1
Inference sd is created
$ mdz list
NAME ENDPOINT STATUS INVOCATIONS REPLICAS
sdw http://sdw-qh2n0y28ybqc36oc.146.235.213.84.modelz.live Ready 174 1/1
http://146.235.213.84.modelz.live/inference/sdw.default
快速入门 🚀
安装mdz
您可以使用以下命令安装OpenModelZ:
pip install openmodelz
您可以通过运行以下命令来验证安装:
mdz
一旦您安装了mdz
,您就可以开始部署模型并进行实验。
启动mdz
启动mdz
服务器非常简单。您只需要找到一个服务器(可以是云VM、家庭实验室或单个机器),然后运行mdz server start
命令。
注意:我们可能在端口80上启动
mdz
服务器时需要root权限。
$ mdz server start
🚧 Creating the server...
🚧 Initializing the load balancer...
🚧 Initializing the GPU resource...
🚧 Initializing the server...
🚧 Waiting for the server to be ready...
🐋 Checking if the server is running...
Agent:
Version: v0.0.13
Build Date: 2023-07-19T09:12:55Z
Git Commit: 84d0171640453e9272f78a63e621392e93ef6bbb
Git State: clean
Go Version: go1.19.10
Compiler: gc
Platform: linux/amd64
🐳 The server is running at http://192.168.71.93.modelz.live
🎉 You could set the environment variable to get started!
export MDZ_URL=http://192.168.71.93.modelz.live
内部IP地址将被用作部署的默认端点。您可以将服务器的公共IP地址提供给mdz server start
命令,使其可以从外部访问。
# Provide the public IP as an argument
$ mdz server start 1.2.3.4
您还可以指定镜像仓库镜像以加快镜像拉取过程。以下是一个示例:
$ mdz server start --mirror-endpoints https://docker.mirrors.sjtug.sjtu.edu.cn
创建第一个基于UI的部署
一旦启动了mdz
服务器,您就可以开始部署您的第一个应用程序。在本教程中,我们将使用jupyter notebook作为示例。您可以使用任何Docker镜像作为您的部署。
$ mdz deploy --image jupyter/minimal-notebook:lab-4.0.3 --name jupyter --port 8888 --command "jupyter notebook --ip='*' --NotebookApp.token='' --NotebookApp.password=''"
Inference jupyter is created
$ mdz list
NAME ENDPOINT STATUS INVOCATIONS REPLICAS
jupyter http://jupyter-9pnxdkeb6jsfqkmq.192.168.71.93.modelz.live Ready 488 1/1
http://192.168.71.93/inference/jupyter.default
您可以通过访问端点URL来访问部署。端点将自动为每个部署生成,格式如下:<name>-<随机字符串>.<ip>.modelz.live
。
在这个例子中是http://jupyter-9pnxdkeb6jsfqkmq.192.168.71.93.modelz.live
。如果您已将服务器的公共IP地址提供给mdz server start
命令,则端点也可以从外部访问。
创建第一个兼容OpenAI的API服务器
您还可以创建基于API的部署。在本教程中,我们将使用与Bloomz 560M兼容的OpenAI API服务器作为示例。
$ mdz deploy --image modelzai/llm-bloomz-560m:23.07.4 --name simple-server
Inference simple-server is created
$ mdz list
NAME ENDPOINT STATUS INVOCATIONS REPLICAS
jupyter http://jupyter-9pnxdkeb6jsfqkmq.192.168.71.93.modelz.live Ready 488 1/1
http://192.168.71.93/inference/jupyter.default
simple-server http://simple-server-lagn8m9m8648q6kx.192.168.71.93.modelz.live Ready 0 1/1
http://192.168.71.93/inference/simple-server.default
您可以使用OpenAI Python包和端点http://simple-server-lagn8m9m8648q6kx.192.168.71.93.modelz.live
与此部署交互。
import openai
openai.api_base="http://simple-server-lagn8m9m8648q6kx.192.168.71.93.modelz.live"
openai.api_key="any"
# create a chat completion
chat_completion = openai.ChatCompletion.create(model="bloomz", messages=[
{"role": "user", "content": "Who are you?"},
{"role": "assistant", "content": "I am a student"},
{"role": "user", "content": "What do you learn?"},
], max_tokens=100)
扩展您的部署
您可以使用mdz scale
命令扩展您的部署。
$ mdz scale simple-server --replicas 3
请求将在部署的副本之间进行负载均衡。
您还可以告诉mdz
根据流请求自动扩展您的部署。有关更多详细信息,请参阅自动扩展文档。
调试您的部署
有时您可能想要调试您的部署。您可以使用mdz logs
命令获取部署的日志。
$ mdz logs simple-server
simple-server-6756dd67ff-4bf4g: 10.42.0.1 - - [27/Jul/2023 02:32:16] "GET / HTTP/1.1" 200 -
simple-server-6756dd67ff-4bf4g: 10.42.0.1 - - [27/Jul/2023 02:32:16] "GET / HTTP/1.1" 200 -
simple-server-6756dd67ff-4bf4g: 10.42.0.1 - - [27/Jul/2023 02:32:17] "GET / HTTP/1.1" 200 -
您还可以使用mdz exec
命令在部署的容器中执行命令。您不需要ssh进入服务器即可做到这一点。
$ mdz exec simple-server ps
PID USER TIME COMMAND
1 root 0:00 /usr/bin/dumb-init /bin/sh -c python3 -m http.server 80
7 root 0:00 /bin/sh -c python3 -m http.server 80
8 root 0:00 python3 -m http.server 80
9 root 0:00 ps
$ mdz exec simple-server -ti bash
bash-4.4#
或者,您可以将部署端口转发到您的本地机器,并在本地进行调试。
$ mdz port-forward simple-server 7860
Forwarding inference simple-server to local port 7860
添加更多服务器
您可以使用mdz server join
命令将更多服务器添加到您的集群中。将在服务器上启动mdz
服务器并自动将其加入集群。
$ mdz server join <internal ip address of the previous server>
$ mdz server list
NAME PHASE ALLOCATABLE CAPACITY
node1 Ready cpu: 16 cpu: 16
mem: 32784748Ki mem: 32784748Ki
gpu: 1 gpu: 1
node2 Ready cpu: 16 cpu: 16
mem: 32784748Ki mem: 32784748Ki
gpu: 1 gpu: 1
标记您的服务器
您可以通过标记服务器来将模型部署到特定的服务器。例如,您可以使用gpu=true
标记服务器并将模型部署到具有GPU的服务器。
$ mdz server label node3 gpu=true type=nvidia-a100
$ mdz deploy ... --node-labels gpu=true,type=nvidia-a100
架构
OpenModelZ 受 k3s 和 OpenFaaS 的启发,但专为机器学习部署设计。我们保持系统的核心 简单,易于扩展。
如果您只想部署模型,则无需阅读本节。但如果您想了解 OpenModelZ 的工作原理,本节是为您准备的。
OpenModelZ 由两个组件组成
- 数据平面:数据平面负责服务器。您可以使用
mdz server
来管理服务器。数据平面被设计成 无状态 和 可扩展。您可以通过向集群添加更多服务器轻松扩展数据平面。它底层使用 k3s,支持虚拟机、裸机设备和物联网设备(未来)。您还可以在现有的 kubernetes 集群上部署 OpenModelZ。 - 控制平面:控制平面负责部署。它管理部署及其底层资源。
请求将通过负载均衡器路由到推理服务器。自动扩展器将根据工作负载调整推理服务器的数量。我们默认提供 *.modelz.live
域名,通过一个 通配符 DNS 服务器 支持每个部署的公开可访问子域名。您也可以使用自己的域名。
有关更多详细信息,请参阅 架构文档。
路线图 🗂️
请查阅 路线图。
贡献 😊
我们欢迎开源社区、个人和合作伙伴的各种贡献。
- 加入我们的 discord 社区!
贡献者 ✨
蔡高 💻 👀 ✅ |
周金晶 💬 🐛 🤔 |
柯明 💻 🎨 🚇 |
南希科·马努 🐛 🎨 🤔 |
陈新源·泰迪 📖 |
张伟 💻 |
玄沃 🖋 🎨 🤔 |
cutecutecat 🤔 |
谢燕德 🤔 |
致谢 🙏
项目详情
openmodelz-0.0.27.tar.gz 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | a4b6b420f136b6ef36562f32aedd7ccc27b6af94d50652d64b81c4a97dfd6d12 |
|
MD5 | 42c1ac85593e7bae902455c693da6e75 |
|
BLAKE2b-256 | eb7ae389f6231f0941a665d4c7d97b0b3d9b51b6501b9214df4b76cc54247902 |
openmodelz-0.0.27-py2.py3-none-musllinux_1_1_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 9409d32f5da21b628624b08b0baf88624d914105d405d2b6d407e3fd477aa205 |
|
MD5 | 6d09e35cf4d297fa1f9b86d3b2741698 |
|
BLAKE2b-256 | dfad94a232fc9dd6413f179568fd5f3015c043258260dbaed33a12668c5db676 |
openmodelz-0.0.27-py2.py3-none-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 15ac662cbdb94eeabad92afd677b4270d7e2cbfb88646b8080c558c06ea6204a |
|
MD5 | 7680553634a625a7f10334a34ac313a3 |
|
BLAKE2b-256 | e64462563c078440ecf1702f109514644afcd40c1860ef293a0e9cc79e71bfc6 |