Amazon SageMaker'da parçalanmış veri paralelliğini kullanarak neredeyse doğrusal ölçeklemeyle devasa modelleri eğitin

Üstün doğruluk arayışında, doğal dil işleme ve bilgisayarla görme gibi alanlardaki derin öğrenme modelleri, son birkaç yılda boyut olarak önemli ölçüde büyümüş ve sıklıkla on ila yüz milyarlarca parametre arasında sayılmıştır. Bu devasa modelleri eğitmek zordur ve karmaşık dağıtım stratejileri gerektirir. Veri bilimcileri ve makine öğrenimi mühendisleri, sürekli olarak eğitim hesaplamalarını optimize etmenin en iyi yolunu arıyorlar, ancak genel küme boyutuyla birlikte artabilecek iletişim yükü ile mücadele ediyorlar.

Bu yüzden yakın zamanda başlattık ssabit veri paralelliği on Amazon Adaçayı Yapıcı, yeni bir bellek tasarrufu sağlayan dağıtılmış eğitim tekniği SageMaker model paralel (SMP) kitaplığı. Parçalanmış veri paralelliği, aşırı ölçekli modeller için özel olarak oluşturulmuştur ve Amazon'u kendi bünyesinde kullanır Mikrofonlar kaputun altındaki teknoloji, parametre toplama ve gradyan senkronizasyonuna dayanan pahalı iletişim yükünü azaltarak iletişim ölçeğini en aza indirmeye yönelik bir bilim çabası. 30 dizi uzunluğuna sahip 2B parametreli GPT-2048 modeliyle bu yeni özellik, DeepSpeed ​​ZeRO-141'e kıyasla %39.7'lik bir hız artışıyla 3 TFLOP elde etti. Dizi uzunluğu 10 olan bir 2B GPT-512 modeli için, bu yeni özellik ayrıca saniyede 564 örneğe ulaşarak PyTorch'un Tamamen Parçalanmış Veri Paraleli'ne (FSDP) kıyasla %13.9'luk bir hız artışı sağladı. Devasa model eğitiminde, her hızlanma yüzdesinin, ekibinizde tasarruf edilen dolar ve kazanılan üretkenlik anlamına geldiğini unutmayın.

Bu blog yazısında, önce parçalanmış veri paralelliğinin temel ayırt edici özelliklerine ve ne zaman kullanılacağına daha yakından bakacağız. Ardından, bu yeni özellikle SageMaker üzerinde 30B parametreli bir GPT-2 modelini nasıl kolaylıkla eğiteceğinizi öğreneceksiniz. Son olarak, performansı diğer açık kaynak seçenekleriyle karşılaştıracağız, özellikle 39.7 GPU'da DeepSpeed ​​ZeRO'dan %256'ye kadar daha iyi performans gösteriyor.

Parçalanmış veri paralelliği nasıl çalışır ve ne zaman kullanılır?

Parçalanmış veri paralelliğini tanıtmadan önce, daha geniş teknik ailesine bakalım. Büyük modeller için son dağıtılmış eğitim yaklaşımları, model parametrelerinin, gradyanların ve optimize edici durumlarının veri paralel düğümleri arasında paylaşıldığı bir paradigmaya taşındı. Özellikle çerçeveniz desteklemediğinde, cihazlar arasında bölmek için katmanları seçmenin doğuştan gelen karmaşıklığına sahip olan Pipeline Paralelizminin aksine otomatik model bölme, bu paradigma, bir modelin tek bir GPU'ya sığması gereken veri paralelliği kısıtlamasını ortadan kaldırırken, veri paralelliğinin basitliğini zarif bir şekilde korur.

Bu paradigma kapsamına giren mevcut çerçevelerde, özellikle DeepSpeed ​​ZeRO-3 ve PyTorch'un FairScale'den yukarı akışlı FSDP'si, model durumları arasında bölünmüştür. herşey GPU'lar, küme boyutuyla birlikte artan ve dolayısıyla ölçeklenebilirliğin ölçekte önemli ölçüde düşmesine neden olan büyük iletişim yüküne maruz kalma pahasına her bir GPU'daki bellek tüketimini azaltan bir stratejidir. Buna karşılık, SMP kitaplığı bölümleri modelindeki parçalanmış veri paralelliği, bir ölçek farkında model durumlarının her bir kopyasını yalnızca içinde bölümlere ayırarak bir alt küme GPU'lar.

