জেনারেটিভ ডেটা ইন্টেলিজেন্স

অ্যামাজন সেজমেকারে অ্যাসিঙ্ক্রোনাস এন্ডপয়েন্ট হিসাবে একটি আলিঙ্গন মুখ (PyAnnote) স্পিকার ডায়ারাইজেশন মডেল স্থাপন করুন | আমাজন ওয়েব সার্ভিসেস

তারিখ:

স্পীকার ডায়েরাইজেশন, অডিও বিশ্লেষণের একটি অপরিহার্য প্রক্রিয়া, স্পিকার পরিচয়ের উপর ভিত্তি করে একটি অডিও ফাইলকে ভাগ করে। এই পোস্টটি স্পিকার ডায়ারাইজেশনের জন্য Hugging Face-এর PyAnote-এর সাথে একীভূত করার বিষয়ে আলোচনা করে আমাজন সেজমেকার অ্যাসিঙ্ক্রোনাস এন্ডপয়েন্ট।

আমরা AWS ক্লাউডে SageMaker ব্যবহার করে কীভাবে স্পিকার সেগমেন্টেশন এবং ক্লাস্টারিং সমাধান স্থাপন করতে হয় সে সম্পর্কে একটি বিস্তৃত নির্দেশিকা প্রদান করি। আপনি মাল্টি-স্পিকার (100 টির বেশি) অডিও রেকর্ডিংয়ের সাথে কাজ করে এমন অ্যাপ্লিকেশনগুলির জন্য এই সমাধানটি ব্যবহার করতে পারেন।

সমাধান ওভারভিউ

আমাজন ট্রান্সক্রাইব AWS-এ স্পীকার ডায়ারাইজেশনের জন্য গো-টু পরিষেবা। যাইহোক, অ-সমর্থিত ভাষাগুলির জন্য, আপনি অন্যান্য মডেলগুলি ব্যবহার করতে পারেন (আমাদের ক্ষেত্রে, PyAnnote) যা অনুমানের জন্য SageMaker-এ স্থাপন করা হবে। ছোট অডিও ফাইলের জন্য যেখানে অনুমান 60 সেকেন্ড পর্যন্ত সময় নেয়, আপনি ব্যবহার করতে পারেন বাস্তব সময়ের অনুমান. 60 সেকেন্ডের বেশি সময় ধরে, অসমনিয়ত অনুমান ব্যবহার করা উচিত। অ্যাসিঙ্ক্রোনাস ইনফারেন্সের অতিরিক্ত সুবিধা হল যখন প্রক্রিয়া করার জন্য কোন অনুরোধ না থাকে তখন স্বয়ংক্রিয়ভাবে দৃষ্টান্তের সংখ্যাকে শূন্যে স্কেল করে খরচ সাশ্রয় হয়।

আলিঙ্গন মুখ মেশিন লার্নিং (ML) মডেলের জন্য একটি জনপ্রিয় ওপেন সোর্স হাব। AWS এবং Hugging Face আছে a অংশীদারিত্ব যেটি PyTorch বা TensorFlow-এ প্রশিক্ষণ এবং অনুমানের জন্য AWS ডিপ লার্নিং কন্টেনার (DLCs) এর একটি সেট সহ SageMaker এর মাধ্যমে একটি নিরবচ্ছিন্ন একীকরণের অনুমতি দেয় এবং SageMaker Python SDK-এর জন্য হাগিং ফেস এস্টিমেটর এবং ভবিষ্যদ্বাণী করে৷ SageMaker বৈশিষ্ট্য এবং ক্ষমতা বিকাশকারী এবং ডেটা বিজ্ঞানীদের AWS-এ প্রাকৃতিক ভাষা প্রক্রিয়াকরণ (NLP) সহজে শুরু করতে সাহায্য করে।

