LoRA ile Amazon SageMaker'da Whisper modellerine ince ayar yapın | Amazon Web Hizmetleri

LoRA ile Amazon SageMaker'da Whisper modellerine ince ayar yapın | Amazon Web Hizmetleri

Whisper, çeşitli dilleri ve görevleri kapsayan, web'den alınan 680,000 saatlik denetlenen veriler kullanılarak eğitilmiş bir Otomatik Konuşma Tanıma (ASR) modelidir. Sınırlamalarından biri, Marathi dili ve Dravidian dilleri gibi düşük kaynaklı dillerdeki düşük performanstır ve bu, ince ayar ile giderilebilir. Bununla birlikte, bir Whisper modeline ince ayar yapmak, hem hesaplama kaynakları hem de depolama gereksinimleri açısından önemli bir zorluk haline geldi. Whisper modelleri için beş ila on tam ince ayar çalıştırması yaklaşık 100 saat A100 GPU (40 GB SXM4) gerektirir (model boyutlarına ve model parametrelerine göre değişir) ve her ince ayarlı kontrol noktası yaklaşık 7 GB depolama alanı gerektirir. Yüksek hesaplama ve depolama taleplerinin bu kombinasyonu, özellikle sınırlı kaynaklara sahip ortamlarda önemli engeller oluşturabilir ve çoğu zaman anlamlı sonuçlara ulaşmayı son derece zorlaştırabilir.

Düşük Sıralı Uyarlama olarak da bilinir LoRA, modelin ince ayarına benzersiz bir yaklaşım getiriyor. Önceden eğitilmiş model ağırlıklarını statik bir durumda tutar ve Transformer yapısının her katmanına eğitilebilir sıralama ayrıştırma matrisleri ekler. Bu yöntem, aşağı akış görevleri için gereken eğitilebilir parametrelerin sayısını 10,000 kat azaltabilir ve GPU bellek gereksinimini 3 kat azaltabilir. Model kalitesi açısından LoRA'nın, eğitilebilir daha az parametreyle çalışmasına rağmen geleneksel ince ayar yöntemlerinin performansıyla eşleştiği ve hatta bu performansı aştığı gösterilmiştir (orijinalden elde edilen sonuçlara bakın) LoRA kağıdı). Aynı zamanda artan eğitim verimi avantajını da sunar. Farklı olarak adaptör LoRA, çıkarım sırasında ek gecikmeye neden olmaz, böylece dağıtım aşamasında modelin verimliliği korunur. LoRA kullanılarak Whisper'ın ince ayarının yapılması umut verici sonuçlar verdi. Örneğin Whisper-Large-v2'yi ele alalım: 3 GB bellek GPU'sunda 12 saatlik ortak ses veri kümesiyle 8 dönemi çalıştırmak 6-8 saat sürerKarşılaştırılabilir performansla tam ince ayardan 5 kat daha hızlıdır.

Amazon Adaçayı Yapıcı Whisper'ın LoRA ince ayarını uygulamak için ideal bir platformdur. Amazon SageMaker, tam olarak yönetilen altyapı, araçlar ve iş akışlarıyla her türlü kullanım senaryosuna yönelik makine öğrenimi modelleri oluşturmanıza, eğitmenize ve dağıtmanıza olanak tanır. Ek model eğitimi avantajları arasında Yönetilen Nokta Eğitimi ile daha düşük eğitim maliyetleri, modelleri ve eğitim veri kümelerini AWS GPU bulut sunucuları arasında bölmek için dağıtılmış eğitim kitaplıkları ve Daha. Eğitilmiş SageMaker modelleri, doğrudan SageMaker üzerinde çıkarım yapmak üzere kolayca dağıtılabilir. Bu yazıda, SageMaker'da LoRA ince ayarını uygulamaya yönelik adım adım bir kılavuz sunuyoruz. Bu uygulamaya ilişkin kaynak kodu şu adreste bulunabilir: GitHub.

Veri kümesini ince ayar için hazırlama

