标签:
- 零样本图像分类
- CLIP
库标签:open_clip
许可证:mit
库名称:open_clip
管道标签:零样本图像分类
CLIP-convnext_xxlarge-laion2B-s34B-b82K-augreg模型卡片
目录
- 模型详情
- 用途
- 训练详情
- 评估
- 致谢
- 引用
模型详情
模型描述
一系列基于LAION-2B(英语,LAION-5B的子集)训练的CLIP ConvNeXt-XXLarge(自定义timm
ConvNeXt尺寸)模型,使用OpenCLIP。
核心训练运行分阶段进行了约2个月。核心运行的全局批大小为81920。最后约10%的训练以95744的全局批大小重新进行,学习率和数据增强强度高于原结束点。两者通过“模型汤”方法平均。详见训练详情。
目标:
- 将最大卷积CLIP图像塔的性能推至ViT-g到ViT-G范围,同时改进下游应用的图像尺寸缩放。
首次:
- 发布的最大ConvNeXt预训练模型(847M参数,256x256图像下198 GMAC和125 MActs)
- 首个非ViT图像塔CLIP模型(无先前图像塔预训练)实现>79% ImageNet零样本Top-1准确率
模型特点:
- 图像塔采用timm的ConvNeXt-XXLarge模型(
convnext_xxlarge
)
- 图像塔末端采用标准投影
- 文本塔尺寸与ViT-H-14和ViT-g-14模型相同(1024维度,16头,24层)
模型在256x256图像分辨率下训练。图像+文本CLIP模型总参数量为1.2B,222 GMAC和146 MActs。在256x256下,ConvNext-XXLarge的FLOPs和参数量略高于ViT-H-14 CLIP配置,但激活数更低。其计算量远低于g-14和G-14,性能介于两者之间。
模型 |
图像尺寸 |
嵌入维度 |
GMACs |
MActs |
百万参数 |
图像GMACs |
图像MActs |
图像百万参数 |
文本GMACs |
文本MActs |
文本百万参数 |
ViT-H-16 |
224 |
1024 |
150.96 |
122.01 |
986.26 |
127.4 |
100.81 |
632.23 |
23.57 |
21.2 |
354.03 |
ViT-H-14 |
224 |
1024 |
190.97 |
160.61 |
986.11 |
167.4 |
139.41 |
632.08 |
23.57 |
21.2 |
354.03 |
ViT-L-14-336 |
336 |
768 |
197.76 |
278.19 |
427.94 |
191.1 |
270.24 |
304.29 |
6.66 |
7.95 |
123.65 |
convnext_xxlarge |
256 |
1024 |
221.66 |
145.66 |
1200.58 |
198.09 |
124.45 |
846.54 |
23.57 |
21.2 |
354.03 |
RN50x64 |
448 |
1024 |
276.8 |
249.73 |
623.26 |
265.02 |
239.13 |
420.38 |
11.78 |
10.6 |
202.88 |
ViT-g-14 |
224 |
1024 |
290.74 |
213.84 |
1366.68 |
267.18 |
192.64 |
1012.65 |
23.57 |
21.2 |
354.03 |
convnext_xxlarge_320 |
320 |
1024 |
333.08 |
215.66 |
1200.58 |
309.52 |
194.46 |
846.54 |
23.57 |
21.2 |
354.03 |
ViT-H-14-336 |
336 |
1024 |
414.53 |
428.74 |
986.52 |
390.97 |
407.54 |
632.49 |
23.57 |
21.2 |
354.03 |
ViT-bigG-14 |
224 |
1280 |
532.92 |
310.71 |
2539.57 |
483.96 |
275.37 |
1844.91 |
48.96 |
35.34 |
694.66 |
模型训练由Ross Wightman在stability.ai集群和JUWELS Booster超级计算机上完成。详见下方致谢部分。
用途
根据原始OpenAI CLIP模型卡片,本模型旨在作为研究社区的研究输出。我们希望该模型能帮助研究者更好地理解和探索零样本、任意图像分类。我们也希望它能用于跨学科研究此类模型的潜在影响。
OpenAI CLIP论文包含关于潜在下游影响的讨论,为此类分析提供了示例。此外,LAION-5B博客(https://laion.ai/blog/laion-5b/)和即将发表的论文包含了与训练数据集相关的额外讨论。
直接使用
零样本图像分类、图像和文本检索等。
下游使用
图像分类等图像任务微调、线性探针图像分类、图像生成引导和条件化等。
超出范围的使用
根据OpenAI模型,
任何模型的部署使用案例——无论是商业还是非商业——目前都超出范围。非部署使用案例(如受限环境中的图像搜索)也不推荐,除非对具有特定固定分类体系的模型进行了彻底的领域内测试。这是因为我们的安全评估表明,特别是考虑到CLIP在不同分类体系下性能的可变性,任务特定测试的需求很高。这使得目前在任何使用案例中未经测试和不受限制的模型部署可能有害。
某些属于监控和人脸识别领域的用例始终超出范围,无论模型性能如何。这是因为目前缺乏测试规范和确保公平使用的检查,使得人工智能用于此类任务可能为时过早。
由于模型未专门训练或评估英语以外的其他语言,其使用应限于英语用例。
除上述通知外,用于训练这些模型的LAION-5B数据集还有额外考虑事项,见下文。
训练详情
训练数据
本模型使用LAION-2B——LAION-5B(https://laion.ai/blog/laion-5b/)的20亿样本英语子集进行训练。
**重要提示:**创建数据集的动机是民主化围绕大规模多模态模型训练和处理从公开可用互联网爬取的非精选大规模数据集的研究和实验。因此,我们建议将数据集用于研究目的。请注意,该大规模数据集是非精选的。请记住,数据集的非精选性质意味着收集的链接可能导致人类观看者强烈不适和不安的内容。因此,请谨慎使用演示链接,风险自负。可以通过基于安全标签(使用我们构建的定制训练NSFW分类器)过滤样本来提取“安全”子集。虽然这大大减少了查看时遇到潜在有害内容的机会,但我们不能完全排除安全模式下仍存在有害内容的可能性,因此警告同样适用。我们认为,向广泛研究和其他感兴趣的社区开放提供数据集,将有助于透明调查大规模模型训练带来的好处,以及在使用封闭大型数据集(仅限于小社区)时可能未被报告或注意到的陷阱和危险。虽然我们开放提供数据集,但我们不建议将其用于创建即用型工业产品,因为关于此类大规模模型的一般特性和安全性的基础研究仍在进行中,我们希望通过此发布鼓励这类研究。
训练过程
主要训练运行以81920的全局批大小进行,共256个检查点区间,每个区间135.6M样本,总计约340亿样本。
在训练该模型过程中遇到了许多关于模型数值稳定性和集群稳定性及性能的困难。最初尝试使用float16 AMP和默认adam beta2导致损失峰值和最终NaN爆炸。将beta2
降低至0.97有所帮助,但损失/零样本曲线未按预期跟踪。切换到PyTorch nightly版本后,可以使用bfloat16 + AMP进行训练(与最近的H/14、g/14和G/14模型一样),beta2恢复至0.98,指标有所改善。
检查点区间 |
集群 |
GPU数量 |
节点数 |
GPU型号 |
本地批大小 |
样本/秒 |
样本/秒/GPU |
精度 |
adam beta2 |
1 - 2 |
Stability |
1024 |
128 |
A100 40GB |
80 |
37-40k |
36-39 |
amp + fp16 |
0.97 |
3 - 32 |
Stability |
512 |
64 |
A100 80GB |
160 |
27-32k |
52-62 |
amp + fp16 |
0.97 |
33 - 75 |
Booster |
1024 |
256 |
A100 40GB |
80 |
48k |
47 |
amp + fp16 |
0.97 |
76 - 165 |
Booster |
1024 |
256 |
A100 40GB |
80 |
51k |
50 |
amp + bf16 |
0.98 |
166 - 232 |
Stability |
320 |
40 |
A100 80GB |
256 |
18-19k |
56-59 |
amp + bf16 |
0.98 |
233 - 249 |
Booster |
1024 |
256 |
A100 40GB |
80 |
51k |
50 |
amp + bf16 |
0.98 |
250 - 256 |
Stability |
1024 |
128 |
A100 40GB |
80 |
27-31k |
26-30 |
amp + bf16 |
0.98 |
JUWELS Booster每个节点有4个A100 GPU,每个节点4个HDR-200 IB适配器(每GPU 200Gbit/秒)。Stability设置使用每个节点8个A100 GPU,每个节点400Gbit/秒 EFA网络(每GPU 50 GBit/秒)。在各种配置中观察到训练效率(每GPU吞吐量)的显著变化。两个集群上的1024 GPU配置特别容易崩溃(或很难用一组“好”GPU运行)。
128个8-GPU(40GB A100)节点的slurm srun命令行示例:
srun --cpu_bind=v --accel-bind=gn python -m training.main \
--save-frequency 1 \
--name "xxlarge-2b-81920-bf16" \
--resume "latest" \
--logs "/runs" \
--log-every-n-steps 50 \
--train-data="pipe:aws s3 cp s3://laion5b/laion2B-data/{000000..231349}.tar -" \
--train-num-samples 135646078 \
--dataset-type webdataset \
--warmup 10000 \
--batch-size=80 \
--epochs=256 \
--dataset-resampled \
--aug-c