Generatiivinen tiedustelu

Ota käyttöön Hugging Face (PyAnnote) -kaiuttimen diarisointimalli Amazon SageMakerissa asynkronisena päätepisteenä | Amazon Web Services

Treffi:

Kaiutindiarisointi, olennainen prosessi äänianalyysissä, segmentoi äänitiedoston puhujan identiteetin perusteella. Tämä viesti käsittelee Hugging Facen PyAnnoten integrointia kaiuttimien päiväkirjaan Amazon Sage Maker asynkroniset päätepisteet.

Tarjoamme kattavan oppaan kaiuttimien segmentointi- ja klusterointiratkaisujen käyttöönotosta SageMakerin avulla AWS-pilvessä. Voit käyttää tätä ratkaisua sovelluksissa, jotka käsittelevät usean kaiuttimen (yli 100) äänitallenteita.

Ratkaisun yleiskatsaus

Amazonin transkriptio on AWS:n kaiuttimien diarisointipalvelu. Ei-tuetuille kielille voit kuitenkin käyttää muita malleja (tässä tapauksessa PyAnnote), jotka otetaan käyttöön SageMakerissa johtopäätösten tekemiseen. Voit käyttää lyhyitä äänitiedostoja, joissa päättely kestää jopa 60 sekuntia reaaliaikainen johtopäätös. Yli 60 sekuntia, asynkroninen johtopäätöstä tulee käyttää. Asynkronisen päättelyn lisäetu on kustannussäästöt, jotka saadaan skaalaamalla ilmentymien lukumäärä automaattisesti nollaan, kun käsiteltäviä pyyntöjä ei ole.

Halaaminen kasvot on suosittu avoimen lähdekoodin keskus koneoppimismalleille (ML). AWS:llä ja Hugging Facella on a kumppanuus joka mahdollistaa saumattoman integroinnin SageMakerin kautta AWS Deep Learning Containers (DLC) -säilön kanssa PyTorch- tai TensorFlow-harjoittelua ja johtopäätöksiä varten sekä Hugging Face -estimaattorit ja ennustajat SageMaker Python SDK:ta varten. SageMakerin ominaisuudet ja ominaisuudet auttavat kehittäjiä ja datatieteilijöitä pääsemään alkuun luonnollisen kielen käsittelyn (NLP) kanssa AWS:ssä helposti.

Tämän ratkaisun integrointi sisältää Hugging Facen esikoulutetun kaiutindiarisointimallin käyttämisen PyAnnote-kirjasto. PyAnnote on avoimen lähdekoodin työkalusarja, joka on kirjoitettu Pythonissa puhujien päiväkirjaa varten. Tämä malli, joka on koulutettu esimerkkiäänitietojoukosta, mahdollistaa tehokkaan kaiuttimien osioinnin äänitiedostoissa. Malli on otettu käyttöön SageMakerissa asynkronisena päätepistekokoonpanona, joka tarjoaa tehokkaan ja skaalautuvan diarisointitehtävien käsittelyn.

Seuraava kaavio kuvaa ratkaisuarkkitehtuuria.Ratkaisuarkkitehtuuri

Tässä viestissä käytämme seuraavaa äänitiedostoa.

Stereo- tai monikanavaiset äänitiedostot alasmiksataan automaattisesti monoiksi laskemalla kanavien keskiarvo. Eri taajuudella näytteitetyt äänitiedostot näytteistetään automaattisesti 16 kHz:iin latauksen yhteydessä.

Edellytykset

Täytä seuraavat edellytykset:

  1. Luo SageMaker-verkkotunnus.
  2. Varmista, että olet AWS-henkilöllisyyden ja käyttöoikeuksien hallinta (IAM) käyttäjällä on tarvittavat käyttöoikeudet a SageMakerin rooli.
  3. Varmista, että AWS-tilillä on palvelukiintiö SageMaker-päätepisteen isännöimiseksi ml.g5.2xlarge-esiintymää varten.

Luo mallitoiminto PyAnnote-kaiuttimen päiväkirjaan pääsemiseksi Hugging Facen kautta

Voit käyttää Hugging Face Hubia päästäksesi haluttuun esikoulutettuun PyAnnote-kaiuttimen diarisointimalli. Käytät samaa komentosarjaa mallitiedoston lataamiseen luodessasi SageMaker-päätepistettä.

Halaavat kasvot

Katso seuraava 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

Pakkaa mallikoodi

Valmistele tärkeät tiedostot, kuten inference.py, joka sisältää päättelykoodin:

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

Valmista a requirements.txt tiedosto, joka sisältää päätelmän suorittamiseen tarvittavat Python-kirjastot:

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

Purista lopuksi inference.py ja követelmények.txt-tiedostot ja tallenna se nimellä model.tar.gz:

!tar zcvf model.tar.gz *

Määritä SageMaker-malli

Määritä SageMaker-malliresurssi määrittämällä kuvan URI, mallin tietojen sijainti Amazonin yksinkertainen tallennuspalvelu (S3) ja SageMakerin rooli:

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

Lataa malli Amazon S3:een

Lataa pakattu PyAnnote Hugging Face -mallitiedosto S3-ämpäriin:

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

