open_clip
open_clip 是一个开源实现的 CLIP(对比语言-图像预训练)模型库,旨在帮助用户通过统一的文本-图像对比学习框架,实现跨模态的内容理解和生成。它基于 OpenAI 提出的 CLIP 理论,提供了多种预训练模型和训练代码,支持从数百万到数十亿级规模的数据集进行模型训练与优化。
这一工具解决了传统图像识别和文本匹配任务中依赖大量标注数据的痛点,通过零样本迁移能力,使模型能直接理解未见过的类别。例如,用户无需手动标注"粉色独角兽"图片,模型即可通过文本描述完成识别。其核心价值在于降低了多模态 AI 的研发门槛,为研究人员和开发者提供可复现、可扩展的实验基础。
主要面向 AI 研究者、算法工程师和计算机视觉开发者,尤其适合需要处理图像检索、跨模态生成、视觉语义分析等场景的技术团队。技术亮点包括:提供覆盖不同精度和性能需求的 10+ 预训练模型(最高 ImageNet 零样本准确率达 85.4%),支持 LAION、DataComp 等主流数据集的灵活训练配置,并通过 PyTorch 实现了模块化代码架构。用户可通过 pip 安装,结合 Colab 示例快速上手,所有模型参数和训练细节均在 Hugging Face 平台公开。
使用场景
某电商技术团队正在紧急开发移动端“以图搜货”功能,希望用户上传图片即可精准匹配相似商品,但面临数据标注不足的困境。
没有 open_clip 时
- 必须投入大量人力为百万级商品库进行图文标注,项目启动周期被拉长数月。
- 从零训练对比学习模型收敛困难,且受限于自有数据规模,泛化能力严重不足。
- 若采用商业闭源 API,不仅单次调用成本高,还存在核心用户数据外泄风险。
- 现有方案固定了模型结构,无法根据服务器 GPU 性能动态调整推理速度与精度。
使用 open_clip 后
- 直接调用基于 LAION-2B 等大规模数据训练的预训练权重,实现零样本图像语义检索。
- 提供 ViT-L、ConvNeXt 等多种架构选择,可依据部署环境灵活平衡计算资源与准确率。
- 代码完全开源且支持本地部署,确保所有图片分析过程在内部服务器完成,杜绝隐私泄露。
- 通过 Hugging Face Hub 一键加载最新 SOTA 模型,显著提升了新品上架首周的搜索匹配质量。
open_clip 凭借强大的零样本能力和灵活的模型生态,帮助团队在零标注成本下快速实现了高精度的视觉搜索服务。
运行环境要求
- 未说明
未说明具体型号/显存,需 CUDA 支持(示例代码使用 autocast cuda)
未说明

