Infinity: 高性能文本嵌入和重排序API

Ray

infinity

Infinity: 开源高性能文本嵌入和重排序API

Infinity是一个开源的高性能文本嵌入和重排序API,旨在为开发者提供快速、灵活的自然语言处理能力。它具有以下主要特点和优势:

强大的模型支持

Infinity支持部署任何来自HuggingFace的嵌入、重排序、CLIP和句子转换器模型。这意味着开发者可以轻松使用最新的NLP模型,无需自己训练或微调。支持的模型类型包括:

  • 文本嵌入模型
  • 重排序模型
  • CLIP多模态模型
  • 文本分类模型

这种广泛的模型支持使Infinity能够应用于各种NLP任务,如语义搜索、文档排序、图像-文本匹配等。

高性能推理后端

Infinity采用了多种技术来实现高性能推理:

  • 基于PyTorch、ONNX/TensorRT和CTranslate2构建
  • 使用FlashAttention加速
  • 支持NVIDIA CUDA、AMD ROCm、CPU、AWS INF2和Apple MPS等多种硬件加速器
  • 动态批处理和专用线程中的分词

这些优化使Infinity能够实现高吞吐量和低延迟,满足生产环境的需求。

多模态和多模型支持

Infinity允许混合使用多个不同的模型,并能够协调它们的工作。这为开发复杂的NLP应用提供了极大的灵活性。例如,可以同时使用文本嵌入模型和图像-文本匹配模型来构建多模态搜索系统。

易用性

Infinity提供了多种使用方式:

  1. 命令行界面(CLI):可以通过pip安装后直接使用CLI启动服务。

  2. Docker容器:提供了预构建的Docker镜像,方便部署。

  3. Python API:可以在Python代码中直接调用Infinity的功能。

此外,Infinity还提供了符合OpenAI API规范的REST API,便于集成到现有系统中。

广泛的应用

Infinity已经在多个知名公司和项目中得到应用,包括:

  • RunPod
  • TrueFoundry
  • Vast.ai
  • SAP
  • Freshworks

这些案例展示了Infinity在实际生产环境中的可靠性和性能。

Infinity应用案例

最新进展

Infinity项目一直在积极开发中,最近的一些重要更新包括:

  • 2024年7月:通过Modal提供推理部署示例和免费GPU部署
  • 2024年6月:增加对多模态的支持,包括CLIP和文本分类
  • 2024年5月:支持使用v2 CLI启动多个模型,并添加API密钥功能
  • 2024年3月:实验性支持int8(CPU/CUDA)和fp8(H100/MI300)
  • 2024年3月:在线文档上线
  • 2024年2月:在Run:AI Infra Club举行社区meetup
  • 2024年1月:添加TensorRT / ONNX推理支持

这些更新不断增强Infinity的功能和性能,使其能够适应更多的应用场景。

快速开始

要开始使用Infinity,有几种方法:

1. 通过pip安装CLI

首先安装Infinity:

pip install infinity-emb[all]

然后可以直接运行CLI:

infinity_emb v2 --model-id BAAI/bge-small-en-v1.5

使用v2 --help命令可以查看所有参数的说明。

2. 使用预构建的Docker容器(推荐)

使用Docker运行Infinity更加方便,特别是在需要GPU加速的情况下:

port=7997
model1=michaelfeil/bge-small-en-v1.5
model2=mixedbread-ai/mxbai-rerank-xsmall-v1
volume=$PWD/data

docker run -it --gpus all \
 -v $volume:/app/.cache \
 -p $port:$port \
 michaelf34/infinity:latest \
 v2 \
 --model-id $model1 \
 --model-id $model2 \
 --port $port

3. 通过Python API使用

Infinity还提供了Python API,可以直接在Python代码中使用:

import asyncio
from infinity_emb import AsyncEngineArray, EngineArgs, AsyncEmbeddingEngine

