[Papier] [Zitate] [Clip Colab] [Coca Colab]
Willkommen zu einer Open-Source-Implementierung von OpenAIs Clip (kontrastive Sprachbild vor der Training).
Mit dieser Codebasis haben wir mehrere Modelle in einer Vielzahl von Datenquellen und Berechnen von Budgets geschult, die von kleinen Experimenten bis hin zu größeren Läufen reichen, einschließlich Modelle, die auf Datensätzen wie Laion-400m, Laion-2B und Datacomp-1b geschult sind. Viele unserer Modelle und ihre Skalierungseigenschaften werden im Papier reproduzierbare Skalierungsgesetze für kontrastives Sprachbildlernen ausführlich untersucht. Einige der besten Modelle, die wir ausgebildet haben, und ihre Null-Shot-Imagnet-1K-Genauigkeit sind unten zusammen mit dem von OpenAI und anderen hochmodernen Open-Source-Alternativen ausgebildeten VIT-L-Modell (alle können über OpenClip geladen werden) gezeigt. Wir geben hier mehr Details zu unserer vollständigen Sammlung vorbereiteter Modelle und hier Null-Shot-Ergebnisse für 38 Datensätze.
| Modell | Trainingsdaten | Auflösung | Anzahl der beobachteten Proben | ImageNet Zero-Shot ACC. |
|---|---|---|---|---|
| Überzeugen | Laion-2B | 256px | 13b | 71,5% |
| Überzeugen | Laion-2B | 320px | 29b | 76,9% |
| Überzeugen-xxlarge | Laion-2B | 256px | 34b | 79,5% |
| Vit-B/32 | 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-g/14 | Laion-2B | 224px | 34b | 80,1% |
| Vit-L/14 (Originalclip) | WITZ | 224px | 13b | 75,5% |
| Vit-SO400m/14 (Siglip) | Webli | 224px | 45b | 82,0% |
| VIT-SO400M-14-SIGLIP-384 (SIGLIP) | Webli | 384px | 45b | 83,1% |
| Vit-H/14-Quickgelu (DFN) | DFN-5B | 224px | 39b | 83,4% |
| Vit-H-14-378-Quickgelu (DFN) | DFN-5B | 378px | 44b | 84,4% |
Modellkarten mit zusätzlichen modellspezifischen Details finden Sie im Umarmungs -Face -Hub unter dem Tag der OpenClip -Bibliothek: https://huggingface.co/models?library=open_clip.
Wenn Sie dieses Repository als nützlich empfanden, sollten Sie zitieren. Wir begrüßen jemanden, ein Problem einzureichen oder eine E -Mail zu senden, wenn Sie andere Anfragen oder Vorschläge haben.
Beachten Sie, dass Teile von src/open_clip/ Modellierung und Tokenizer -Code Anpassungen des offiziellen Repositorys von OpenAI sind.
| Bildnachweis: 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 () # model in train mode by default, impacts some models with BatchNorm or stochastic depth active
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 . cuda . amp . autocast ():
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 ) # prints: [[1., 0., 0.]]Siehe auch diesen [Clip Colab].
Um Milliarden von Einbettungen effizient zu berechnen, können Sie Clip-Retrival verwenden, die OpenClip-Unterstützung haben.
Wir bieten eine einfache Modellschnittstelle an, um sowohl vorgebaute als auch ungeübte Modelle zu instanziieren. Um zu sehen, welche vorbereiteten Modelle verfügbar sind, verwenden Sie den folgenden Code -Snippet. Weitere Details zu unseren vorbereiteten Modellen finden Sie hier.
> >> import open_clip
> >> open_clip . list_pretrained ()In dieser Tabelle finden Sie mehr über die Modelle, die wir unterstützen (z. B. Anzahl von Parametern, Flops).
Hinweis: Viele vorhandene Checkpoints verwenden die Quickgelu -Aktivierung aus den ursprünglichen OpenAI -Modellen. Diese Aktivierung ist in jüngsten Versionen von Pytorch tatsächlich weniger effizient als native fackel.nn.gelu. Die Modell Standardeinstellungen sind jetzt nn.gelu, sodass man Modelldefinitionen mit -quickgelu -Postfix für die vorgefertigten OpenClip -Gewichte verwenden sollte. Alle offenen Gewichte von OpenAI werden immer standardmäßig Quickgelu standhalten. Man kann auch die nicht -quickgelu -Modelldefinitionen mit vorbereiteten Gewichten unter Verwendung von Quickgelu verwenden, aber es wird einen Genauigkeitsabfall geben, der für eine Feinabstimmung wahrscheinlich für längere Läufe verschwindet. Zukünftige geschulte Modelle werden Nn.Gelu verwenden.
Modelle können mit open_clip.create_model_and_transforms geladen werden, wie im folgenden Beispiel gezeigt. Der Modellname und die entsprechenden pretrained Tasten sind mit den Ausgängen von open_clip.list_pretrained() kompatibel.
Das pretrained Argument akzeptiert auch lokale Pfade, z. B. /path/to/my/b32.pt . Auf diese Weise können Sie auch Kontrollpunkte aus dem Umarmungsface laden. Laden Sie dazu die Datei open_clip_pytorch_model.bin ( 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' ) Dieses Repository konzentriert sich auf Trainingsclip -Modelle. Um ein trainiertes Zero-Shot-Modell für eine nachgeschaltete Klassifizierungsaufgabe wie ImageNet zu optimieren, finden Sie in unserem anderen Repository: Wise-Ft. Das Wise-Fft-Repository enthält Code für unser Papier über eine robuste Feinabstimmung von Null-Shot-Modellen, bei denen wir eine Technik für die Feinabstimmung mit Null-Shot-Modellen einführen und gleichzeitig die Robustheit unter Verteilungsverschiebung bewahren.
Um Datensätze als WebDataset herunterzuladen, empfehlen wir Img2Dataset.
Siehe CC3M IMG2Dataset -Beispiel.
Zusätzlich zur Angabe der Trainingsdaten über CSV -Dateien, wie oben erwähnt, unterstützt unsere Codebasis auch WebDataset, das für Datensätze größerer Maßstäbe empfohlen wird. Das erwartete Format ist eine Reihe von .tar -Dateien. Jede dieser .tar -Dateien sollten für jedes Trainingsbeispiel zwei Dateien enthalten, eines für das Bild und eine für den entsprechenden Text. Beide Dateien sollten den gleichen Namen haben, aber unterschiedliche Erweiterungen. Zum Beispiel könnte shard_001.tar Dateien wie abc.jpg und abc.txt enthalten. Weitere Informationen zu webdataset finden Sie unter https://github.com/webdataset/Webdataset. Wir verwenden .tar -Dateien mit jeweils 1.000 Datenpunkten, die wir mit TARP erstellen.
Sie können den YFCC -Datensatz von Multimedia Commons herunterladen. Ähnlich wie bei OpenAI haben wir eine Untergruppe von YFCC verwendet, um die oben genannten Genauigkeitszahlen zu erreichen. Die Bilderindizes in dieser Untergruppe befinden sich im Clip -Repository von OpenAI.
Wir empfehlen Ihnen, zuerst eine virtuelle Umgebung mit:
python3 -m venv .env
source .env/bin/activate
pip install -U pip
Sie können dann OpenClip für das Training mit pip install 'open_clip_torch[training]' .
Wenn Sie Änderungen vornehmen möchten, um Code beizutragen, können Sie OpenClip klonen, und make install in OpenClip -Ordner (nach dem Erstellen eines Virtualenv).
Installieren Sie Pip Pytorch gemäß https://pytorch.org/get-started/locally/
Sie können ausführen make install-training , um TrainingsdEPs zu installieren
Der Test kann mit make install-test ausgeführt werden und dann make test
python -m pytest -x -s -v tests -k "training" um einen bestimmten Test durchzuführen
Ausführen von Regressionstests gegen eine bestimmte Git -Revision oder -Tag:
Testdaten generieren
python tests/util_test.py --model RN50 RN101 --save_model_list models.txt --git_revision 9d31b2ec4df6d8228f370ff20c8267ec6ba39383 WARNUNG : Dies wird auf Git aufgerufen und Ihren Arbeitsbaum verändert, aber nach der Erstellung der Daten in den aktuellen Zustand zurückgesetzt!
Ändern Sie Ihren Arbeitsbaum nicht, während die Testdaten auf diese Weise generiert werden.
Regressionstests durchführen
OPEN_CLIP_TEST_REG_MODELS=models.txt python -m pytest -x -s -v -m regression_testpython -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 Hinweis: imagenet-val ist der Weg zum Validierungssatz von ImagEnet für die Bewertung von Null-Shot, nicht für den Trainingssatz! Sie können dieses Argument entfernen, wenn Sie während des gesamten Trainings keine Null-Shot-Bewertung auf ImagEnet durchführen möchten. Beachten Sie, dass der val Unterordner enthalten sollte. Wenn dies nicht der Fall ist, verwenden Sie dieses Skript.
Dieser Code wurde Battle bis zu 1024 A100s getestet und bietet eine Vielzahl von Lösungen für verteiltes Training. Wir beinhalten die native Unterstützung für Slurm -Cluster.
Mit zunehmender Anzahl von Geräten, die zum Training verwendet werden, steigt auch die Raumkomplexität der Logit -Matrix. Mit einem naiven All-Sammel-Schema wird die Raumkomplexität O(n^2) sein. Stattdessen kann die Komplexität effektiv linear werden, wenn die Flaggen --gather-with-grad und --local-loss verwendet werden. Diese Veränderung führt zu Eins-zu-Eins-numerischen Ergebnissen als naive Methode.
Für größere Datensätze (z. B. LaION2B --train-num-samples 135646078 --dataset-resampled wir die --train-num-samples . Auf diese Weise können häufige Kontrollpunkte häufiger bewertet werden.
Jüngste Untersuchungen haben gezeigt, dass man die Hälfte auf drei Viertel der visuellen Token abgeben kann, was zu 2-3x-Trainingsgeschwindigkeiten ohne Genauigkeitsverlust führt.
Sie können dies auf Ihrer visuellen Transformatorkonfiguration mit dem Schlüssel patch_dropout festlegen.
In der Zeitung wurden auch am Ende ohne den Patch -Tropfen beendet. Sie können dies mit dem Befehlszeilenargument --force-patch-dropout 0.
OpenClip unterstützt die Verwendung mehrerer Datenquellen, indem sie verschiedene Datenpfade mit :: trennen. Zum Beispiel könnte man auf CC12M und Laion trainieren, kann man --train-data "/data/cc12m/cc12m-train-{0000..2175}.tar::/data/LAION-400M/{00000..41455}.tar" verwenden. Für diese Fälle wird die Verwendung --dataset-resampled empfohlen.
Nach Erwartung wird die Menge, in der das Modell eine Probe aus jeder Quelle zeigt, proportional zur Größe der Quelle. Wenn beispielsweise das Training auf einer Datenquelle mit einer Größe von 400 m und einer mit einer Größe von 10 m aus der ersten Quelle trainiert wird, werden die Proben aus der ersten Quelle in Erwartung mit höherer Wahrscheinlichkeit zu sehen.
Wir unterstützen auch die unterschiedliche Gewichtung der Datenquellen, indem wir die Flagge --train-data-upsampling-factors verwenden. Zum Beispiel entspricht die Verwendung --train-data-upsampling-factors=1::1 im obigen Szenario entspricht nicht die Verwendung des Flags, und --train-data-upsampling-factors=1::2 entspricht der zweimaligen Abtastung der zweiten Datenquelle. Wenn Sie mit der gleichen Häufigkeit aus Datenquellen probieren möchten, sollten die Upsampling -Faktoren umgekehrt proportional zu den Größen der Datenquellen sein. Wenn der Datensatz A beispielsweise 1000 Muster und Datensatz B enthält, können Sie 100 Proben enthält, und können Sie --train-data-upsampling-factors=0.001::0.01 (oder analog, --train-data-upsampling-factors=1::10 ).
Wir nutzen torchrun , um verteilte Jobs zu starten. Im Folgenden startet ein A -Job auf einem Knoten von 4 GPUs:
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/Das gleiche Skript oben funktioniert, solange Benutzer Informationen über die Anzahl der Knoten und den Hostknoten enthalten.
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/Dies ist wahrscheinlich die einfachste Lösung für die Verwendung. Das folgende Skript wurde verwendet, um unsere größten Modelle zu trainieren:
#! /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-gradpython -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 Das Training von Coca -Modellen wird aktiviert, indem eine Coca -Konfiguration unter Verwendung des Parameters --model des Trainingsskripts angegeben wird. Derzeit verfügbare Konfigurationen sind "coca_base", "coca_vit-b-32" und "coca_roberta-vit-b-32" (die Roberta als Textcodierer verwendet). Coca -Konfigurationen unterscheiden sich von Clip -Konfigurationen, da sie eine zusätzliche "multimodal_cfg" -Komponente haben, die Parameter für den multimodalen Textdecoder angibt. Hier ist ein Beispiel aus der coca_vit-B-32-Konfiguration:
"multimodal_cfg" : {
"context_length" : 76 ,
"vocab_size" : 49408 ,
"width" : 512 ,
"heads" : 8 ,
"layers" : 12 ,
"latent_dim" : 512 ,
"attn_pooler_heads" : 8
}Gutschrift an Lucidrains für den ersten Code, GPUCCE für die Anpassung des Codes an open_clip und IEJMAC für die Schulung der Modelle.
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>" , "" ))Siehe auch dieses [Coca Colab]
Um Coca auf MSCOCO zu optimieren, erstellen Sie zunächst den Datensatz. Ein Weg ist die Verwendung eines CSVDatasets und möglicherweise die einfachste Möglichkeit, dies zu tun, die Verwendung von clip_benchmark, die wiederum Pycocotools verwendet (die auch von selbst verwendet werden können).
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 "
)Dies sollte einen CSV-Datensatz erstellen, mit dem Sie mit Open_clip Coca mit Coca einstellen können
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 Dies ist eine python -m open_clip_train.main --help Einstellung, Open_clip verfügt über sehr Parameter, die festgelegt werden können. Die einzige relevante Veränderung im Vergleich zum Vorbild sind die beiden Argumente
--coca-contrastive-loss-weight 0
--coca-caption-loss-weight 1die das Modell nur die generative Seite trainieren lassen.
Wenn Sie verschiedene Sprachmodelle als Textcodierer für CLIP verwenden möchten, können Sie dies tun, indem Sie eine der Umarmungsgesichtsmodellkonfigurationen in src/open_clip/model_configs verwenden und die Parameter- --model und --hf-tokenizer-name Parameter übergeben. Derzeit unterstützen wir nur Roberta ("Test-Roberta" -Konfiguration), aber das Hinzufügen neuer Modelle sollte jedoch trivial sein. Sie können auch feststellen, wie viele Schichten vom Ende vom Ende nicht mit dem Parameter --lock-text-unlocked-layers unfrozen bleiben. Hier ist ein Beispielbefehl, um Clip mit der Roberta LM mit den letzten 10 Schichten zu trainieren: Unfrozen:
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 " Wenn Sie auf einer Maschine mit 8 GPUs ausgeführt werden, sollte der Befehl die folgende Trainingskurve für konzeptionelle Untertitel erstellen:
Detailliertere Kurven für konzeptionelle Untertitel werden unter /docs/clip_conceptual_captions.md angegeben.
Beim Training eines RN50 auf YFCC werden die gleichen Hyperparameter wie oben verwendet, mit Ausnahme von lr=5e-4 und epochs=32 .
Beachten Sie, dass zur Verwendung eines anderen Modells wie ViT-B/32 oder RN50x4 oder RN50x16 oder ViT-B/16 mit --model RN50x4 angegeben ist.
Für Tensorboard -Protokollierung rennen Sie:
tensorboard --logdir=logs/tensorboard/ --port=7777 Bei der Wandb -Protokollierung empfehlen wir, die step anstelle von Step zu betrachten, da die später in früheren Versionen dieser Codebasis nicht ordnungsgemäß eingestellt wurde. Für ältere Läufe mit Modellen, die vor #613 trainiert wurden, sollte die Step ignoriert werden. Für neuere Läufe sind die beiden Variablen nach dieser PR dieselbe.
Wir empfehlen https://github.com/laion-ai/clip_benchmark#how-to-use-Use für die systematische Bewertung auf 40 Datensätzen.
python -m open_clip_train.main
--val-data= " /path/to/validation_data.csv "
--model RN101
--pretrained /path/to/checkpoints/epoch_K.ptpython -m open_clip_train.main
--imagenet-val /path/to/imagenet/validation
--model ViT-B-32-quickgelu
--pretrained laion400m_e32 Sie können von einem vorgebrachten --distill-model und --distill-pretrained um das Modell anzugeben, von dem Sie möchten, dass Sie destillieren möchten. Zum Beispiel, um von OpenAI Vit-L/14-Verwendung zu destillieren --distill-model ViT-L-14 --distill-pretrained openai .
Um größere Chargen zu simulieren --accum-freq k . Wenn pro GPU-Stapelgröße, --batch-size , m ist, ist die effektive Chargengröße k * m * num_gpus .
Bei Erhöhung --accum-freq aus seinem Standard von 1 bleiben die Proben/s ungefähr konstant (die Stapelgröße verdoppelt, ebenso wie die Zeit pro Batch). Es wird empfohlen, andere Funktionen zu verwenden, um die Stapelgröße zu reduzieren --grad-checkpointing --local-loss --gather-with-grad z --accum-freq --accum-freq kann zusätzlich zu diesen Funktionen verwendet werden.
Anstelle von 1 Vorwärtspass pro Beispiel gibt es jetzt 2 Vorwärtspässe pro Beispiel. Die erste ist jedoch mit torch.no_grad .
Es sind zusätzliche GPU-Speicher erforderlich-die Funktionen und Daten aller m Stapel werden im Speicher gespeichert.
Es gibt auch m -Verlustberechnungen anstelle der üblichen 1.
Weitere Informationen finden Sie in Cui et al. (https://arxiv.org/abs/2112.09331) oder Pham et al. (https://arxiv.org/abs/2111.10050).
Wir haben Beta -Unterstützung für INT8 -Schulungen und Inferenz. Sie können das Int8-Training mit --use-bnb-linear SwitchBackLinearGlobal oder --use-bnb-linear SwitchBackLinearGlobalMemEfficient aktivieren. In der Bitsandbytes -Bibliothek finden Sie Definitionen für diese Ebenen. Für CLIP Vit-Huge sollte dies derzeit einer 10% igen Trainingsbeschläge ohne Genauigkeitsverlust entsprechen. Weitere Beschleunigungen kommen, wenn die Aufmerksamkeitsschicht wieder übertragen wird, so dass auch lineare Schichten dort ersetzt werden.
Siehe das Tutorial https://github.com/mlfoundations/open_clip/blob/main/tutorials/int8_tutorial.ipynb oder Papier.
Es ist immer möglich, direkt von einer Remotedatei, z. B. einer Datei in einem S3 -Eimer, wieder aufzunehmen. Einfach einstellen --resume s3://<path-to-checkpoint> . Dies funktioniert mit jedem Dateisystem, das von fsspec unterstützt wird.
Es ist auch möglich, open_clip -Modelle zu trainieren und sich kontinuierlich auf S3 zu unterstützen. Dies kann dazu beitragen, langsame lokale Dateisysteme zu vermeiden.
Sagen Sie, dass Ihr Knoten über einen lokalen SSD /scratch , einen S3-Bucket s3://<path-to-bucket> hat.
In diesem Fall setzen Sie --logs /scratch und --remote-sync s3://<path-to-bucket> . Anschließend synchronisiert ein Hintergrundprozess /scratch/<run-name> mit s3://<path-to-bucket>/<run-name> . Nach der Synchronisierung schläft der Hintergrundprozess für --remote-sync-frequency -Sekunden, die sich auf 5 Minuten standardmäßig stellt.
Es gibt auch experimentelle Unterstützung für die Synchronisierung mit anderen Remotedateisystemen, nicht nur mit S3. Geben Sie dazu --remote-sync-protocol fsspec . Dies ist jedoch derzeit sehr langsam und nicht empfohlen.
Um optional zu vermeiden, dass Sie bei Verwendung dieser Funktionen zu viele Checkpoints lokal speichern, können Sie --delete-previous-checkpoint verwenden, wodurch der vorherige Kontrollpunkt nach dem Speichern einer neuen gelöscht wird.
Hinweis: Wenn Sie diese Funktion mit --resume latest verwenden, gibt es einige Warnungen. Erstens wird die Verwendung mit --save-most-recent nicht unterstützt. Zweitens wird nur s3 unterstützt. Da die Synchronisierung im Hintergrund auftritt, ist es schließlich möglich, dass der neueste Kontrollpunkt möglicherweise nicht mit der Fernbedienung synchronisiert wird.
Das Modul open_clip.push_to_hf_hub enthält Helfer zum Drücken von Modellen /W Gewichten und Konfiguration in den HF -Hub.
Das Tool 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 aus der Befehlszeile ausgeführt werden.
Wir danken dem Gauß-Zentrum für Supercomputing EV (www.gauss-centre.eu) für die Finanzierung dieses Teils der Arbeit durch die Berechnung der Rechenzeit über das John von Neumann Institute for Computing (NIC) am GCS Supercomputer Juwels Booster am Jüloich Supercomputing Center (JSC).
Die derzeitige Entwicklung dieses Repositorys wird von Ross Wightman, Romain Beaumont, Cade Gordon und Vaishaal Shankar geleitet.
Die Originalversion dieses Repositorys stammt von einer Gruppe von Forschern an UW, Google, Stanford, Amazon, Columbia und Berkeley.
Gabriel Ilharco*, Mitchell Wortsman*, Nicholas Carlini, Rohan Taori, Achal Dave, Vaishaal Shankar, John Miller, Hongseok Namkoong, Hannaneh Hajishirzi, Ali Farhadi, Ludwig Schmidt
Besonderer Dank geht an Jong Wook Kim und Alec Radford für die Hilfe bei der Reproduktion von Clips!
Wenn Sie dieses Repository als nützlich empfanden, sollten Sie sich angeben:
@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 }
}