社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  机器学习算法

高效可扩展,使用Ray Serve部署机器学习模型

AI科技论谈 • 8 月前 • 170 次点击  

使用Ray Serve框架简化机器学习模型的部署流程,并通过Docker容器化技术实现模型的轻松扩展和管理。

长按关注《AI科技论谈》

在数据为王的今天,使用机器学习模型来构建智能解决方案,绝对是科技圈的热门趋势。然而,对于涉足这一领域的开发者来说,构建过程中的架构设计往往充满了挑战,系统的复杂性会迅速增长。

本文带读者了解将机器学习模型部署为服务时可能遇到的问题,并分享一些策略,帮助在不增加架构复杂度的前提下,轻松应对这些挑战。

1 引言:机器学习模型部署的挑战

传统上,在生产环境中部署机器学习模型,需要配置消息队列和任务调度系统。这不仅复杂,还要求工程师投入大量精力以确保系统的稳定性和响应速度。

Ray Serve框架的出现,简化了这一流程。

Ray Serve整合了消息队列和工作进程,提供简洁的解决方案,让模型部署、管理和扩展变得更加便捷。开发者只需关注模型的核心开发,Ray Serve则自动处理负载均衡和故障恢复等任务,从而加快部署速度并提升模型的可靠性与响应性。

2 实践:容器化模型部署

在模型服务化实践中,会发现将每个机器学习模型单独部署到Docker容器中极为有效。这种策略让模型独立于应用其他部分,增强系统的模块化和可维护性,同时简化模型扩展和新模型的集成。每个容器自成一体,不受外部变化影响,便于系统平滑扩展。

这种方法与敏捷开发理念相符,与Ray Serve等框架的动态管理特性相得益彰,显著简化了部署流程,提高开发速度。

为此,开发了以下文件结构:

  • Dockerfile
  • model_deployment.py
  • requirements.txt

这个简单的文件结构让我们能够通过运行 model_deployment.py 来启动模型。

import json
from typing import Dict

import torch
from starlette.requests import Request

import ray
from ray import serve
from ray.serve.drivers import DAGDriver

from  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_resolverModelDeployment 绑定到 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今日热榜】,发现每日技术热点

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/174031
 
170 次点击