जनरेटिव डेटा इंटेलिजेंस

अमेज़ॅन सेजमेकर पर एक एसिंक्रोनस एंडपॉइंट के रूप में एक हगिंग फेस (पायएननोट) स्पीकर डायराइजेशन मॉडल तैनात करें | अमेज़न वेब सेवाएँ

दिनांक:

स्पीकर डायराइज़ेशन, ऑडियो विश्लेषण में एक आवश्यक प्रक्रिया, स्पीकर की पहचान के आधार पर एक ऑडियो फ़ाइल को खंडित करता है। यह पोस्ट स्पीकर डायराइजेशन के लिए हगिंग फेस के PyAnnote को एकीकृत करने पर प्रकाश डालती है अमेज़न SageMaker अतुल्यकालिक समापनबिंदु.

हम एडब्ल्यूएस क्लाउड पर सेजमेकर का उपयोग करके स्पीकर सेगमेंटेशन और क्लस्टरिंग समाधानों को तैनात करने के तरीके पर एक व्यापक गाइड प्रदान करते हैं। आप इस समाधान का उपयोग मल्टी-स्पीकर (100 से अधिक) ऑडियो रिकॉर्डिंग से संबंधित अनुप्रयोगों के लिए कर सकते हैं।

समाधान अवलोकन

Amazon Transcribe AWS में स्पीकर डायराइज़ेशन के लिए सर्वप्रमुख सेवा है। हालाँकि, गैर-समर्थित भाषाओं के लिए, आप अन्य मॉडल (हमारे मामले में, PyAnnote) का उपयोग कर सकते हैं जिन्हें अनुमान के लिए SageMaker में तैनात किया जाएगा। छोटी ऑडियो फ़ाइलों के लिए जहां अनुमान लगाने में 60 सेकंड तक का समय लगता है, आप इसका उपयोग कर सकते हैं वास्तविक समय अनुमान. 60 सेकंड से अधिक समय तक, अतुल्यकालिक अनुमान का प्रयोग करना चाहिए। एसिंक्रोनस अनुमान का अतिरिक्त लाभ यह है कि जब प्रक्रिया के लिए कोई अनुरोध नहीं होता है तो इंस्टेंस गिनती को स्वचालित रूप से शून्य पर स्केल करके लागत बचत होती है।

गले लगना मशीन लर्निंग (एमएल) मॉडल के लिए एक लोकप्रिय ओपन सोर्स हब है। AWS और हगिंग फेस में एक है साझेदारी जो PyTorch या TensorFlow में प्रशिक्षण और अनुमान के लिए AWS डीप लर्निंग कंटेनर्स (DLCs) के एक सेट के साथ SageMaker के माध्यम से एक सहज एकीकरण की अनुमति देता है, और SageMaker Python SDK के लिए हगिंग फेस अनुमानक और भविष्यवक्ता। सेजमेकर की विशेषताएं और क्षमताएं डेवलपर्स और डेटा वैज्ञानिकों को एडब्ल्यूएस पर प्राकृतिक भाषा प्रसंस्करण (एनएलपी) आसानी से शुरू करने में मदद करती हैं।

इस समाधान के एकीकरण में हगिंग फेस के पूर्व-प्रशिक्षित स्पीकर डायराइजेशन मॉडल का उपयोग करना शामिल है पायअनोट लाइब्रेरी. PyAnnote स्पीकर डायराइजेशन के लिए पायथन में लिखा गया एक ओपन सोर्स टूलकिट है। नमूना ऑडियो डेटासेट पर प्रशिक्षित यह मॉडल, ऑडियो फ़ाइलों में प्रभावी स्पीकर विभाजन को सक्षम बनाता है। मॉडल को सेजमेकर पर एक एसिंक्रोनस एंडपॉइंट सेटअप के रूप में तैनात किया गया है, जो डायराइजेशन कार्यों की कुशल और स्केलेबल प्रोसेसिंग प्रदान करता है।

निम्नलिखित चित्र समाधान वास्तुकला को दर्शाता है।समाधान वास्तुकला

