模型:
laion/CLIP-convnext_xxlarge-laion2B-s34B-b82K-augreg
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 |
核心训练过程分为多个阶段,在大约2个月的时间内完成。核心训练的全局批量大小为81920。最后10%的训练是在95744的全局批量大小下进行的,LR和数据增强强度显著高于之前的训练。两者的结果进行了平均处理。更多细节请参考 训练详情 。
目标:
首次:
模型利用了以下内容:
模型在256x256的图像分辨率下进行训练。组合的图像+文本CLIP模型的参数量为12亿,GMAC为222,MActs为146。在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论文包括了对潜在下游影响的讨论,以提供此类分析的示例。此外,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配置在两个集群上特别容易崩溃(或者很难使用一组"好"的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,LR和数据增强强度略有增加。
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%之间。
最后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 Institute for Computing(NIC)在Jülich Supercomputing Centre(JSC)的GCS Supercomputer 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} }