daha yakından bakalım ölçeğe duyarlı model bölümleme Parçalanmış veri paralelinin arkasındaki temel teknoloji olan MiCS'de. Bu tasarımın arkasındaki sezgi, on milyarlarca parametreye sahip bir modeli eğitmek için eğitim durumlarını tüm veri paralel grubu boyunca bölümlendirmenin gerekmeyebileceğidir. Örneğin, 8 V100 GPU (her biri 32 GB), Adam optimizer ile karışık hassasiyet kullanarak eğitim sırasında yaklaşık 10 GB belleğe ihtiyaç duyan 200B parametreli bir modelin model durumları kopyasını tutmak için yeterlidir. Model durumlarının tam bir kopyasını sınırlayarak en küçük GPU'ların alt kümesini kullanarak, DeepSpeed ​​ve PyTorch FSDP'ye kıyasla iletişim ek yükü ölçeğini etkili bir şekilde azaltabiliriz. Parçalanmış veri paraleli, MiCS'deki Hiyerarşik İletişim ve 2 sekmeli Gradyan Senkronizasyonu gibi diğer tekniklerden de yararlanır. Daha fazla bilgi için, kontrol edin AWS'de devasa model eğitiminin doğrusala yakın ölçeklenmesi or MiCS: Devasa Modelin Genel Bulutta Eğitimi için Doğrusal Ölçeklendirme.

Şimdi, diğer dağıtılmış eğitim tekniklerine kıyasla ne zaman parçalanmış verileri paralel seçeceğinizi nasıl bileceksiniz? Genel kural şudur ki, modelinizde 1 milyardan az parametre varsa ve GPU belleğine sığabiliyorsa, SageMaker veri paralel kitaplığı or SageMaker eğitim derleyicisi sizin için yeterli olabilir. Daha büyük bir diliniz veya bilgisayarla görme modelleriniz varsa, önerimiz, bunu aşağıdakilerle birleştirilmiş parçalı veri paralelliği tekniği ile eğitmektir. aktivasyon kontrol noktası ve aktivasyon boşaltma gibi diğer tekniklerden önce SageMaker model paralel kitaplığında tensör paralelliği veya boru hattı paralelliği.

Amazon SageMaker'da GPT-2'yi eğitmek için parçalanmış veri paralelliğini kullanma

Şimdi, sizin için karmaşıklığı kapsayan SMP ile, parçalanmış veri paraleliyle bir GPT-2 modelinin nasıl eğitileceğini öğrenelim. Bu tam öğretici not defteri veri işleme, eğitim işlerini tanımlama ve göndermeden eğitim günlüklerini izlemeye kadar tüm süreç boyunca size yol gösterir. Aşağıda, bu özelliği kullanmak için temel adımları vurgulayan kısa bir genel bakış yer almaktadır.

1. Başlamak

Parçalanmış veri paralelliği, PyTorch v1.12.0+ sürümünde mevcuttur ve hem FP16 hem de BF16 ile çalışır. SMP kitaplığını kullanmanın en kolay yolu, PyTorch için önceden oluşturulmuş bir AWS Deep Learning Container kullanmaktır. Ancak kendi Docker konteynerinizi getirmek isterseniz şuraya başvurabilirsiniz. SageMaker Dağıtılmış Model Paralel Kitaplığı ile Kendi Docker Kapsayıcınızı Oluşturun. Başlamak için takip edin PyTorch Eğitim Komut Dosyasını Değiştirin SMP'lerin API'lerini eğitim komut dosyanıza uyarlamak için. Bu bölümde, kullanıma hazır eğitim komut dosyasındaki kod parçacıklarıyla yalnızca birkaç ana adımı seslendiriyoruz. train_gpt_simple.py. Komut dosyasındaki yorumları takip edebilir ve API belgesi SMP API'lerinin nerede kullanıldığı hakkında daha fazla bilgi edinmek için.

İlk önce, arayarak kütüphaneyi içe aktarın ve başlatın smdistributed.modelparallel.torch.init() eğitim komut dosyasının başında:

import smdistributed.modelparallel.torch as smp

smp.init(smp_config)