इस पोस्ट के लिए, हम निम्नलिखित ऑडियो फ़ाइल का उपयोग करते हैं।

स्टीरियो या मल्टी-चैनल ऑडियो फ़ाइलें चैनलों के औसत से स्वचालित रूप से मोनो में डाउनमिक्स हो जाती हैं। अलग-अलग दर पर सैंपल की गई ऑडियो फ़ाइलें लोड होने पर स्वचालित रूप से 16kHz पर पुनः सैंपल हो जाती हैं।

.. पूर्वापेक्षाएँ

निम्नलिखित पूर्वापेक्षाएँ पूरी करें:

  1. एक सेजमेकर डोमेन बनाएं.
  2. सुनिश्चित करें कि आपका AWS पहचान और अभिगम प्रबंधन (IAM) उपयोगकर्ता के पास इसे बनाने के लिए आवश्यक एक्सेस अनुमतियाँ हैं सेजमेकर की भूमिका.
  3. सुनिश्चित करें कि AWS खाते में ml.g5.2xlarge इंस्टेंस के लिए SageMaker एंडपॉइंट होस्ट करने के लिए एक सेवा कोटा है।

हगिंग फेस से PyAnnote स्पीकर डायराइजेशन तक पहुंचने के लिए एक मॉडल फ़ंक्शन बनाएं

वांछित पूर्व-प्रशिक्षित तक पहुंचने के लिए आप हगिंग फेस हब का उपयोग कर सकते हैं PyAnnote स्पीकर डायराइज़ेशन मॉडल. सेजमेकर एंडपॉइंट बनाते समय आप मॉडल फ़ाइल डाउनलोड करने के लिए उसी स्क्रिप्ट का उपयोग करते हैं।

चेहरा गले लगाना

निम्नलिखित कोड देखें:

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 और require.txt फ़ाइलें बनाएं और इसे इस रूप में सहेजें model.tar.gz:

!tar zcvf model.tar.gz *

सेजमेकर मॉडल कॉन्फ़िगर करें

छवि यूआरआई, मॉडल डेटा स्थान निर्दिष्ट करके सेजमेकर मॉडल संसाधन को परिभाषित करें अमेज़न सरल भंडारण सेवा (एस3), और सेजमेकर भूमिका:

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 पर अपलोड करें

ज़िपित PyAnnote हगिंग फेस मॉडल फ़ाइल को S3 बकेट में अपलोड करें:

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

एक सेजमेकर एसिंक्रोनस एंडपॉइंट बनाएं

दिए गए एसिंक्रोनस अनुमान कॉन्फ़िगरेशन का उपयोग करके सेजमेकर पर मॉडल को तैनात करने के लिए एक एसिंक्रोनस एंडपॉइंट कॉन्फ़िगर करें:

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

इस समाधान को बड़े पैमाने पर तैनात करने के लिए, हम इसका उपयोग करने का सुझाव देते हैं AWS लाम्बा, अमेज़न सरल अधिसूचना सेवा (अमेज़ॅन एसएनएस), या अमेज़ॅन सरल कतार सेवा (अमेज़ॅन एसक्यूएस)। ये सेवाएँ स्केलेबिलिटी, इवेंट-संचालित आर्किटेक्चर और कुशल संसाधन उपयोग के लिए डिज़ाइन की गई हैं। वे परिणाम प्रसंस्करण से अतुल्यकालिक अनुमान प्रक्रिया को अलग करने में मदद कर सकते हैं, जिससे आप प्रत्येक घटक को स्वतंत्र रूप से स्केल कर सकते हैं और अनुमान अनुरोधों के विस्फोट को अधिक प्रभावी ढंग से संभाल सकते हैं।

परिणाम

मॉडल आउटपुट को संग्रहीत किया जाता है 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)

अतुल्यकालिक समापन बिंदु परिनियोजन के लाभ