sentences = ["Embed this is sentence via Infinity.", "Paris is in France."]
array = AsyncEngineArray.from_args([
  EngineArgs(model_name_or_path = "BAAI/bge-small-en-v1.5", engine="torch", embedding_dtype="float32", dtype="auto")
])

async def embed_text(engine: AsyncEmbeddingEngine): 
    async with engine: 
        embeddings, usage = await engine.embed(sentences=sentences)
    # or handle the async start / stop yourself.
    await engine.astart()
    embeddings, usage = await engine.embed(sentences=sentences)
    await engine.astop()
asyncio.run(embed_text(array[0]))

主要功能

1. 文本嵌入

Infinity支持各种流行的文本嵌入模型,如:

  • mixedbread-ai/mxbai-embed-large-v1
  • WhereIsAI/UAE-Large-V1
  • BAAI/bge-base-en-v1.5
  • Alibaba-NLP/gte-large-en-v1.5
  • jinaai/jina-embeddings-v2-base-code
  • intfloat/multilingual-e5-large-instruct

这些模型可以将文本转换为高维向量,用于语义搜索、文本聚类等任务。

2. 重排序

重排序功能可以为查询和多个文档之间的相似度打分,常用于搜索结果的优化:

import asyncio
from infinity_emb import AsyncEngineArray, EngineArgs, AsyncEmbeddingEngine

query = "What is the python package infinity_emb?"
docs = ["This is a document not related to the python package infinity_emb, hence...", 
    "Paris is in France!",
    "infinity_emb is a package for sentence embeddings and rerankings using transformer models in Python!"]
array = AsyncEmbeddingEngine.from_args(
  [EngineArgs(model_name_or_path = "mixedbread-ai/mxbai-rerank-xsmall-v1", engine="torch")]
)

async def rerank(engine: AsyncEmbeddingEngine): 
    async with engine:
        ranking, usage = await engine.rerank(query=query, docs=docs)
        print(list(zip(ranking, docs)))

asyncio.run(rerank(array[0]))

支持的重排序模型包括:

  • mixedbread-ai/mxbai-rerank-xsmall-v1
  • BAAI/bge-reranker-base
  • jinaai/jina-reranker-v1-turbo-en

3. CLIP模型

CLIP模型能够同时编码图像和文本,适用于图像-文本匹配等任务:

import asyncio
from infinity_emb import AsyncEngineArray, EngineArgs, AsyncEmbeddingEngine

sentences = ["This is awesome.", "I am bored."]
images = ["http://images.cocodataset.org/val2017/000000039769.jpg"]
engine_args = EngineArgs(
    model_name_or_path = "wkcn/TinyCLIP-ViT-8M-16-Text-3M-YFCC15M", 
    engine="torch"
)
array = AsyncEngineArray.from_args([engine_args])

async def embed(engine: AsyncEmbeddingEngine): 
    await engine.astart()
    embeddings, usage = await engine.embed(sentences=sentences)
    embeddings_image, _ = await engine.image_embed(images=images)
    await engine.astop()

asyncio.run(embed(array["wkcn/TinyCLIP-ViT-8M-16-Text-3M-YFCC15M"]))

支持的CLIP模型包括:

  • wkcn/TinyCLIP-ViT-8M-16-Text-3M-YFCC15M
  • jinaai/jina-clip-v1 (需要额外安装timm库)

4. 文本分类

Infinity还支持文本分类任务,如情感分析、情绪检测等:

import asyncio
from infinity_emb import AsyncEngineArray, EngineArgs, AsyncEmbeddingEngine

sentences = ["This is awesome.", "I am bored."]
engine_args = EngineArgs(
    model_name_or_path = "distilbert-base-uncased-finetuned-sst-2-english", 
    engine="torch"
)
array = AsyncEngineArray.from_args([engine_args])

async def classify(engine: AsyncEmbeddingEngine): 
    await engine.astart()
    classifications, usage = await engine.classify(sentences=sentences)
    await engine.astop()

asyncio.run(classify(array["distilbert-base-uncased-finetuned-sst-2-english"]))

性能优化

