模型:
laion/CLIP-convnext_xxlarge-laion2B-s34B-b82K-augreg-soup
这是一系列在 LAION-2B(英语)上训练的 CLIP ConvNeXt-XXLarge 模型(一个自定义 timm ConvNeXt 大小)的模型卡,其中 LAION-2B 是其子集,使用数据集为 LAION-5B ,使用总计 OpenCLIP 的数据。
Model | Dataset | Resolution | AugReg | Top-1 ImageNet Zero-Shot (%) |
---|---|---|---|---|
12310321 | LAION-2B | 256x256 | RRC (0.33, 1.0), RE (0.35), SD (0.1) | 79.1 |
12311321 | LAION-2B | 256x256 | RRC (0.3, 1.0), RE (0.4), SD (0.1) | 79.3 |
12312321 | LAION-2B | 256x256 | N/A | 79.4 |
RRC = Random Resize Crop (crop pcts), RE = Random Erasing (prob), SD = Stochastic Depth (prob) -- image tower only |
训练过程在大约两个月的时间内分阶段进行。核心训练时的全局批量大小为 81920。最后约 10% 的训练以 95744 的全局批量大小进行,具有更高的学习速率和数据增强,两者融合在一起形成 'soup'。详细信息请参阅 训练详情 。
目标:
首次:
这些模型使用了以下内容:
这些模型使用 256x256 的图像分辨率进行训练。合并的图像 + 文本 CLIP 模型的大小为 1.2B 参数,222 GMAC 和 146 MActs。在 256x256 的分辨率下,ConvNext-XXLarge 在 FLOPS 和参数上略高于 ViT-H-14 CLIP 配置,而激活计数要低一些。它明显低于 g-14 和 G-14,但在能力上介于两者之间。
model | image_size | embed_dim | gmacs | macts | mparams | image_gmacs | image_macts | image_mparams | text_gmacs | text_macts | text_mparams |
---|---|---|---|---|---|---|---|---|---|---|---|
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 model card 所述,该模型是研究社区的研究成果。我们希望这个模型能够帮助研究人员更好地理解和探索零样本、任意图片分类。我们也希望它能用于跨学科研究,以研究此类模型的潜在影响。
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 个检查点间隔 1.356 亿个样本,总共训练过程中约见到了 340 亿个样本。
训练这个模型时遇到了许多模型数值稳定性和集群稳定性和性能方面的困难。最初尝试使用 float16 AMP 和默认的 Adam beta2 导致损失波动和最终的 NaN 溢出。将 beta2 减小到 0.97 有所帮助,但损失/零样本曲线的跟踪不符合预期。切换到 PyTorch 最新版本后,可以使用 bfloat16 + AMP 进行训练(与最近的 H/14、g/14 和 G/14 模型一样),beta2 返回到 0.98,指标得到改善。
Checkpoint Interval | Cluster | # GPUs | # Nodes | GPU | local BS | sample/s | sample/s/gpu | precision | 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/sec)。稳定性设置使用了每个节点 8 个 A100 GPU,每个节点有 400Gbit/sec 的 EFA 网络(每个 GPU 50 GBit/sec)。发现不同配置下训练效率(每个 GPU 的吞吐量)存在显著差异。两个集群中的 1024 个 GPU 配置尤其容易崩溃(或非常难以使用 'good' 的 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-cfg use_timm=True scale='(0.33, 1.0)' re_prob=0.35 \ --precision amp_bfloat16 \ --grad-clip-norm 5.0 \ --lr 1e-3 \ --workers=6 \ --beta2 0.98 \ --model "convnext_xxlarge" \ --seed 0 \ --ddp-static-graph \ --local-loss \ --gather-with-grad \ --grad-checkpointing \ --report-to "tensorboard"
最后 10% 的回滚使用了更高的全局批量大小 95744,学习速率更高,数据增强强度稍微增加。
Checkpoint Interval | Cluster | # GPUs | # Nodes | GPU | local BS | sample/s | sample/s/gpu | precision | adam beta2 |
---|---|---|---|---|---|---|---|---|---|
231 - 256 | stability | 1088 | 136 | A100 40GB | 88 | 32-35k | 29-32 | amp + bf16 | 0.98 |
136 个 8-GPU(40GB A100)节点的 slurm srun 命令行:
srun --cpu_bind=v --accel-bind=gn python -m training.main \ --save-frequency 1 \ --name "xxlarge-2b-81920-r-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=88 \ --epochs=256 \ --dataset-resampled \ --aug-cfg use_timm=True scale='(0.3, 1.0)' re_prob=0.4 \ --precision amp_bfloat16 \ --grad-clip-norm 5.0 \ --lr 2e-3 \ --workers=6 \ --beta2 0.98 \ --model "convnext_xxlarge" \ --seed 0 \ --ddp-static-graph \ --local-loss \ --gather-with-grad \ --grad-checkpointing \ --report-to "tensorboard"
评估使用 LAION CLIP Benchmark suite 中的代码进行。
使用了 VTAB+(包括 VTAB( https://arxiv.org/abs/1910.04867 )和额外的鲁棒性数据集)进行分类测试,使用了 COCO 和 Flickr 进行检索测试。
这些模型在 ImageNet-1k 上实现了 79.1% 到 79.4% 的零样本 top-1 准确率。
关于最后 10% 的详细情况:
已对更宽范围的数据集进行了一轮初始基准测试,可在 https://github.com/LAION-AI/CLIP_benchmark/blob/main/benchmark/results.ipynb 中查看。
感谢 stability.ai 和 Gauss Centre for Supercomputing e.V.( http://gauss-centre.eu )通过 John von Neumann 计算机中心(NIC)向我们提供计算时间来资助这部分工作。计算是在 Jülich 超级计算中心(JSC)的 JUWELS Booster 上完成的。
BibTeX 引用:
LAION-5B
@inproceedings{schuhmann2022laionb, title={{LAION}-5B: An open large-scale dataset for training next generation image-text models}, author={Christoph Schuhmann and Romain Beaumont and Richard Vencu and Cade W Gordon and Ross Wightman and Mehdi Cherti and Theo Coombes and Aarush Katta and Clayton Mullis and Mitchell Wortsman and Patrick Schramowski and Srivatsa R Kundurthy and Katherine Crowson and Ludwig Schmidt and Robert Kaczmarczyk and Jenia Jitsev}, booktitle={Thirty-sixth Conference on Neural Information Processing Systems Datasets and Benchmarks Track}, year={2022}, url={https://openreview.net/forum?id=M3Y74vmsMcY} }
OpenCLIP 软件
@software{ilharco_gabriel_2021_5143773, author = {Ilharco, Gabriel and Wortsman, Mitchell and Wightman, Ross and Gordon, Cade and Carlini, Nicholas and Taori, Rohan and Dave, Achal and Shankar, Vaishaal and Namkoong, Hongseok and Miller, John and Hajishirzi, Hannaneh and Farhadi, Ali and Schmidt, Ludwig}, title = {OpenCLIP}, month = jul, year = 2021, note = {If you use this software, please cite it as below.}, publisher = {Zenodo}, version = {0.1}, doi = {10.5281/zenodo.5143773}, url = {https://doi.org/10.5281/zenodo.5143773} }
OpenAI CLIP 论文
@inproceedings{Radford2021LearningTV, title={Learning Transferable Visual Models From Natural Language Supervision}, author={Alec Radford and Jong Wook Kim and Chris Hallacy and A. Ramesh and Gabriel Goh and Sandhini Agarwal and Girish Sastry and Amanda Askell and Pamela Mishkin and Jack Clark and Gretchen Krueger and Ilya Sutskever}, booktitle={ICML}, year={2021} }
@Article{liu2022convnet, author = {Zhuang Liu and Hanzi Mao and Chao-Yuan Wu and Christoph Feichtenhofer and Trevor Darrell and Saining Xie}, title = {A ConvNet for the 2020s}, journal = {Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition (CVPR)}, year = {2022}, }
@misc{rw2019timm, author = {Ross Wightman}, title = {PyTorch Image Models}, year = {2019}, publisher = {GitHub}, journal = {GitHub repository}, doi = {10.5281/zenodo.4414861}, howpublished = {\url{https://github.com/rwightman/pytorch-image-models}} }
@InProceedings{pmlr-v162-wortsman22a, title = {Model soups: averaging weights of multiple fine-tuned models improves accuracy without increasing inference time}, author = {Wortsman, Mitchell and Ilharco, Gabriel and Gadre, Samir Ya and Roelofs, Rebecca and Gontijo-Lopes, Raphael and Morcos, Ari S and Namkoong, Hongseok and Farhadi, Ali and Carmon, Yair and Kornblith, Simon and Schmidt, Ludwig}, booktitle = {Proceedings of the 39th International Conference on Machine Learning}, pages = {23965--23998}, year = {2022}, editor = {Chaudhuri, Kamalika and Jegelka, Stefanie and Song, Le and Szepesvari, Csaba and Niu, Gang and Sabato, Sivan}, volume = {162}, series = {Proceedings of Machine Learning Research}, month = {17--23 Jul}, publisher = {PMLR}, pdf = {https://proceedings.mlr.press/v162/wortsman22a/wortsman22a.pdf}, url = {https://proceedings.mlr.press/v162/wortsman22a.html} }