Amazon SageMaker'da Hugging Face Transformers kullanılarak Soru Cevaplama Görevi için bir BERT Large modelinin dağıtılmış ince ayarı

Kaynak Düğüm: 1885069

Yeni modellerin eğitiminden üretimde devreye alınmasına kadar, Amazon Adaçayı Yapıcı yeni başlayanlar ve işletmeler için makine öğrenimi (ML) ve Derin Öğrenmenin gücünden yararlanmak için en eksiksiz araç setini sunar.

Transformers açık kaynak kitaplığı ve ML platformu ile Hugging Face, transfer öğrenimini ve en son ML modellerini küresel AI topluluğu için erişilebilir hale getirerek, dünyanın dört bir yanındaki şirketlerdeki veri bilimcilerin ve ML mühendislerinin her yeni bilimsel bilgiden yararlanmaları için gereken süreyi azaltır. ilerleme.

Transformers'ı yeni NLP görevlerine veya etki alanlarına uygulamak, büyük dil modellerinde ince ayar yapılmasını gerektirir; bu, ek, verimli bir eğitim sürecinde onları yeni bir göreve veya belirli belge türlerine uyarlamak için önceden eğitilmiş modellerin birikmiş bilgisinden yararlanan bir tekniktir.

Eldeki iş sorunu için doğru tahminler üretmek için modelde ince ayar yapmak, örneğin BERT, BART, RoBERTa, T5 gibi ölçeklenebilir bir şekilde gerçekleştirilmesi zor olabilecek büyük Transformers modellerinin eğitimini gerektirir.