Luo asynkroninen SageMaker-päätepiste

Määritä asynkroninen päätepiste mallin käyttöönottoa varten SageMakerissa käyttämällä toimitettua asynkronista päättelykokoonpanoa:

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

Testaa päätepiste

Arvioi päätepisteen toiminnallisuus lähettämällä äänitiedosto diarisointia varten ja hakemalla määritettyyn S3-lähtöpolkuun tallennettu JSON-lähtö:

# 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

Jos haluat ottaa tämän ratkaisun käyttöön laajasti, suosittelemme käyttämään AWS Lambda, Amazonin yksinkertainen ilmoituspalvelu (Amazon SNS), tai Amazonin yksinkertainen jonopalvelu (Amazon SQS). Nämä palvelut on suunniteltu skaalautumiseen, tapahtumalähtöisiin arkkitehtuureihin ja tehokkaaseen resurssien käyttöön. Ne voivat auttaa erottamaan asynkronisen päättelyprosessin tulosten käsittelystä, jolloin voit skaalata jokaisen komponentin itsenäisesti ja käsitellä päättelypyyntöjen purskeita tehokkaammin.

tulokset

Mallin lähtö tallennetaan osoitteeseen s3://sagemaker-xxxx /async_inference/output/. Tulos näyttää, että äänitallenne on segmentoitu kolmeen sarakkeeseen:

  • Aloitus (alkamisaika sekunneissa)
  • Loppu (lopetusaika sekunneissa)
  • Kaiutin (kaiuttimen etiketti)

Seuraava koodi näyttää esimerkin tuloksistamme:

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

Puhdistaa

Voit asettaa skaalauskäytännön nollaksi asettamalla MinCapacity-asetukseksi 0; asynkroninen päättely voit skaalata automaattisesti nollaan ilman pyyntöjä. Sinun ei tarvitse poistaa päätepistettä asteikot nollasta tarvittaessa uudelleen, mikä vähentää kustannuksia, kun sitä ei käytetä. Katso seuraava 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
)

Jos haluat poistaa päätepisteen, käytä seuraavaa koodia:

async_predictor.delete_endpoint(async_endpoint_name)

Asynkronisen päätepisteen käyttöönoton edut

Tämä ratkaisu tarjoaa seuraavat edut:

  • Ratkaisu pystyy käsittelemään tehokkaasti useita tai suuria äänitiedostoja.
  • Tämä esimerkki käyttää yhtä esiintymää esittelyyn. Jos haluat käyttää tätä ratkaisua satoihin tai tuhansiin videoihin ja käyttää asynkronista päätepistettä useiden esiintymien käsittelyyn, voit käyttää automaattinen skaalauskäytäntö, joka on suunniteltu suurelle määrälle lähdeasiakirjoja. Automaattinen skaalaus säätää dynaamisesti mallille varattujen ilmentymien määrää vasteena työmääräsi muutoksiin.
  • Ratkaisu optimoi resurssit ja vähentää järjestelmän kuormitusta erottamalla pitkäkestoiset tehtävät reaaliaikaisista päätelmistä.

Yhteenveto

Tässä viestissä tarjosimme suoraviivaisen lähestymistavan Hugging Facen kaiutindiarisointimallin käyttöönottamiseksi SageMakerissa Python-skriptien avulla. Asynkronisen päätepisteen käyttäminen tarjoaa tehokkaan ja skaalautuvan tavan toimittaa diarisaatioennusteita palveluna, joka vastaa samanaikaisiin pyyntöihin saumattomasti.

Aloita jo tänään asynkronisella kaiutinpäiväkirjauksella ääniprojekteihisi. Ota yhteyttä kommentteihin, jos sinulla on kysyttävää oman asynkronisen diarisoinnin päätepisteesi käyttöönotosta.


Tietoja Tekijät

Sanjay Tiwary on Specialist Solutions Architect AI/ML, joka työskentelee strategisten asiakkaiden kanssa määrittääkseen liiketoimintavaatimuksia, tarjotakseen L300-istuntoja tiettyihin käyttötapauksiin sekä suunnitellakseen AI/ML-sovelluksia ja -palveluita, jotka ovat skaalautuvia, luotettavia ja tehokkaita. Hän on auttanut käynnistämään ja skaalaamaan AI/ML-pohjaista Amazon SageMaker -palvelua ja toteuttanut useita konseptitodistuksia käyttämällä Amazon AI -palveluita. Hän on myös kehittänyt edistyneen analytiikan alustan osana digitaalisen transformaation matkaa.

Kiran Challapalli on syväteknologian liiketoiminnan kehittäjä AWS:n julkisella sektorilla. Hänellä on yli 8 vuoden kokemus AI/ML:stä ja 23 vuoden yleinen ohjelmistokehitys- ja myyntikokemus. Kiran auttaa julkisen sektorin yrityksiä kaikkialla Intiassa tutkimaan ja luomaan yhdessä pilvipohjaisia ​​ratkaisuja, jotka käyttävät tekoälyä, ML:ää ja generatiivista tekoälyä – myös suuria kielimalleja – tekniikoita.

spot_img

Uusin älykkyys

spot_img

Keskustele kanssamme

Hei siellä! Kuinka voin olla avuksi?