İkinci olarak, bölünecek modeli sarın smdistributed.modelparallel.torch.DistributedModel ve iade edilenleri kullanın DistributedModel ileri giden nesne:

from transformers import AutoModelForCausalLM

model = AutoModelForCausalLM.from_config(model_config)
model = smp.DistributedModel(model, trace_device="gpu", backward_passes_per_step=args.gradient_accumulation)

Optimize ediciyi şununla sarın: smdistributed.modelparallel.torch.DistributedOptimizer Optimize edici durumlarını kaydetmek ve yüklemek için.

from torch import optim

optimizer = optim.Adam(
    param_groups, betas=(args.beta1, args.beta2), lr=args.lr, weight_decay=args.weight_decay
)

optimizer = smp.DistributedOptimizer(
        optimizer, 
        static_loss_scale=None, 
        dynamic_loss_scale=True,
        dynamic_loss_args={"scale_window": 1000, "min_scale": 1, "delayed_shift": 2},
        )

İleri ve geri mantığı bir adım işlevine koyun ve ile süsleyin. smdistributed.modelparallel.torch.step.  içinde tanımlanan herhangi bir hesaplama smp.step-decorated işlev dağıtılmış bir şekilde yürütülür.

@smp.step
def train_step(model, optimizer, input_ids, attention_mask, args):
    loss = model(input_ids=input_ids, attention_mask=attention_mask, labels=input_ids)["loss"]
    model.backward(loss)

    return loss

@smp.step
def test_step(model, input_ids, attention_mask):
    loss = model(input_ids=input_ids, attention_mask=attention_mask, labels=input_ids)["loss"]
    
    return loss

2. Veri setini hazırlayın

Biz kullanın açık web metni bu örnekte kullandığımız veri kümesidir. Not defteri komut dosyasını kullanır data_prep_512.py veri kümesini indirmek ve ön işlemek için. Ayrıca değiştirerek diğer veri kümeleriyle de eğitim verebilirsiniz. data_pipeline.py. Büyük veri seti ve model ile uğraşırken, içinde depolanan verileri kullanarak eğitim işini hızlandırabilirsiniz. Lustre için Amazon FSxile yerel olarak entegre edilmiş yüksek performanslı bir dosya sistemi sağlayan Amazon Basit Depolama Hizmeti (S3). Lütfen talimatlara bakın Veri Giriş Kanalını Amazon FSx for Lustre'ı Kullanacak Şekilde Yapılandırın FSx Lustre dosya sistemini veri giriş kanalı olarak ayarlama konusunda rehberlik için.

3. Eğitim işlerini başlatın

Bu adım, zaten eğitim komut dosyanızı değiştirdi ve veri setini önceki bölümlerde belirtildiği gibi hazırladı. İle parçalanmış veri paralelliğini etkinleştirin, sadece sharded_data_parallel_degree içinde PyTorch Tahmincisi. Bu eğitimde, ayarladık sharded_data_parallel_degree=128 ve instace_count=32 p4d.24xlarge düğümleri için, model durumlarının toplam 128 GPU arasından 256 GPU'ya bölüneceğini gösterir. Bu seçilen değere bağlı olarak, SMP otomatik olarak veri paralel derecesini 2'ye ayarlar (çünkü 256/128=2), yani veri paralelliği için iki replikamız olacak. için ideal bir değer seçmek için genel bir kural sharded_data_parallel_degree her 3B model parametresi için paylaşım grubuna bir düğüm daha eklemektir. Bu öğreticide model boyutumuz 30B'dir, bu nedenle sharding için en az 10 düğüm kullanmalıyız. Ve 16 düğüm (128 GPU), eşiğin üzerindeki 2'nin en küçük gücü olduğundan, sharded_data_parallel_degree=128.

Kontrol noktası için ayrıca bir dizi kontrol noktası yardımcı programı da sağlıyoruz. sharded_data_parallel_checkpoint.py tam olarak yeniden yapılandırmak için bir yardımcı program dahil state_dict gelişmiş kullanım durumları için. Son olarak, Estimator'da fit()'i çağırarak dağıtılmış bir eğitim işi başlatabiliriz.

