使用Ray Serve框架简化机器学习模型的部署流程,并通过Docker容器化技术实现模型的轻松扩展和管理。
长按关注《AI科技论谈》
在数据为王的今天,使用机器学习模型来构建智能解决方案,绝对是科技圈的热门趋势。然而,对于涉足这一领域的开发者来说,构建过程中的架构设计往往充满了挑战,系统的复杂性会迅速增长。
本文带读者了解将机器学习模型部署为服务时可能遇到的问题,并分享一些策略,帮助在不增加架构复杂度的前提下,轻松应对这些挑战。
1 引言:机器学习模型部署的挑战 传统上,在生产环境中部署机器学习模型,需要配置消息队列和任务调度系统。这不仅复杂,还要求工程师投入大量精力以确保系统的稳定性和响应速度。
Ray Serve框架的出现,简化了这一流程。
Ray Serve整合了消息队列和工作进程,提供简洁的解决方案,让模型部署、管理和扩展变得更加便捷。开发者只需关注模型的核心开发,Ray Serve则自动处理负载均衡和故障恢复等任务,从而加快部署速度并提升模型的可靠性与响应性。
2 实践:容器化模型部署 在模型服务化实践中,会发现将每个机器学习模型单独部署到Docker容器中极为有效。这种策略让模型独立于应用其他部分,增强系统的模块化和可维护性,同时简化模型扩展和新模型的集成。每个容器自成一体,不受外部变化影响,便于系统平滑扩展。
这种方法与敏捷开发理念相符,与Ray Serve等框架的动态管理特性相得益彰,显著简化了部署流程,提高开发速度。
为此,开发了以下文件结构:
这个简单的文件结构让我们能够通过运行 model_deployment.py 来启动模型。
import jsonfrom typing import Dictimport torchfrom starlette.requests import Requestimport rayfrom ray import servefrom ray.serve.drivers import DAGDriverfrom
sentence_transformers import SentenceTransformer# 异步函数,用于解析传入的 JSON 请求 async def json_resolver (request: Request) -> dict: """ Resolve incoming JSON requests asynchronously. Args: request: The incoming HTTP request containing JSON data. Returns: A dictionary representing the parsed JSON data. """ return await request.json()# 第一步:将预训练的情感分析模型封装在 Serve 部署中。 @serve.deployment class ModelDeployment : def __init__ (self) : """ Initialize the ModelDeployment class. This constructor initializes the class and loads the pretrained sentiment analysis model. """ self._model = SentenceTransformer('sentence-transformers/all-mpnet-base-v2' ) def __call__ (self, data: dict) -> Dict: """ Embed texts using sentence transformers. Args: data: The input data containing a list of texts to embed. Returns: A dictionary containing embeddings of input texts, each represented as a list of floats. """ input_texts = json.loads(data)['input' ] embeddings = [torch.from_numpy(self._model.encode(text, convert_to_numpy=True )).tolist() for text in input_texts] response = {'data' : embeddings} return response# 第二步:部署模型。 ray.init(address='ray://localhost:10001' ) serve.run(DAGDriver.bind(ModelDeployment.bind(), http_adapter=json_resolver), host="0.0.0.0" , port=8888 )
通过调整 @serve.deployment
装饰器参数,可以轻松管理模型部署,如增减副本数、设置健康检查等,具体详情可查官方文档。
ModelDeployment
类通过该装饰器集成了预训练的情感分析模型。构造函数加载模型,__call__
方法处理输入文本并生成嵌入向量,结果以字典形式返回。
部署时,使用 ray.init
初始化 Ray 集群,并指定运行地址。serve.run
函数结合 json_resolver
将 ModelDeployment
绑定到 DAGDriver,处理请求,并将服务部署在端口 8888 上。
# Dockerfile # 设置基础镜像为 Python 3.10 FROM python:3.10# 设置容器内的工作环境 WORKDIR /app# 升级 pip RUN pip3 install --upgrade pip# 复制 requirements 文件并安装依赖 COPY requirements.txt requirements.txt RUN pip3 install -r requirements.txt# 将 model_deployment.py 脚本复制到容器中 COPY model_deployment.py ./# 将 8888 端口对外开放 EXPOSE 8888# 定义容器启动时运行的命令 CMD [ "bash" , "-c" , "ray start --head --block --object-manager-port=8076 --include-dashboard=true --dashboard-host=0.0.0.0 --dashboard-port=8266" ]
这个Dockerfile为你的机器学习模型部署提供了一种简洁有效的容器化方法。它详细说明了设置环境、安装依赖和启动Ray集群的必要步骤。
总的来说,这个Dockerfile配置了Python 3.10环境,从requirements.txt
文件中安装了所需的依赖,并把model_deployment.py
脚本复制到容器的工作目录中。EXPOSE
指令对外开放了8888端口,使得外部可以与部署的模型进行通信。最后,CMD
指令以特定配置启动Ray集群,包括启动可在8266端口访问的Ray仪表盘。
# requirements.txt ray[serve]~=2.0.1 starlette==0.20.4 sentence-transformers==2.2.2 torch==2.0.0 pandas==2.0.1
你的 requirements.txt
文件详细列出了部署机器学习模型时所需的各种依赖及其精确版本,确保系统的兼容性。注意,随着时间的推移,可能需要更新这些依赖。
通过执行 docker-compose up
命令,可以启动容器化的环境。如果需要深入了解容器的运行情况,可以使用 sudo docker exec -it [container-id] /bin/bash
命令进入容器的终端,这样就能直接对部署进行监控和实时调整了。在容器中运行 model_deployment.py
脚本,你就能利用 Ray Serve 的强大功能,轻松部署并扩展你的机器学习模型。
更便捷的是,我们还能直接在 Dockerfile 中配置,使得在容器启动时自动执行 model_deployment.py
脚本,实现模型的即时部署。
推荐书单 《Ray分布式机器学习:利用Ray进行大模型的数据处理、训练、推理和部署》 Ray是开源分布式计算框架,简化了扩展计算密集型Python工作负载的过程。本书展示了如何使用Ray构建机器学习应用程序,介绍了Ray如何融入当前的机器学习工具,以及Ray如何与这些工具紧密集成。本书前3章介绍了Ray作为分布式Python框架的基础知识,并提供了应用示例;第4-10章介绍了Ray高级库(Ray RLlib、Ray Tune、Ray Dataset、Ray Train、Ray Serve、Ray Cluster、Ray AIR),并展示如何使用高级库创建应用程序;第11章对Ray的生态进行了总结,并指导读者继续学习。
购买链接:https://item.jd.com/14622022.html
精彩回顾 搜索引擎+GraphRAG+智能体,打造AI智能搜索
一文彻底搞懂GraphRAG
高效打造知识图谱,使用LlamaIndex Relik实现实体关联和关系抽取
动手实现GraphRAG,检索效果大幅提升
利用LlamaIndex和本地PDF文档,轻松打造知识图谱GraphRAG
基于Llama 3、Ollama、Milvus、LangChain,快速搭建本地RAG
长按关注《AI科技论谈》
长按访问【IT今日热榜】,发现每日技术热点