यह समाधान निम्नलिखित लाभ प्रदान करता है:

  • समाधान कुशलतापूर्वक एकाधिक या बड़ी ऑडियो फ़ाइलों को संभाल सकता है।
  • यह उदाहरण प्रदर्शन के लिए एकल उदाहरण का उपयोग करता है। यदि आप सैकड़ों या हजारों वीडियो के लिए इस समाधान का उपयोग करना चाहते हैं और कई उदाहरणों पर प्रक्रिया करने के लिए एक अतुल्यकालिक समापन बिंदु का उपयोग करना चाहते हैं, तो आप एक का उपयोग कर सकते हैं ऑटो स्केलिंग नीति, जो बड़ी संख्या में स्रोत दस्तावेज़ों के लिए डिज़ाइन किया गया है। ऑटो स्केलिंग आपके कार्यभार में परिवर्तन के जवाब में मॉडल के लिए प्रावधानित उदाहरणों की संख्या को गतिशील रूप से समायोजित करती है।
  • समाधान संसाधनों का अनुकूलन करता है और लंबे समय से चल रहे कार्यों को वास्तविक समय के अनुमान से अलग करके सिस्टम लोड को कम करता है।

निष्कर्ष

इस पोस्ट में, हमने पायथन स्क्रिप्ट का उपयोग करके सेजमेकर पर हगिंग फेस के स्पीकर डायराइजेशन मॉडल को तैनात करने का एक सीधा तरीका प्रदान किया है। एसिंक्रोनस एंडपॉइंट का उपयोग एक सेवा के रूप में डायराइजेशन भविष्यवाणियां देने के लिए एक कुशल और स्केलेबल साधन प्रदान करता है, जो समवर्ती अनुरोधों को निर्बाध रूप से समायोजित करता है।

अपने ऑडियो प्रोजेक्ट के लिए एसिंक्रोनस स्पीकर डायराइज़ेशन के साथ आज ही शुरुआत करें। यदि आपके पास अपने स्वयं के एसिंक्रोनस डायराइजेशन एंडपॉइंट को चालू करने और चलाने के बारे में कोई प्रश्न हैं, तो टिप्पणियों में संपर्क करें।


लेखक के बारे में

संजय तिवारी एक विशेषज्ञ समाधान आर्किटेक्ट एआई/एमएल है जो व्यावसायिक आवश्यकताओं को परिभाषित करने, विशिष्ट उपयोग के मामलों के आसपास एल300 सत्र प्रदान करने और स्केलेबल, विश्वसनीय और प्रदर्शन करने योग्य एआई/एमएल अनुप्रयोगों और सेवाओं को डिजाइन करने के लिए रणनीतिक ग्राहकों के साथ काम करने में अपना समय बिताता है। उन्होंने एआई/एमएल संचालित अमेज़ॅन सेजमेकर सेवा को लॉन्च करने और स्केल करने में मदद की है और अमेज़ॅन एआई सेवाओं का उपयोग करके अवधारणा के कई प्रमाण लागू किए हैं। उन्होंने डिजिटल परिवर्तन यात्रा के एक भाग के रूप में उन्नत एनालिटिक्स प्लेटफ़ॉर्म भी विकसित किया है।

किरण चल्लापल्ली AWS सार्वजनिक क्षेत्र के साथ एक गहन तकनीकी व्यवसाय डेवलपर है। उनके पास एआई/एमएल में 8 साल से अधिक का अनुभव और समग्र सॉफ्टवेयर विकास और बिक्री का 23 साल का अनुभव है। किरण भारत भर में सार्वजनिक क्षेत्र के व्यवसायों को क्लाउड-आधारित समाधानों का पता लगाने और सह-निर्माण में मदद करती है जो एआई, एमएल और जेनरेटिव एआई का उपयोग करते हैं - जिसमें बड़े भाषा मॉडल-प्रौद्योगिकियां शामिल हैं।

स्पॉट_आईएमजी

नवीनतम खुफिया

स्पॉट_आईएमजी

हमारे साथ चैट करें

नमस्ते! मैं आपकी कैसे मदद कर सकता हूँ?