smp_estimator = PyTorch(
    entry_point="train_gpt_simple.py",
    instance_type="ml.p4d.24xlarge",
    source_dir=os.getcwd(),
    volume_size=500,
    instance_count=32,
    distribution={
        "mpi": {
            "enabled": True,
            "processes_per_host": processes_per_host,
            "custom_mpi_options": mpioptions,
        },
        "smdistributed": {
            "modelparallel": {
                "enabled": True,
                "parameters": {
                    "ddp": True,
                    "skip_tracing": True,
                    "delayed_parameter_initialization": True,
                    "offload_activations": True,
                    "activation_loading_horizon": 4,
                    # To enable sharded data parallelism.
                    # Here we shard model states across 128 GPUs. 
                    "sharded_data_parallel_degree": 128, 
                    "fp16": False,
                    "bf16": True,
                    # This is to disable pipeline parallelism.
                    "partitions": 1,
                },
            }
        },
    },
    framework_version="1.12",
    py_version="py38",
    hyperparameters=hyperparameters,
    checkpoint_s3_uri=checkpoint_s3_uri if not use_fsx else None,
    checkpoint_local_path=hyperparameters["checkpoint-dir"] if use_fsx else None,
    ...
)

smp_estimator.fit(inputs=data_channels)

4. Eğitim işlerini izleyin

Eğitim günlüklerine erişebilir ve GPU ve bellek kullanımını takip edebilirsiniz. Amazon Bulut İzleme. “algo-1” loglarına baktığınızdan emin olun. çünkü bu, çıktı akışı tüm örneklerden eğitim işi günlüklerine sahip olan ana düğümdür.

Kıyaslama performansı

Sırasıyla 16 ve 32 dizi uzunluğu için hem 4 hem de 24 p512d.2048xlarge düğümünde SMP kitaplığında parçalanmış veri paralelliğini kıyasladık. 30B parametreli GPT2 modeli, 7168, 48 katman ve 64 kafalık gizli bir genişlik kullanacak şekilde yapılandırılmıştır. Dizi uzunluğunun 2048 olduğu aynı konfigürasyonu ayarlayarak benimseyebilirsiniz. model_config = "gpt2-30b" öğretici not defterinde. Bu ayarla SMP, DeepSpeed ​​ZeRO-73.52'e kıyasla %39.7'lik bir hız artışıyla saniyede 3 örnek elde etti. Belirteç boyutunuz 500 milyar ise, bu hızlanma, p367d.4xlarge düğümlerinde yaklaşık 24 saat tasarruf anlamına gelir; bu, eğitim başına 12,000$'dan fazla bütçe tasarrufuna eşdeğerdir! Aşağıdaki tablo kıyaslama sonuçlarımızı özetlemektedir.

yapılandırma Performans SMP ile antrenman yapma süresi (gün)
Model/Eğitim Küme Derin Hız SMP Hız (numune/sn)
Derin Hız v0.7.2
Hız (numune/sn)
SMP v1.11
% SMP Hızlandırması SMP tarafından elde edilen TFLOPS 100 milyar token 500 milyar token
30B GPT-2
Sıra uzunluğu:512
Küresel parti boyutu:3072
FP16
16 p4d.24xlarge düğüm Aktivasyon kontrol noktası
gradyan_birikim_adımları:2
Aktivasyon kontrol noktası
Sharded_data_parallel_degree:64
gradyan_birikimi:1
142 181.05 27.5 173.6 12.49 62.43
30B GPT-2
Sıra uzunluğu:2048
Genel parti boyutu 1536
FP16
32 p4d.24xlarge düğüm Aktivasyon kontrol noktası
gradyan_birikim_adımları:2
Aktivasyon kontrol noktası sharded_data_parallel_degree:128
gradyan_birikimi:1
52.6 73.52 39.77 141 7.69 38.43
1/ Her model konfigürasyonu için, DeepSpeed ​​ZeRO'da farklı özellikleri, aşamaları ve konfigürasyonları test ettik ve DeepSpeed ​​temel çizgisi olarak en iyi verimi sağlayanı seçtik. Benchmark üzerinde çalıştırıldı Amazon Elastik Bilgi İşlem Bulutu (Amazon EC2). 2/ Bu sonuçlar, yakında kullanıma sunulacak olan AWS için optimize edilmiş iyileştirilmiş iletişim kolektiflerine dayanmaktadır. 3/ Eğitim süresi, işlenen jeton sayısına bağlı olarak hızdan tahmin edilir.

