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中的时尚剪辑服务
🌟 简介
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)
安装
- 安装 Rust 和 Cargo: https://rust-lang.net.cn/tools/install
- 安装 Just
- 安装 Tarpaulin 可选:用于覆盖率报告
- 安装 act 可选:用于在本地测试 github actions
- 安装 ghz 可选:用于性能测试
- 克隆仓库:
git clone https://github.com/yaman/fashion-clip-rs.git
- 切换到项目目录:
cd fashion-clip-rs
- 构建项目:
just build
模型导出
要使用 Fashion-Clip 模型和 clip-ViT-B-32-multilingual-v1 与 fashion-clip-rs,您需要使用 Hugging Face Optimum 工具将其转换为 ONNX 格式。
- 从源代码安装最新版本的 optimum cli,包括 transformers 和 sentence-transformers
python -m pip install optimum[onnxruntime]@git+https://github.com/huggingface/optimum.git transformers sentence-transformers
- 对于 clip-ViT-B-32-multilingual-v1
optimum-cli export onnx -m sentence-transformers/clip-ViT-B-32-multilingual-v1 --task feature-extraction models/text
- 对于 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;
}
贡献
- 分支仓库
- 创建一个新的分支:
git checkout -b feature-name
- 进行更改并提交:
git commit -am '添加一些功能'
- 推送到分支:
git push origin feature-name
- 提交拉取请求
📜 许可证
本项目受 MIT 许可证的许可 - 请参阅 LICENSE.md 文件以获取详细信息。
📞 联系方式
如有问题或反馈,请联系 yaman。
作者
此项目由 Yaman 创建。
依赖项
~33–48MB
~773K SLoC