Generatiivne andmeluure

Kallistava näo (PyAnnote) kõlarite diariseerimise mudeli juurutamine Amazon SageMakeris asünkroonse lõpp-punktina | Amazoni veebiteenused

kuupäev:

Kõlari diariseerimine, mis on helianalüüsi oluline protsess, segmenteerib helifaili kõlari identiteedi alusel. See postitus käsitleb Hugging Face'i PyAnnote'i integreerimist kõneleja diaariseerimiseks Amazon SageMaker asünkroonsed lõpp-punktid.

Pakume põhjalikku juhendit kõlarite segmenteerimise ja rühmitamise lahenduste juurutamiseks AWS-i pilves SageMakeri abil. Seda lahendust saate kasutada mitme kõlariga (üle 100) helisalvestistega tegelevate rakenduste jaoks.

Lahenduse ülevaade

Amazoni transkribeerimine on AWS-i kõneleja diaariseerimise teenus. Kuid mittetoetatud keelte puhul saate järelduste tegemiseks kasutada muid mudeleid (meie puhul PyAnnote), mis juurutatakse SageMakeris. Lühikeste helifailide puhul, mille järeldamine võtab aega kuni 60 sekundit, saate kasutada reaalajas järeldus. Kauem kui 60 sekundit, asünkroonne tuleks kasutada järeldust. Asünkroonse järelduse lisaeelis seisneb kulude kokkuhoius, mis skaleeritakse eksemplaride arvu automaatse nullini, kui töödeldavaid taotlusi pole.

Kallistav nägu on populaarne avatud lähtekoodiga jaotur masinõppe (ML) mudelite jaoks. AWS-il ja Hugging Face'il on a partnerlus mis võimaldab sujuvat integreerimist SageMakeri kaudu AWS-i süvaõppekonteinerite (DLC-de) komplektiga PyTorchis või TensorFlow's treenimiseks ja järelduste tegemiseks ning SageMaker Python SDK jaoks mõeldud Hugging Face hindajate ja ennustajatega. SageMakeri funktsioonid ja võimalused aitavad arendajatel ja andmeteadlastel hõlpsasti alustada AWS-i loomuliku keele töötlemisega (NLP).

Selle lahenduse integreerimine hõlmab Hugging Face'i eelkoolitatud kõlarite diariseerimismudeli kasutamist, kasutades PyAnnote'i teek. PyAnnote on avatud lähtekoodiga tööriistakomplekt, mis on Pythonis kirjutatud kõneleja diaariseerimiseks. See näidisheli andmestiku põhjal väljaõpetatud mudel võimaldab helifailides kõlarite tõhusat jaotamist. Mudelit kasutatakse SageMakeris asünkroonse lõpp-punkti seadistusena, pakkudes tõhusat ja skaleeritavat diariseerimisülesannete töötlemist.

Järgnev diagramm illustreerib lahenduse arhitektuuri.Lahenduse arhitektuur

Selle postituse jaoks kasutame järgmist helifaili.

Stereo- või mitme kanaliga helifailid alammikseeritakse automaatselt monoks, arvutades kanalite keskmistamise. Erineva sagedusega diskreetitud helifailid proovitakse laadimisel automaatselt uuesti 16 kHz.

Eeldused

Täitke järgmised eeltingimused:

  1. Looge SageMakeri domeen.
  2. Veenduge, et olete AWS-i identiteedi- ja juurdepääsuhaldus (IAM) kasutajal on a. loomiseks vajalikud juurdepääsuõigused SageMakeri roll.
  3. Veenduge, et AWS-i kontol oleks teenusekvoot SageMakeri lõpp-punkti majutamiseks ml.g5.2xlarge eksemplari jaoks.

Looge Hugging Face'i kaudu PyAnnote'i kõlarite diariseerimisele juurdepääsuks mudelfunktsioon

Saate kasutada Hugging Face Hubi, et pääseda juurde soovitud eeltreeningule PyAnnote kõneleja diariseerimise mudel. SageMakeri lõpp-punkti loomisel kasutate mudelifaili allalaadimiseks sama skripti.

Kallistav nägu

Vaadake järgmist koodi:

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

Pakkige mudeli kood

Valmistage ette olulised failid, nagu inference.py, mis sisaldab järelduskoodi:

%%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
    }

Valmistage ette a requirements.txt fail, mis sisaldab järelduse käivitamiseks vajalikke Pythoni teeke:

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

Lõpuks suruge kokku inference.py ja nõuded.txt failid ning salvestage see nimega model.tar.gz:

!tar zcvf model.tar.gz *

Konfigureerige SageMakeri mudel

Määratlege SageMakeri mudeli ressurss, määrates pildi URI, mudeli andmete asukoha Amazoni lihtne salvestusteenus (S3) ja SageMakeri roll:

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

Laadige mudel üles Amazon S3-sse

Laadige pakitud PyAnnote Hugging Face mudelifail üles S3 ämbrisse:

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

