LoRA এর সাথে Amazon SageMaker-এ ফাইন-টিউন হুইস্পার মডেল আমাজন ওয়েব সার্ভিসেস

LoRA এর সাথে Amazon SageMaker-এ ফাইন-টিউন হুইস্পার মডেল আমাজন ওয়েব সার্ভিসেস

হুইস্পার হল একটি স্বয়ংক্রিয় স্পিচ রিকগনিশন (ASR) মডেল যা ওয়েব থেকে 680,000 ঘণ্টার তত্ত্বাবধানে থাকা ডেটা ব্যবহার করে প্রশিক্ষিত হয়েছে, যা বিভিন্ন ভাষা এবং কাজের পরিধিকে অন্তর্ভুক্ত করে। এর সীমাবদ্ধতাগুলির মধ্যে একটি হল নিম্ন-সম্পদ ভাষা যেমন মারাঠি ভাষা এবং দ্রাবিড় ভাষাগুলির নিম্ন-কর্মক্ষমতা, যা সূক্ষ্ম-সুরকরণের মাধ্যমে প্রতিকার করা যেতে পারে। যাইহোক, কম্পিউটেশনাল রিসোর্স এবং স্টোরেজ প্রয়োজনীয়তা উভয় ক্ষেত্রেই হুইস্পার মডেলকে ফাইন-টিউন করা একটি যথেষ্ট চ্যালেঞ্জ হয়ে দাঁড়িয়েছে। হুইস্পার মডেলগুলির জন্য সম্পূর্ণ ফাইন-টিউনিং এর পাঁচ থেকে দশ রানের জন্য প্রায় 100 ঘন্টা A100 GPU (40 GB SXM4) (মডেলের আকার এবং মডেলের প্যারামিটারের উপর ভিত্তি করে পরিবর্তিত হয়), এবং প্রতিটি সূক্ষ্ম-টিউন করা চেকপয়েন্টের জন্য প্রায় 7 GB স্টোরেজ স্পেস প্রয়োজন। উচ্চ কম্পিউটেশনাল এবং স্টোরেজ চাহিদার এই সংমিশ্রণটি উল্লেখযোগ্য বাধা সৃষ্টি করতে পারে, বিশেষ করে সীমিত সংস্থান সহ পরিবেশে, প্রায়শই অর্থপূর্ণ ফলাফল অর্জন করা ব্যতিক্রমীভাবে কঠিন করে তোলে।

নিম্ন-র্যাঙ্ক অভিযোজন, নামেও পরিচিত LoRA, মডেল ফাইন-টিউনিংয়ের জন্য একটি অনন্য পদ্ধতি গ্রহণ করে। এটি একটি স্থির অবস্থায় প্রাক-প্রশিক্ষিত মডেলের ওজন বজায় রাখে এবং ট্রান্সফরমার কাঠামোর প্রতিটি স্তরে প্রশিক্ষণযোগ্য র‌্যাঙ্ক পচন ম্যাট্রিক্স প্রবর্তন করে। এই পদ্ধতিটি ডাউনস্ট্রিম কাজের জন্য প্রয়োজনীয় প্রশিক্ষণযোগ্য প্যারামিটারের সংখ্যা 10,000 গুণ কমাতে পারে এবং GPU মেমরির প্রয়োজনীয়তা 3 গুণ কমাতে পারে। মডেলের মানের দিক থেকে, কম প্রশিক্ষিত প্যারামিটারের সাথে কাজ করা সত্ত্বেও, LoRA-কে প্রথাগত ফাইন-টিউনিং পদ্ধতির পারফরম্যান্সের সাথে মেলে বা অতিক্রম করতে দেখা গেছে (মূল থেকে ফলাফল দেখুন LoRA কাগজ) এটি বর্ধিত প্রশিক্ষণ থ্রুপুট সুবিধা প্রদান করে। অসদৃশ এডাপটার পদ্ধতিতে, LoRA অনুমানের সময় অতিরিক্ত লেটেন্সি প্রবর্তন করে না, যার ফলে স্থাপনার পর্যায়ে মডেলের দক্ষতা বজায় থাকে। LoRA ব্যবহার করে ফাইন-টিউনিং হুইস্পার আশাব্যঞ্জক ফলাফল দেখিয়েছে। Whisper-Large-v2 নিন, উদাহরণস্বরূপ: 3 জিবি মেমরির জিপিইউতে 12-ঘন্টার সাধারণ ভয়েস ডেটাসেটের সাথে 8-যুগগুলি চালাতে 6-8 ঘন্টা সময় লাগে, যা তুলনামূলক কর্মক্ষমতা সহ সম্পূর্ণ ফাইন-টিউনিংয়ের চেয়ে 5 গুণ দ্রুত।

