python | jina,一个非常实用的 Python 库!

本文来源公众号“python”,仅用于学术分享,侵权删,干货满满。

原文链接:https://mp.weixin.qq.com/s/SebqtH5Tgonr30M-Kzxc5w

在AI应用开发中,如何将机器学习模型快速部署为可扩展的微服务是一个常见挑战。jina是由Jina AI公司开发的开源云原生框架,专为构建和部署AI服务而设计。它支持通过gRPC、HTTP和WebSocket进行通信,能够处理文本、图像、音频、视频等多模态数据。无论是神经搜索系统、LLM服务,还是复杂的AI流水线,jina都能帮助开发者从本地开发无缝过渡到生产环境部署。

安装

1、安装方法

通过pip直接安装:

pip install jina

如需完整功能(包括监控、性能优化等),可安装标准版:

pip install "jina[standard]"

2、验证安装

from jina import Executor, Flow
print("jina 安装成功!")

核心特性:

  • 多协议支持:原生支持gRPC、HTTP、WebSocket三种通信协议

  • 多模态处理:统一处理文本、图像、音频、视频等任意数据类型

  • 流式输出:支持LLM模型的流式响应,适合大模型服务

  • 动态批处理:自动优化请求批处理,提升吞吐量

  • 弹性扩展:支持副本(replicas)和分片(shards),轻松横向扩展

  • 云原生部署:内置Kubernetes和Docker Compose支持

  • Executor Hub:丰富的预置组件库,开箱即用

基本功能

1、核心概念

jina的架构分为三层:数据层使用BaseDoc和DocList定义输入输出;服务层通过Executor处理数据;编排层用Deployment部署单个Executor,用Flow串联多个Executor形成流水线。

2、创建Executor

Executor是jina的核心处理单元,用于封装AI模型或业务逻辑。通过@requests装饰器定义请求处理方法,可以指定不同的端点处理不同类型的请求。

from jina import Executor, requests
from docarray import DocList, BaseDoc

class TextDoc(BaseDoc):
    text: str

class ResultDoc(BaseDoc):
    text: str
    length: int

class TextProcessor(Executor):
    @requests(on='/process')
    def process(self, docs: DocList[TextDoc], **kwargs) -> DocList[ResultDoc]:
        results = DocList[ResultDoc]()
        for doc in docs:
            results.append(ResultDoc(
                text=doc.text.upper(),
                length=len(doc.text)
            ))
        return results

3、使用Deployment部署服务

Deployment用于将单个Executor部署为独立服务。它会自动处理网络通信、请求路由等底层细节,让开发者专注于业务逻辑。服务启动后可通过gRPC或HTTP访问。

from jina import Deployment

with Deployment(uses=TextProcessor, port=12345) as dep:
    dep.block()  # 保持服务运行

4、使用Client调用服务

Client提供了简洁的API来调用远程服务。它自动处理序列化、网络通信和响应解析,支持同步和异步两种调用方式。

from jina import Client
from docarray import DocList

client = Client(port=12345)
docs = DocList[TextDoc]([TextDoc(text='hello world')])
response = client.post('/process', inputs=docs, return_type=DocList[ResultDoc])

for doc in response:
    print(f"结果: {doc.text}, 长度: {doc.length}")

高级功能

1、使用Flow构建流水线

Flow可以将多个Executor串联成处理流水线,适合复杂的多步骤AI任务。每个Executor独立运行,通过Flow进行编排和数据传递,实现模块化的服务架构。

from jina import Flow, Executor, requests
from docarray import DocList, BaseDoc

class InputDoc(BaseDoc):
    text: str

class Preprocessor(Executor):
    @requests
    def preprocess(self, docs: DocList[InputDoc], **kwargs):
        for doc in docs:
            doc.text = doc.text.strip().lower()
        return docs

class Analyzer(Executor):
    @requests
    def analyze(self, docs: DocList[InputDoc], **kwargs):
        for doc in docs:
            doc.text = f"[分析完成] {doc.text}"
        return docs

flow = Flow(port=12345).add(uses=Preprocessor).add(uses=Analyzer)

with flow:
    flow.block()

2、配置副本与扩展

生产环境中,可通过replicas参数设置副本数量实现负载均衡,通过动态批处理优化GPU利用率。这些配置无需修改业务代码,只需调整部署参数。

from jina import Deployment

dep = Deployment(
    uses=TextProcessor,
    port=12345,
    replicas=3,  # 3个副本
    uses_dynamic_batching={
        '/process': {
            'preferred_batch_size': 10,
            'timeout': 200
        }
    }
)

3、流式输出支持

对于LLM等需要逐步生成结果的场景,jina支持流式输出。通过async生成器和yield语句,可以实现token级别的实时响应。

from jina import Executor, Deployment, requests

class StreamingExecutor(Executor):
    @requests(on='/stream')
    async def stream_task(self, doc, **kwargs):
        for i in range(5):
            yield {"token": f"part_{i}"}

with Deployment(uses=StreamingExecutor, port=12345, protocol='grpc') as dep:
    dep.block()

总结

jina是一个专为AI服务设计的云原生框架,其核心价值在于将复杂的分布式系统工程简化为简洁的Python API。通过Executor封装业务逻辑,Deployment部署单服务,Flow编排多服务流水线,开发者可以快速构建从原型到生产的AI应用。框架原生支持gRPC、HTTP、WebSocket通信,内置动态批处理、流式输出、弹性扩展等高级特性,并与Docker、Kubernetes深度集成。神经搜索、LLM服务还是多模态处理,jina都能提供一致的开发体验和生产级的部署能力。

THE END !

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值