এই সমাধানের জন্য ইন্টিগ্রেশনের সাথে জড়িয়ে আছে হাগিং ফেসের প্রাক-প্রশিক্ষিত স্পিকার ডায়ারাইজেশন মডেল ব্যবহার করে PyAnote লাইব্রেরি. PyAnnote হল একটি ওপেন সোর্স টুলকিট যা স্পীকার ডায়েরাইজেশনের জন্য পাইথনে লেখা। নমুনা অডিও ডেটাসেটে প্রশিক্ষিত এই মডেলটি অডিও ফাইলে কার্যকরী স্পিকার পার্টিশনিং সক্ষম করে। মডেলটি SageMaker-এ একটি অ্যাসিঙ্ক্রোনাস এন্ডপয়েন্ট সেটআপ হিসাবে স্থাপন করা হয়েছে, ডায়ারাইজেশন কাজগুলির দক্ষ এবং মাপযোগ্য প্রক্রিয়াকরণ প্রদান করে।

নিম্নলিখিত চিত্রটি সমাধানের স্থাপত্যকে চিত্রিত করে।সমাধান আর্কিটেকচার

এই পোস্টের জন্য, আমরা নিম্নলিখিত অডিও ফাইল ব্যবহার করি।

স্টেরিও বা মাল্টি-চ্যানেল অডিও ফাইলগুলি চ্যানেলগুলির গড় করে স্বয়ংক্রিয়ভাবে মনোতে মিশ্রিত হয়। একটি ভিন্ন হারে নমুনা করা অডিও ফাইলগুলি লোড হওয়ার পরে স্বয়ংক্রিয়ভাবে 16kHz এ পুনরায় নমুনা করা হয়।

পূর্বশর্ত

নিম্নলিখিত পূর্বশর্তগুলি সম্পূর্ণ করুন:

  1. একটি SageMaker ডোমেন তৈরি করুন.
  2. নিশ্চিত করুন যে আপনার এডাব্লুএস আইডেন্টিটি এবং অ্যাক্সেস ম্যানেজমেন্ট (IAM) ব্যবহারকারীর একটি তৈরি করার জন্য প্রয়োজনীয় অ্যাক্সেসের অনুমতি রয়েছে সেজমেকার ভূমিকা.
  3. নিশ্চিত করুন যে AWS অ্যাকাউন্টে একটি ml.g5.2xlarge উদাহরণের জন্য SageMaker এন্ডপয়েন্ট হোস্ট করার জন্য একটি পরিষেবা কোটা রয়েছে৷

Hugging Face থেকে PyAnnote স্পিকার ডায়েরাইজেশন অ্যাক্সেস করার জন্য একটি মডেল ফাংশন তৈরি করুন

আপনি পছন্দসই প্রাক-প্রশিক্ষিত অ্যাক্সেস করতে Hugging Face Hub ব্যবহার করতে পারেন PyAnote স্পিকার ডায়ারাইজেশন মডেল. SageMaker এন্ডপয়েন্ট তৈরি করার সময় আপনি মডেল ফাইল ডাউনলোড করার জন্য একই স্ক্রিপ্ট ব্যবহার করেন।

মুখ আলিঙ্গন

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

from PyAnnote.audio import Pipeline

def model_fn(model_dir):
# Load the model from the specified model directory
model = Pipeline.from_pretrained(
"PyAnnote/speaker-diarization-3.1",
use_auth_token="Replace-with-the-Hugging-face-auth-token")
return model

মডেল কোড প্যাকেজ

inference.py এর মত প্রয়োজনীয় ফাইলগুলি প্রস্তুত করুন, যাতে অনুমান কোড থাকে:

%%writefile model/code/inference.py
from PyAnnote.audio import Pipeline
import subprocess
import boto3
from urllib.parse import urlparse
import pandas as pd
from io import StringIO
import os
import torch