İnce ayar görevi için düşük kaynaklı Marathi dilini kullanıyoruz. Kullanmak Sarılma Yüzü veri kümeleri Kitaplığınızda Common Voice veri kümesini indirebilir ve eğitim ve test veri kümelerine bölebilirsiniz. Aşağıdaki koda bakın:

from datasets import load_dataset, DatasetDict language = "Marathi"
language_abbr = "mr"
task = "transcribe"
dataset_name = "mozilla-foundation/common_voice_11_0" common_voice = DatasetDict()
common_voice["train"] = load_dataset(dataset_name, language_abbr, split="train+validation", use_auth_token=True)
common_voice["test"] = load_dataset(dataset_name, language_abbr, split="test", use_auth_token=True)

Fısıltı konuşma tanıma modeli, ses girişlerinin 16kHz mono 16 bit işaretli tamsayı WAV dosyaları. Common Voice veri kümesi 48K örnekleme hızına sahip olduğundan, önce ses dosyalarını alt örneklemeniz gerekecektir. Daha sonra, log-mel spektrogram özelliklerini çıkarmak için Whisper'ın özellik çıkarıcısını sese uygulamanız ve transkriptteki her cümleyi bir simge kimliğine dönüştürmek için Whisper'ın simgeleştiricisini çerçeveli özelliklere uygulamanız gerekir. Aşağıdaki koda bakın:

from transformers import WhisperFeatureExtractor
from transformers import WhisperTokenizer feature_extractor = WhisperFeatureExtractor.from_pretrained(model_name_or_path)
tokenizer = WhisperTokenizer.from_pretrained(model_name_or_path, language=language, task=task) def prepare_dataset(batch):
# load and resample audio data from 48 to 16kHz
audio = batch["audio"] # compute log-Mel input features from input audio array
batch["input_features"] = feature_extractor(audio["array"], sampling_rate=audio["sampling_rate"]).input_features[0] # encode target text to label ids
batch["labels"] = tokenizer(batch["sentence"]).input_ids
return batch #apply the data preparation function to all of our fine-tuning dataset samples using dataset's .map method.
common_voice = common_voice.map(prepare_dataset, remove_columns=common_voice.column_names["train"], num_proc=2)
common_voice.save_to_disk("marathi-common-voice-processed")
!aws s3 cp --recursive "marathi-common-voice-processed" s3://<Your-S3-Bucket>

Tüm eğitim örneklerini işledikten sonra işlenen verileri Amazon S3'e yükleyin, böylece işlenen eğitim verilerini ince ayar aşamasında kullanırken HızlıDosya S3 dosyasını yerel diske kopyalamak yerine doğrudan bağlamak için:

from sagemaker.inputs import TrainingInput
training_input_path=s3uri
training = TrainingInput(
s3_data_type='S3Prefix', # Available Options: S3Prefix | ManifestFile | AugmentedManifestFile
s3_data=training_input_path,
distribution='FullyReplicated', # Available Options: FullyReplicated | ShardedByS3Key
input_mode='FastFile'
)

Modeli eğitin

Gösterim amacıyla, Hugging Face transformatör kitaplığı aracılığıyla içe aktarılabilen, önceden eğitilmiş model olarak (whisper v2 artık mevcuttur) fısıltı-büyük-v3'yi kullanıyoruz. Kullanabilirsiniz 8 bitlik nicemleme eğitim verimliliğini daha da artırmak. 8 bit niceleme, kayan noktadan 8 bit tam sayılara yuvarlayarak bellek optimizasyonu sunar. Çıkarım sırasında hassasiyetten çok fazla ödün vermeden azaltılmış bellekten tasarruf sağlamak için yaygın olarak kullanılan bir model sıkıştırma tekniğidir.

Önceden eğitilmiş modeli 8 bitlik nicelenmiş formatta yüklemek için, aşağıdaki kodda gösterildiği gibi modeli başlatırken basitçe load_in_8bit=True argümanını ekleriz. Bu, 8 bit'e nicelenen model ağırlıklarını yükleyerek bellek alanını azaltır.