আমাজন সেজমেকার হুইস্পারের LoRA ফাইন-টিউনিং বাস্তবায়নের জন্য একটি আদর্শ প্ল্যাটফর্ম। Amazon SageMaker আপনাকে সম্পূর্ণরূপে পরিচালিত পরিকাঠামো, সরঞ্জাম এবং কর্মপ্রবাহ সহ যেকোন ব্যবহারের ক্ষেত্রে মেশিন লার্নিং মডেলগুলি তৈরি করতে, প্রশিক্ষণ দিতে এবং স্থাপন করতে সক্ষম করে৷ অতিরিক্ত মডেল প্রশিক্ষণ সুবিধার মধ্যে ম্যানেজড স্পট ট্রেনিং-এর সাথে কম প্রশিক্ষণের খরচ, মডেলকে বিভক্ত করার জন্য বিতরণ করা প্রশিক্ষণ লাইব্রেরি এবং AWS GPU দৃষ্টান্ত জুড়ে প্রশিক্ষণ ডেটাসেট অন্তর্ভুক্ত থাকতে পারে এবং অধিক. প্রশিক্ষিত সেজমেকার মডেলগুলি সহজেই সেজমেকারে সরাসরি অনুমানের জন্য স্থাপন করা যেতে পারে। এই পোস্টে, আমরা সেজমেকারে LoRA ফাইন-টিউনিং বাস্তবায়নের জন্য একটি ধাপে ধাপে নির্দেশিকা উপস্থাপন করি। এই বাস্তবায়নের সাথে যুক্ত সোর্স কোডটি পাওয়া যাবে GitHub.

ফাইন-টিউনিংয়ের জন্য ডেটাসেট প্রস্তুত করুন

আমরা ফাইন-টিউনিং টাস্কের জন্য কম-রিসোর্স ভাষা মারাঠি ব্যবহার করি। ব্যবহার করে আলিঙ্গন মুখ ডেটাসেট লাইব্রেরি, আপনি প্রশিক্ষণ এবং টেস্টিং ডেটাসেটে কমন ভয়েস ডেটাসেট ডাউনলোড এবং বিভক্ত করতে পারেন। নিম্নলিখিত কোড দেখুন:

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)

হুইস্পার স্পিচ রিকগনিশন মডেলের জন্য অডিও ইনপুট থাকা প্রয়োজন 16kHz মনো 16-বিট স্বাক্ষরিত পূর্ণসংখ্যা WAV ফাইল. যেহেতু কমন ভয়েস ডেটাসেটটি 48K স্যাম্পলিং রেট, আপনাকে প্রথমে অডিও ফাইলগুলি ডাউনস্যাম্পল করতে হবে। তারপর লগ-মেল স্পেকট্রোগ্রাম বৈশিষ্ট্যগুলি বের করতে আপনাকে অডিওতে হুইস্পারের বৈশিষ্ট্য এক্সট্র্যাক্টর প্রয়োগ করতে হবে এবং ট্রান্সক্রিপ্টের প্রতিটি বাক্যকে একটি টোকেন আইডিতে রূপান্তর করতে ফ্রেমযুক্ত বৈশিষ্ট্যগুলিতে হুইস্পারের টোকেনাইজার প্রয়োগ করতে হবে। নিম্নলিখিত কোড দেখুন:

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>

আপনি সমস্ত প্রশিক্ষণের নমুনাগুলি প্রক্রিয়া করার পরে, প্রক্রিয়াকৃত ডেটা Amazon S3 এ আপলোড করুন, যাতে প্রক্রিয়াকৃত প্রশিক্ষণের ডেটা সূক্ষ্ম-টিউনিং পর্যায়ে ব্যবহার করার সময়, আপনি ব্যবহার করতে পারেন ফাস্টফাইল স্থানীয় ডিস্কে অনুলিপি করার পরিবর্তে সরাসরি S3 ফাইলটি মাউন্ট করতে:

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'
)

মডেল প্রশিক্ষণ

প্রদর্শনের জন্য, আমরা whisper-large-v2 ব্যবহার করি প্রাক-প্রশিক্ষিত মডেল হিসেবে (whisper v3 এখন উপলব্ধ), যা Hugging Face ট্রান্সফরমার লাইব্রেরির মাধ্যমে আমদানি করা যেতে পারে। তুমি ব্যবহার করতে পার 8-বিট কোয়ান্টাইজেশন প্রশিক্ষণের দক্ষতা আরও উন্নত করতে। 8-বিট কোয়ান্টাইজেশন ফ্লোটিং পয়েন্ট থেকে 8-বিট পূর্ণসংখ্যাতে রাউন্ডিং করে মেমরি অপ্টিমাইজেশন অফার করে। এটি একটি সাধারণভাবে ব্যবহৃত মডেল কম্প্রেশন কৌশল যা অনুমান করার সময় খুব বেশি সূক্ষ্মতা বিসর্জন না করে কম মেমরির সঞ্চয় করে।

