مقدمة | الاستدلال | التدريب | قابلية التركيب | حبات مخصصة | مميزات ألفا | التثبيت | التكامل | فيديوهات | الترخيص | الاقتباس
torcao: مكتبة PyTorch لأنواع البيانات المخصصة والتحسينات. قم بقياس وتقسيم الأوزان والتدرجات والمحسنات والتنشيطات للاستدلال والتدريب.
من الفريق الذي أحضر لكم السلسلة السريعة
يعمل torchao فقط مع torch.compile()
و FSDP2
على معظم نماذج PyTorch الموجودة على Huggingface خارج الصندوق.
يعد تحديد حجم النماذج وتقسيمها بمثابة بطانة واحدة يجب أن تعمل على أي نموذج باستخدام nn.Linear
بما في ذلك نموذج HuggingFace المفضل لديك. يمكنك العثور على تعليمات استخدام أكثر شمولاً هنا، والتناثر هنا، ومثال لاستدلال HuggingFace هنا
للاستدلال، لدينا خيار
from torchao . quantization . quant_api import (
quantize_ ,
int8_dynamic_activation_int8_weight ,
int4_weight_only ,
int8_weight_only
)
quantize_ ( m , int4_weight_only ())
بالنسبة إلى gpt-fast int4_weight_only()
فهو الخيار الأفضل عند bs=1 لأنه يزيد بمقدار 2x tok/s ويقلل متطلبات VRAM بحوالي 65% عبر خط الأساس المترجم بواسطة torch.
إذا لم يكن لديك ما يكفي من VRAM لتحديد حجم النموذج بأكمله على وحدة معالجة الرسومات ووجدت أن تكميم وحدة المعالجة المركزية بطيء جدًا، فيمكنك استخدام وسيطة الجهاز مثل so quantize_(model, int8_weight_only(), device="cuda")
والتي سترسل وقم بقياس كل طبقة على حدة إلى وحدة معالجة الرسومات الخاصة بك.
إذا رأيت حالات تباطؤ في أي من هذه التقنيات أو لم تكن متأكدًا من الخيار الذي ستستخدمه، ففكر في استخدام القياس التلقائي الذي سيحدد الطبقات تلقائيًا ويختار أفضل طريقة لتحديد كمية كل طبقة.
model = torchao . autoquant ( torch . compile ( model , mode = 'max-autotune' ))
نحن نوفر أيضًا واجهة برمجة التطبيقات التي تواجه المطورين حتى تتمكن من تنفيذ خوارزميات القياس الكمي الخاصة بك، لذا يرجى استخدام خوارزمية HQQ الممتازة كمثال تحفيزي.
لقد أضفنا تكميم ذاكرة التخزين المؤقت kv وميزات أخرى لتمكين الاستدلال بطول السياق الطويل (وبالضرورة كفاءة الذاكرة).
من الناحية العملية، تسمح لنا هذه الميزات جنبًا إلى جنب مع تكميم وزن int4 فقط بتقليل ذروة الذاكرة بنسبة ~55% ، مما يعني أنه يمكننا استنتاج Llama3.1-8B بطول سياق 130 كيلو بايت مع 18.9 جيجابايت فقط من ذاكرة الذروة. يمكن العثور على مزيد من التفاصيل هنا
يمكن أن يؤدي التكميم بعد التدريب إلى نموذج سريع ومدمج، ولكنه قد يؤدي أيضًا إلى تدهور الدقة. نوصي باستكشاف التدريب على الوعي الكمي (QAT) للتغلب على هذا القيد. بالتعاون مع Torchtune، قمنا بتطوير وصفة QAT التي توضح تحسينات كبيرة في الدقة مقارنة بـ PTQ التقليدي، واستعادة 96% من تدهور الدقة في hellaswag و68% من تدهور الحيرة على نص wiki لـ Llama3 مقارنة بالتكميم بعد التدريب (PTQ) . ولقد قدمنا وصفة كاملة هنا
from torchao . quantization . qat import Int8DynActInt4WeightQATQuantizer
qat_quantizer = Int8DynActInt4WeightQATQuantizer ()
# Insert "fake quantize" operations into linear layers.
# These operations simulate quantization numerics
model = qat_quantizer . prepare ( model )
# Run Training...
# Convert fake quantize to actual quantize operations
model = qat_quantizer . convert ( model )
ينفذ torcao.float8 وصفات تدريبية باستخدام أنواع float8 المتدرجة، كما هو موضح في https://arxiv.org/abs/2209.05433.
مع تشغيل torch.compile
، تُظهر النتائج الحالية سرعات إنتاجية تصل إلى 1.5x في مهام التدريب المسبق لـ 128 H100 GPU LLaMa 3 70B (التفاصيل)
from torchao . float8 import convert_to_float8_training
convert_to_float8_training ( m , module_filter_fn = ...)
وللحصول على وصفة تدريبية شاملة للتدريب المسبق باستخدام float8، يمكنك الاطلاع على torchtitan
لقد أضفنا دعمًا للتوزيع شبه المنظم بنسبة 2:4 مع عمليات تسريع شاملة بنسبة 6% على ViT-L . مدونة كاملة هنا
تغيير الكود عبارة عن سطر واحد مع المثال الكامل المتاح هنا
swap_linear_with_semi_sparse_linear ( model , { "seq.0" : SemiSparseLinear })
يأخذ ADAM ضعف الذاكرة التي تحتاجها معلمات النموذج حتى نتمكن من قياس حالة المحسن إما إلى 8 أو 4 بت مما يقلل بشكل فعال متطلبات VRAM للمحسن بمقدار 2x أو 4x على التوالي عبر خط الأساس fp16
from torchao . prototype . low_bit_optim import AdamW8bit , AdamW4bit , AdamWFp8
optim = AdamW8bit ( model . parameters ()) # replace with Adam4bit and AdamFp8 for the 4 / fp8 versions
من الناحية العملية، نحن أبطأ قليلاً من النوى المكتوبة بخبرة ولكن تطبيقات هذه المُحسِّنات تمت كتابتها في بضع مئات من الأسطر من كود PyTorch وتم تجميعها، لذا يرجى استخدامها أو نسخها ولصقها لمحسناتك الكمية. المعايير هنا
لدينا أيضًا دعم لتفريغ وحدة المعالجة المركزية لوحدة معالجة الرسومات (GPU) الفردية حيث سيتم إرسال كل من التدرجات (بنفس حجم الأوزان) والمحسنات بكفاءة إلى وحدة المعالجة المركزية. هذا وحده يمكن أن يقلل متطلبات VRAM الخاصة بك بنسبة 60%
optim = CPUOffloadOptimizer ( model . parameters (), torch . optim . AdamW , fused = True )
optim . load_state_dict ( ckpt [ "optim" ])
torch.compile
: مبدأ التصميم الرئيسي بالنسبة لنا هو قابلية التركيب كما هو الحال في أي نوع dtype أو تخطيط جديد نقدمه يحتاج إلى العمل مع المترجم الخاص بنا. لا يهم إذا كانت النوى مكتوبة بلغة PyTorch أو CUDA أو C++ أو Triton النقية - فالأشياء يجب أن تعمل فقط! لذلك نكتب منطق dtype أو التخطيط أو تعبئة البت في PyTorch النقي ونقوم بإنشاء حبات فعالة.أفضل مثال لدينا على الجمع بين قابلية التركيب لنوع البت الأقل مع التحويل البرمجي وfsdp هو NF4 الذي استخدمناه لتنفيذ خوارزمية QLoRA. لذا، إذا كنت تجري بحثًا عند تقاطع هذه المنطقة، فنحن نود أن نسمع منك.
لقد أضفنا دعمًا لتأليف وإصدار عمليات مخصصة لا تنفصل عن الرسم البياني باستخدام torch.compile()
لذا إذا كنت تحب كتابة النوى ولكنك تكره تجميعها بحيث تعمل مع جميع أنظمة التشغيل وإصدارات cuda، فنحن نود قبول المساهمات لـ العمليات المخصصة الخاصة بك. لدينا بعض الأمثلة التي يمكنك اتباعها
quantize_(model, fpx_weight_only(3, 2))
إذا كنت تعتقد أن هناك نواة CUDA أخرى يجب أن نلقي نظرة فاحصة عليها، فيرجى ترك تعليق حول هذه المشكلة
الأشياء التي نحن متحمسون لها ولكنها تحتاج إلى مزيد من الوقت لطهيها في الفرن
quantize_(model, int8_weight_only_quantized_training())
. يعتبر هذا العمل نموذجًا أوليًا نظرًا لأن معايير الذاكرة ليست مقنعة بعد. يستخدم torchao
العديد من الميزات الجديدة في Pytorch بحرية، ويوصى باستخدامه مع الإصدار الليلي الحالي أو أحدث إصدار ثابت من PyTorch.
إصدار مستقر من Pypi والذي سيكون افتراضيًا هو CUDA 12.1
pip install torchao
إصدار مستقر من مؤشر PyTorch
pip install torchao --extra-index-url https://download.pytorch.org/whl/cu121 # full options are cpu/cu118/cu121/cu124
الإصدار الليلي
pip install --pre torchao --index-url https://download.pytorch.org/whl/nightly/cu121 # full options are cpu/cu118/cu121/cu124
بالنسبة لمعظم المطورين، ربما ترغب في تخطي إنشاء ملحقات C++/CUDA المخصصة لتكرار أسرع
USE_CPP=0 pip install -e .
نحن محظوظون أيضًا لأننا تم دمجنا في بعض المكتبات الرائدة مفتوحة المصدر بما في ذلك
تم إصدار torchao
بموجب ترخيص BSD 3.
إذا وجدت مكتبة torcao مفيدة، يرجى الاستشهاد بها في عملك على النحو التالي.
@software { torchao ,
title = { torchao: PyTorch native quantization and sparsity for training and inference } ,
author = { torchao maintainers and contributors } ,
url = { https//github.com/pytorch/torchao } ,
license = { BSD-3-Clause } ,
month = oct,
year = { 2024 }