Accelerate documentation
Büyük modellerle çalışma
Büyük modellerle çalışma
Yönlendirme ve boşaltma
init_empty_weights
accelerate.init_empty_weights
< source >( include_buffers: bool | None = None )
Tüm parametreler meta cihazında başlatılarak boş bir model oluşturulduğu için modellerin bu bağlam yöneticisi altında başlatıldığı bir yapı. Sadece modelin başlatılmasının kullanılabilir RAM'i aşmasına neden olacağı durumlarda faydalıdır.
Örnek:
import torch.nn as nn
from accelerate import init_empty_weights
# Initialize a model with 100 billions parameters in no time and without using any RAM.
with init_empty_weights():
tst = nn.Sequential(*[nn.Linear(10000, 10000) for _ in range(1000)])Bu bağlam yöneticisi altında oluşturulan herhangi bir modelin ağırlıkları yoktur. Bu nedenle
model.to(some_device)gibi bir işlem yapamazsınız. Boş modelinizin içinde ağırlıkları yüklemek için load_checkpoint_and_dispatch() yöntemine bakın. load_checkpoint_and_dispatch() için varsayılan device_map parametresini mutlaka geçersiz kılın, aksi takdirde dispatch çağrılmaz.
cpu_offload
accelerate.cpu_offload
< source >( model: Moduleexecution_device: torch.device | None = Noneoffload_buffers: bool = Falsestate_dict: dict[str, torch.Tensor] | None = Nonepreload_module_classes: list[str] | None = None )
Parametreler
- model (
torch.nn.Module) — Yükleme kaldırılacak model. - execution_device (
torch.device, isteğe bağlı) — Modelin ileri geçişinin (forward pass) çalıştırılacağı cihaz (bir GPU olmalıdır). Varsayılan olarak modelin ilk parametresinin cihazı kullanılır. - offload_buffers (
bool, isteğe bağlı, varsayılanFalse) — Model parametreleriyle birlikte tamponların (buffers) taşınacak (offload) olup olmayacağı. - state_dict (
Dict[str, torch.Tensor], isteğe bağlı) — CPU'da tutulacak modelin state dict'i. - preload_module_classes (
List[str], isteğe bağlı) — İleri yönlü işlemin başlangıcında tüm ağırlıklarını (alt modüller dahil) yüklemesi gereken sınıfların listesi. Bu, yalnızca ileri yönlü işlem sırasında doğrudan çağrılmayan ancak kayıtlı alt modüllere sahip sınıflar için kullanılmalıdır; örneğin birdensedoğrusal katman kayıtlıysa ancak ileri yönlü işlemdedensedoğrudan çağrılmak yerinedense.weightvedense.biasbazı işlemlerde kullanılıyorsa.
Bir model için tam CPU offload'ı etkinleştirir. Sonuç olarak, modelin tüm parametreleri offload edilir ve modelin state dict'inden yalnızca bir kopya tutulur. İleri geçiş sırasında, parametreler bu state dict'ten çıkarılır, ihtiyaç duyuldukça geçilen çalışma cihazına yerleştirilir ve ardından tekrar offload edilir.
cpu_offload_with_hook
accelerate.cpu_offload_with_hook
< source >( model: Moduleexecution_device: int | str | torch.device | None = Noneprev_module_hook: accelerate.hooks.UserCpuOffloadHook | None = None )
Parametreler
- model (
torch.nn.Module) — Yükleme kaldırılacak model. - execution_device(
str,intortorch.device, optional) — Modelin çalıştırılacağı cihaz. Kullanılabilirse varsayılan olarak MPS cihazı, bir hızlandırıcı cihazı varsa 0 numaralı cihaz, yoksa CPU olarak ayarlanır. - prev_module_hook (
UserCpuOffloadHook, isteğe bağlı) — Çalıştırdığınız pipeline'daki önceki bir model için bu fonksiyon tarafından geri gönderilen hook. Geçirildiğinde, offload yöntemi, bu hook'un bağlı olduğu modelin forward işleminden hemen önce çağrılır.
Modeli CPU'ya taşır ve çalıştırıldığında çalıştırma cihazına geri koyar. cpu_offload() ile fark, modelin forward işleminden sonra çalıştırma cihazında kalması ve yalnızca döndürülen hook'un offload metodu çağrıldığında yeniden taşınmasıdır. Bir modelin döngü içinde çalıştırıldığı pipeline'lar için faydalıdır.
Örnek:
model_1, hook_1 = cpu_offload_with_hook(model_1, device)
model_2, hook_2 = cpu_offload_with_hook(model_2, device, prev_module_hook=hook_1)
model_3, hook_3 = cpu_offload_with_hook(model_3, device, prev_module_hook=hook_2)
hid_1 = model_1(input)
for i in range(50):
# model1 is offloaded on the CPU at the first iteration, model 2 stays on the GPU for this whole loop.
hid_2 = model_2(hid_1)
# model2 is offloaded to the CPU just before this forward.
hid_3 = model_3(hid_3)
# For model3, you need to manually call the hook offload method.
hook_3.offload()disk_offload
accelerate.disk_offload
< source >( model: Moduleoffload_dir: str | os.PathLikeexecution_device: torch.device | None = Noneoffload_buffers: bool = Falsepreload_module_classes: list[str] | None = None )
Parametreler
- model (
torch.nn.Module) — Offload edilecek model. - offload_dir (
strveyaos.PathLike) — Model ağırlıklarının taşınacağı (veya model ağırlıklarının zaten taşındığı) klasör. - execution_device (
torch.device, isteğe bağlı) — Modelin ileri geçişinin (forward pass) çalıştırılacağı cihaz (bir GPU olmalıdır). Varsayılan olarak modelin ilk parametresinin cihazı kullanılır. - offload_buffers (
bool, isteğe bağlı, varsayılanFalse) — Model parametreleriyle birlikte tamponların (buffers) taşınacak (offload) olup olmayacağı. - preload_module_classes (
List[str], isteğe bağlı) — İleri yönlü işlemin başlangıcında tüm ağırlıklarını (alt modüller dahil) yüklemesi gereken sınıfların listesi. Bu, yalnızca ileri yönlü işlem sırasında doğrudan çağrılmayan ancak kayıtlı alt modüllere sahip sınıflar için kullanılmalıdır; örneğin birdensedoğrusal katman kayıtlıysa ancak ileri yönlü işlemdedensedoğrudan çağrılmak yerinedense.weightvedense.biasbazı işlemlerde kullanılıyorsa.
Bir model için tam disk offload'ı etkinleştirir. Sonuç olarak, modelin tüm parametreleri, verilen bir klasörde bellek eşlemeli dizi olarak offload edilir. İleri geçiş sırasında, parametrelere bu klasörden erişilir ve ihtiyaç duyuldukça olduğu gibi çalışma cihazına aktarılır, ardından tekrar offload edilir.
dispatch_model
accelerate.dispatch_model
< source >( model: Moduledevice_map: dictmain_device: torch.device | None = Nonestate_dict: dict[str, torch.Tensor] | None = Noneoffload_dir: str | os.PathLike | None = Noneoffload_index: dict[str, str] | None = Noneoffload_buffers: bool = Falseskip_keys: str | list[str] | None = Nonepreload_module_classes: list[str] | None = Noneforce_hooks: bool = False )
Parametreler
- model (
torch.nn.Module) — Yönlendirilecek model. - device_map (
Dict[str, Union[str, int, torch.device]]) — Modellerinstate_dictiçindeki modül adlarını, yerleştirilecekleri cihazlara eşleyen bir sözlük."disk"'in,torch.deviceiçin uygun bir değer olmasa bile kabul edildiğine dikkat edin. - main_device (
str,intveyatorch.device, isteğe bağlı) — Ana yürütme cihazı. Varsayılan olarakdevice_mapiçindeki"cpu"veya"disk"dışında kalan ilk cihaz olacaktır. - state_dict (
Dict[str, torch.Tensor], isteğe bağlı) — CPU'da tutulacak model kısmının state dict'i. - offload_dir (
strveyaos.PathLike) — Model ağırlıklarının taşınacağı (veya model ağırlıklarının zaten taşındığı) klasör. - offload_index (
Dict, isteğe bağlı) — Ağırlık adlarından ilgili bilgilerine (dtype/shapeveya safetensors dosya adı) giden bir sözlük. Varsayılan olaraksave_folderiçinde kaydedilen indeksi kullanır. - offload_buffers (
bool, isteğe bağlı, varsayılanFalse) — Model parametreleriyle birlikte tamponların (buffers) taşınacak (offload) olup olmayacağı. - skip_keys (
strveyaList[str], isteğe bağlı) — Cihazlar arasında girdileri veya çıktıları taşırken yok sayılacak anahtarların listesi. - preload_module_classes (
List[str], isteğe bağlı) — İleri yönlü işlemin başlangıcında tüm ağırlıklarını (alt modüller dahil) yüklemesi gereken sınıfların listesi. Bu, yalnızca ileri yönlü işlem sırasında doğrudan çağrılmayan ancak kayıtlı alt modüllere sahip sınıflar için kullanılmalıdır; örneğin birdensedoğrusal katman kayıtlıysa ancak ileri yönlü işlemdedensedoğrudan çağrılmak yerinedense.weightvedense.biasbazı işlemlerde kullanılıyorsa. - force_hooks (
bool, isteğe bağlı, varsayılanFalse) — Tüm katmanlar tek bir cihaza dağıtılmış olsa bile, cihaz kancalarının modele zorla bağlanıp bağlanmayacağı.
Verilen bir cihaz haritasına göre bir modeli dağıtır. Modelin katmanları GPU'lar arasında dağıtılabilir, CPU'ya taşınabilir veya hatta diske yüklenebilir.
load_checkpoint_and_dispatch
accelerate.load_checkpoint_and_dispatch
< source >( model: Modulecheckpoint: str | os.PathLikedevice_map: str | dict[str, int | str | torch.device] | None = Nonemax_memory: dict[int | str, int | str] | None = Noneno_split_module_classes: list[str] | None = Noneoffload_folder: str | os.PathLike | None = Noneoffload_buffers: bool = Falsedtype: str | torch.dtype | None = Noneoffload_state_dict: bool | None = Noneskip_keys: str | list[str] | None = Nonepreload_module_classes: list[str] | None = Noneforce_hooks: bool = Falsestrict: bool = Falsefull_state_dict: bool = Truebroadcast_from_rank0: bool = False )
Parametreler
- model (
torch.nn.Module) — Kontrol noktası yüklemek istediğimiz model. - checkpoint (
strveyaos.PathLike) — Yüklenmesi gereken klasör checkpoint. Şunlardan biri olabilir:- tüm bir model durum sözlüğünü içeren bir dosyanın yolunu
- şarjlı bir kontrol noktasının dizinine sahip bir
.jsondosyasına giden bir yol - benzersiz bir
.index.jsondosyası ve bir kontrol noktasının parçalarını içeren bir klasöre giden yol.
- device_map (
Dict[str, Union[int, str, torch.device]], isteğe bağlı) — Her alt modülün nereye yerleştirileceğini belirten bir harita. Her parametre/buffer adının ayrı ayrı belirtilmesine gerek yoktur; bir modül adı dahil edildiğinde, onun tüm alt modülleri aynı cihaza gönderilir.En optimize
device_map'in Accelerate tarafından otomatik olarak hesaplanmasını sağlamak içindevice_map="auto"ayarlayın. Her seçenek hakkında daha fazla bilgi için buraya bakın. Varsayılan olarak None'dır, bu da dispatch_model()'in çağrılmayacağı anlamına gelir. - max_memory (
Dict, isteğe bağlı) — Bir sözlük: cihaz tanımlayıcısından maksimum belleğe. Ayarlanmazsa, her GPU için kullanılabilir maksimum bellek ve mevcut CPU RAM'i varsayılan olarak kullanılır. - no_split_module_classes (
List[str], isteğe bağlı) — Cihazlar arasında asla bölünmemesi gereken katman sınıf adlarının listesi (örneğin, bir artımsal bağlantıya sahip herhangi bir katman). - offload_folder (
strveyaos.PathLike, isteğe bağlı) —device_mapiçinde"disk"değeri varsa, ağırlıkların taşınacağı klasör. - offload_buffers (
bool, isteğe bağlı, varsayılanFalse) — CPU veya sabit diske aktarılan katmanlarda, parametrelerin yanı sıra tamponların da aktarılıp aktarılmayacağı. - dtype (
strveyatorch.dtype, isteğe bağlı) — Verilirse, ağırlıklar yüklenirken bu tipe dönüştürülür. - offload_state_dict (
bool, isteğe bağlı) —Trueise, CPU durum sözlüğünün ağırlığı + en büyük parça sığmıyorsa CPU RAM'inin dolmasını önlemek için CPU durum sözlüğünü geçici olarak sabit diske taşır. Cihaz haritası"disk"değerleri içeriyorsa varsayılan olarakTrueolur. - skip_keys (
strveyaList[str], isteğe bağlı) — Cihazlar arasında girdileri veya çıktıları taşırken yok sayılacak anahtarların listesi. - preload_module_classes (
List[str], isteğe bağlı) — İleri yönlü işlemin başlangıcında tüm ağırlıklarını (alt modüller dahil) yüklemesi gereken sınıfların listesi. Bu, yalnızca ileri yönlü işlem sırasında doğrudan çağrılmayan ancak kayıtlı alt modüllere sahip sınıflar için kullanılmalıdır; örneğin birdensedoğrusal katman kayıtlıysa ancak ileri yönlü işlemdedensedoğrudan çağrılmak yerinedense.weightvedense.biasbazı işlemlerde kullanılıyorsa. - force_hooks (
bool, isteğe bağlı, varsayılanFalse) — Tüm katmanlar tek bir cihaza dağıtılmış olsa bile, cihaz kancalarının modele zorla bağlanıp bağlanmayacağı. - strict (
bool, isteğe bağlı, varsayılanFalse) — Kontrol noktası state_dict anahtarlarının, modelin state_dict anahtarlarıyla tam olarak eşleşmesini katı bir şekilde zorlayıp zorlamayacağı. - full_state_dict (
bool, isteğe bağlı, varsayılanTrue) — bu değerTrueolarak ayarlanırsa, yüklenen state_dict içindeki tüm tensörler toplanır. Yüklenen state_dict içinde ShardedTensor ve DTensor bulunmaz. - broadcast_from_rank0 (
False, isteğe bağlı, varsayılanFalse) — seçenekTrueolduğunda, dağıtık birProcessGroupbaşlatılmalıdır. rank0, tam bir state_dict almalı ve state_dict içindeki tensörleri diğer rank'lere tek tek yayınlamalıdır. Diğer rank'ler, tensörleri alır ve modeldeki yerel shard'lara göre (uygulanabilirse) shard'lar.
Bir model içindeki (potansiyel olarak parçalara ayrılmış) kontrol noktasını yükler, ağırlıklar yükendikçe belirli bir cihaza gönderilebilir ve bu modelin düzgün çalışmasını sağlayacak (cihazlar arasında bölünmüş olsa bile) çeşitli kancaları ekler.
Örnek:
>>> from accelerate import init_empty_weights, load_checkpoint_and_dispatch
>>> from huggingface_hub import hf_hub_download
>>> from transformers import AutoConfig, AutoModelForCausalLM
>>> # Download the Weights
>>> checkpoint = "EleutherAI/gpt-j-6B"
>>> weights_location = hf_hub_download(checkpoint, "pytorch_model.bin")
>>> # Create a model and initialize it with empty weights
>>> config = AutoConfig.from_pretrained(checkpoint)
>>> with init_empty_weights():
... model = AutoModelForCausalLM.from_config(config)
>>> # Load the checkpoint and dispatch it to the right devices
>>> model = load_checkpoint_and_dispatch(
... model, weights_location, device_map="auto", no_split_module_classes=["GPTJBlock"]
... )load_checkpoint_in_model
accelerate.load_checkpoint_in_model
< source >( model: Modulecheckpoint: str | os.PathLikedevice_map: dict[str, int | str | torch.device] | None = Noneoffload_folder: str | os.PathLike | None = Nonedtype: str | torch.dtype | None = Noneoffload_state_dict: bool = Falseoffload_buffers: bool = Falsekeep_in_fp32_modules: list[str] | None = Noneoffload_8bit_bnb: bool = Falsestrict: bool = Falsefull_state_dict: bool = Truebroadcast_from_rank0: bool = False )
Parametreler
- model (
torch.nn.Module) — Bir checkpoint yüklemek istediğimiz model. - checkpoint (
strveyaos.PathLike) — Yüklenmesi gereken klasör checkpoint. Şunlardan biri olabilir:- tüm bir model durum sözlüğünü içeren bir dosyanın yolunu
- şarjlı bir kontrol noktasının dizinine sahip bir
.jsondosyasına giden bir yol - benzersiz bir
.index.jsondosyası ve bir kontrol noktasının parçalarını içeren bir klasöre giden yol. - benzersiz bir pytorch_model.bin veya model.safetensors dosyası içeren bir klasöre giden yol.
- device_map (
Dict[str, Union[int, str, torch.device]], isteğe bağlı) — Her alt modülün nereye yerleştirileceğini belirten bir eşleme. Her parametre/buffer adının ayrı ayrı tanımlanmasına gerek yoktur; bir modül adı bu eşlemeye dahil edildiğinde, o modülün tüm alt modülleri aynı cihaza gönderilir. - offload_folder (
strveyaos.PathLike, isteğe bağlı) —device_mapiçinde"disk"değeri varsa, ağırlıkların taşınacağı klasör. - dtype (
strveyatorch.dtype, isteğe bağlı) — Verilirse, ağırlıklar yüklenirken bu tipe dönüştürülür. - offload_state_dict (
bool, isteğe bağlı, varsayılanFalse) —Trueise, CPU durum sözlüğünün ağırlığı + en büyük parça sığmıyorsa CPU RAM'inin dolmasını önlemek için CPU durum sözlüğü geçici olarak sabit diske aktarılır. - offload_buffers (
bool, isteğe bağlı, varsayılanFalse) — Disk'e taşınan ağırlıklara tamponların (buffers) dahil edilip edilmeyeceğini belirtir. - keep_in_fp32_modules(
List[str], isteğe bağlı) —torch.float32veri türünde tutulacak modüllerin listesi. - offload_8bit_bnb (
bool, isteğe bağlı) — 8-bit modüllerin cpu/disk'e aktarılmasının (offload) etkinleştirilip etkinleştirilmeyeceği. - strict (
bool, isteğe bağlı, varsayılanFalse) — Kontrol noktası state_dict anahtarlarının, modelin state_dict anahtarlarıyla tam olarak eşleşmesini katı bir şekilde zorlayıp zorlamayacağı. - full_state_dict (
bool, isteğe bağlı, varsayılanTrue) — bu değerTrueolarak ayarlanırsa, yüklenen state_dict içindeki tüm tensörler toplanır. Yüklenen state_dict içinde ShardedTensor ve DTensor bulunmaz. - broadcast_from_rank0 (
False, isteğe bağlı, varsayılanFalse) — seçenekTrueolduğunda, dağıtık birProcessGroupbaşlatılmalıdır. rank0, tam bir state_dict almalı ve state_dict içindeki tensörleri diğer rank'lere tek tek yayınlamalıdır. Diğer rank'ler, tensörleri alır ve modeldeki yerel shard'lara göre (uygulanabilirse) shard'lar.
Bir model içindeki (potansiyel olarak parçalara ayrılmış) kontrol noktasını yükler, ağırlıklar yükendikçe belirli bir cihaza gönderilebilir.
Cihazlar arasında yüklendikten sonra, modelin çalıştırılabilmesi için yine de modelinizde dispatch_model() çağrısını yapmanız gerekir. Kontrol noktası yükleme ve dağıtım işlemlerini tek bir çağrıda birleştirmek için load_checkpoint_and_dispatch() kullanın.
infer_auto_device_map
accelerate.infer_auto_device_map
< source >( model: Modulemax_memory: dict[int | str, int | str] | None = Noneno_split_module_classes: list[str] | None = Nonedtype: str | torch.dtype | None = Nonespecial_dtypes: dict[str, str | torch.dtype] | None = Noneverbose: bool = Falseclean_result: bool = Trueoffload_buffers: bool = Falsefallback_allocation: bool = False )
Parametreler
- model (
torch.nn.Module) — Analiz edilecek model. - max_memory (
Dict, isteğe bağlı) — Bir sözlük: cihaz tanımlayıcısından maksimum belleğe. Ayarlanmazsa, kullanılabilir maksimum belleğe varsayılan olarak ayarlanır. Örnek:max_memory={0: "1GB"}. - no_split_module_classes (
List[str], isteğe bağlı) — Cihazlar arasında asla bölünmemesi gereken katman sınıf adlarının listesi (örneğin, bir artımsal bağlantıya sahip herhangi bir katman). - dtype (
strveyatorch.dtype, isteğe bağlı) — Verilirse, ağırlıklar yüklenirken bu tipe dönüştürülür. - special_dtypes (
Dict[str, Union[str, torch.device]], isteğe bağlı) — Verilirse, bazı özel ağırlıklar için dikkate alınacak özel dtypes (tüm ağırlıklar için varsayılan olarak kullanılan dtype'ı geçersiz kılar). - verbose (
bool, isteğe bağlı, varsayılanFalse) — Fonksiyon device_map oluştururken hata ayıklama ifadelerinin sağlanıp sağlanmayacağı. - clean_result (
bool, isteğe bağlı, varsayılanTrue) — Aynı cihaza giden tüm alt modülleri bir araya getirerek sonuçtaki device_map’i temizler. - offload_buffers (
bool, isteğe bağlı, varsayılanFalse) — CPU veya sabit diske aktarılan katmanlarda, parametrelerin yanı sıra tamponların da aktarılıp aktarılmayacağı. - fallback_allocation (
bool, isteğe bağlı, varsayılanFalse) — Düzenli tahsis başarısız olduğunda, BFS kullanarak boyut sınırına sığan bir modül tahsis etmeye çalışır.
Belirli bir model için GPU'lara öncelik vererek, ardından CPU'ya ve son olarak diske taşınacak şekilde bir cihaz haritası hesaplayın,
- GPU'lardan herhangi birinin kullanılabilir bellek sınırını aşmıyoruz.
- CPU'ya taşınma gerekiyorsa, GPU 0'da, CPU'ya taşınan katmanlar arasında en büyük boyuta sahip olanı geri yerleştirmek için her zaman yer kalır.
- CPU'ya taşınma gerekiyorsa, CPU'da kullanılabilir RAM'i aşmayız.
- disk'e offload yapılması gerekiyorsa, disk'e offload edilen ve en büyük boyuta sahip olan katmanı geri almak için CPU'da her zaman yer kalır.
Tüm hesaplama, model parametrelerinin boyutları ve dtypes'leri analiz edilerek yapılır. Sonuç olarak, model meta cihazında bulunabilir (
init_empty_weightsbağlam yöneticisi içinde başlatılmış gibi).
Kancalar
ModelHook
Bir modelin forward metodunun hemen öncesinde ve sonrasında çalıştırılacak geri çağrıları (callback) içeren bir kancadır (hook). PyTorch'teki mevcut kancalardan farkı, bunlara kwargs'ların da iletilmesidir.
Sınıf özelliği:
- no_grad (
bool, opsiyonel, varsayılanFalse) — Gerçek ileri geçişintorch.no_grad()bağlam yöneticisi altında çalıştırılıp çalıştırılmayacağı.
detach_hook
< source >( module )
Kanca bir modülden ayrıldığında çalıştırılacak.
Kanca modüle bağlandığında çalıştırılacak.
post_forward
< source >( moduleoutput ) → Any
Modelin forward metodunun hemen ardından çalıştırılmalıdır.
pre_forward
< source >( module*args**kwargs ) → Tuple[Tuple[Any], Dict[Str, Any]]
Parametreler
- module (
torch.nn.Module) — Bu olayın hemen ardından ileri geçişi (forward pass) çalıştırılacak modül. - args (
Tuple[Any]) — Modüle aktarılan konumsal argümanlar. - kwargs (
Dict[Str, Any]) — Modüle iletilen anahtar kelime argümanları.
Dönüş değeri
Tuple[Tuple[Any], Dict[Str, Any]]
İşlenmiş args ve kwargs içeren bir demet.
Modelin forward metodundan hemen önce çalıştırılmalıdır.
AlignDevicesHook
sınıf accelerate.hooks.AlignDevicesHook
< source >( execution_device: int | str | torch.device | None = Noneoffload: bool = Falseio_same_device: bool = Falseweights_map: collections.abc.Mapping | None = Noneoffload_buffers: bool = Falseplace_submodules: bool = Falseskip_keys: str | list[str] | None = Nonetied_params_map: dict[int, dict[torch.device, torch.Tensor]] | None = None )
Parametreler
- execution_device (
torch.device, isteğe bağlı) — İleri geçişten önce girdilerin ve model ağırlıklarının yerleştirilmesi gereken cihaz. - offload (
bool, isteğe bağlı, varsayılanFalse) — Ağırlıkların ileri geçişten sonra taşınmasının (offload) yapılıp yapılmayacağı. - io_same_device (
bool, isteğe bağlı, varsayılanFalse) — Çıktının, girdinin bulunduğu cihazda mı yoksa başka bir cihazda mı yer alacağı. - weights_map (
Mapping[str, torch.Tensor], isteğe bağlı) — Model ağırlıkları dışa aktarıldığında, parametre adlarından tensör değerlerine giden (potansiyel olarak tembel) bir harita. - offload_buffers (
bool, isteğe bağlı, varsayılanFalse) — Offload işlemi sırasında ilgili modülün tamponlarının (buffers) dahil edilip edilmeyeceğini belirtir. - place_submodules (
bool, isteğe bağlı, varsayılanFalse) —init_hookolayı sırasında alt modüllerinexecution_deviceüzerine yerleştirilip yerleştirilmeyeceğini belirtir.
İlgili modülün ileri geçişinde girdilerin ve model ağırlıklarının aynı cihazda olmasını, ileri geçiş sonrasında ağırlıkların devre dışı bırakılmasını (offload) sağlayacak genel bir ModelHook.
SequentialHook
Birkaç hook içerebilen ve her olayda bunların üzerinden döngü yapan bir hook.
LayerwiseCastingHook
sınıf accelerate.hooks.LayerwiseCastingHook
< source >( storage_dtype: dtypecompute_dtype: dtypenon_blocking: bool )
Bir modülün ağırlıklarını hesaplama için yüksek hassasiyetli bir veri türüne, depolama için ise düşük hassasiyetli bir veri türüne dönüştüren bir kancadır. Bu işlem, çıktı kalitesinde bir kayba yol açabilir, ancak bellek ayak izini önemli ölçüde azaltabilir.
Kancalar Ekleme
add_hook_to_module
accelerate.hooks.add_hook_to_module
< source >( module: Modulehook: ModelHookappend: bool = False ) → torch.nn.Module
Parametreler
- module (
torch.nn.Module) — Hook eklenmesi gereken modül. - hook (
ModelHook) — Bağlanacak hook. - append (
bool, isteğe bağlı, varsayılanFalse) — Modülde zaten bir hook varsa, hook'un mevcut hook ile zincirlenip zincirlenmeyeceğini belirtir.
Dönüş değeri
torch.nn.Module
Aynı modül, hook eklenmiş haliyle (modül yerinde değiştirildiği için sonuç göz ardı edilebilir).
Belirtilen bir modüle bir kancayı (hook) ekler. Bu işlem, modülün forward metodunu kancayı içerecek şekilde yeniden yazar. Bu davranışı kaldırmak ve orijinal forward metodunu geri yüklemek için remove_hook_from_module kullanın.
Modül zaten bir hook içeriyorsa, bu, varsayılan olarak yeni hook ile değiştirilir. İki hook'u birlikte zincirlemek için
append=Trueparametresini geçirin; bu, mevcut ve yeni hook'uSequentialHooksınıfının bir örneğine zincirler.
attach_execution_device_hook
accelerate.hooks.attach_execution_device_hook
< source >( module: Moduleexecution_device: int | str | torch.deviceskip_keys: str | list[str] | None = Nonepreload_module_classes: list[str] | None = Nonetied_params_map: dict[int, dict[torch.device, torch.Tensor]] | None = None )
Parametreler
- module (
torch.nn.Module) — Hook'lerin eklenmesini istediğimiz modül. - execution_device (
int,strveyatorch.device) — İleri geçişten önce girdilerin ve model ağırlıklarının yerleştirilmesi gereken cihaz. - skip_keys (
strveyaList[str], isteğe bağlı) — Cihazlar arasında girdileri veya çıktıları taşırken yok sayılacak anahtarların listesi. - preload_module_classes (
List[str], isteğe bağlı) — İleri yönlü işlemin başlangıcında tüm ağırlıklarını (alt modüller dahil) yüklemesi gereken sınıfların listesi. Bu, yalnızca ileri yönlü işlem sırasında doğrudan çağrılmayan ancak kayıtlı alt modüllere sahip sınıflar için kullanılmalıdır; örneğin birdensedoğrusal katman kayıtlıysa ancak ileri yönlü işlemdedensedoğrudan çağrılmak yerinedense.weightvedense.biasbazı işlemlerde kullanılıyorsa. - tied_params_map (Optional[Dict[int, Dict[torch.device, torch.Tensor]]], isteğe bağlı, varsayılan
None) — Veri işaretçilerinden, zaten dağıtılmış bağlı ağırlıkların cihazlara göre sözlüklerine giden bir harita. Belirli bir yürütme cihazı için, bu parametre, belleği çoğaltmak yerine, paylaşılan bir ağırlığın tüm diğerleri için ilk kullanılabilir işaretçisini yeniden kullanmak için faydalıdır.
Verilen bir modelin tüm alt modüllerine doğru çalışma cihazına sahip olmalarını sağlamak için AlignDevicesHook ögesini özyinelemeli olarak ekler
attach_align_device_hook
accelerate.hooks.attach_align_device_hook
< source >( module: Moduleexecution_device: torch.device | None = Noneoffload: bool = Falseweights_map: collections.abc.Mapping | None = Noneoffload_buffers: bool = Falsemodule_name: str = ''skip_keys: str | list[str] | None = Nonepreload_module_classes: list[str] | None = Nonetied_params_map: dict[int, dict[torch.device, torch.Tensor]] | None = None )
Parametreler
- module (
torch.nn.Module) — Hook'lerin eklenmesini istediğimiz modül. - execution_device (
torch.device, isteğe bağlı) — İleri geçişten önce girdilerin ve model ağırlıklarının yerleştirilmesi gereken cihaz. - offload (
bool, isteğe bağlı, varsayılanFalse) — Ağırlıkların ileri geçişten sonra taşınmasının (offload) yapılıp yapılmayacağı. - weights_map (
Mapping[str, torch.Tensor], isteğe bağlı) — Model ağırlıkları dışa aktarıldığında, parametre adlarından tensör değerlerine giden (potansiyel olarak tembel) bir harita. - offload_buffers (
bool, isteğe bağlı, varsayılanFalse) — Offload işlemi sırasında ilgili modülün tamponlarının (buffers) dahil edilip edilmeyeceğini belirtir. - module_name (
str, isteğe bağlı, varsayılan"") — Modülün adı. - skip_keys (
strveyaList[str], isteğe bağlı) — Cihazlar arasında girdileri veya çıktıları taşırken yok sayılacak anahtarların listesi. - preload_module_classes (
List[str], isteğe bağlı) — İleri yönlü işlemin başlangıcında tüm ağırlıklarını (alt modüller dahil) yüklemesi gereken sınıfların listesi. Bu, yalnızca ileri yönlü işlem sırasında doğrudan çağrılmayan ancak kayıtlı alt modüllere sahip sınıflar için kullanılmalıdır; örneğin birdensedoğrusal katman kayıtlıysa ancak ileri yönlü işlemdedensedoğrudan çağrılmak yerinedense.weightvedense.biasbazı işlemlerde kullanılıyorsa. - tied_params_map (Optional[Dict[int, Dict[torch.device, torch.Tensor]]], isteğe bağlı, varsayılan
None) — Veri işaretçilerinden, zaten dağıtılmış bağlı ağırlıkların cihazlara göre sözlüklerine giden bir harita. Belirli bir yürütme cihazı için, bu parametre, belleği çoğaltmak yerine, paylaşılan bir ağırlığın tüm diğerleri için ilk kullanılabilir işaretçisini yeniden kullanmak için faydalıdır.
Belirtilen bir modelin doğrudan parametre ve/veya tamponlara sahip tüm alt modüllerine AlignDevicesHook ögesini özyinelemeli olarak ekler.
attach_align_device_hook_on_blocks
accelerate.hooks.attach_align_device_hook_on_blocks
< source >( module: Moduleexecution_device: torch.device | dict[str, torch.device] | None = Noneoffload: bool | dict[str, bool] = Falseweights_map: collections.abc.Mapping | None = Noneoffload_buffers: bool = Falsemodule_name: str = ''skip_keys: str | list[str] | None = Nonepreload_module_classes: list[str] | None = Nonetied_params_map: dict[int, dict[torch.device, torch.Tensor]] | None = None )
Parametreler
- module (
torch.nn.Module) — Hook'lerin eklenmesini istediğimiz modül. - execution_device (
torch.deviceveyaDict[str, torch.device], isteğe bağlı) — İleri geçişten önce girdilerin ve model ağırlıklarının yerleştirilmesi gereken cihaz. Tüm modül için tek bir cihaz veya modül adını cihaza eşleyen bir sözlük olabilir. - offload (
bool, isteğe bağlı, varsayılanFalse) — Ağırlıkların ileri geçişten sonra taşınmasının (offload) gerekip gerekmediği. Tüm modül için tek bir boolean değer veya modül adını booleana eşleyen bir sözlük olabilir. - weights_map (
Mapping[str, torch.Tensor], isteğe bağlı) — Model ağırlıkları dışa aktarıldığında, parametre adlarından tensör değerlerine giden (potansiyel olarak tembel) bir harita. - offload_buffers (
bool, isteğe bağlı, varsayılanFalse) — Offload işlemi sırasında ilgili modülün tamponlarının (buffers) dahil edilip edilmeyeceğini belirtir. - module_name (
str, isteğe bağlı, varsayılan"") — Modülün adı. - skip_keys (
strveyaList[str], isteğe bağlı) — Cihazlar arasında girdileri veya çıktıları taşırken yok sayılacak anahtarların listesi. - preload_module_classes (
List[str], isteğe bağlı) — İleri yönlü işlemin başlangıcında tüm ağırlıklarını (alt modüller dahil) yüklemesi gereken sınıfların listesi. Bu, yalnızca ileri yönlü işlem sırasında doğrudan çağrılmayan ancak kayıtlı alt modüllere sahip sınıflar için kullanılmalıdır; örneğin birdensedoğrusal katman kayıtlıysa ancak ileri yönlü işlemdedensedoğrudan çağrılmak yerinedense.weightvedense.biasbazı işlemlerde kullanılıyorsa. - tied_params_map (Optional[Dict[int, Dict[torch.device, torch.Tensor]]], isteğe bağlı, varsayılan
None) — Veri işaretçilerinden, zaten dağıtılmış bağlı ağırlıkların cihazlara göre sözlüklerine giden bir harita. Belirli bir yürütme cihazı için, bu parametre, belleği çoğaltmak yerine, paylaşılan bir ağırlığın tüm diğerleri için ilk kullanılabilir işaretçisini yeniden kullanmak için faydalıdır.
Gerekli durumlarda, verilen bir modelin tüm bloklarına AlignDevicesHook ekler.
attach_layerwise_casting_hooks
accelerate.big_modeling.attach_layerwise_casting_hooks
< source >( module: Modulestorage_dtype: dtypecompute_dtype: dtypeskip_modules_pattern: str | tuple[str, ...] | None = Noneskip_modules_classes: tuple[type[torch.nn.Module], ...] | None = Nonenon_blocking: bool = False )
Parametreler
- module (
torch.nn.Module) — Hesaplama için yaprak modülleri yüksek hassasiyetli bir veri türüne, depolama için ise düşük hassasiyetli bir veri türüne dönüştürülecek modül. - storage_dtype (
torch.dtype) — Depolama için ileri geçişten önce/sonra modülün dönüştürüleceği dtype. - compute_dtype (
torch.dtype) — İleri geçiş sırasında hesaplama için modülün dönüştürüleceği dtype. - skip_modules_pattern (
tuple[str, ...], varsayılanNone) — Katman bazlı dökümleme (casting) işlemi sırasında atlanacak modüllerin adlarını eşleştirmek için kullanılan desenlerin listesi.Noneolarak ayarlanırsa veskip_modules_classesdeNoneise, katman bazlı dökümleme modülün iç alt modülleri yerine doğrudan modülün kendisine uygulanır. - skip_modules_classes (
tuple[type[torch.nn.Module], ...], varsayılanNone) — Katman bazlı dökümleme (casting) işlemi sırasında atlanacak modül sınıflarının listesi. - non_blocking (
bool, varsayılanFalse) —Trueise, ağırlık dönüştürme işlemleri engellenmez.
Verilen bir modüle katman bazlı döküm uygular. Burada beklenen modül bir PyTorch nn.Module'dür. Bir modeli tamamen kuantize etmek istemediğinizde bellek gereksinimlerini azaltmak için faydalıdır. Model parametreleri örneğin torch.float8_e4m3fn olarak tutulabilir ve ileri geçiş sırasında torch.bfloat16 gibi daha yüksek bir hassasiyete yukarı dökülüp, bellek tasarrufu sağlamak için tekrar torch.float8_e4m3fn olarak aşağı dökülebilir.
Örnek:
>>> from accelerate.hooks import attach_layerwise_casting_hooks
>>> from transformers import AutoModelForCausalLM
>>> import torch
>>> # Model
>>> checkpoint = "EleutherAI/gpt-j-6B"
>>> model = AutoModelForCausalLM.from_pretrained(checkpoint)
>>> # Attach hooks and perform inference
>>> attach_layerwise_casting_hooks(model, storage_dtype=torch.float8_e4m3fn, compute_dtype=torch.bfloat16)
>>> with torch.no_grad():
... model(...)Kullanıcılar, aşağı dönüştürülmesini (downcast) önlemek istedikleri modülleri de iletebilir.
Hook'ların Kaldırılması
remove_hook_from_module
accelerate.hooks.remove_hook_from_module
< source >( module: Modulerecurse = False ) → torch.nn.Module
add_hook_to_module ile bir modüle eklenen herhangi bir kancayı kaldırır.
remove_hook_from_submodules
accelerate.hooks.remove_hook_from_submodules
< source >( module: Module )
Verilen bir modelin alt modüllerine bağlı tüm kanca (hook)ları özyinelemeli olarak kaldırır.
Yardımcılar
has_offloaded_params
accelerate.utils.has_offloaded_params
< source >( module: Module ) → bool
Verilen modülün, offloading etkinleştirilmiş bir AlignDevicesHook'e sahip olup olmadığını kontrol ederek bir modülün offload edilmiş parametrelere sahip olup olmadığını kontrol eder
align_module_device
accelerate.utils.align_module_device
< source >( module: Moduleexecution_device: torch.device | None = None )
Belirtilen yürütme cihazına bir modülün parametrelerini taşıyan bağlam yöneticisi.