8-বিট কোয়ান্টাইজড ফরম্যাটে প্রাক-প্রশিক্ষিত মডেল লোড করার জন্য, আমরা মডেলটি ইনস্ট্যান্ট করার সময় load_in_8bit=True আর্গুমেন্ট যোগ করি, যেমনটি নিম্নলিখিত কোডে দেখানো হয়েছে। এটি 8 বিটে পরিমাপকৃত মডেল ওজন লোড করবে, মেমরি পদচিহ্ন হ্রাস করবে।

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

আমরা Hugging Face এর থেকে LoRA বাস্তবায়ন ব্যবহার করি peft প্যাকেজ LoRA ব্যবহার করে একটি মডেলকে ফাইন-টিউন করার জন্য চারটি ধাপ রয়েছে:

  1. একটি বেস মডেল ইনস্ট্যান্টিয়েট করুন (যেমন আমরা শেষ ধাপে করেছি)।
  2. একটি কনফিগারেশন তৈরি করুন (LoraConfig) যেখানে LoRA-নির্দিষ্ট পরামিতি সংজ্ঞায়িত করা হয়।
  3. সঙ্গে বেস মডেল মোড়ানো get_peft_model() একটি প্রশিক্ষণযোগ্য পেতে PeftModel.
  4. প্রশিক্ষণ PeftModel বেস মডেল হিসাবে।

নিম্নলিখিত কোডটি দেখুন:

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,
)

চালানো a সেজমেকার প্রশিক্ষণ কাজ, আমরা আমাদের নিজস্ব ডকার কন্টেইনার নিয়ে আসি। আপনি থেকে ডকার ইমেজ ডাউনলোড করতে পারেন GitHub, যেখানে ffmpeg4 এবং git-lfs অন্যান্য Python প্রয়োজনীয়তার সাথে একত্রে প্যাকেজ করা হয়। সেজমেকারের সাথে কাজ করার জন্য আপনার নিজের ডকার কন্টেইনারকে কীভাবে মানিয়ে নেওয়া যায় সে সম্পর্কে আরও জানতে, পড়ুন আপনার নিজস্ব প্রশিক্ষণ ধারক অভিযোজিত. তারপর আপনি হাগিং ফেস এস্টিমেটর ব্যবহার করতে পারেন এবং সেজমেকার প্রশিক্ষণের কাজ শুরু করতে পারেন:

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 বাস্তবায়ন আমাদেরকে একটি একক GPU দৃষ্টান্তে হুইস্পার বড় ফাইন-টিউনিং টাস্ক চালাতে সক্ষম করেছে (উদাহরণস্বরূপ, ml.g5.2xlarge)। তুলনামূলকভাবে, হুইস্পার বড় ফুল ফাইন-টিউনিং টাস্কের জন্য একাধিক GPU (উদাহরণস্বরূপ, ml.p4d.24xlarge) এবং অনেক বেশি প্রশিক্ষণের সময় প্রয়োজন। আরও নির্দিষ্টভাবে, আমাদের পরীক্ষায় প্রমাণিত হয়েছে যে সম্পূর্ণ ফাইন-টিউনিং টাস্কের জন্য LoRA পদ্ধতির তুলনায় 24 গুণ বেশি GPU ঘন্টা প্রয়োজন।

মডেল কর্মক্ষমতা মূল্যায়ন

ফাইন-টিউনড হুইস্পার মডেলের কর্মক্ষমতা মূল্যায়ন করার জন্য, আমরা একটি হোল্ড-আউট টেস্ট সেটে শব্দ ত্রুটির হার (WER) গণনা করি। WER পূর্বাভাসিত প্রতিলিপি এবং স্থল সত্য প্রতিলিপির মধ্যে পার্থক্য পরিমাপ করে। একটি নিম্ন WER ভাল কর্মক্ষমতা নির্দেশ করে। আপনি পূর্ব-প্রশিক্ষিত মডেল এবং ফাইন-টিউনড মডেলের বিপরীতে নিম্নলিখিত স্ক্রিপ্টটি চালাতে পারেন এবং তাদের WER পার্থক্য তুলনা করতে পারেন:

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=}")

উপসংহার

এই পোস্টে, আমরা সূক্ষ্ম-টিউনিং হুইস্পার প্রদর্শন করেছি, একটি অত্যাধুনিক স্পিচ রিকগনিশন মডেল। বিশেষ করে, আমরা Hugging Face এর PEFT LoRA ব্যবহার করেছি এবং দক্ষ প্রশিক্ষণের জন্য 8-বিট কোয়ান্টাইজেশন সক্ষম করেছি। আমরা সেজমেকারে প্রশিক্ষণের কাজটি কীভাবে চালাতে হয় তাও প্রদর্শন করেছি।

