Florence 这个名字有两层含义。2021 年微软那篇《Florence: A New Foundation Model for Computer Vision》说的是一个闭源视觉基础模型,普通人只能在 Azure 的图像分析服务里间接用到它;而你今天真能下载、能商用、能改的,是它的开源续作 Florence-2(技术报告 arXiv 2311.06242),MIT 许可,权重就挂在 Hugging Face 上。所以搜「Florence 本地部署」,实际要部署的几乎都是 Florence-2。
它最反直觉的地方是小得离谱。Florence-2-large 只有 0.77B 参数,仓库里的 model.safetensors 是 1.55GB;base 版 0.23B,463MB。就这个体量,在 FLD-5B(1.26 亿张图、54 亿条标注)上训出来,一个模型同时干十几件事:图像描述、详细描述、目标检测、密集区域描述、短语定位、开放词表检测、指代表达分割、OCR、带框 OCR。切换方式不是写 prompt,而是把 <OD>、<OCR_WITH_REGION>、<CAPTION_TO_PHRASE_GROUNDING> 这样的任务 token 直接当输入喂进去。
架构是 DaViT 视觉塔加一个 BART 风格的 encoder-decoder 文本塔,这一点直接决定了部署路数:它不是 decoder-only,vLLM 那套原生推理优化用不上(vLLM 的支持列表里把 Florence2ForConditionalGeneration 放进了 bart-plugin),但也正因为小,单卡把显存全部拿去堆 batch 就能硬吞。真正花钱的地方从来不是显存,而是打标的规模和微调的卡时。
01 —
版本与显存对照
认准 florence-community 组织,它是 Florence-2 的 transformers 官方转换版本
| 版本 | 参数量 | 显存 | 上下文 | 说明 |
|---|---|---|---|---|
| florence-community/Florence-2-large | 0.77B | fp16 权重 1.55GB / bitsandbytes 4-bit 不到 1GB | 文本塔 4096 | 默认首选。零样本的检测、密集区域描述和 OCR 质量都比 base 明显好一档,下载量也是四个 checkpoint 里最高的。 |
| florence-community/Florence-2-base | 0.23B | fp16 权重 463MB | 文本塔 4096 | 要吞百万级图库、或者想往边缘设备和 CPU 上塞时用它;社区已经有人做了 ONNX、CoreML、ExecuTorch 移植。 |
| florence-community/Florence-2-large-ft | 0.77B | fp16 权重 1.55GB | 文本塔 4096 | 在一批下游任务上继续微调过的版本,标准 benchmark 上分数更好看,但零样本泛化不如未微调的 large,自己两版都跑一遍再定。 |
| florence-community/Florence-2-base-ft | 0.23B | fp16 权重 463MB | 文本塔 4096 | 小模型的微调版,适合任务边界很窄、只要一两个 task token 的固定流水线。 |
| Florence-VL 3B / 8B(jiuhai/florence-vl-*) | HF 上标注 5B / 9B | bf16 约 10GB / 约 18GB(按标注参数量估算) | 跟随底座 LLM | Florence-2 的后续演进:把它当视觉编码器接进 LLM,走对话式 VQA。想要能聊天的多模态模型时看这条线,想要框和坐标还是回 Florence-2。 |
02 —
选哪张卡
1.55GB 的权重意味着显存不是瓶颈,吞吐和卡时才是
单卡推理、日常批量打标
RTX 3090 24GB$0.193/卡·时
Ampere 架构里最便宜的一张,fp16 张量核心齐全,装完 1.55GB 权重剩下的 20GB 全是 batch 余量。
百万级图库一次性洗完的高吞吐流水线
RTX 4090 24GB$0.540/卡·时
同样 24GB,但单位时间处理的图明显更多,按秒计费的场景下省下的时间就是省下的钱。
冻结视觉塔做领域微调(DocVQA、票据、界面截图)
A100 PCIE 80GB$0.824/卡·时
官方教程冻结视觉塔时在 40GB 上开到 batch 6,80GB 让你直接把 batch 翻上去而不必重调学习率。
解冻视觉塔的全量微调,复现官方 8 卡配置
H100 SXM 80GB ×8$3.582/卡·时
官方那套 batch 64、7 个 epoch、70 分钟跑完的配置原样搬过来,单节点最多 14 卡,8 卡不用申请配额。
03 —
从开机到出第一个检测框
四步,全程不需要 trust_remote_code
- 01
开一台 PyTorch 实例,装对依赖
选 PyTorch 预置镜像开机,SSH、Jupyter 或 Web 终端进去都行。Florence-2 已经进了 transformers 主干,类名就是 Florence2ForConditionalGeneration 和 Florence2Processor,不再需要 trust_remote_code=True。
pip install -U transformers accelerate timm einops pillow - 02
拉官方转换过的权重
认准 florence-community 这个组织,base、base-ft、large、large-ft 四个 checkpoint 都在里面,config 是按 transformers 4.56.1 转换的。microsoft/ 下的原始仓库带的是 2024 年写的 modeling_florence2.py 自定义代码,和新版 transformers 反复打架,没必要再踩一遍。
hf download florence-community/Florence-2-large --local-dir /workspace/florence2-large - 03
用任务 token 跑第一张图
processor 会先把图缩到固定的 768×768,任务 token 决定模型干什么,生成默认 num_beams=3、max_new_tokens 一般给到 1024。返回的是一串带 <loc_0> 到 <loc_999> 量化坐标的字符串,必须过 post_process_generation 并传入原图 image_size 才能还原成像素级的框,直接当 JSON 解析一定出错。
python -c "from transformers import pipeline; p = pipeline('image-text-to-text', model='florence-community/Florence-2-large', device=0); print(p('demo.jpg', text='<OD>'))" - 04
压显存,或者反过来上规模
想再省,transformers 文档里直接给了 bitsandbytes 4-bit 的例子,BitsAndBytesConfig(load_in_4bit=True) 一行压到 1GB 以内;想上规模就反着来,把显存全部拿去堆 batch,同时先把图按长边补到 768 减少无谓缩放。跑完直接停机,算力立刻停止计费,只有存储会继续计到你销毁实例为止。
pip install bitsandbytes
这套流程到底多少钱
先算最贵的一档:复现 Hugging Face 官方那份 DocVQA 微调,解冻视觉塔、batch 64、7 个 epoch,官方记录是 8 张 H100 跑 70 分钟。在 NexGPU 上就是 8 × $3.582 = $28.656/时,70 分钟即 28.656 × 70 ÷ 60 = $33.43,一次跑完。预算优先就换官方那条冻结视觉塔、batch 6 的路线:单张 A100 PCIE 80GB $0.824/卡·时,就算慢到 12 小时,也只有 0.824 × 12 = $9.89。推理侧更便宜得离谱:Florence-2-large fp16 权重才 1.55GB,RTX 3090 24GB $0.193/卡·时,挂满一整天做打标服务是 0.193 × 24 = $4.63;换成吞吐更高的 RTX 4090 24GB 也才 0.540 × 24 = $12.96。数据集加 checkpoint 按 20GB 存三天算:20 × $0.414 × 3 ÷ 30 = $0.83。全部按秒计量、按小时计价,没有起租量、没有开通费、没有配额申请;算力停机即停止计费,存储则一直计到你把它销毁。
04 —
