#embedding #text-image #onnx #fashion #inference #grpc-api #clip-multilingual

bin+lib fashion-clip-rs

一个完整的(gRPC服务和库)Rust推理,支持多语言嵌入。这个版本利用Rust的强大功能,为gRPC服务和独立库提供高效的时尚文本和图像嵌入。

5个版本

0.1.5 2023年12月23日
0.1.4 2023年12月23日
0.1.3 2023年12月14日
0.1.1 2023年12月13日
0.1.0 2023年12月13日

438机器学习

每月下载量 37

自定义许可

320KB
721

fashion-clip-rs:Rust中的时尚剪辑服务

Build Status License Rust Version

🌟 简介

fashion-clip-rs是fashion-clip transformers模型onnx ready版本,完全使用Rust和pykeio/ort编写。它导入一个ONNX文件(目前是Hugging Face的Fashion-Clip PyTorch库,并带有最佳CLI将其转换为ONNX格式),创建一个gRPC服务API,使用Fashion-Clip模型和clip-ViT-B-32-multilingual-v1创建文本或图像嵌入,对给定的文本或图像进行推理,并将输出向量作为gRPC响应返回。

fashion-clip-rs提供高效的文本和图像嵌入,特别是针对时尚,具有多语言功能。

该项目可以作为独立库用于包括Rust项目。

🚀 功能

  • 完全使用Rust:为最佳性能重写。
  • 使用Tonic的GRPC:强大且高效的GRPC服务。
  • 多语言文本嵌入:利用ONNX转换的sentence-transformers/clip-ViT-B-32-multilingual-v1
  • 针对时尚的图像嵌入:使用ONNX转换的patrickjohncyh/fashion-clip
  • 使用Cargo进行包管理:确保可靠的依赖管理。
  • 内置Rust测试:利用Rust的测试功能。
  • 使用ghz.sh的GRPC性能测试:
  • 支持Docker:用于容器化部署。
  • 使用pykeio/ort包的ONNX运行时:用于模型加载和推理。
  • HF标记器:用于文本嵌入的预处理。
  • 独立库支持:可以包含在其他Rust项目中。
  • 使用Tarpaulin进行覆盖:进行详细的测试覆盖率分析。

🛠 入门

先决条件

确保您已安装以下内容

  • 最新版本的Rust
  • Just
  • Docker
  • 用于gRPC性能测试的 ghz
  • Tarpaulin 用于覆盖率报告
  • python >3.11 使用 hf optimum 导出 onnx 模型
  • act(可选,用于在本地测试 github actions)

安装

  1. 安装 Rust 和 Cargo: https://rust-lang.net.cn/tools/install
  2. 安装 Just
  3. 安装 Tarpaulin 可选:用于覆盖率报告
  4. 安装 act 可选:用于在本地测试 github actions
  5. 安装 ghz 可选:用于性能测试
  6. 克隆仓库: git clone https://github.com/yaman/fashion-clip-rs.git
  7. 切换到项目目录: cd fashion-clip-rs
  8. 构建项目: just build

模型导出

要使用 Fashion-Clip 模型和 clip-ViT-B-32-multilingual-v1 与 fashion-clip-rs,您需要使用 Hugging Face Optimum 工具将其转换为 ONNX 格式。

  1. 从源代码安装最新版本的 optimum cli,包括 transformers 和 sentence-transformers
python -m pip install optimum[onnxruntime]@git+https://github.com/huggingface/optimum.git transformers sentence-transformers
  1. 对于 clip-ViT-B-32-multilingual-v1
optimum-cli export onnx -m sentence-transformers/clip-ViT-B-32-multilingual-v1 --task feature-extraction models/text 
  1. 对于 fashion-clip
optimum-cli export onnx -m patrickjohncyh/fashion-clip --task feature-extraction models/image

注意 1:准确导出 clip-ViT-B-32-multilingual-v1 依赖于最新版本的 optimum。因此,即使您已经安装了 optimum,也不要跳过第一步。

注意 2:目前,我们使用 clip-ViT-B-32-multilingual-v1 生成 文本 嵌入,fashion-clip 生成 图像 嵌入。

设置(构建 & 运行)

构建

just build

构建 Docker 镜像

just build-docker

本地运行

just run

运行 Docker 容器

just run-docker

🧪 测试

单元测试

just unit-test

集成测试

just integration-test

覆盖率报告

just coverage

文本性能测试

just perf-test-for-text

🐳 使用 Docker 运行

每当必要的文件发生更改时,GitHub action 会推送到 yaman/fashion-clip-rs Docker Hub 仓库。将创建 Linux/amd64 和 Linux/arm64 镜像。您可以直接通过以下方式运行镜像:

docker run -v ./models:/models -v ./config.toml:/config.toml yaman/fashion-clip-rs:latest

📚 作为库的使用

fashion-clip-rs 也可以在 Rust 项目中作为库使用。

注意:模型必须在 models/text 和 models/image 目录下准备好。请参阅模型导出部分

将库添加到您的项目中

cargo add fashion_clip_rs

给定模型在 models/text 下的以下模型结构中导出为 onnx

config.json  
model.onnx  
special_tokens_map.json  
tokenizer_config.json  
tokenizer.json  
vocab.txt
use fashion_clip_rs::{config::Config, embed::EmbedText};
let embed_text = EmbedText::new(&"models/text/model.onnx", &"sentence-transformers/clip-ViT-B-32-multilingual-v1").expect("msg");
let query_embedding = embed_text.encode(&"this is a sentence".to_string());

gRPC 服务

gRPC 服务提供两种方法

EncodeText

使用 Fashion-Clip 模型对文本输入进行编码。

请求

message TextRequest {
  string text = 1;
}

响应

message EncoderResponse {
  repeated float embedding = 3;
}

EncodeImage

使用 Fashion-Clip 模型对图像输入进行编码。

请求

message ImageRequest {
  bytes image = 2;
}

响应

message EncoderResponse {
  repeated float embedding = 3;
}

贡献

  1. 分支仓库
  2. 创建一个新的分支: git checkout -b feature-name
  3. 进行更改并提交: git commit -am '添加一些功能'
  4. 推送到分支: git push origin feature-name
  5. 提交拉取请求

📜 许可证

本项目受 MIT 许可证的许可 - 请参阅 LICENSE.md 文件以获取详细信息。

📞 联系方式

如有问题或反馈,请联系 yaman

作者

此项目由 Yaman 创建。

依赖项

~33–48MB
~773K SLoC