Infinity采用了多种技术来优化性能:

  1. 动态批处理: 自动将多个请求合并成批次进行处理,提高吞吐量。

  2. 多线程分词: 使用专用线程进行分词操作,减少主线程的负担。

  3. 硬件加速: 支持多种硬件加速器,包括NVIDIA CUDA、AMD ROCm、CPU、AWS INF2和Apple MPS。

  4. FlashAttention: 使用FlashAttention技术加速Transformer模型的注意力计算。

  5. 量化: 支持int8和fp8量化,在保持精度的同时减少内存使用和计算时间。

  6. ONNX/TensorRT: 支持将模型转换为ONNX格式或使用TensorRT进行优化,进一步提高推理速度。

这些优化使Infinity能够在各种硬件上实现高性能,满足生产环境的需求。

![Infinity性能优化](https://private-user-images.githubusercontent.com/63565275/359974415-8286d620-f403-48f5-bd7f-f471b228ae7b.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3MjUwMDIyMjgsIm5iZiI6MTcyNTAwMTkyOCwicGF0aCI6Ii82MzU2NTI3NS8zNTk5NzQ0MTUtODI4NmQ2MjAtZjQwMy00OGY1LWJkN2YtZjQ3MWIyMjhhZTdiLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09E

avatar
0
0
0
最新项目
Project Cover

豆包MarsCode

豆包 MarsCode 是一款革命性的编程助手,通过AI技术提供代码补全、单测生成、代码解释和智能问答等功能,支持100+编程语言,与主流编辑器无缝集成,显著提升开发效率和代码质量。

Project Cover

AI写歌

Suno AI是一个革命性的AI音乐创作平台,能在短短30秒内帮助用户创作出一首完整的歌曲。无论是寻找创作灵感还是需要快速制作音乐,Suno AI都是音乐爱好者和专业人士的理想选择。

Project Cover

有言AI

有言平台提供一站式AIGC视频创作解决方案,通过智能技术简化视频制作流程。无论是企业宣传还是个人分享,有言都能帮助用户快速、轻松地制作出专业级别的视频内容。

Project Cover

Kimi

Kimi AI助手提供多语言对话支持,能够阅读和理解用户上传的文件内容,解析网页信息,并结合搜索结果为用户提供详尽的答案。无论是日常咨询还是专业问题,Kimi都能以友好、专业的方式提供帮助。

Project Cover

阿里绘蛙

绘蛙是阿里巴巴集团推出的革命性AI电商营销平台。利用尖端人工智能技术,为商家提供一键生成商品图和营销文案的服务,显著提升内容创作效率和营销效果。适用于淘宝、天猫等电商平台,让商品第一时间被种草。

Project Cover

吐司

探索Tensor.Art平台的独特AI模型,免费访问各种图像生成与AI训练工具,从Stable Diffusion等基础模型开始,轻松实现创新图像生成。体验前沿的AI技术,推动个人和企业的创新发展。

Project Cover

SubCat字幕猫

SubCat字幕猫APP是一款创新的视频播放器,它将改变您观看视频的方式!SubCat结合了先进的人工智能技术,为您提供即时视频字幕翻译,无论是本地视频还是网络流媒体,让您轻松享受各种语言的内容。

Project Cover

美间AI

美间AI创意设计平台,利用前沿AI技术,为设计师和营销人员提供一站式设计解决方案。从智能海报到3D效果图,再到文案生成,美间让创意设计更简单、更高效。

Project Cover

AIWritePaper论文写作

AIWritePaper论文写作是一站式AI论文写作辅助工具,简化了选题、文献检索至论文撰写的整个过程。通过简单设定,平台可快速生成高质量论文大纲和全文,配合图表、参考文献等一应俱全,同时提供开题报告和答辩PPT等增值服务,保障数据安全,有效提升写作效率和论文质量。

投诉举报邮箱: service@vectorlightyear.com
@2024 懂AI·鲁ICP备2024100362号-6·鲁公网安备37021002001498号