Hugging Face, teslim etmek için SageMaker ile yakın bir şekilde çalışıyor. kullanıma hazır Derin Öğrenme Kapsayıcıları En yeni Transformers modellerinin eğitimini ve dağıtımını her zamankinden daha kolay ve hızlı hale getiren (DLC'ler). SageMaker Data Parallel (SMDP), SageMaker Model Parallel (SMMP), S3 boru modu gibi özellikler kapsayıcıya entegre edildiğinden, bunların kullanılması, şirketlerin soru cevaplama, oluşturma gibi Transformers tabanlı ML çözümleri oluşturma süresini önemli ölçüde azaltır. metin ve resimler, arama sonuçlarını optimize eder ve müşteri desteği otomasyonunu, konuşma arayüzlerini, anlamsal aramayı, belge analizlerini ve daha birçok uygulamayı geliştirir.

Bu yazıda, SageMaker'da veri bilimcilerin Transformers modellerinin eğitimini ve ince ayarını günlerden saatlere kadar hızlandırmalarını sağlayan Hugging Face ile SageMaker dağıtılmış kitaplıklarının derin entegrasyonuna odaklanıyoruz.

Dağıtılmış eğitime genel bakış

ML uygulayıcıları ve veri bilimcileri, modelleri eğitirken iki ölçeklendirme zorluğuyla karşı karşıyadır: model boyutunu ölçeklendirme (parametre ve katman sayısı) ve eğitim verilerini ölçeklendirme. Model boyutunu veya eğitim verilerini ölçeklendirmek daha iyi doğrulukla sonuçlanabilir, ancak derin öğrenmede, hızlandırıcıdaki (CPU veya GPU) bellek miktarının eğitim verilerinin boyutu ile boyutunun kombinasyonunu sınırladığı durumlar olabilir. modeli. Örneğin, büyük bir dil modeli eğitirken, parti boyutu genellikle az sayıda örnekle sınırlıdır ve bu da daha az doğru bir modelle sonuçlanabilir.

Dağıtılmış eğitim, modeli birden çok işlemci arasında eğitmek için iş yükünü bölebilir. işçiler. Bu işçiler, model eğitimini hızlandırmak için paralel olarak çalışırlar.

Neyi ölçeklendirmek istediğimize bağlı olarak (model veya veri), dağıtılmış eğitime yönelik iki yaklaşım vardır: veri paralel ve model paralel.

Veri paraleli, dağıtılmış eğitim için en yaygın yaklaşımdır. Veri paralelliği, model mimarisinin bir kopyasının ve farklı hızlandırıcılarda ağırlıkların oluşturulmasını gerektirir. Ardından, tüm eğitim setini tek bir hızlandırıcıya geçirmek yerine, eğitim setini farklı hızlandırıcılara bölebilir ve eğitim setini daha hızlı geçebiliriz. Bu, gradyan bilgilerini bir parametre sunucusuna geri iletmesi gereken hızlandırıcıların adımını eklese de, bu süre, hızlandırıcı başına tüm veri kümesinin bir kısmı üzerinde yinelemenin hız artışıyla dengelenmekten daha fazladır. Bu nedenle, veri paralelliği eğitim sürelerini önemli ölçüde azaltmaya yardımcı olabilir. Örneğin, paralelleştirme olmadan tek bir modeli eğitmek 4 saat sürer. Dağıtılmış eğitim kullanmak, bunu 24 dakikaya indirebilir. SageMaker dağıtılmış eğitimi, degrade güncellemelerinde en son teknikleri de uygular.

Bir hızlandırıcıya (GPU) sığmayacak kadar büyük büyük modellerde paralel bir model yaklaşımı kullanılır. Bu yaklaşım, model mimarisinin parçalara ayrıldığı ve farklı hızlandırıcılara yerleştirildiği bir paralelleştirme stratejisi uygular. Bu parçaların her birinin konfigürasyonu, sinir ağı mimarisine bağlıdır ve tipik olarak birkaç katman içerir. Hızlandırıcılar arasındaki iletişim, eğitim verileri parçalardan birinden diğerine her geçtiğinde gerçekleşir.

Özetlemek gerekirse, büyük veri kümeleri nedeniyle zaman alan görevler için veya eğitim deneylerinizi hızlandırmak istediğinizde dağıtılmış eğitim verisi paralelliğini kullanmalısınız. Modeliniz bir hızlandırıcıya sığamadığında model paralelliğini kullanmalısınız.

Önkoşullar

SageMaker'da Hugging Face Transformers modellerinin dağıtılmış eğitimini gerçekleştirmek için aşağıdaki ön koşulları tamamlamanız gerekir:

Dağıtılmış eğitimi uygulayın

Hugging Face Transformers kitaplığı, kitaplığın sağladığı modelleri eğitmek veya ince ayar yapmak için optimize edilmiş bir Eğitmen API'si sağlar. Transformers modelleri ile aynı şekilde çalışıyorlarsa kendi modellerinizde de kullanabilirsiniz; görmek Eğitmen daha fazla ayrıntı için. Bu API bizim örnek komut dosyalarıBu, kendi özel probleminizi çözen bir komut dosyası yazmak için model olarak alabileceğiniz çeşitli NLP görevleri için verilerin nasıl önceden işleneceğini gösterir. Trainer API'sinin vaadi, bu betiğin SageMaker dahil olmak üzere herhangi bir dağıtılmış kurulumda kutudan çıktığı gibi çalışmasıdır.

Trainer API, eğitim için gereken her şeyi alır. Buna veri kümeleriniz, modeliniz (veya modelinizi döndüren bir işlev), bir compute_metrics Tahminler ve etiketler dizilerinden izlemek istediğiniz metrikleri, optimize ediciniz ve öğrenme hızı planlayıcınız (iyi varsayılanlar sağlanır) ve eğitiminiz için ayarlayabileceğiniz tüm hiperparametreleri adlı bir veri sınıfında gruplandıran işlev. TrainingArguments. Tüm bunlarla birlikte, modelinizi eğitmek, herhangi bir veri kümesinde metrik sonuçları almak veya herhangi bir veri kümesinde tahminleri almak için eğitmek, değerlendirmek ve tahmin etmek için üç yöntem sunar. Trainer nesnesi hakkında daha fazla bilgi edinmek için bkz. Trainer API ile bir modelde ince ayar yapma ve video Eğitmen API'sı, bu size basit bir örnekte yol gösterir.

Sahne arkasında, Trainer API, komut dosyasını oluşturduğunuzda komut dosyanızı başlattığınız ortamı analiz ederek başlar. TrainingArguments. Örneğin, eğitiminizi SageMaker ile başlattıysanız, şuna bakar: SM_FRAMEWORK_PARAMS SageMaker veri paralelliğini mi yoksa model paralelliğini mi etkinleştirdiğinizi algılamak için ortamdaki değişken. Ardından gerekli başlatma adımlarını gerçekleştirmeden önce (işlemin derecesi veya dünya boyutu gibi) ilgili değişkenleri ortamdan alır (örneğin, smdistributed.dataparallel.torch.distributed.init_process_group()).

Eğitmen, tüm eğitim döngüsünü içerir, böylece smdistributed.dataparallel arka uç, komut dosyanızdaki bir kod satırını değiştirmenize gerek kalmadan gerektiğinde kullanılır. Hata ayıklama için yerel makinenizde hala çalışabilir (çok daha yavaş da olsa). Veri kümenizi parçalamayı, her işlemin otomatik olarak farklı örnekleri görmesi için, her çağda bir yeniden karıştırma ile, optimizasyon adımından önce gradyanlarınızı senkronize ederek, etkinleştirdiyseniz karışık hassas eğitim, büyük bir parti boyutuna sığamıyorsanız gradyan birikimini yönetir. GPU'larınız ve daha birçok optimizasyon.

Model paralelliğini etkinleştirdiyseniz, aynı verileri görmesi gereken süreçlerin (eğer varsa dp_rank aynıdır) aynı partileri alın ve bu farklı işlemlerle dp_rank her çağda bir yeniden karıştırma ile aynı örnekleri görmeyin. Model veya optimize edicilerin durum sözlüklerinin kontrol noktası sırasında düzgün bir şekilde senkronize edilmesini sağlar ve yine karışık hassasiyet ve gradyan birikimi gibi tüm optimizasyonları işler.

Değerlendirme ve tahmin yöntemlerini kullanırken, Eğitmen tüm GPU'larınızdan yararlanmak için dağıtılmış bir değerlendirme gerçekleştirir. Her işlem için verilerinizi bölmeyi düzgün bir şekilde işler (aynı işlemin işlemi dp_rank model paralelliği etkinleştirilirse) ve tahminlerin, veri kümesine gönderilmeden önce kullandığınız veri kümesiyle aynı sırada düzgün şekilde toplanmasını sağlar. compute_metrics işlev veya yeni döndü. Trainer API'sini kullanmak zorunlu değildir. Kullanıcılar, Hugging Face içinde Keras veya PyTorch'u kullanmaya devam edebilir. Ancak Trainer API, yardımcı bir soyutlama katmanı sağlayabilir.

SageMaker Sarılma Yüz Tahmincilerini kullanarak bir modeli eğitin

Tahmin Edici, SageMaker eğitimi için üst düzey bir arabirimdir ve uçtan uca SageMaker eğitimi ve dağıtım görevlerini yönetir. Komut dosyanızın eğitimi, aradığınızda çağrılır fit Bir on HuggingFace Tahminci. Tahmin Edici'de, hangi ince ayar komut dosyasının kullanılacağını tanımlarsınız. entry_point, Hangi instance_type kullanılacak ve hangi hiperparametrelerin geçirildiği. Hakkında daha fazla bilgi için HuggingFace parametreler, bakınız Sarılma Yüz Tahmincisi.

Dağıtılmış eğitim: Veri paraleli

Bu örnekte, Transformers ve veri kümesi kitaplıklarını kullanarak soru ve yanıtlama görevinde dağıtılmış bir Seq2Seq transformatör modelini eğitmek için yeni Hugging Face DLC'lerini ve SageMaker SDK'sını kullanıyoruz. bu bert-büyük-kasetsiz-bütün-kelime-maskeleme model üzerinde ince ayar yapılmış takım Veri kümesi.

Aşağıdaki kod örnekleri size bir HuggingFace Veri paralelliği ile dağıtılmış eğitim için tahmin edici.

  1. Bir Hugging Face Transformers komut dosyası seçin:
    # git configuration to download our fine-tuning script
    git_config = {'repo': 'https://github.com/huggingface/transformers.git','branch': 'v4.6.1'}

Bir yarattığınızda HuggingFace Tahminci için, GitHub deposunda saklanan bir eğitim komut dosyasını Tahminci için giriş noktası olarak belirtebilirsiniz, böylece komut dosyalarını yerel olarak indirmeniz gerekmez. Kullanabilirsiniz git_config Hugging Face Transformers örnek komut dosyalarını ve sağ 'dal'ı çalıştırmak için transformers_version yapılandırılması gerekiyor. Örneğin, kullanırsanız transformers_version 4.6.1, kullanmanız gerekir'branch':'v4.6.1'.

  1. Eğitim işine geçirilen eğitim hiper parametrelerini yapılandırın:
    # hyperparameters, which are passed into the training job
    hyperparameters={ 'model_name_or_path': 'bert-large-uncased-whole-word-masking', 'dataset_name':'squad', 'do_train': True, 'do_eval': True, 'fp16': True, 'per_device_train_batch_size': 4, 'per_device_eval_batch_size': 4, 'num_train_epochs': 2, 'max_seq_length': 384, 'max_steps': 100, 'pad_to_max_length': True, 'doc_stride': 128, 'output_dir': '/opt/ml/model'
    }

Bir hiperparametre olarak, herhangi birini tanımlayabiliriz. Seq2SeqTrainingArgümanlar ve eğitim komut dosyasında tanımlananlar.

  1. Dağıtım parametrelerini şurada tanımlayın: HuggingFace Tahminci:
    # configuration for running training on smdistributed Data Parallel
    distribution = {'smdistributed':{'dataparallel':{ 'enabled': True }}}

Sen kullanabilirsiniz SageMaker veri paralellik kitaplığı dağıtılmış eğitim için kutunun dışında. Veri paralelliğinin işlevselliğini doğrudan Trainer'a ekledik. Veri paralelliğini etkinleştirmek için, yalnızca tek bir parametre ekleyebilirsiniz. HuggingFace Tahminci, Trainer tabanlı kodunuzun otomatik olarak kullanmasına izin verir.

  1. Hat için bir HuggingFace Önceki adımlarda tanımlanan parametreleri içeren tahmin edici ve eğitime başlayın:
from sagemaker.huggingface import HuggingFace
# estimator
huggingface_estimator = HuggingFace(entry_point='run_qa.py', source_dir='./examples/pytorch/question-answering', git_config=git_config, instance_type= 'ml.p3.16xlarge', instance_count= 2, volume_size= 200, role= <SageMaker Role>, # IAM role, transformers_version='4.6', pytorch_version='1.7', py_version='py36', distribution= distribution, hyperparameters = hyperparameters) # starting the train job huggingface_estimator.fit()

The Hugging Face Transformers deposu dil modellemeden belirteç sınıflandırmasına kadar görevlerde modellerin ince ayarını yapmak için çeşitli örnekler ve komut dosyaları içerir. Bizim durumumuzda, kullanıyoruz run_qa.py itibaren examples/pytorch/question-answering örnekleri.

smdistributed.dataparallel ile SageMaker üzerinde model eğitimini destekler yalnızca aşağıdaki örnek türleri. En iyi performans için aşağıdakileri destekleyen bir örnek türü kullanmanızı öneririz: Elastik Kumaş Adaptörü (EFA):

  • ml.p3.16xlarge
  • ml.p3dn.24xlarge (Önerilen)
  • ml.p4d.24xlarge (Önerilen)

En iyi performansı ve en iyi performansı elde etmek için SMDataParallel, en az iki örnek kullanmalısınız, ancak bu örneği test etmek için birini de kullanabilirsiniz.

Aşağıdaki örnek not defteri daha ayrıntılı adım adım rehberlik sağlar.

Dağıtılmış eğitim: Model paralel

Model paralelliği ile dağıtılmış eğitim için, üzerinde dizi sınıflandırması için SageMaker SDK ile birlikte Hugging Face Transformers ve veri kümeleri kitaplığını kullanıyoruz. Genel Dil Anlayışı Değerlendirmesi (GLUE) kullanarak çok düğümlü, çok GPU'lu bir kümede kıyaslama SageMaker modeli paralellik kitaplığı.

Veri paralelliğinde olduğu gibi, önce git konfigürasyonunu, eğitim hiper parametrelerini ve dağıtım parametrelerini HuggingFace Tahminci:

# git configuration to download our fine-tuning script
git_config = {'repo': 'https://github.com/huggingface/transformers.git','branch': 'v4.6.1'} # hyperparameters, which are passed into the training job
hyperparameters={ 'model_name_or_path':'roberta-large', 'task_name': 'mnli', 'per_device_train_batch_size': 16, 'per_device_eval_batch_size': 16, 'do_train': True, 'do_eval': True, 'do_predict': True, 'num_train_epochs': 2, 'output_dir':'/opt/ml/model', 'max_steps': 500,
} # configuration for running training on smdistributed Model Parallel
mpi_options = { "enabled" : True, "processes_per_host" : 8,
}
smp_options = { "enabled":True, "parameters": { "microbatches": 4, "placement_strategy": "spread", "pipeline": "interleaved", "optimize": "speed", "partitions": 4, "ddp": True, }
} distribution={ "smdistributed": {"modelparallel": smp_options}, "mpi": mpi_options
}

Model paralellik kitaplığı dahili olarak MPI kullanır, bu nedenle model paralelliğini kullanmak için dağıtım parametresi kullanılarak MPI etkinleştirilmelidir. “processes_per_host” önceki kodda, MPI'nin her ana bilgisayarda başlatması gereken işlem sayısını belirtir. Bunları geliştirme ve test için öneriyoruz. Üretim zamanında, kapsamlı GPU kapasitesi talep ediyorsanız AWS Support ile iletişime geçebilirsiniz. Daha fazla bilgi için, bkz Bir SageMaker Dağıtılmış Model Paralel Eğitim İşi Çalıştırın.

Aşağıdaki örnek not defteri tam kod komut dosyalarını içerir.

Spot Örnekleri

SageMaker Python SDK için Hugging Face çerçeve uzantısıyla, tam olarak yönetilen özelliklerden de yararlanabiliriz. Amazon Elastik Bilgi İşlem Bulutu (Amazon EC2) Spot Örnekleri ve eğitim maliyetimizden %90'a kadar tasarruf edin.

Eğitim işiniz hızlı bir şekilde bitmeyecekse, kullanmanızı öneririz. kontrol noktası belirleme yönetilen nokta eğitimi ile, bu nedenle tanımlamanız gerekir checkpoint_s3_uri.

ile Spot Bulut Sunucularını kullanmak için HuggingFace Tahminci, use_spot_instances parametresini True olarak belirleyin ve max_wait ve max_run zaman. Yönetilen spot eğitim yaşam döngüsü hakkında daha fazla bilgi için bkz. Amazon SageMaker'da Yönetilen Spot Eğitimi.

Aşağıdakiler, bir nokta eğitim Tahmincisi ayarlamak için bir kod parçacığıdır:

from sagemaker.huggingface import HuggingFace # hyperparameters, which are passed into the training job
hyperparameters={'epochs': 1, 'train_batch_size': 32, 'model_name':'distilbert-base-uncased', 'output_dir':'/opt/ml/checkpoints' } # s3 uri where our checkpoints will be uploaded during training
job_name = "using-spot"
checkpoint_s3_uri = f's3://{sess.default_bucket()}/{job_name}/checkpoints' huggingface_estimator = HuggingFace(entry_point='train.py', source_dir='./scripts', instance_type='ml.p3.2xlarge', instance_count=1, base_job_name=job_name, checkpoint_s3_uri=checkpoint_s3_uri, use_spot_instances=True, max_wait=3600, # This should be equal to or greater than max_run in seconds' max_run=1000, # expected max run in seconds role=role, transformers_version='4.6', pytorch_version='1.7', py_version='py36', hyperparameters = hyperparameters)

Aşağıdaki defter tam kod komut dosyalarını içerir.

Sonuç

Bu yazıda, SageMaker kullanarak Hugging Face Transformers'ın dağıtılmış eğitimini tartıştık. Önce veri paralelliği ile model paralelliği arasındaki kullanım örneklerini inceledik. Veri paralelliği tipik olarak daha uygundur, ancak eğitimin bilgi işlem tarafından darboğaz olduğu durumlarla sınırlı olması gerekmez; oysa model paralelliğini, bir model tek bir hızlandırıcıda sağlanan belleğe sığamadığında kullanabilirsiniz. Daha sonra her iki yöntemle nasıl antrenman yapılacağını gösterdik.

Tartıştığımız veri paralelliği kullanım örneğinde, tek bir p3.2xlarge eşgörünümünde (tek bir GPU ile) bir modelin eğitimi 4 saat sürer ve bu yazının yazıldığı sırada kabaca 15 ABD dolarına mal olur. Veri paralelliği ile aynı modeli 24 $ maliyetle 28 dakikada eğitebiliriz. Maliyet iki katına çıkmasına rağmen, bu eğitim süresini 10 kat azalttı. Çok sayıda modeli kısa sürede eğitmeniz gereken bir durum için, veri paralelliği bunu nispeten düşük bir maliyet artışıyla sağlayabilir. Model paralelliği kullanım durumuna gelince, donanım sınırlamaları nedeniyle daha önce hiç eğitilmesi mümkün olmayan modelleri eğitme yeteneği ekler. Her iki özellik de makine öğrenimi uygulayıcıları için yeni iş akışları sağlar ve şuradan kolayca erişilebilir: HuggingFace SageMaker Python SDK'nın bir parçası olarak Tahminci. Bu modelleri barındırılan uç noktalara dağıtmak, diğer Tahminciler ile aynı prosedürü takip eder.

Bu entegrasyon, SageMaker ekosisteminin parçası olan diğer özellikleri etkinleştirir. Örneğin, ek maliyet optimizasyonu için Tahmin Aracına basit bir bayrak ekleyerek Spot Bulut Sunucularını kullanabilirsiniz. Bir sonraki adım olarak, dosyayı bulabilir ve çalıştırabilirsiniz. eğitim demosu ve örnek not defteri.


Yazarlar Hakkında

Archis Joglekar Gelişen Teknolojiler ekibinde bir AI/ML İş Ortağı Çözümleri Mimarıdır. AWS'deki yapı taşlarını kullanan performanslı, ölçeklenebilir derin öğrenme ve bilimsel bilgi işlem ile ilgileniyor. Geçmiş deneyimleri, hesaplamalı fizik araştırmalarından akademi, ulusal laboratuvarlar ve yeni şirketlerde makine öğrenimi platformu geliştirmeye kadar uzanmaktadır. Bilgisayardan uzak zamanını futbol oynayarak, arkadaşları ve ailesiyle geçirmektedir.

James Yi Amazon Web Services'de Gelişen Teknolojiler ekibinde Kıdemli AI/ML İş Ortağı Çözümleri Mimarıdır. AI/ML uygulamalarını iş değerlerini elde etmek için tasarlamak, dağıtmak ve ölçeklendirmek için kurumsal müşteriler ve ortaklarla çalışma konusunda tutkulu. İş dışında futbol oynamayı, seyahat etmeyi ve ailesiyle vakit geçirmeyi seviyor.

Philipp Schmid Amazon SageMaker ekibiyle işbirliğine liderlik ettiği Hugging Face'de Makine Öğrenimi Mühendisi ve Teknik Liderdir. Son teknoloji NLP modellerini demokratikleştirme, optimize etme ve üretme ve Derin Öğrenme için kullanım kolaylığını geliştirme konusunda tutkulu.

Sylvain Gugger Hugging Face'de Araştırma Mühendisi ve Transformers kitaplığının ana koruyucularından biridir. Açık kaynaklı yazılımları sever ve topluluğun onu kullanmasına yardımcı olur.

Jeff Boudier önde gelen açık kaynaklı ML kitaplığı olan Transformers'ın yaratıcısı Hugging Face'de ürünler geliştirir. Jeff daha önce GoPro tarafından satın alınan Stupeflix'in kurucu ortağıydı ve burada Ürün Yönetimi, Ürün Pazarlama, İş Geliştirme ve Kurumsal Geliştirme direktörü olarak görev yaptı.

Kaynak: https://aws.amazon.com/blogs/machine-learning/distributed-fine-tuning-of-a-bert-large-model-for-a-question-answering-task-using-hugging-face- dönüştürücüler-on-amazon-sagemaker/

Zaman Damgası:

Den fazla AWS Makine Öğrenimi Blogu