[ورقة] [اقتباسات] [مقطع كولاب] [كوكا كولاب]
مرحبًا بك في تطبيق مفتوح المصدر لمقطع Openai (صورة اللغة التباين قبل التدريب).
باستخدام قاعدة البيانات هذه ، قمنا بتدريب العديد من النماذج على مجموعة متنوعة من مصادر البيانات وحساب الميزانيات ، بدءًا من تجارب صغيرة على نطاق واسع إلى أشواط أكبر بما في ذلك نماذج مدربة على مجموعات البيانات مثل Laion-400M و Laion-2B و DataComp-1B. تتم دراسة العديد من نماذجنا وخصائص التحجيم بالتفصيل في قوانين التحجيم القابلة للتكرار الورقية لتعلم صورة اللغة المتناقضة. فيما يلي بعض من أفضل النماذج التي قمنا بتدريبها ودقة ImageNet-1K الخاصة بهم صفراً ، إلى جانب نموذج VIT-L الذي تم تدريبه بواسطة Openai وغيرها من بدائل المصادر الحديثة على أحدث طراز (يمكن تحميل كل شيء عبر OpenClip). نحن نقدم المزيد من التفاصيل حول مجموعتنا الكاملة من النماذج المسبقة هنا ، ونتائج الرصاص الصفري لـ 38 مجموعة بيانات هنا.
| نموذج | بيانات التدريب | دقة | # من العينات التي شوهدت | ImageNet Zero-Shot ACC. |
|---|---|---|---|---|
| القاعدة المقنعة | لاون -2 ب | 256 بكسل | 13 ب | 71.5 ٪ |
| invnext-large | لاون -2 ب | 320 بكسل | 29B | 76.9 ٪ |
| Convnext-xxlarge | لاون -2 ب | 256 بكسل | 34 ب | 79.5 ٪ |
| VIT-B/32 | DataComp-1B | 256 بكسل | 34 ب | 72.8 ٪ |
| VIT-B/16 | DataComp-1B | 224px | 13 ب | 73.5 ٪ |
| VIT-L/14 | لاون -2 ب | 224px | 32 ب | 75.3 ٪ |
| VIT-H/14 | لاون -2 ب | 224px | 32 ب | 78.0 ٪ |
| VIT-L/14 | DataComp-1B | 224px | 13 ب | 79.2 ٪ |
| VIT-G/14 | لاون -2 ب | 224px | 34 ب | 80.1 ٪ |
| VIT-L/14 (مقطع أصلي) | ذكاء | 224px | 13 ب | 75.5 ٪ |
| VIT-SO400M/14 (Siglip) | Webli | 224px | 45 ب | 82.0 ٪ |
| VIT-SO400M-14-SIGLIP-384 (Siglip) | Webli | 384 بكسل | 45 ب | 83.1 ٪ |
| VIT-H/14-KICKGELU (DFN) | DFN-5B | 224px | 39 ب | 83.4 ٪ |
| VIT-H-14-378-QICKGELU (DFN) | DFN-5B | 378 بكسل | 44 ب | 84.4 ٪ |
يمكن الاطلاع على بطاقات النموذج ذات التفاصيل الإضافية للموديل على محور الوجه المعانقة ضمن علامة مكتبة OpenClip: https://huggingface.co/Models؟library=open_clip.
إذا وجدت هذا المستودع مفيدًا ، فيرجى التفكير في الإشارة. نرحب بأي شخص بتقديم مشكلة أو إرسال بريد إلكتروني إذا كان لديك أي طلبات أو اقتراحات أخرى.
لاحظ أن أجزاء من src/open_clip/ النمذجة ورمز الرمز المميز هي تعديلات على مستودع 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-Recrival التي لديها دعم openclip.
نحن نقدم واجهة نموذجية بسيطة لتثبيت كل من النماذج التي تم تدريبها مسبقًا وغير مدربين. لمعرفة النماذج المسبقة المتوفرة ، استخدم مقتطف الكود التالي. مزيد من التفاصيل حول نماذجنا المسبقة متوفرة هنا.
> >> import open_clip
> >> open_clip . list_pretrained ()يمكنك العثور على المزيد حول النماذج التي ندعمها (على سبيل المثال عدد المعلمات والتقلب) في هذا الجدول.
ملاحظة: تستخدم العديد من نقاط التفتيش الحالية تنشيط QuickGelu من نماذج Openai الأصلية. هذا التنشيط هو في الواقع أقل كفاءة من Torch.nn.gelu الأصلي في الإصدارات الحديثة من Pytorch. أصبحت عمليات الافتراضات النموذجية الآن nn.gelu ، لذلك ينبغي للمرء استخدام تعريفات النموذج مع -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 MY/B32.PT. يمكنك أيضًا تحميل نقاط التفتيش من Luggingface بهذه الطريقة. للقيام بذلك ، قم بتنزيل ملف open_clip_pytorch_model.bin (على سبيل المثال ، https://huggingface.co/laion/clip-vit-l-4-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' ) يركز هذا المستودع على نماذج مقطع التدريب. لضبط نموذج صفري مدرب على مهمة تصنيف المصب مثل ImageNet ، يرجى الاطلاع على مستودعنا الآخر: Wise-FT. يحتوي المستودع الحكيم على رمز لورقةنا على صقل قوي لنماذج الطلقة الصفرية ، حيث نقدم تقنية لنماذج صفر صفر مع الحفاظ على المتانة تحت تحول التوزيع.
لتنزيل مجموعات البيانات مثل webdataset ، نوصي IMG2DatAset.
انظر مثال CC3M IMG2DATASET.
بالإضافة إلى تحديد بيانات التدريب عبر ملفات CSV كما هو مذكور أعلاه ، تدعم CodeBase أيضًا WebDataset ، والتي يوصى بها لمجموعات البيانات على نطاق واسع. التنسيق المتوقع هو سلسلة من ملفات .tar . يجب أن يحتوي كل ملف من ملفات .tar على ملفين لكل مثال تدريبي ، واحد للصورة والآخر للنص المقابل. يجب أن يكون كلا الملفين نفس الاسم ولكن ملحقات مختلفة. على سبيل المثال ، يمكن أن يحتوي shard_001.tar على ملفات مثل abc.jpg و abc.txt . يمكنك معرفة المزيد حول webdataset على https://github.com/webdataset/webdataset. نستخدم ملفات .tar مع 1000 نقطة بيانات لكل منها ، والتي نقوم بإنشائها باستخدام TARP.
يمكنك تنزيل مجموعة بيانات YFCC من Multimedia Commons. على غرار Openai ، استخدمنا مجموعة فرعية من YFCC للوصول إلى أرقام الدقة المذكورة أعلاه. توجد مؤشرات الصور في هذه المجموعة الفرعية في مستودع كليب Openai.
ننصحك أولاً بإنشاء بيئة افتراضية مع:
python3 -m venv .env
source .env/bin/activate
pip install -U pip
يمكنك بعد ذلك تثبيت OpenClip للتدريب مع pip install 'open_clip_torch[training]' .
إذا كنت ترغب في إجراء تغييرات للمساهمة ، فيمكنك استنساخ OpenClip ، ثم قم بتشغيل make install في مجلد OpenClip (بعد إنشاء VirtualEnv)
تثبيت pip pytorch حسب https://pytorch.org/get-started/locally/
يمكنك تشغيل make install-training لتثبيت DEPS التدريب
يمكن تشغيل الاختبار باستخدام 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 طوال التدريب. لاحظ أن مجلد val يجب أن يحتوي على المجلدات الفرعية. إذا لم يفعل ذلك ، يرجى استخدام هذا البرنامج النصي.
تم اختبار هذا الرمز حتى 1024 A100S ويقدم مجموعة متنوعة من الحلول للتدريب الموزع. نحن ندرج الدعم الأصلي لمجموعات slurm.
مع زيادة عدد الأجهزة المستخدمة في التدريب ، يزيد تعقيد الفضاء لمصفوفة Logit. باستخدام مخطط ساذج من جميع الجهات ، سيكون تعقيد الفضاء O(n^2) . بدلاً من ذلك ، قد يصبح التعقيد خطيًا فعليًا إذا تم استخدام الأعلام --gather-with-grad --local-loss . ينتج عن هذا التغيير نتائج رقمية فردية كطريقة ساذجة.
بالنسبة لمجموعات البيانات الأكبر (على سبيل المثال LAION2B) ، نوصي بإعدادات- --train-num-samples بقيمة أقل من الحقبة الكاملة ، على سبيل المثال --train-num-samples 135646078 إلى 1/16 من الحقبة بالتزامن مع- --dataset-resampled لإجراء أخذ العينات مع البديل. هذا يسمح بوجود نقاط تفتيش متكررة لتقييمها في كثير من الأحيان.
أظهرت الأبحاث الحديثة أنه يمكن للمرء أن يتسرب إلى نصف أرباع الرموز المرئية ، مما يؤدي إلى سرعات تدريب تصل إلى 2-3X دون فقدان الدقة.
يمكنك تعيين هذا على تكوين المحولات المرئية الخاصة بك مع مفتاح 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 لهذه الحالات.
بشكل افتراضي ، عند التوقع ، سيشاهد النموذج عينة من كل مصدر يتناسب مع حجم المصدر. على سبيل المثال ، عند التدريب على مصدر بيانات واحد بحجم 400 متر وواحد بحجم 10 أمتار ، تكون العينات من المصدر الأول أكثر عرضة لمشاهدة 40x في التوقع.
نحن ندعم أيضًا ترجيحًا مختلفًا لمصادر البيانات ، باستخدام علامة --train-data-upsampling-factors . على سبيل المثال ، فإن استخدام- --train-data-upsampling-factors=1::1 في السيناريو أعلاه يعادل عدم استخدام العلم ، و- --train-data-upsampling-factors=1::2 تعادل رفع مستوى مصدر البيانات الثاني مرتين. إذا كنت ترغب في أخذ عينات من مصادر البيانات بنفس التردد ، فيجب أن تكون عوامل التخفيف تتناسب عكسيا مع أحجام مصادر البيانات. على سبيل المثال ، إذا كانت مجموعة البيانات A تحتوي على 1000 عينة و Dataset B لديها 100 عينة ، فيمكنك استخدام- --train-data-upsampling-factors=0.001::0.01 (أو بشكل مماثل ، --train-data-upsampling-factors=1::10 ).
نستخدم torchrun لإطلاق وظائف موزعة. ما يلي يطلق وظيفة على عقدة من 4 وحدات معالجة الرسومات:
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 يتم تمكين نماذج COCA التدريبية من خلال تحديد تكوين COCA باستخدام المعلمة --model من البرنامج النصي التدريبي. التكوينات المتوفرة حاليًا هي "coca_base" و "coca_vit-b-32" و "coca_roberta-vit-b-32" (التي تستخدم روبرتا كمشفر نص). تختلف تكوينات COCA عن تكوينات المقطع لأن لديها مكونًا إضافيًا "Multimodal_CFG" يحدد المعلمات لدلو النص متعدد الوسائط. فيما يلي مثال من COCA_VIT-B-32 CONNECT:
"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 لتدريب النماذج.
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>" , "" ))انظر أيضا هذا [كوكا كولاب]
لضبط الكوكا على MSCOCO ، أولاً إنشاء مجموعة البيانات ، تتمثل إحدى الطرق في استخدام CSVDATASET ، وربما أبسط طريقة للقيام بذلك هي استخدام clip_benchmark والتي بدورها تستخدم pycocotools (يمكن استخدامها أيضًا بنفسها).
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
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 وتمريره في رمزه مثل --model --hf-tokenizer-name على التوالي. حاليًا ندعم Roberta فقط (تكوين "Test-Roberta") ، ومع ذلك يجب أن تكون إضافة نماذج جديدة تافهة. يمكنك أيضًا تحديد عدد الطبقات ، من النهاية ، لترك غير متجمد مع المعلمة --lock-text-unlocked-layers . إليك أمر مثال لتدريب مقطع مع Roberta LM الذي يحتوي على آخر 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 وحدات معالجة الرسومات ، يجب أن ينتج الأمر منحنى التدريب التالي للتسميات التوضيحية المفاهيمية:
يتم إعطاء المزيد من المنحنيات التفصيلية للتسميات التوضيحية المفاهيمية في /docs/clip_conceptual_captions.md.
عند تدريب RN50 على YFCC ، يتم استخدام نفس المقاييس المفرطة أعلاه ، باستثناء 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 . بالنسبة لأحدث عمليات التشغيل ، بعد ذلك العلاقات العامة ، يكون المتغيران متماثلان.
نوصي 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.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-L/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 بالإضافة إلى هذه الميزات.
بدلاً من التمريرة الأمامية لكل مثال ، هناك الآن ممران للأمام لكل مثال. ومع ذلك ، يتم الأول مع 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 والاستدلال. يمكنك تمكين التدريب int8 مع --use-bnb-linear SwitchBackLinearGlobal أو --use-bnb-linear SwitchBackLinearGlobalMemEfficient . يرجى الاطلاع على مكتبة bitsandbytes للحصول على تعريفات لهذه الطبقات. بالنسبة إلى Clip Vit-Huge ، يجب أن يتوافق هذا حاليًا مع تسريع التدريب بنسبة 10 ٪ دون خسارة دقة. مزيد من السرعة comin عندما يتم إعادة بناء طبقة الانتباه بحيث يتم استبدال الطبقات الخطية الرجل هناك أيضًا.
راجع البرنامج التعليمي https://github.com/mlfoundations/open_clip/blob/main/tutorials/int8_tutorial.ipynb أو ورقة.
من الممكن دائمًا الاستئناف مباشرة من ملف بعيد ، على سبيل المثال ، ملف في دلو S3. فقط قم --resume s3://<path-to-checkpoint> . سيعمل هذا مع أي نظام ملفات مدعوم من قبل fsspec .
من الممكن أيضًا تدريب نماذج open_clip أثناء النسخ الاحتياطي المستمر حتى S3. هذا يمكن أن يساعد في تجنب أنظمة الملفات المحلية البطيئة.
قل أن العقدة الخاصة بك تحتوي على 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 فقط. أخيرًا ، نظرًا لأن المزامنة تحدث في الخلفية ، فمن المحتمل ألا يتم الانتهاء من نقطة تفتيش الأحدث مع جهاز التحكم عن بُعد.
تتضمن الوحدة open_clip.push_to_hf_hub مساعدين لدفع النماذج /الأوزان وتكوينها إلى HF 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 لـ SuperCerging EV (www.gauss-centre.eu) لتمويل هذا الجزء من العمل من خلال توفير وقت الحوسبة من خلال معهد John Von Neumann للحوسبة (NIC) على مركز GCS Superjuter Juwels Booster في مركز Jülich SuperComputing (JSC).
يقود التطوير الحالي لهذا المستودع روس وايتمان ، رومان بومونت ، كادي جوردون ، وفايشال شانكار.
الإصدار الأصلي من هذا المستودع هو من مجموعة من الباحثين في UW و Google و Stanford و Amazon و Columbia و Berkeley.
غابرييل إيلهاركو*، ميتشل وورتسمان*، نيكولاس كارلين ، روهان تاوري ، عشال ديف ، فيشال شانكار ، جون ميلر ، هونغسيك نامكونونج ، هانانهانه هاجشييرزي ، علي فرحادي ، لودفيج شميدت
شكر خاص لجونغ ووك كيم وأليك رادفورد للمساعدة في إعادة إنتاج مقطع!
إذا وجدت هذا المستودع مفيدًا ، فيرجى التفكير في:
@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 }
}