def model_fn(model_dir):
    # Load the model from the specified model directory
    model = Pipeline.from_pretrained(
        "PyAnnote/speaker-diarization-3.1",
        use_auth_token="hf_oBxxxxxxxxxxxx)
    return model 


def diarization_from_s3(model, s3_file, language=None):
    s3 = boto3.client("s3")
    o = urlparse(s3_file, allow_fragments=False)
    bucket = o.netloc
    key = o.path.lstrip("/")
    s3.download_file(bucket, key, "tmp.wav")
    result = model("tmp.wav")
    data = {} 
    for turn, _, speaker in result.itertracks(yield_label=True):
        data[turn] = (turn.start, turn.end, speaker)
    data_df = pd.DataFrame(data.values(), columns=["start", "end", "speaker"])
    print(data_df.shape)
    result = data_df.to_json(orient="split")
    return result


def predict_fn(data, model):
    s3_file = data.pop("s3_file")
    language = data.pop("language", None)
    result = diarization_from_s3(model, s3_file, language)
    return {
        "diarization_from_s3": result
    }

প্রস্তুত কর একটি requirements.txt ফাইল, যাতে অনুমান চালানোর জন্য প্রয়োজনীয় পাইথন লাইব্রেরি রয়েছে:

with open("model/code/requirements.txt", "w") as f:
    f.write("transformers==4.25.1n")
    f.write("boto3n")
    f.write("PyAnnote.audion")
    f.write("soundfilen")
    f.write("librosan")
    f.write("onnxruntimen")
    f.write("wgetn")
    f.write("pandas")

অবশেষে, কম্প্রেস inference.py এবং requirements.txt ফাইল এবং এটি হিসাবে সংরক্ষণ করুন model.tar.gz:

!tar zcvf model.tar.gz *

একটি SageMaker মডেল কনফিগার করুন

ইমেজ URI, মডেল ডেটা অবস্থান উল্লেখ করে একটি SageMaker মডেল রিসোর্স সংজ্ঞায়িত করুন আমাজন সিম্পল স্টোরেজ সার্ভিস (S3), এবং SageMaker ভূমিকা:

import sagemaker
import boto3

sess = sagemaker.Session()

sagemaker_session_bucket = None
if sagemaker_session_bucket is None and sess is not None:
    sagemaker_session_bucket = sess.default_bucket()

try:
    role = sagemaker.get_execution_role()
except ValueError:
    iam = boto3.client("iam")
    role = iam.get_role(RoleName="sagemaker_execution_role")["Role"]["Arn"]

sess = sagemaker.Session(default_bucket=sagemaker_session_bucket)

print(f"sagemaker role arn: {role}")
print(f"sagemaker bucket: {sess.default_bucket()}")
print(f"sagemaker session region: {sess.boto_region_name}")

Amazon S3 এ মডেলটি আপলোড করুন

একটি S3 বালতিতে জিপ করা PyAnote Hugging Face মডেল ফাইলটি আপলোড করুন:

s3_location = f"s3://{sagemaker_session_bucket}/whisper/model/model.tar.gz"
!aws s3 cp model.tar.gz $s3_location

একটি SageMaker অ্যাসিঙ্ক্রোনাস এন্ডপয়েন্ট তৈরি করুন

প্রদত্ত অ্যাসিঙ্ক্রোনাস ইনফারেন্স কনফিগারেশন ব্যবহার করে SageMaker-এ মডেল স্থাপনের জন্য একটি অ্যাসিঙ্ক্রোনাস এন্ডপয়েন্ট কনফিগার করুন:

from sagemaker.huggingface.model import HuggingFaceModel
from sagemaker.async_inference.async_inference_config import AsyncInferenceConfig
from sagemaker.s3 import s3_path_join
from sagemaker.utils import name_from_base

async_endpoint_name = name_from_base("custom-asyc")

# create Hugging Face Model Class
huggingface_model = HuggingFaceModel(
    model_data=s3_location,  # path to your model and script
    role=role,  # iam role with permissions to create an Endpoint
    transformers_version="4.17",  # transformers version used
    pytorch_version="1.10",  # pytorch version used
    py_version="py38",  # python version used
)

# create async endpoint configuration
async_config = AsyncInferenceConfig(
    output_path=s3_path_join(
        "s3://", sagemaker_session_bucket, "async_inference/output"
    ),  # Where our results will be stored
    # Add nofitication SNS if needed
    notification_config={
        # "SuccessTopic": "PUT YOUR SUCCESS SNS TOPIC ARN",
        # "ErrorTopic": "PUT YOUR ERROR SNS TOPIC ARN",
    },  #  Notification configuration
)

env = {"MODEL_SERVER_WORKERS": "2"}

# deploy the endpoint endpoint
async_predictor = huggingface_model.deploy(
    initial_instance_count=1,
    instance_type="ml.xx",
    async_inference_config=async_config,
    endpoint_name=async_endpoint_name,
    env=env,
)

শেষবিন্দু পরীক্ষা করুন

ডায়েরাইজেশনের জন্য একটি অডিও ফাইল পাঠিয়ে এবং নির্দিষ্ট S3 আউটপুট পাথে সঞ্চিত JSON আউটপুট পুনরুদ্ধার করে শেষ পয়েন্ট কার্যকারিতা মূল্যায়ন করুন:

# Replace with a path to audio object in S3
from sagemaker.async_inference import WaiterConfig
res = async_predictor.predict_async(data=data)
print(f"Response output path: {res.output_path}")
print("Start Polling to get response:")

config = WaiterConfig(
  max_attempts=10, #  number of attempts
  delay=10#  time in seconds to wait between attempts
  )
res.get_result(config)
#import waiterconfig

এই সমাধানটি স্কেলে স্থাপন করতে, আমরা ব্যবহার করার পরামর্শ দিই এডাব্লুএস ল্যাম্বদা, অ্যামাজন সাধারণ বিজ্ঞপ্তি পরিষেবা (আমাজন এসএনএস), বা অ্যামাজন সরল সারি পরিষেবা (Amazon SQS)। এই পরিষেবাগুলি পরিমাপযোগ্যতা, ইভেন্ট-চালিত আর্কিটেকচার এবং দক্ষ সম্পদ ব্যবহারের জন্য ডিজাইন করা হয়েছে। তারা ফলাফল প্রক্রিয়াকরণ থেকে অ্যাসিঙ্ক্রোনাস ইনফারেন্স প্রক্রিয়াটিকে দ্বিগুণ করতে সাহায্য করতে পারে, আপনাকে প্রতিটি উপাদানকে স্বাধীনভাবে স্কেল করতে এবং অনুমানের অনুরোধের বিস্ফোরণগুলিকে আরও কার্যকরভাবে পরিচালনা করতে দেয়।

ফলাফল

মডেল আউটপুট সংরক্ষণ করা হয় s3://sagemaker-xxxx /async_inference/output/. আউটপুট দেখায় যে অডিও রেকর্ডিং তিনটি কলামে বিভক্ত করা হয়েছে:

  • শুরু (সেকেন্ডে শুরুর সময়)
  • শেষ (সেকেন্ডে শেষ সময়)
  • স্পিকার (স্পিকার লেবেল)

নিম্নলিখিত কোড আমাদের ফলাফলের একটি উদাহরণ দেখায়:

[0.9762308998, 8.9049235993, "SPEAKER_01"]

[9.533106961, 12.1646859083, "SPEAKER_01"]

[13.1324278438, 13.9303904924, "SPEAKER_00"]

[14.3548387097, 26.1884550085, "SPEAKER_00"]

[27.2410865874, 28.2258064516, "SPEAKER_01"]

[28.3446519525, 31.298811545, "SPEAKER_01"]

পরিষ্কার কর

আপনি MinCapacity 0 এ সেট করে একটি স্কেলিং নীতি শূন্যে সেট করতে পারেন; অ্যাসিঙ্ক্রোনাস অনুমান কোনো অনুরোধ ছাড়াই আপনাকে স্বয়ংক্রিয়ভাবে শূন্যে স্কেল করতে দেয়। আপনি শেষ বিন্দু মুছে ফেলার প্রয়োজন নেই, এটা দাঁড়িপাল্লা আবার প্রয়োজন হলে শূন্য থেকে, ব্যবহার না হলে খরচ কমানো। নিম্নলিখিত কোড দেখুন:

# Common class representing application autoscaling for SageMaker 
client = boto3.client('application-autoscaling') 

# This is the format in which application autoscaling references the endpoint
resource_id='endpoint/' + <endpoint_name> + '/variant/' + <'variant1'> 

# Define and register your endpoint variant
response = client.register_scalable_target(
    ServiceNamespace='sagemaker', 
    ResourceId=resource_id,
    ScalableDimension='sagemaker:variant:DesiredInstanceCount', # The number of EC2 instances for your Amazon SageMaker model endpoint variant.
    MinCapacity=0,
    MaxCapacity=5
)

আপনি যদি শেষ পয়েন্টটি মুছতে চান তবে নিম্নলিখিত কোডটি ব্যবহার করুন:

async_predictor.delete_endpoint(async_endpoint_name)

অ্যাসিঙ্ক্রোনাস এন্ডপয়েন্ট স্থাপনের সুবিধা

এই সমাধান নিম্নলিখিত সুবিধা প্রদান করে:

  • সমাধানটি দক্ষতার সাথে একাধিক বা বড় অডিও ফাইল পরিচালনা করতে পারে।
  • এই উদাহরণটি প্রদর্শনের জন্য একটি একক উদাহরণ ব্যবহার করে। আপনি যদি শত শত বা হাজার হাজার ভিডিওর জন্য এই সমাধানটি ব্যবহার করতে চান এবং একাধিক দৃষ্টান্ত জুড়ে প্রক্রিয়া করার জন্য একটি অ্যাসিঙ্ক্রোনাস এন্ডপয়েন্ট ব্যবহার করতে চান তবে আপনি একটি ব্যবহার করতে পারেন স্বয়ংক্রিয় স্কেলিং নীতি, যা বিপুল সংখ্যক উৎস নথির জন্য ডিজাইন করা হয়েছে। অটো স্কেলিং আপনার কাজের চাপে পরিবর্তনের প্রতিক্রিয়া হিসাবে একটি মডেলের জন্য প্রবিধানের সংখ্যা গতিশীলভাবে সামঞ্জস্য করে।
  • সমাধানটি রিয়েল-টাইম ইনফারেন্স থেকে দীর্ঘ-চলমান কাজগুলিকে আলাদা করে সংস্থানগুলিকে অপ্টিমাইজ করে এবং সিস্টেমের লোড হ্রাস করে।

উপসংহার

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

আপনার অডিও প্রকল্পগুলির জন্য অ্যাসিঙ্ক্রোনাস স্পিকার ডায়েরাইজেশনের সাথে আজই শুরু করুন৷ আপনার নিজের অ্যাসিঙ্ক্রোনাস ডায়েরাইজেশন এন্ডপয়েন্ট আপ এবং চালানোর বিষয়ে আপনার কোনো প্রশ্ন থাকলে মন্তব্যে যোগাযোগ করুন।


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

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

কিরণ চাল্লাপল্লী AWS পাবলিক সেক্টরের সাথে একটি গভীর প্রযুক্তি ব্যবসা বিকাশকারী। তার এআই/এমএল-এ 8 বছরেরও বেশি অভিজ্ঞতা এবং 23 বছরের সামগ্রিক সফ্টওয়্যার বিকাশ এবং বিক্রয় অভিজ্ঞতা রয়েছে। কিরন সারা ভারত জুড়ে পাবলিক সেক্টরের ব্যবসাগুলিকে ক্লাউড-ভিত্তিক সমাধানগুলি অন্বেষণ করতে এবং সহ-তৈরি করতে সাহায্য করে যা AI, ML, এবং জেনারেটিভ AI-সহ বড় ভাষা মডেলগুলি-প্রযুক্তিগুলি ব্যবহার করে৷

স্পট_আইএমজি

সর্বশেষ বুদ্ধিমত্তা

স্পট_আইএমজি

আমাদের সাথে খোস গল্প কর

হাই সেখানে! আপনাকে কিভাবে সাহায্য করতে পারি?