Batched API 使用教程
1. 项目介绍
Batched API 是一个开源项目,它提供了一种灵活且高效的方式来批量处理多个请求,特别关注于动态批处理推理工作负载。它旨在优化吞吐量,同时保持低延迟体验,尤其在需要同时处理大量请求的场景中非常有用。该API既支持异步也支持同步执行。
动态批处理是一种自动将多个传入的推理请求组合成单个批次进行处理的技术。这对于推理工作负载特别有益,因为一起处理多个输入可以显著提高吞吐量和效率。在机器学习模型中,动态批处理对于优化硬件利用率(尤其是对于并行处理设计的GPU和专用AI硬件)至关重要。通过批处理请求,我们可以充分利用这种并行处理,从而提高吞吐量。同时,它通过分摊固定成本(如数据传输和模型初始化)来提高整体效率。此外,动态批处理通过适应不同的请求率来增强实时性能,在空闲期间保持低延迟,在忙碌期间最大化吞吐量。
2. 项目快速启动
首先,确保您的环境中安装了pip。然后,使用以下命令安装Batched:
pip install batched
以下是一个使用Batched API处理文本数据的基本示例:
from sentence_transformers import SentenceTransformer
import numpy as np
import batched
class SentenceEmbedder:
def __init__(self, model_name='mixedbread-ai/mxbai-embed-large-v1'):
self.model = SentenceTransformer(model_name)
@batched.dynamically
def embed_sentences(self, sentences: list[str]) -> list[np.ndarray]:
# 将句子转换为嵌入
return self.model.encode(sentences)
# 创建SentenceEmbedder的实例
embedder = SentenceEmbedder()
# 嵌入单个句子
single_sent = "这是一个测试句子。"
embedding = embedder.embed_sentences(single_sent)
# 异步嵌入单个句子
awaited_embedding = await embedder.embed_sentences.acall(single_sent)
# 嵌入一批1000个句子
batch_sentences = [f"这是测试句子编号{i}。" for i in range(1000)]
batch_embeddings = embedder.embed_sentences(batch_sentences)
# 异步嵌入一批1000个句子
awaited_batch_embeddings = await embedder.embed_sentences.acall(batch_sentences)
3. 应用案例和最佳实践
批量处理文本数据
在处理大量文本数据时,可以使用Batched API来优化性能。例如,在自然语言处理任务中,将多个文本数据组合成批次进行处理,可以显著提高效率。
异步处理任务
对于需要异步执行的任务,Batched API提供了异步支持,允许你在不阻塞主线程的情况下处理大量请求。
4. 典型生态项目
Batched API 可以与多个开源项目集成,例如:
- 用于句子嵌入的 SentenceTransformers
- 用于深度学习的 PyTorch 或 TensorFlow
- 用于异步编程的 asyncio
通过这些集成,Batched API 可以在多种机器学习工作流中发挥关键作用,提供动态批处理的能力,优化性能和资源利用。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考