[종이] [인용] [Clip Colab] [Coca Colab]
OpenAI의 클립 (대비 언어 이미지 사전 훈련)의 오픈 소스 구현에 오신 것을 환영합니다.
이 코드베이스를 사용하여 Laion-400M, Laion-2B 및 DataComp-1B와 같은 데이터 세트에 대한 모델을 포함하여 소규모 실험에서부터 더 큰 실행에 이르기까지 다양한 데이터 소스 및 계산 예산에 대한 여러 모델을 교육했습니다. 우리의 많은 모델과 스케일링 속성은 대조적 인 언어 이미지 학습을위한 논문 재현 가능한 스케일링 법칙에서 자세히 연구됩니다. 우리가 훈련 한 최고의 모델과 Zero-Shot Imagenet-1K 정확도 중 일부는 OpenAI 및 기타 최첨단 오픈 소스 대안 (모두 OpenClip을 통해로드 할 수 있음)과 함께 VIT-L 모델과 함께 아래에 나와 있습니다. 우리는 여기에서 사전 예정된 모델의 전체 모음에 대한 자세한 내용과 38 개의 데이터 세트에 대한 제로 샷 결과를 제공합니다.
| 모델 | 교육 데이터 | 해결 | 본 샘플 | Imagenet Zero-Shot Acc. |
|---|---|---|---|---|
| Condxt-Base | laion-2b | 256px | 13b | 71.5% |
| 냉담한 | laion-2b | 320px | 29b | 76.9% |
| CONBNEXT-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-1/14 | laion-2b | 224px | 32b | 75.3% |
| VIT-H/14 | laion-2b | 224px | 32b | 78.0% |
| vit-1/14 | DataComp-1B | 224px | 13b | 79.2% |
| VIT-G/14 | laion-2b | 224px | 34b | 80.1% |
| Vit-L/14 (원본 클립) | 재치 | 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% |
추가 모델 특정 세부 정보가 포함 된 모델 카드는 OpenClip 라이브러리 태그 아래 Hugging Face Hub에서 찾을 수 있습니다 : https://huggingface.co/models?library=open_clip.
이 저장소가 유용하다고 생각되면 인용을 고려하십시오. 다른 요청이나 제안이있는 경우 문제를 제출하거나 이메일을 보내도록 환영합니다.
src/open_clip/ Modeling 및 Tokenizer 코드의 일부는 OpenAI의 공식 저장소의 적응입니다.
| 이미지 크레디트 : 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.]]이 [Clip Colab]도 참조하십시오.
수십억의 임베딩을 효율적으로 계산하려면 OpenClip 지원이있는 Clip-Retieval을 사용할 수 있습니다.
우리는 미리 훈련 된 모델과 훈련되지 않은 모델을 인스턴스화하기 위해 간단한 모델 인터페이스를 제공합니다. 사용 가능한 사기 모델을 보려면 다음 코드 스 니펫을 사용하십시오. 사전 예방 모델에 대한 자세한 내용은 여기에서 확인할 수 있습니다.
> >> import open_clip
> >> open_clip . list_pretrained ()이 테이블에서 우리가 지원하는 모델 (예 : 매개 변수 수, 플롭)에 대한 자세한 내용은 찾을 수 있습니다.
참고 : 기존의 많은 체크 포인트는 원래 OpenAI 모델의 QuickGelu 활성화를 사용합니다. 이 활성화는 실제로 Pytorch의 최근 버전에서 Native Torch.nn.gelu보다 덜 효율적입니다. 모델 기본값은 이제 nn.gelu이므로 OpenClip 전기 가중치에 대해 -quickgelu postfix와 함께 모델 정의를 사용해야합니다. 모든 Openai 사전 상환 중량은 항상 QuickGelu로 기본적으로 기본적입니다. Quickgelu를 사용하여 사전에 가중 된 무게로 비 -quickgelu 모델 정의를 사용할 수 있지만 더 긴 런을 위해 사라질 수있는 미세 조정을 위해 정확도 낙하가있을 것입니다. 향후 훈련 된 모델은 NN.Gelu를 사용할 것입니다.
아래 예제와 같이 open_clip.create_model_and_transforms 로 모델을로드 할 수 있습니다. 모델 이름과 해당 pretrained 키는 open_clip.list_pretrained() 의 출력과 호환됩니다.
pretrained 주장은 또한 /path/to/my/b32.pt 와 같은 로컬 경로를 수락합니다. 이 방법으로 포옹 페이스에서 검문소를로드 할 수도 있습니다. 그렇게하려면 open_clip_pytorch_model.bin 파일 pretrained=/path/to/open_clip_pytorch_model.bin 다운로드하십시오 (예 : https://huggingface.co/laion/clip-vit-l-14-datacomp.xl-s13b-b90k/tree/main).
# pretrained also accepts local paths
model , _ , preprocess = open_clip . create_model_and_transforms ( 'ViT-B-32' , pretrained = 'laion2b_s34b_b79k' ) 이 저장소는 클립 모델 교육에 중점을 둡니다. ImageNet과 같은 다운 스트림 분류 작업에서 훈련 된 제로 샷 모델을 미세 조정하려면 다른 저장소 : Wise-Ft를 참조하십시오. 현명한 리프트 리포지토리에는 제로 샷 모델의 강력한 미세 조정에 대한 논문에 대한 코드가 포함되어 있으며, 여기에는 분포 시프트 시계에 대한 견고성을 보존하면서 제로 샷 모델을 미세 조정하는 기술을 소개합니다.
데이터 세트를 WebDataset으로 다운로드하려면 img2dataset을 권장합니다.
CC3M IMG2DATASET 예제를 참조하십시오.
위에서 언급 한 것처럼 CSV 파일을 통해 교육 데이터를 지정하는 것 외에도 Codebase는 대규모 데이터 세트에 권장되는 WebDataset도 지원합니다. 예상 형식은 일련의 .tar 파일입니다. 이 .tar 파일은 각 교육 예제에 대해 두 개의 파일, 이미지와 해당 텍스트에 대해 두 개의 파일을 포함해야합니다. 두 파일 모두 이름이 같지만 확장자는 다른 것이 져야합니다. 예를 들어 shard_001.tar abc.jpg 및 abc.txt 와 같은 파일이 포함될 수 있습니다. https://github.com/webdataset/webdataset에서 webdataset 에 대해 자세히 알아볼 수 있습니다. 우리는 각각 1,000 개의 데이터 포인트가있는 .tar 파일을 사용하여 TARP를 사용하여 만듭니다.
멀티미디어 커먼즈에서 YFCC 데이터 세트를 다운로드 할 수 있습니다. OpenAI와 마찬가지로, 우리는 YFCC의 서브 세트를 사용하여 위에서 언급 한 정확도에 도달했습니다. 이 서브 세트의 이미지 지수는 OpenAI의 클립 저장소에 있습니다.
먼저 가상 환경을 만드는 것이 좋습니다.
python3 -m venv .env
source .env/bin/activate
pip install -U pip
그런 다음 pip install 'open_clip_torch[training]' 으로 교육을 위해 OpenClip을 설치할 수 있습니다.
코드를 기여하기 위해 변경하려면 OpenClip을 복제 한 다음 OpenClip 폴더에 make install 실행할 수 있습니다 (VirtualEnV를 작성한 후)
https://pytorch.org/get-started/locally/에 따라 Pip Pytorch를 설치하십시오.
make install-training 훈련 DEP를 설치하기 위해 실행할 수 있습니다
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_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 참고 : imagenet-val 교육 세트가 아니라 제로 샷 평가를위한 Imagenet의 검증 세트로가는 길입니다! 훈련 전반에 걸쳐 Imagenet에서 0 샷 평가를 수행하지 않으려면이 주장을 제거 할 수 있습니다. val 폴더에는 서브 폴더가 포함되어야합니다. 그렇지 않은 경우이 스크립트를 사용하십시오.
이 코드는 최대 1024 A100의 전투 테스트를 거쳤으며 분산 교육을위한 다양한 솔루션을 제공합니다. 우리는 Slurm 클러스터에 대한 기본 지원을 포함합니다.
훈련에 사용되는 장치의 수가 증가함에 따라 로이트 매트릭스의 공간 복잡성도 증가합니다. 순진한 모든 수집 체계를 사용하면 공간 복잡성은 O(n^2) 입니다. 대신, 깃발 --gather-with-grad 및 --local-loss 사용되면 복잡성이 효과적으로 선형이 될 수 있습니다. 이 변경은 순진한 방법으로서 일대일 수치 결과를 초래합니다.
더 큰 데이터 세트 (예 : LAION2B)의 경우- --train-num-samples 135646078 --train-num-samples 전체 에포크보다 낮은 값으로 --dataset-resampled 하는 것이 좋습니다. 이를 통해 자주 검사 점이 더 자주 평가할 수 있습니다.
최근의 연구에 따르면 시각적 토큰의 절반에서 3/4을 떨어 뜨릴 수 있으며 정확도 손실없이 최대 2-3 배의 훈련 속도를 초래할 수 있습니다.
Key patch_dropout 사용하여 Visual Transformer 구성에서이를 설정할 수 있습니다.
종이에서 그들은 또한 끝에 패치 드롭 아웃 없이도 결합되었습니다. 명령 줄 인수 --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 (또는 angogously, --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/이것은 활용하기에 가장 쉬운 솔루션 일 것입니다. 다음 스크립트는 가장 큰 모델을 훈련시키는 데 사용되었습니다.
#! /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 교육 스크립트의 --model 모델 매개 변수를 사용하여 Coca 구성을 지정하여 코카 모델 교육이 가능합니다. 현재 사용 가능한 구성은 "Coca_base", "Coca_vit-B-32"및 "Coca_roberta-vit-B-32"(Roberta를 텍스트 인코더로 사용)입니다. COCA 구성은 클립 구성과 다릅니다. 추가 "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, Code를 Open_Clip에 적응시키기위한 GPUCCE 및 모델 교육을위한 IEJMAC에 대한 크레딧.
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] 참조
Mscoco의 Coca를 미세 조정하려면 먼저 데이터 세트를 작성하십시오. 한 가지 방법은 CSVDATASET을 사용하는 것입니다. 아마도 가장 간단한 방법은 Clip_Benchmark를 사용하는 것입니다.
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 "
)이것은 Open_Clip으로 코카를 미세 조정하는 데 사용할 수있는 CSV 데이터 세트를 만들어야합니다.
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모델은 생성 측면 만 훈련시킵니다.
다른 언어 모델을 클립의 텍스트 인코더로 사용하려면 src/open_clip/model_configs 의 Hugging Face Model 구성 중 하나를 사용하여 Tokenizer를 각각 --model 모델 및 --hf-tokenizer-name 매개 변수로 전달하여 수행 할 수 있습니다. 현재 우리는 Roberta ( "Test-Roberta"구성) 만 지원하지만 새로운 모델을 추가하는 것은 사소한 일입니다. 또한 --lock-text-unlocked-layers 매개 변수로 Unrozen을 남겨두기 위해 끝까지 몇 개의 레이어를 결정할 수 있습니다. 다음은 지난 10 개의 레이어가없는 Roberta LM으로 클립을 트레이닝하는 예제 명령입니다.
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가있는 기계에서 실행되면 명령은 개념적 캡션에 대한 다음 교육 곡선을 생성해야합니다.
개념 캡션에 대한보다 자세한 곡선은 /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 로깅의 경우 나중에이 코드베이스의 이전 버전에서 올바르게 설정되지 않았으므로 Step 대신 step 변수를 보는 것이 좋습니다. #613 이전에 훈련 된 모델이있는 이전 실행의 경우 Step 변수를 무시해야합니다. 최신 실행의 경우 PR 이후 두 변수는 동일합니다.
40 개의 데이터 세트에 대한 체계적인 평가를 위해 https://github.com/laion-ai/clip_benchmark#how- to-use를 권장합니다.
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 --distill-model 사용하여 사전 훈련을 받고 --distill-pretrained 에서 증류 할 수 있습니다. 예를 들어, OpenAi VIT-1/14에서 증류하려면 --distill-model ViT-L-14 --distill-pretrained openai .
더 큰 배치를 시뮬레이션하려면 --accum-freq k 사용하십시오. GPU 배치 크기 --batch-size m 이면 유효 배치 크기는 k * m * num_gpus 가됩니다.
--accum-freq 기본값 1에서 증가시킬 때 샘플/s는 대략 일정하게 유지됩니다 (배치 크기는 배치 당 시간당과 같이 배치 크기가 두 배가됩니다). 다른 기능을 사용하여 --grad-checkpointing --local-loss --gather-with-grad --accum-freq 배치 크기를 줄이는 것이 좋습니다. --accum-freq 이러한 기능 외에도 사용할 수 있습니다.
예제 당 1 개의 순방향 패스 대신 이제 면당 2 개의 전진 패스가 있습니다. 그러나 첫 번째는 torch.no_grad 로 수행됩니다.
추가 GPU 메모리가 필요합니다. 모든 m 배치의 기능과 데이터는 메모리에 저장됩니다.
일반적인 1 대신 m 손실 계산도 있습니다.
자세한 내용은 Cui et al. (https://arxiv.org/abs/2112.09331) 또는 Pham et al. (https://arxiv.org/abs/2111.10050).
우리는 INT8 교육 및 추론에 대한 베타 지원이 있습니다. --use-bnb-linear SwitchBackLinearGlobal 또는 --use-bnb-linear SwitchBackLinearGlobalMemEfficient 사용하여 int8 교육을 활성화 할 수 있습니다. 이 레이어에 대한 정의는 Bitsandbytes 라이브러리를 참조하십시오. 클립 vit-huge의 경우 현재 정확도 손실없이 10%의 훈련 속도 업 속도에 해당해야합니다. 주의 레이어가 리팩토링되면 선형 레이어 맨도 교체 할 때 더 빠른 속도가 커집니다.
튜토리얼 https://github.com/mlfoundations/open_clip/blob/main/tutorials/int8_tutorial.ipynb 또는 paper를 참조하십시오.
S3 버킷의 원격 파일 (예 : 원격 파일)에서 직접 재개 할 수 있습니다. 방금 --resume s3://<path-to-checkpoint> 설정하십시오. 이것은 fsspec 에서 지원하는 모든 파일 시스템에서 작동합니다.
S3까지 지속적으로 백업하면서 open_clip 모델을 훈련 할 수도 있습니다. 이것은 로컬 파일 시스템이 느리게 피하는 데 도움이 될 수 있습니다.
노드에 로컬 SSD /scratch , S3 버킷 s3://<path-to-bucket> 있다고 가정하십시오.
이 경우 --logs /scratch 및 --remote-sync s3://<path-to-bucket> 설정하십시오. 그런 다음 백그라운드 프로세스는 s3://<path-to-bucket>/<run-name> 에 동기화 /scratch/<run-name> 동기화합니다. 동기화 후 배경 프로세스는 --remote-sync-frequency 초 동안 잠을 자며 기본값은 기본값 5 분입니다.
S3뿐만 아니라 다른 원격 파일 시스템으로 동기화하는 실험적 지원도 있습니다. 그렇게하려면 --remote-sync-protocol fsspec 지정하십시오. 그러나 이것은 현재 매우 느리고 권장되지 않습니다.
또한 이러한 기능을 사용할 때 너무 많은 체크 포인트를 로컬로 저장하지 않으려면 새로운 체크 포인트를 저장 한 후 이전 체크 포인트를 삭제하는 --delete-previous-checkpoint 사용할 수 있습니다.
참고 :이 기능을 --resume latest 과 함께 사용하는 경우 몇 가지 경고가 있습니다. 첫째, --save-most-recent 에서 사용하는 것과 함께 사용하는 것은 지원되지 않습니다. 둘째, s3 만 지원됩니다. 마지막으로, 동기화가 백그라운드에서 발생하므로 가장 최근의 체크 포인트가 리모컨으로 동기화되지 않을 수 있습니다.
모듈 open_clip.push_to_hf_hub 에는 모델 /w 가중치를 푸시위한 도우미가 포함되어 있으며 HF 허브에 구성됩니다.
이 도구는 명령 줄에서 실행할 수 있습니다 : 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
우리는 Jülich SuperComputing Center (JSC)의 GCS 슈퍼 컴퓨터 Juwels Booster의 John Von Neumann Computing Institute for Computing (NIC)을 통해 컴퓨팅 시간을 제공 함으로써이 작업의 자금을 제공 한 Gauss Center for SuperComputing EV (www.gauss-centre.eu)에 감사의 말을 전합니다.
이 저장소의 현재 개발은 Ross Wightman, Romain Beaumont, Cade Gordon 및 Vaishaal Shankar가 주도합니다.
이 저장소의 원래 버전은 UW, Google, Stanford, Amazon, Columbia 및 Berkeley의 연구원 그룹에서 나온 것입니다.
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에게 특별한 감사를드립니다!
이 저장소가 유용하다고 생각되면 다음을 고려하십시오.
@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 }
}