快速开始
OpenCLIP
[Paper] [Citations] [Clip Colab] [Coca Colab]
欢迎使用 OpenAI 的 CLIP(Contrastive Language-Image Pre-training,对比语言 - 图像预训练)的开源实现。
使用此代码库,我们在各种数据源和计算资源预算下训练了多个模型,范围从 小规模实验 到更大的运行,包括在 LAION-400M、LAION-2B 和 DataComp-1B 等数据集上训练的模型。我们在论文 可复现的对比语言 - 图像学习缩放定律 中详细研究了许多模型及其缩放特性。我们训练的一些最佳模型及其在 ImageNet-1k 上的 zero-shot(零样本)准确率如下所示,还包括 OpenAI 训练的 ViT-L 模型以及其他最先进的开源替代方案(所有这些都可以通过 OpenCLIP 加载)。关于我们完整的预训练模型集合的更多详细信息请见 此处,38 个数据集的 zero-shot 结果请见 此处。
| 模型 | 训练数据 | 分辨率 | 查看到的样本数量 | ImageNet 零样本准确率 |
|---|---|---|---|---|
| ConvNext-Base | LAION-2B | 256px | 13B | 71.5% |
| ConvNext-Large | LAION-2B | 320px | 29B | 76.9% |
| ConvNext-XXLarge | LAION-2B | 256px | 34B | 79.5% |
| ViT-B-32-256 | DataComp-1B | 256px | 34B | 72.8% |
| ViT-B-16 | DataComp-1B | 224px | 13B | 73.5% |
| ViT-L-14 | LAION-2B | 224px | 32B | 75.3% |
| ViT-H-14 | LAION-2B | 224px | 32B | 78.0% |
| ViT-L-14 | DataComp-1B | 224px | 13B | 79.2% |
| ViT-bigG-14 | LAION-2B | 224px | 34B | 80.1% |
| ViT-L-14-quickgelu (原始 CLIP) | WIT | 224px | 13B | 75.5% |
| ViT-SO400M-14-SigLIP (SigLIP) | WebLI | 224px | 45B | 82.0% |
| ViT-L-14 (DFN) | DFN-2B | 224px | 39B | 82.2% |
| ViT-L-16-256 (SigLIP2) | WebLI (多语言) | 256px | 40B | 82.5% |
| ViT-SO400M-14-SigLIP-384 (SigLIP) | WebLI | 384px | 45B | 83.1% |
| ViT-H-14-quickgelu (DFN) | DFN-5B | 224px | 39B | 83.4% |
| PE-Core-L-14-336 (PE) | MetaCLIP-5.4B | 336px | 58B | 83.5% |
| ViT-SO400M-16-SigLIP2-384 (SigLIP2) | WebLI (多语言) | 384px | 40B | 84.1% |
| ViT-H-14-378-quickgelu (DFN) | DFN-5B | 378px | 44B | 84.4% |
| ViT-gopt-16-SigLIP2-384 (SigLIP2) | WebLI (多语言) | 384px | 40B | 85.0% |
| PE-Core-bigG-14-448 (PE) | MetaCLIP-5.4B | 448px | 86B | 85.4% |
包含其他模型特定详情的模型卡片可以在 Hugging Face Hub 上的 OpenCLIP 库标签下找到:https://huggingface.co/models?library=open_clip.
如果您发现此仓库有用,请考虑 引用。 如果您有其他请求或建议,欢迎提交问题或发送电子邮件。
请注意,src/open_clip/ 中的部分建模和 tokenizer(分词器)代码是 OpenAI 官方 repository 的改编版本。
方法
![]() |
|---|
| 图片来源:https://github.com/openai/CLIP |
用法
pip install open_clip_torch
import torch
from PIL import Image
import open_clip
model, _, preprocess = open_clip.create_model_and_transforms('ViT-B-32', pretrained='laion2b_s34b_b79k')
model.eval() # 默认情况下模型处于训练模式,会影响一些启用了 BatchNorm(批归一化)或 stochastic depth(随机深度)的模型
tokenizer = open_clip.get_tokenizer('ViT-B-32')
image = preprocess(Image.open("docs/CLIP.png")).unsqueeze(0)
text = tokenizer(["a diagram", "a dog", "a cat"])
with torch.no_grad(), torch.autocast("cuda"):
image_features = model.encode_image(image)
text_features = model.encode_text(text)
image_features /= image_features.norm(dim=-1, keepdim=True)
text_features /= text_features.norm(dim=-1, keepdim=True)
text_probs = (100.0 * image_features @ text_features.T).softmax(dim=-1)
print("Label probs:", text_probs) # 输出:[[1., 0., 0.]]
如果模型使用 timm 图像编码器(convnext, siglip, eva 等),请确保安装了最新版本的 timm。如果看到图像编码器的 'Unknown model' 错误,请升级 timm。
如果模型使用 transformers 分词器,请确保已安装 transformers。
另请参阅此 [Clip Colab]。
为了高效地计算数十亿个 embeddings(嵌入),您可以使用支持 openclip 的 clip-retrieval。
预训练模型
我们提供了一个简单的模型接口来实例化预训练和未训练的模型。 要查看哪些预训练模型可用,请使用以下代码片段。 关于我们预训练模型的更多详细信息可在 此处 找到。
>>> import open_clip
>>> open_clip.list_pretrained()
您可以在 此表 中找到关于我们支持的模型的更多信息(例如参数量、FLOPs)。
注意:许多现有的 checkpoints(检查点)使用来自原始 OpenAI 模型的 QuickGELU 激活函数。这种激活函数在最近版本的 PyTorch 中实际上不如原生的 torch.nn.GELU 高效。模型默认值现在是 nn.GELU,因此对于 OpenCLIP 预训练权重,应使用带有 -quickgelu 后缀的模型定义。所有 OpenAI 预训练权重将始终默认为 QuickGELU。也可以使用非 -quickgelu 模型定义配合使用 QuickGELU 的预训练权重,但这会导致准确率下降,对于微调来说,这种差异在长时间运行后可能会消失。
未来训练的模型将使用 nn.GELU。
加载模型
模型可以通过 open_clip.create_model_and_transforms 进行加载,如下例所示。模型名称和对应的 pretrained 参数(预训练)与 open_clip.list_pretrained() 的输出兼容。
pretrained 参数也接受本地路径,例如 /path/to/my/b32.pt。你也可以通过这种方式从 Hugging Face 加载检查点 (checkpoints)。为此,下载 open_clip_pytorch_model.bin 文件(例如,https://huggingface.co/laion/CLIP-ViT-L-14-DataComp.XL-s13B-b90K/tree/main),并使用 pretrained=/path/to/open_clip_pytorch_model.bin。
# pretrained also accepts local paths
model, _, preprocess = open_clip.create_model_and_transforms('ViT-B-32', pretrained='laion2b_s34b_b79k')
在分类任务上进行微调
本仓库专注于训练 CLIP 模型。若要针对下游分类任务(如 ImageNet)对 已训练好的 零样本 (zero-shot) 模型进行微调,请参见 我们的另一个仓库:WiSE-FT。WiSE-FT 仓库 包含我们关于 零样本模型的鲁棒微调 论文的代码,其中我们介绍了一种在分布偏移 (distribution shift) 下保持鲁棒性的同时微调零样本模型的技术。
数据
若要以下载 WebDataset 格式的数据集,我们推荐 img2dataset。
概念性描述 (Conceptual Captions)
YFCC 及其他数据集
除了上述通过 CSV 文件指定训练数据外,我们的代码库还支持 WebDataset,这推荐用于更大规模的数据集。预期格式是一系列 .tar 文件。每个 .tar 文件应为每个训练示例包含两个文件,一个用于图像,一个用于相应的文本。这两个文件应具有相同的名称但不同的扩展名。例如,shard_001.tar 可以包含 abc.jpg 和 abc.txt 等文件。您可以在 https://github.com/webdataset/webdataset 了解更多关于 webdataset 的信息。我们使用每个包含 1,000 个数据点的 .tar 文件,这些是使用 tarp 创建的。
您可以从 Multimedia Commons 下载 YFCC 数据集。与 OpenAI 类似,我们使用了 YFCC 的一个子集来达到上述准确率数值。该子集中图像的索引位于 OpenAI 的 CLIP 仓库 中。
训练 CLIP
安装
我们建议您首先创建一个虚拟环境 (virtual environment):
python3 -m venv .env
source .env/bin/activate
pip install -U pip
然后您可以使用 pip install 'open_clip_torch[training]' 安装用于训练的 openclip。
开发
如果您想进行修改以贡献代码,可以克隆 openclip,然后在 openclip 文件夹中运行 make install(创建虚拟环境后)。
按照 https://pytorch.org/get-started/locally/ 安装 pip 版本的 PyTorch。
您可以运行 make install-training 来安装训练依赖项。
测试
可以使用 make install-test 然后 make test 运行测试。
运行 python -m pytest -x -s -v tests -k "training" 以运行特定测试。
针对特定的 Git 修订版或标签运行回归测试:
生成测试数据
python tests/util_test.py --model RN50 RN101 --save_model_list models.txt --git_revision 9d31b2ec4df6d8228f370ff20c8267ec6ba39383警告:这将调用 git 并修改您的工作树,但在生成数据后会将其重置为当前状态!
在此方式生成测试数据时,请勿修改您的工作树。运行回归测试
OPEN_CLIP_TEST_REG_MODELS=models.txt python -m pytest -x -s -v -m regression_test
单进程运行代码示例:
python -m open_clip_train.main \
--save-frequency 1 \
--zeroshot-frequency 1 \
--report-to tensorboard \
--train-data="/path/to/train_data.csv" \
--val-data="/path/to/validation_data.csv" \
--csv-img-key filepath \
--csv-caption-key title \
--imagenet-val=/path/to/imagenet/root/val/ \
--warmup 10000 \
--batch-size=128 \
--lr=1e-3 \
--wd=0.1 \
--epochs=30 \
--workers=8 \
--model RN50
注意:imagenet-val 是用于零样本评估的 ImageNet 验证 集的路径,而不是训练集!
如果您不想在整个训练过程中对 ImageNet 执行零样本评估,可以删除此参数。请注意,val 文件夹应包含子文件夹。如果没有,请使用 此脚本。
多 GPU 及进阶
此代码已历经实战测试,支持高达 1024 张 A100 显卡,并提供多种分布式训练 (distributed training) 解决方案。我们包含对 SLURM 集群的原生支持。
随着用于训练的设备的增加,logit 矩阵的空间复杂度也会增加。使用朴素的 all-gather 方案,空间复杂度将为 O(n^2)。相反,如果使用 --gather-with-grad 和 --local-loss 标志,复杂度可能会变得有效线性。这种修改产生的数值结果与朴素方法一一对应。
轮次
对于更大的数据集(例如 Laion2B),我们建议将 --train-num-samples 设置为低于完整轮次的值,例如 --train-num-samples 135646078 对应 1/16 个轮次,并结合 --dataset-resampled 进行有放回采样。这允许拥有更频繁的 checkpoint 以便更频繁地进行评估。
Patch Dropout(补丁丢弃)
最近的研究 表明可以丢弃一半到四分之三的视觉 token,从而在不损失准确性的情况下实现最高 2-3 倍的训练速度提升。
你可以在视觉 Transformer 配置中使用键 patch_dropout 来设置此项。
在论文中,他们最后也在没有 patch dropout 的情况下进行了微调。你可以通过命令行参数 --force-patch-dropout 0 来实现这一点。
多个数据源
OpenCLIP 支持使用多个数据源,通过 :: 分隔不同的数据路径。例如,要在 CC12M 和 LAION 上训练,可以使用 --train-data "/data/cc12m/cc12m-train-{0000..2175}.tar::/data/LAION-400M/{00000..41455}.tar"。针对这些情况,建议使用 --dataset-resampled。
默认情况下,期望上模型看到每个源样本的次数与该源的大小成正比。例如,当在一个大小为 400M 的数据源和一个大小为 10M 的数据源上训练时,来自第一个源的样本在期望上被看到的概率是 40 倍。
我们还支持通过使用 --train-data-upsampling-factors 标志对数据源进行不同加权。例如,在上述场景中使用 --train-data-upsampling-factors=1::1 等同于不使用该标志,而 --train-data-upsampling-factors=1::2 等同于将第二个数据源上采样两次。如果你希望以相同的频率从数据源中采样,上采样因子应与数据源的大小成反比。例如,如果数据集 A 有 1000 个样本,数据集 B 有 100 个样本,你可以使用 --train-data-upsampling-factors=0.001::0.01(或类似地,--train-data-upsampling-factors=1::10)。
单节点
我们使用 torchrun 启动分布式作业。以下命令将在一个拥有 4 张 GPU 的节点上启动作业:
cd open_clip/src
torchrun --nproc_per_node 4 -m open_clip_train.main \
--train-data '/data/cc12m/cc12m-train-{0000..2175}.tar' \
--train-num-samples 10968539 \
--dataset-type webdataset \
--batch-size 320 \
--precision amp \
--workers 4 \
--imagenet-val /data/imagenet/validation/
多节点
只要用户包含有关节点数量和主节点的信息,上述脚本同样适用。
cd open_clip/src
torchrun --nproc_per_node=4 \
--rdzv_endpoint=$HOSTE_NODE_ADDR \
-m open_clip_train.main \
--train-data '/data/cc12m/cc12m-train-{0000..2175}.tar' \
--train-num-samples 10968539 \
--dataset-type webdataset \
--batch-size 320 \
--precision amp \
--workers 4 \
--imagenet-val /data/imagenet/validation/
SLURM
这可能是最容易利用的解决方案。以下脚本用于训练我们最大的模型:
#!/bin/bash -x
#SBATCH --nodes=32
#SBATCH --gres=gpu:4
#SBATCH --ntasks-per-node=4
#SBATCH --cpus-per-task=6
#SBATCH --wait-all-nodes=1
#SBATCH --job-name=open_clip
#SBATCH --account=ACCOUNT_NAME
#SBATCH --partition PARTITION_NAME
eval "$(/path/to/conda/bin/conda shell.bash hook)" # init conda
conda activate open_clip
export CUDA_VISIBLE_DEVICES=0,1,2,3
export MASTER_PORT=12802
master_addr=$(scontrol show hostnames "$SLURM_JOB_NODELIST" | head -n 1)
export MASTER_ADDR=$master_addr
cd /shared/open_clip
export PYTHONPATH="$PYTHONPATH:$PWD/src"
srun --cpu_bind=v --accel-bind=gn python -u src/open_clip_train/main.py \
--save-frequency 1 \
--report-to tensorboard \
--train-data="/data/LAION-400M/{00000..41455}.tar" \
--warmup 2000 \
--batch-size=256 \
--epochs=32 \
--workers=8 \
--model ViT-B-32 \
--name "ViT-B-32-Vanilla" \
--seed 0 \
--local-loss \
--gather-with-grad
从检查点 (checkpoint) 恢复:
python -m open_clip_train.main \
--train-data="/path/to/train_data.csv" \
--val-data="/path/to/validation_data.csv" \
--resume /path/to/checkpoints/epoch_K.pt
训练 CoCa:
通过使用训练脚本的 --model 参数指定 CoCa 配置,即可启用 CoCa 模型的训练。当前可用的配置包括 "coca_base", "coca_ViT-B-32" 和 "coca_roberta-ViT-B-32"(后者使用 RoBERTa 作为文本编码器)。CoCa 配置与 CLIP 配置不同,因为它们有一个额外的 "multimodal_cfg" 组件,用于指定多模态文本解码器的参数。以下是来自 coca_ViT-B-32 配置的一个示例:
"multimodal_cfg": {
"context_length": 76,
"vocab_size": 49408,
"width": 512,
"heads": 8,
"layers": 12,
"latent_dim": 512,
"attn_pooler_heads": 8
}
感谢 lucidrains 提供 初始代码,gpucce 将代码适配到 open_clip,以及 iejMac 训练模型。
使用 CoCa 生成文本
import open_clip
import torch
from PIL import Image
model, _, transform = open_clip.create_model_and_transforms(
model_name="coca_ViT-L-14",
pretrained="mscoco_finetuned_laion2B-s13B-b90k"
)
im = Image.open("cat.jpg").convert("RGB")
im = transform(im).unsqueeze(0)
with torch.no_grad(), torch.cuda.amp.autocast():
generated = model.generate(im)
print(open_clip.decode(generated[0]).split("<end_of_text>")[0].replace("<start_of_text>", ""))
另请参阅此 [Coca Colab]
CoCa (对比式图文生成模型) 微调
要在 MSCOCO (微软通用对象上下文数据集) 上微调 CoCa,首先需要创建数据集。一种方法是使用 CSV 数据集,也许最简单的方法是使用 CLIP_benchmark (CLIP 基准测试),它反过来使用了 pycocotools (COCO 工具包)(也可以单独使用)。
from clip_benchmark.datasets.builder import build_dataset
import pandas as pd
import os
root_path = "path/to/data/dir" # set this to smth meaningful
ds = build_dataset("mscoco_captions", root=root_path, split="train", task="captioning") # this downloads the dataset if it is not there already
coco = ds.coco
imgs = coco.loadImgs(coco.getImgIds())
future_df = {"filepath":[], "title":[]}
for img in imgs:
caps = coco.imgToAnns[img["id"]]
for cap in caps:
future_df["filepath"].append(img["file_name"])
future_df["title"].append(cap["caption"])
pd.DataFrame.from_dict(future_df).to_csv(
os.path.join(root_path, "train2014.csv"), index=False, sep="\t"
)
这将创建一个 CSV 数据集,可用于配合 open_clip (开源 CLIP) 微调 CoCa。
python -m open_clip_train.main \
--dataset-type "csv" \
--train-data "path/to/data/dir/train2014.csv" \
--warmup 1000 \
--batch-size 128 \
--lr 1e-5 \
--wd 0.1 \
--epochs 1 \
--workers 3 \
--model "coca_ViT-L-14" \
--report-to "wandb" \
--coca-contrastive-loss-weight 0 \
--coca-caption-loss-weight 1 \
--log-every-n-steps 100
这是一个通用设置,open_clip 有许多可设置的参数,运行 python -m open_clip_train.main --help 应该可以显示它们。与预训练相比,唯一相关的更改是两个参数:
--coca-contrastive-loss-weight 0
--coca-caption-loss-weight 1
这使得模型仅训练生成端。
使用预训练语言模型作为文本编码器进行训练:
如果您希望为 CLIP 使用不同的语言模型作为文本编码器,您可以使用 src/open_clip/model_configs 中的一个 Hugging Face (模型库) 模型配置,并将其分词器分别作为 --model 和 --hf-tokenizer-name 参数传入。目前我们仅支持 RoBERTa (优化的 BERT 模型)("test-roberta" 配置),但添加新模型应该是微不足道的。您还可以使用 --lock-text-unlocked-layers 参数决定从末尾保留多少层未冻结。以下是一个使用 RoBERTa 语言模型 (LM) 训练 CLIP 的示例命令,该模型最后 10 层未冻结:
python -m open_clip_train.main \
--train-data="pipe:aws s3 cp s3://s-mas/cc3m/{00000..00329}.tar -" \
--train-num-samples 3000000 \
--val-data="pipe:aws s3 cp s3://s-mas/cc3m/{00330..00331}.tar -" \
--val-num-samples 10000 \
--dataset-type webdataset \
--batch-size 256 \
--warmup 2000 \
--epochs 10 \
--lr 5e-4 \
--precision amp \
--workers 6 \
--model "roberta-ViT-B-32" \
--lock-text \
--lock-text-unlocked-layers 10 \
--name "10_unfrozen" \
--report-to "tensorboard" \
损失曲线
在拥有 8 个 GPU (图形处理器) 的机器上运行时,该命令应为 Conceptual Captions (概念性描述) 生成以下训练曲线:

Conceptual Captions 的更详细曲线位于 /docs/clip_conceptual_captions.md。
在 YFCC 上训练 RN50 时,使用与上述相同的超参数,除了 lr=5e-4 和 epochs=32。
注意,要使用其他模型,如 ViT-B/32 或 RN50x4 或 RN50x16 或 ViT-B/16,请使用 --model RN50x4 指定。
日志记录
对于 tensorboard (可视化日志工具) 日志记录,请运行:
tensorboard --logdir=logs/tensorboard/ --port=7777
对于 wandb (Weights & Biases) 日志记录,我们建议查看 step 变量而不是 Step,因为后者在该代码库的早期版本中未正确设置。对于在 https://github.com/mlfoundations/open_clip/pull/613 之前训练的模型的旧运行,应忽略 Step 变量。对于该 PR 之后的较新运行,这两个变量是相同的。
评估 / 零样本
我们推荐 https://github.com/LAION-AI/CLIP_benchmark#how-to-use 用于在 40 个数据集上的系统评估。
评估本地检查点:
python -m open_clip_train.main \
--val-data="/path/to/validation_data.csv" \
--model RN101 \
--pretrained /path/to/checkpoints/epoch_K.pt
评估托管的预训练检查点在 ImageNet (大规模视觉识别挑战) 零样本预测上的表现:
python -m open_clip_train.main \
--imagenet-val /path/to/imagenet/validation \
--model ViT-B-32-quickgelu \
--pretrained laion400m_e32
模型蒸馏
您可以使用 --distill-model 和 --distill-pretrained 来指定您想从中蒸馏的模型,从而进行蒸馏。
例如,要从 OpenAI ViT-L/14 蒸馏,请使用 --distill-model ViT-L-14 --distill-pretrained openai。
梯度累积
为了模拟更大的批次,请使用 --accum-freq k。如果每个 GPU 的批次大小 --batch-size 为 m,则有效批次大小将为 k * m * num_gpus。
当将 --accum-freq 从其默认值 1 增加时,样本/秒将保持大致恒定(批次大小将翻倍,每批次时间也将翻倍)。建议在增加 --accum-freq 之前使用其他功能来减小批次大小,例如 --grad-checkpointing --local-loss --gather-with-grad。--accum-freq 可以与这些功能一起使用。
不再是每个示例 1 次前向传播,现在每个示例有 2 次前向传播。但是,第一次是在 torch.no_grad 下完成的。
需要一些额外的 GPU 内存 --- 所有 m 个批次的特征和数据都存储在内存中。
还有 m 次损失计算,而不是通常的 1 次。
更多信息请参阅 Cui et al. (https://arxiv.org/abs/2112.09331) 或 Pham et al. (https://arxiv.org/abs/2111.10050)。
Int8 (8 位整数) 支持
我们提供 int8 训练和推理的测试版支持。
您可以使用 --use-bnb-linear SwitchBackLinearGlobal 或 --use-bnb-linear SwitchBackLinearGlobalMemEfficient 启用 int8 训练。
有关这些层的定义,请参阅 bitsandbytes 库。
对于 CLIP VIT-Huge,这目前应对应 10% 的训练加速且无精度损失。
当注意力层被重构以便线性层也可以在那里替换时,将会有更多的加速。
请参阅教程 https://github.com/mlfoundations/open_clip/blob/main/tutorials/int8_tutorial.ipynb 或 论文。
支持远程加载/训练
始终可以直接从远程文件恢复,例如 S3(对象存储服务)存储桶中的文件。只需设置 --resume s3://<path-to-checkpoint>。
这将适用于 fsspec(Python 文件系统抽象层)支持的任何文件系统。
也可以在持续备份到 S3 的同时训练 open_clip(OpenCLIP 模型库)模型。这有助于避免缓慢的本地文件系统。
假设您的节点拥有一个本地 SSD(固态硬盘)/scratch,以及一个 S3 存储桶 s3://<path-to-bucket>。
在这种情况下,设置 --logs /scratch 和 --remote-sync s3://<path-to-bucket>。然后,后台进程会将 /scratch/<run-name> 同步到 s3://<path-to-bucket>/<run-name>。同步后,后台进程将休眠 --remote-sync-frequency 秒,默认为 5 分钟。
此外,还有实验性支持以同步到其他远程文件系统,而不仅仅是 S3。为此,请指定 --remote-sync-protocol fsspec。然而,目前这非常慢,不推荐使用。
另外,为了在使用这些功能时选择性地避免在本地保存太多检查点,您可以使用 --delete-previous-checkpoint,它会在保存新检查点后删除前一个检查点。
注意:如果您使用 --resume latest 配合此功能,有几个警告。首先,不支持与 --save-most-recent 一起使用。其次,仅支持 s3。最后,由于同步是在后台进行的,最新的检查点可能尚未完成同步到远程端。
推送模型到 Hugging Face Hub
模块 open_clip.push_to_hf_hub 包含用于将模型及其权重和配置推送到 Hugging Face Hub(模型托管平台)的辅助工具。
该工具可以从命令行运行,例如:
python -m open_clip.push_to_hf_hub --model convnext_large_d_320 --pretrained /train/checkpoints/epoch_12.pt --repo-id laion/CLIP-convnext_large_d_320.laion2B-s29B-b131K-ft
致谢
我们要衷心感谢 Gauss 超级计算中心协会 (www.gauss-centre.eu),通过于利希超级计算中心 (JSC) 的 GCS 超级计算机 JUWELS Booster 上的冯·诺依曼计算研究所 (NIC) 提供计算时间,资助了本部分工作。
团队
当前仓库的开发由 Ross Wightman、Romain Beaumont、Cade Gordon 和 Vaishaal Shankar 领导。
本仓库的原始版本来自华盛顿大学、Google、斯坦福大学、亚马逊、哥伦比亚大学和伯克利大学的一组研究人员。
Gabriel Ilharco*、Mitchell Wortsman*、Nicholas Carlini、Rohan Taori、Achal Dave、Vaishaal Shankar、John Miller、Hongseok Namkoong、Hannaneh Hajishirzi、Ali Farhadi、Ludwig Schmidt
特别感谢 Jong Wook Kim 和 Alec Radford 在复现 CLIP 方面提供的帮助!
引用
如果您发现此仓库有用,请考虑引用:
@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}
}
@inproceedings{cherti2023reproducible,
title={Reproducible scaling laws for contrastive language-image learning},
author={Cherti, Mehdi and Beaumont, Romain and Wightman, Ross and Wortsman, Mitchell and Ilharco, Gabriel and Gordon, Cade and Schuhmann, Christoph and Schmidt, Ludwig and Jitsev, Jenia},
booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
pages={2818--2829},
year={2023}
}
@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}
}
@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}
}
版本历史
v3.3.02026/02/27v3.2.02025/09/21v3.1.02025/08/06v3.0.02025/07/23v2.32.02025/04/05v2.31.02025/02/23v2.30.02025/01/04v2.29.02024/10/28v2.28.02024/10/21v2.27.12024/10/17v2.27.02024/10/15v2.26.12024/07/04v2.26.02024/07/04v2.24.02024/01/08v2.23.02023/10/24v2.22.02023/10/06v2.20.02023/05/15v2.19.02023/05/04v2.18.02023/04/26v2.17.22023/04/26常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。
