我在68,000件艺术品上部署了多模态语义搜索。Modal + L40S + Qwen3-VL-Embedding

Reddit r/AI_Agents 新闻

摘要

一位开发者使用Qwen3-VL-Embedding、FAISS、Modal和Cloudflare R2,在国家美术馆的68,000件艺术品上构建了多模态语义搜索系统。该系统热响应时间约1.3秒,冷启动约44秒,同时支持文本到图像和图像到图像的查询。

我构建的内容:文本→艺术品搜索,覆盖国家美术馆(National Gallery of Art)的开放获取馆藏。查询如"a Vermeer with afternoon light"或"lonely winter scene",你会得到64张视觉相似的结果,按多模态相似度排序。图像到图像同样支持:上传一件艺术品,获取相似作品。 **数据:** * 来自NGA开放获取数据集(CC0,公共领域)的68,816件艺术品 * 每条记录:标题、艺术家、年份、IIIF缩略图URL * 存储在Cloudflare R2存储桶中 **技术栈:** * **嵌入模型**:Qwen3-VL-Embedding-2B。多模态(文本或图像)→ 单一向量。我基于2048维基础索引到1024维。 * **索引**:FAISS,对L2归一化向量进行平面内积运算。磁盘上约250MB。 * **服务**:Modal,后端运行FastAPI。L40S GPU,按需扩缩至零。热请求端到端约3秒,冷启动约12秒(嵌入模型加载)。 * **前端**:Vercel上的Next.js,带有搜索和分页端点,代理到Modal。 * **存储**:Cloudflare R2,用于FAISS索引、元数据和缩略图缓存。R2的零出站费用是该项目作为副业可行的唯一原因。 **我艰难学到的经验:** 1. **冷启动是真正的敌人。** 我在Modal上的容器有8分钟的缩容窗口——空闲8分钟后,容器被销毁。全新启动约31秒(拉取镜像+以bfloat16格式将嵌入模型加载到L40S上,GPU工作集约4GB);第一次搜索请求再增加约1.5秒用于嵌入模型的首次推理。我通过Vercel的定时任务每7分钟ping一次来保持一个热容器。今天在生产构建上测量:首次冷启动端到端43.8秒;热启动端到端0.4-2.0秒(平均1.3秒,中位数1.45秒,10/10成功)。在热容器上,每次搜索请求在服务端耗时35-41毫秒——其中34-39毫秒是嵌入模型,0.9-2.4毫秒是FAISS在68k向量上的搜索。客户端1-2秒的差异主要来自Vercel↔Modal的往返,而非模型本身。 2. **IIIF节省了大量工作。** NGA的IIIF端点按需提供任意尺寸的缩略图。我将所有候选图像归一化为固定缩略图尺寸,以免在慢速连接上向用户传输6MB的TIFF文件。搜索从不加载完整图像——仅加载嵌入向量。 3. **向量维度是一个真实的权衡。** 我基于2048维基础索引到1024维;FAISS在0.9-2.4毫秒内处理68k向量。将维度加倍会使索引大小加倍,并明显减慢搜索速度。 4. **在平面索引上进行分页很尴尬。** 我从前80个最近邻搜索中返回前64个。"搜索更多"通过偏移量(固定为16的倍数,范围64-240)浏览更广的前256个结果。三页之后感觉结果开始变得陈旧。 项目是单人项目,位于英国,硕士生(金融背景——我绝不是计算机视觉工程师),回复可能较慢。
查看原文

相似文章

基于查询的跨模态投影器增强 Mamba 多模态大语言模型

arXiv cs.CL

本文提出了一种基于查询的跨模态投影器,通过交叉注意力机制对视觉标记进行压缩,以提升基于 Mamba 的多模态大语言模型的性能。该方法在视觉语言基准测试中同时提高了模型性能和吞吐量,并消除了手动设计二维扫描顺序的需求。

面向视觉原生多模态深度搜索智能体的同策略数据演化

Hugging Face Daily Papers

本文介绍了同策略数据演化(ODE)和一种视觉原生智能体框架,以提升多模态深度搜索智能体的性能。通过实现视觉证据的可重用性和闭环数据生成,ODE 显著提升了 Qwen3-VL 智能体在多个基准测试中的表现,超越了 Gemini 2.5 Pro。

Qwen3.7预览版登陆Arena(1分钟阅读)

TLDR AI

阿里巴巴Qwen宣布两大重要模型发布:Qwen3-Omni,首个原生端到端全模态AI,统一处理文本、图像、音频和视频;以及Qwen3-Next-80B-A3B,一款超高效MoE模型,每个token激活30亿参数,实现了SOTA性能,推理速度比Qwen3-32B快10倍。