使用OpenCLIP ( https://github.com/mlfoundations/open_clip )训练了一种使用LAION-2B英语子集的CLIP ViT L/14模型 ( https://laion.ai/blog/laion-5b/ )。
模型训练(babysitting)由Ross Wightman在 JUWELS Booster 台超级计算机上完成。请参阅下面的鸣谢部分。
此模型旨在作为研究社区的研究成果。我们希望这个模型能帮助研究人员更好地理解和探索零样本、任意图像分类。我们还希望它能用于研究跨学科的研究,探讨这种模型的潜在影响。
OpenAI CLIP论文中提供了对潜在下游影响的讨论,作为此类分析的一个示例。此外,LAION-5B博客 ( https://laion.ai/blog/laion-5b/ ) 和即将发表的论文还包括与训练数据集相关的其他讨论。
零样本图像分类、图像和文本检索等。
图像分类和其他图像任务微调、线性探测图像分类、图像生成引导和条件等。
根据OpenAI模型的规定,目前不支持模型的部署用例,无论是商业用途还是非商业用途。不建议在未经过对特定固定类别分类系统进行透彻领域测试的情况下,使用模型进行图像搜索等受限环境下的应用。这是因为我们的安全评估表明,尤其是考虑到CLIP在不同类别分类系统下性能的可变性,高度需要任务特定测试。当前任何用例的未测试和不受限制的模型部署可能具有潜在的危险性。
无论模型的性能如何,任何属于监控和面部识别领域的用例都永远不在范围内。这是因为目前在此类任务中使用人工智能可能过早,因为缺乏测试准则和确保其公平使用的检查机制。
由于该模型并非专门训练和评估其他语言(除了英语)的用途应限制在英语语言使用案例中。
在以上声明之外,训练这些模型时使用的LAION-5B数据集还有其他考虑因素,请参阅下文。
此模型使用了LAION-5B的20亿个样本的英语子集进行训练 ( https://laion.ai/blog/laion-5b/ )。
重要提示:数据集创建的动机是为了使大规模多模态模型训练和处理未经筛选的、大规模数据集从公开可用的互联网上收集成为民主化的研究和实验的研究目的。请注意,这个大规模数据集是未经筛选的。请谨慎使用演示链接,因为不经筛选的数据集可能包含让人强烈不适和不适合观看的内容。因此,我们建议使用安全标签筛选样本以提取“安全”子集(使用我们构建的经过自定义训练的NSFW分类器)。虽然这在查看时大大减少了遇到潜在有害内容的机会,但我们不能完全排除安全模式下仍然存在有害内容的可能性,所以警告仍然适用。我们认为,向广大的研究和其他感兴趣的社区提供数据集将有助于对与训练大规模模型相关的好处进行透明的调查,以及与使用封闭大规模数据集(仅限于小社区)进行工作时可能未报道或未注意到的陷阱和危险。我们公开提供数据集的目的是鼓励对此类大规模模型的一般特性和安全性进行基础研究,因此不建议将其用于创建可直接投入使用的实际产品,因为这方面的基础研究仍在进行中。
使用384台A100 GPU进行训练,采用200M个样本的“虚拟”周期训练,其中数据集碎片以替换方式抽取。模型进行了160个“虚拟”周期的训练,总共处理了320B个样本。
初始的68个周期采用float16 AMP、全局批量大小为79K (每个GPU 208) 进行训练。最初的训练直到第75个周期,损失值急剧上升,训练失败并出现NaN。
Romain Beaumont同时在Stability集群上训练H/14和g/14模型,遇到类似的不稳定性问题。我们试图采用以下方式进行重启,
上述所有方法都没有成功。大多数方法在与原始方法相同的时期内失效,唯一例外的是对架构进行修改。
最后,在第69个周期重新启动并使用float32精度解决了所有不稳定性问题,然后全局批量大小为86k (每个GPU 224)。在A100 GPU上,一旦在PyTorch中启用了tf32矩阵乘法,float32的吞吐量几乎不受影响。比float16 AMP略慢约10%。Romain同样改变了精度,但最终使用bfloat16 AMP解决了问题。
#SBATCH --nodes=96 #SBATCH --gres=gpu:4 #SBATCH --ntasks-per-node=4 #SBATCH --cpus-per-task=6 #SBATCH --wait-all-nodes=1 #SBATCH --job-name=open_clip_laion2b # load low-level libraries ml purge source /conda/bin/activate pytorch-112 export NCCL_ASYNC_ERROR_HANDLING=1 export CUDA_VISIBLE_DEVICES=0,1,2,3 export MASTER_PORT=12802 ### get the first node name as master address - customized for vgg slurm ### e.g. master(gnodee[2-5],gnoded1) == gnodee2 echo "NODELIST="${SLURM_NODELIST} master_addr=$(scontrol show hostnames "$SLURM_JOB_NODELIST" | head -n 1) export MASTER_ADDR=$master_addr"i" echo "MASTER_ADDR="$MASTER_ADDR cd /home/me/open_clip export PYTHONPATH="$PYTHONPATH:$PWD/src" srun --cpu_bind=none,v --accel-bind=gn python -u src/training/main.py \ --save-frequency 1 \ --zeroshot-frequency 1 \ --train-data="/data/laion2B-en/{00000..23295}.tar" \ --train-num-samples=200000000 \ --warmup 10000 \ --lr "1e-3" \ --batch-size=224 \ --epochs=160 \ --workers=6 \ --model ViT-L-14 \ --name "L14-laion2B" \ --report-to "tensorboard" \ --seed 0 \ --precision 'fp32' \ --ddp-static-graph \ --local-loss \ --dataset-resampled \ --gather-with-grad \ --grad-checkpointing
使用 LAION CLIP Benchmark suite 中的代码进行评估。
使用VTAB+(VTAB ( https://arxiv.org/abs/1910.04867 )与额外的强健性数据集相结合)进行分类测试,使用COCO和Flickr进行检索。
TODO-更多细节
该模型在ImageNet-1k上实现了75.3的零样本Top-1准确率。
已对多个数据集进行了初始的基准测试,目前可在 https://github.com/LAION-AI/CLIP_benchmark/blob/main/benchmark/results.ipynb 上查看。
TODO-为此模型的指标创建表格。
感谢高斯超级计算中心 ( http://gauss-centre.eu )通过John von Neumann Institute为本工作提供计算时间,该计算时间是在Jülich超级计算中心 (JSC)的JUWELS Booster上提供的。
BibTeX:
除即将发布的LAION-5B论文外,请引用:
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} }
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} }
使用下面的代码开始使用模型。
** TODO **-Hugging Face transformers、OpenCLIP和timm的快速入门代码片段