from transformers import WhisperForConditionalGeneration model = WhisperForConditionalGeneration.from_pretrained(model_name_or_path, load_in_8bit=True, device_map="auto")

Hugging Face'in LoRA uygulamasını kullanıyoruz tepe paket. LoRA kullanarak bir modele ince ayar yapmak için dört adım vardır:

  1. Bir temel model oluşturun (son adımda yaptığımız gibi).
  2. Bir yapılandırma oluşturun (LoraConfig) LoRA'ya özgü parametrelerin tanımlandığı yer.
  3. Temel modeli şununla sarın: get_peft_model() eğitilebilir bir şey almak için PeftModel.
  4. eğitmek PeftModel temel model olarak

Aşağıdaki koda bakın:

from peft import LoraConfig, get_peft_model config = LoraConfig(r=32, lora_alpha=64, target_modules=["q_proj", "v_proj"], lora_dropout=0.05, bias="none")
model = get_peft_model(model, config) training_args = Seq2SeqTrainingArguments(
output_dir=args.model_dir,
per_device_train_batch_size=int(args.train_batch_size),
gradient_accumulation_steps=1,
learning_rate=float(args.learning_rate),
warmup_steps=args.warmup_steps,
num_train_epochs=args.num_train_epochs,
evaluation_strategy="epoch",
fp16=True,
per_device_eval_batch_size=args.eval_batch_size,
generation_max_length=128,
logging_steps=25,
remove_unused_columns=False,
label_names=["labels"],
)
trainer = Seq2SeqTrainer(
args=training_args,
model=model,
train_dataset=train_dataset["train"],
eval_dataset=train_dataset.get("test", train_dataset["test"]),
data_collator=data_collator,
tokenizer=processor.feature_extractor,
)

Çalıştırmak için Adaçayı Yapıcı eğitimi iş olarak kendi Docker konteynerimizi getiriyoruz. Docker görüntüsünü şuradan indirebilirsiniz: GitHubffmpeg4 ve git-lfs'nin diğer Python gereksinimleriyle birlikte paketlendiği yer. Kendi Docker kapsayıcınızı SageMaker ile çalışacak şekilde nasıl uyarlayacağınız hakkında daha fazla bilgi edinmek için bkz. Kendi eğitim konteynerinizi uyarlama. Daha sonra Sarılma Yüz Tahmincisini kullanabilir ve bir SageMaker eğitim işine başlayabilirsiniz:

OUTPUT_PATH= f's3://{BUCKET}/{PREFIX}/{TRAINING_JOB_NAME}/output/' huggingface_estimator = HuggingFace(entry_point='train.sh',
source_dir='./src',
output_path= OUTPUT_PATH,
instance_type=instance_type,
instance_count=1,
# transformers_version='4.17.0',
# pytorch_version='1.10.2',
py_version='py310',
image_uri=<ECR-PATH>,
role=ROLE,
metric_definitions = metric_definitions,
volume_size=200,
distribution=distribution,
keep_alive_period_in_seconds=1800,
environment=environment,
) huggingface_estimator.fit(job_name=TRAINING_JOB_NAME, wait=False)

LoRA'nın uygulanması, Whisper büyük ince ayar görevini tek bir GPU örneğinde (örneğin, ml.g5.2xlarge) çalıştırmamızı sağladı. Karşılaştırıldığında, Whisper'ın büyük tam ince ayar görevi birden fazla GPU (örneğin, ml.p4d.24xlarge) ve çok daha uzun bir eğitim süresi gerektirir. Daha spesifik olarak, deneyimimiz, tam ince ayar görevinin LoRA yaklaşımına kıyasla 24 kat daha fazla GPU saati gerektirdiğini gösterdi.

Model performansını değerlendirin

İnce ayarlı Whisper modelinin performansını değerlendirmek için, uzatılmış bir test seti üzerinde kelime hata oranını (WER) hesaplıyoruz. WER, tahmin edilen transkript ile temel gerçek transkripti arasındaki farkı ölçer. Daha düşük bir WER daha iyi performansı gösterir. Aşağıdaki komut dosyasını önceden eğitilmiş model ve ince ayarlı modelle çalıştırabilir ve bunların WER farklarını karşılaştırabilirsiniz:

metric = evaluate.load("wer") eval_dataloader = DataLoader(common_voice["test"], batch_size=8, collate_fn=data_collator) model.eval()
for step, batch in enumerate(tqdm(eval_dataloader)):
with torch.cuda.amp.autocast():
with torch.no_grad():
generated_tokens = (
model.generate(
input_features=batch["input_features"].to("cuda"),
decoder_input_ids=batch["labels"][:, :4].to("cuda"),
max_new_tokens=255,
)
.cpu()
.numpy()
)
labels = batch["labels"].cpu().numpy()
labels = np.where(labels != -100, labels, tokenizer.pad_token_id)
decoded_preds = tokenizer.batch_decode(generated_tokens, skip_special_tokens=True)
decoded_labels = tokenizer.batch_decode(labels, skip_special_tokens=True)
metric.add_batch(
predictions=decoded_preds,
references=decoded_labels,
)
del generated_tokens, labels, batch
gc.collect()
wer = 100 * metric.compute()
print(f"{wer=}")

Sonuç

Bu yazıda, son teknoloji ürünü bir konuşma tanıma modeli olan Whisper'ın ince ayarını gösterdik. Özellikle Hugging Face'in PEFT LoRA'sını kullandık ve verimli eğitim için 8 bit nicelemeyi etkinleştirdik. Ayrıca SageMaker'da eğitim işinin nasıl yürütüleceğini de gösterdik.

Bu önemli bir ilk adım olmasına rağmen, fısıltı modelini daha da geliştirmek için bu çalışmayı geliştirebileceğiniz birkaç yol vardır. İleriye dönük olarak, eğitimi çok daha büyük bir veri kümesinde ölçeklendirmek için SageMaker dağıtılmış eğitimini kullanmayı düşünün. Bu, modelin daha çeşitli ve kapsamlı veriler üzerinde eğitim almasına ve doğruluğu artırmasına olanak tanıyacak. Gerçek zamanlı konuşma tanımayı etkinleştirmek için Whisper modelini sunarken gecikmeyi de optimize edebilirsiniz. Ek olarak, model mimarisinde ve eğitim planlarında değişiklik yapılmasını gerektiren daha uzun ses transkripsiyonlarını ele alacak şekilde çalışmayı genişletebilirsiniz.

Teşekkür

Yazarlar, gönderiye ilişkin anlayışlı geri bildirimleri ve incelemeleri için Paras Mehra, John Sol ve Evandro Franco'ya şükranlarını sunarlar.


Yazarlar Hakkında

LoRA ile Amazon SageMaker'da Whisper modellerine ince ayar yapın | Amazon Web Hizmetleri PlatoBlockchain Veri Zekası. Dikey Arama. Ai.Jun Shi Amazon Web Services'te (AWS) Kıdemli Çözüm Mimarıdır. Şu anki odak alanları AI/ML altyapısı ve uygulamalarıdır. FinTech endüstrisinde yazılım mühendisi olarak on yıldan fazla deneyime sahiptir.

LoRA ile Amazon SageMaker'da Whisper modellerine ince ayar yapın | Amazon Web Hizmetleri PlatoBlockchain Veri Zekası. Dikey Arama. Ai.Dr Çangşa Ma AWS'de AI/ML Uzmanıdır. Bilgisayar Bilimleri alanında doktorası, Eğitim Psikolojisi alanında yüksek lisans derecesi olan ve veri bilimi ve AI/ML'de bağımsız danışmanlık alanında uzun yıllara dayanan deneyime sahip bir teknoloji uzmanıdır. Makine ve insan zekasına yönelik metodolojik yaklaşımları araştırma konusunda tutkulu. İş dışında yürüyüş yapmayı, yemek yapmayı, yemek avlamayı ve arkadaşları ve aileleriyle vakit geçirmeyi seviyor.

Zaman Damgası:

Den fazla AWS Makine Öğrenimi