Özetle, bir dizi model ve konfigürasyonda DeepSpeed ​​ile karşılaştırıldığında SMP'de parçalanmış veri paralelliği ile sürekli olarak daha yüksek verim gözlemledik. Bu yeni özellik aynı zamanda DeepSpeed'e kıyasla daha iyi bir bellek verimliliği göstererek, SMP'nin daha büyük bir parti boyutuna uymasını ve belirli bir global parti boyutuna uyması için gereken gradyan birikimi düzeyini azaltmasını sağladı.

Sonuç

Bu gönderide, yeni bir dağıtılmış eğitim tekniğini (parçalanmış veri paralelliği) ve bunun Amazon SageMaker'da neredeyse doğrusal ölçeklemeyle devasa model eğitimini nasıl hızlandırdığını tanıttık. Bunu takiben yeni teknikle bir GPT-2 modelinin nasıl eğitileceğini de inceledik. tam örnek. takip edebilirsiniz Amazon SageMaker Örnekleri GitHub deposu tüm SageMaker modeli paralel örneklerini izlemek veya bir sonraki dağıtılmış eğitim atölyeleri. Parçalanmış veri paralelliği hakkında daha fazla bilgi edinmek için lütfen bkz. belgeleme.


yazarlar hakkında

Amazon SageMaker PlatoBlockchain Veri Zekası'nda parçalanmış veri paralelliğini kullanarak doğrusala yakın ölçeklendirmeyle devasa modelleri eğitin. Dikey Arama. Ai.Emily Webber SageMaker başlatıldıktan hemen sonra AWS'ye katıldı ve o zamandan beri dünyaya bunu anlatmaya çalışıyor! Emily, müşteriler için yeni makine öğrenimi deneyimleri oluşturmanın dışında meditasyon yapmaktan ve Tibet Budizmi üzerinde çalışmaktan keyif alıyor.

Amazon SageMaker PlatoBlockchain Veri Zekası'nda parçalanmış veri paralelliğini kullanarak doğrusala yakın ölçeklendirmeyle devasa modelleri eğitin. Dikey Arama. Ai.Can Karakuş AWS'de büyük ölçekli dağıtılmış derin öğrenmeyi optimize eden AWS'de Kıdemli Uygulamalı Bilim Adamıdır. Araştırma ilgi alanları derin öğrenme, dağıtılmış optimizasyon, dağıtılmış sistemler ve bilgi teorisini kapsamaktadır. İş dışında bisiklete binmeyi, seyahat etmeyi, okumayı ve öğrenmeyi sever.

Amazon SageMaker PlatoBlockchain Veri Zekası'nda parçalanmış veri paralelliğini kullanarak doğrusala yakın ölçeklendirmeyle devasa modelleri eğitin. Dikey Arama. Ai.Rahul Huilgol AWS'de Kıdemli Yazılım Mühendisidir. Bulutta büyük derin öğrenme modellerini eğitmeyi kolay ve performanslı hale getirmek için dağıtılmış derin öğrenme sistemleri üzerinde çalışıyor. Boş zamanlarında fotoğraf çekmekten, bisiklete binmekten ve bahçe işleri yapmaktan hoşlanıyor.

Amazon SageMaker PlatoBlockchain Veri Zekası'nda parçalanmış veri paralelliğini kullanarak doğrusala yakın ölçeklendirmeyle devasa modelleri eğitin. Dikey Arama. Ai.Sühit Kodgüle Derin öğrenme çerçeveleri üzerinde çalışan AWS Yapay Zeka grubuna sahip bir Yazılım Geliştirme Mühendisidir. Boş zamanlarında yürüyüş yapmayı, seyahat etmeyi ve yemek yapmayı sever.

Amazon SageMaker PlatoBlockchain Veri Zekası'nda parçalanmış veri paralelliğini kullanarak doğrusala yakın ölçeklendirmeyle devasa modelleri eğitin. Dikey Arama. Ai.Erin Ho AWS Deep Learning için Ürün Yöneticisidir. Müşterilerin AWS'de derin öğrenme modellerini eğitmesini kolaylaştıran ürünler üzerinde çalışıyor. İş dışında eğlenmek için yürüyüş yapmaktan ve kayak yapmaktan hoşlanıyor.

Zaman Damgası:

Den fazla AWS Makine Öğrenimi