যদিও এটি একটি গুরুত্বপূর্ণ প্রথম ধাপ, তবে হুইস্পার মডেলটিকে আরও উন্নত করতে আপনি এই কাজটি তৈরি করতে পারেন এমন বিভিন্ন উপায় রয়েছে৷ সামনের দিকে, অনেক বড় ডেটাসেটে প্রশিক্ষণ স্কেল করার জন্য SageMaker বিতরণ করা প্রশিক্ষণ ব্যবহার করার কথা বিবেচনা করুন। এটি মডেলটিকে আরও বৈচিত্র্যময় এবং ব্যাপক ডেটার উপর প্রশিক্ষণের অনুমতি দেবে, সঠিকতা উন্নত করবে। রিয়েল-টাইম স্পিচ রিকগনিশন সক্ষম করতে আপনি হুইস্পার মডেল পরিবেশন করার সময় লেটেন্সিও অপ্টিমাইজ করতে পারেন। অতিরিক্তভাবে, আপনি দীর্ঘ অডিও ট্রান্সক্রিপশন পরিচালনা করতে কাজকে প্রসারিত করতে পারেন, যার জন্য মডেল আর্কিটেকচার এবং প্রশিক্ষণ স্কিমগুলিতে পরিবর্তন প্রয়োজন।

স্বীকৃতি

লেখকরা তাদের অন্তর্দৃষ্টিপূর্ণ প্রতিক্রিয়া এবং পোস্টের পর্যালোচনার জন্য পারস মেহরা, জন সল এবং ইভান্দ্রো ফ্রাঙ্কোর প্রতি কৃতজ্ঞতা প্রকাশ করেছেন।


লেখক সম্পর্কে

LoRA এর সাথে Amazon SageMaker-এ ফাইন-টিউন হুইস্পার মডেল আমাজন ওয়েব সার্ভিস প্লেটোব্লকচেইন ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.জুন শি আমাজন ওয়েব সার্ভিসেস (AWS) এর একজন সিনিয়র সলিউশন আর্কিটেক্ট। তার বর্তমান ফোকাস ক্ষেত্র হল AI/ML পরিকাঠামো এবং অ্যাপ্লিকেশন। সফটওয়্যার ইঞ্জিনিয়ার হিসেবে ফিনটেক ইন্ডাস্ট্রিতে তার এক দশকের বেশি অভিজ্ঞতা রয়েছে।

LoRA এর সাথে Amazon SageMaker-এ ফাইন-টিউন হুইস্পার মডেল আমাজন ওয়েব সার্ভিস প্লেটোব্লকচেইন ডেটা ইন্টেলিজেন্স। উল্লম্ব অনুসন্ধান. আ.ডঃ. চাংশা মা AWS-এর একজন AI/ML বিশেষজ্ঞ। তিনি কম্পিউটার সায়েন্সে পিএইচডি, শিক্ষা মনোবিজ্ঞানে স্নাতকোত্তর ডিগ্রি এবং ডেটা সায়েন্সে বছরের অভিজ্ঞতা এবং এআই/এমএলে স্বাধীন পরামর্শ সহ একজন প্রযুক্তিবিদ। তিনি মেশিন এবং মানুষের বুদ্ধিমত্তার জন্য পদ্ধতিগত পদ্ধতির গবেষণা সম্পর্কে উত্সাহী। কাজের বাইরে, তিনি হাইকিং, রান্না, খাবার শিকার এবং বন্ধু এবং পরিবারের সাথে সময় কাটাতে পছন্দ করেন।

সময় স্ট্যাম্প:

থেকে আরো এডাব্লুএস মেশিন লার্নিং

অ্যামাজন বেডরক এবং AWS স্টেপ ফাংশন ব্যবহার করে ইমেজ ব্যাকগ্রাউন্ড পরিবর্তন করার প্রক্রিয়া স্বয়ংক্রিয় করুন আমাজন ওয়েব সার্ভিসেস

উত্স নোড: 1954431
সময় স্ট্যাম্প: মার্চ 7, 2024

Amazon SageMaker খরচ বিশ্লেষণ করুন এবং ব্যবহারের উপর ভিত্তি করে খরচ অপ্টিমাইজেশান সুযোগ নির্ধারণ করুন, পার্ট 4: প্রশিক্ষণের চাকরি | আমাজন ওয়েব সার্ভিসেস

উত্স নোড: 1843423
সময় স্ট্যাম্প: 30 পারে, 2023