Looge SageMakeri asünkroonne lõpp-punkt

Konfigureerige asünkroonne lõpp-punkt mudeli juurutamiseks SageMakeris, kasutades kaasasolevat asünkroonse järelduse konfiguratsiooni:

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

Testige lõpp-punkti

Hinnake lõpp-punkti funktsionaalsust, saates diaariseerimiseks helifaili ja hankige määratud S3 väljundteele salvestatud JSON-väljund:

# 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

Selle lahenduse ulatuslikuks juurutamiseks soovitame kasutada AWS Lambda, Amazoni lihtne teavitusteenus (Amazon SNS) või Amazoni lihtsa järjekorra teenus (Amazon SQS). Need teenused on loodud mastaapsuse, sündmustepõhise arhitektuuri ja tõhusa ressursside kasutamise jaoks. Need võivad aidata asünkroonse järeldusprotsessi tulemuste töötlemisest lahti siduda, võimaldades teil iga komponenti iseseisvalt skaleerida ja tõhusamalt käsitleda järeldustaotluste sari.

Tulemused

Mudeli väljund salvestatakse aadressil s3://sagemaker-xxxx /async_inference/output/. Väljund näitab, et helisalvestis on jaotatud kolme veergu:

  • Start (algusaeg sekundites)
  • Lõpp (lõpuaeg sekundites)
  • Kõlar (kõlari silt)

Järgmine kood näitab meie tulemuste näidet:

[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"]

Koristage

Saate määrata skaleerimispoliitika nulliks, määrates MinCapacity väärtuseks 0; asünkroonne järeldus võimaldab teil ilma taotlusteta automaatselt skaleerida nullini. Te ei pea lõpp-punkti kustutama, seda Kaalud nullist, kui seda uuesti vaja läheb, vähendades kulusid, kui seda ei kasutata. Vaadake järgmist koodi:

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

Kui soovite lõpp-punkti kustutada, kasutage järgmist koodi:

async_predictor.delete_endpoint(async_endpoint_name)

Asünkroonse lõpp-punkti juurutamise eelised

See lahendus pakub järgmisi eeliseid:

  • Lahendus suudab tõhusalt käsitleda mitut või suurt helifaili.
  • See näide kasutab demonstreerimiseks ühte eksemplari. Kui soovite seda lahendust kasutada sadade või tuhandete videote jaoks ja kasutada mitme eksemplari töötlemiseks asünkroonset lõpp-punkti, saate kasutada automaatse skaleerimise poliitika, mis on mõeldud suure hulga algdokumentide jaoks. Automaatne skaleerimine kohandab dünaamiliselt mudeli jaoks ette nähtud eksemplaride arvu vastavalt teie töökoormuse muutustele.
  • Lahendus optimeerib ressursse ja vähendab süsteemi koormust, eraldades kauakestvad ülesanded reaalajas järeldustest.

Järeldus

Selles postituses pakkusime lihtsat lähenemisviisi Hugging Face'i kõlarite diariseerimismudeli juurutamiseks Pythoni skripte kasutades SageMakeris. Asünkroonse lõpp-punkti kasutamine pakub tõhusat ja skaleeritavat vahendit diariseerimisprognooside edastamiseks teenusena, mis võimaldab samaaegseid taotlusi sujuvalt vastu võtta.

Alustage juba täna oma heliprojektide jaoks asünkroonse kõlarite diariseerimisega. Kui teil on küsimusi oma asünkroonse diarisatsiooni lõpp-punkti käivitamise ja käivitamise kohta, võtke ühendust kommentaarides.


Autoritest

Sanjay Tiwary on spetsialiseerunud lahenduste arhitekti AI/ML, kes veedab oma aega strateegiliste klientidega töötades, et määratleda ärinõuded, pakkuda L300 seansse konkreetsete kasutusjuhtude kohta ning kavandada AI/ML-i rakendusi ja teenuseid, mis on skaleeritavad, usaldusväärsed ja toimivad. Ta on aidanud käivitada ja skaleerida AI/ML-i toega Amazon SageMakeri teenust ning rakendanud mitmeid kontseptsiooni tõendeid, kasutades Amazoni AI teenuseid. Samuti on ta digitaalse ümberkujundamise teekonna osana välja töötanud täiustatud analüütikaplatvormi.

Kiran Challapalli on süvatehnoloogia äriarendaja koos AWS-i avaliku sektoriga. Tal on üle 8-aastane AI/ML-i kogemus ning 23-aastane üldine tarkvaraarenduse ja müügikogemus. Kiran aitab avaliku sektori ettevõtetel kogu Indias uurida ja kaasluua pilvepõhiseid lahendusi, mis kasutavad tehisintellekti, ML ja generatiivset tehisintellekti – sealhulgas suuri keelemudeleid – tehnoloogiaid.

spot_img

Uusim intelligentsus

spot_img

Jututuba koos meiega

Tere! Kuidas ma teid aidata saan?