Generative Data Intelligence

Settu upp hugging Face (PyAnnote) hátalaratalningarlíkan á Amazon SageMaker sem ósamstilltan endapunkt | Amazon vefþjónusta

Dagsetning:

Hljóðskráning hátalara, nauðsynlegt ferli í hljóðgreiningu, skiptir hljóðskrá í sundur út frá auðkenni hátalara. Þessi færsla kafar í að samþætta PyAnnote frá Hugging Face til að tala við hátalara Amazon SageMaker ósamstilltir endapunktar.

Við bjóðum upp á alhliða leiðbeiningar um hvernig á að dreifa hátalaraskiptingu og klasalausnum með SageMaker á AWS skýinu. Þú getur notað þessa lausn fyrir forrit sem fjalla um hljóðupptökur með mörgum hátalara (yfir 100).

Lausn yfirlit

Amazon umrita er aðalþjónustan fyrir dagbók hátalara í AWS. Hins vegar, fyrir tungumál sem ekki eru studd, geturðu notað aðrar gerðir (í okkar tilfelli, PyAnnote) sem verða notaðar í SageMaker til ályktunar. Fyrir stuttar hljóðskrár þar sem ályktun tekur allt að 60 sekúndur geturðu notað ályktun í rauntíma. Í lengri tíma en 60 sekúndur, ósamstilltur ætti að nota ályktun. Aukinn ávinningur af ósamstilltri ályktun er kostnaðarsparnaður með því að skala fjölda tilvika sjálfvirkt í núll þegar engar beiðnir eru til að vinna úr.

Faðmandi andlit er vinsæll opinn uppspretta miðstöð fyrir vélanám (ML) módel. AWS og Hugging Face hafa a samstarf sem gerir óaðfinnanlega samþættingu í gegnum SageMaker með setti af AWS Deep Learning Containers (DLC) fyrir þjálfun og ályktanir í PyTorch eða TensorFlow, og Hugging Face áætlanir og spár fyrir SageMaker Python SDK. SageMaker eiginleikar og hæfileikar hjálpa forriturum og gagnafræðingum að byrja á auðveldan hátt með náttúrulega málvinnslu (NLP) á AWS.

Samþætting þessarar lausnar felur í sér að nota fyrirfram þjálfaða hátalaramælingarlíkan Hugging Face með því að nota PyAnnote bókasafn. PyAnnote er opinn uppspretta verkfærakista skrifað í Python til að tala fyrir hátalara. Þetta líkan, sem er þjálfað á sýnishorni hljóðgagnagagnagrunnsins, gerir skilvirka hátalaraskiptingu í hljóðskrám kleift. Líkanið er notað á SageMaker sem ósamstillt endapunktauppsetning, sem veitir skilvirka og stigstærða úrvinnslu á dagbókunarverkefnum.

Eftirfarandi skýringarmynd sýnir lausnararkitektúrinn.Lausnararkitektúr

Fyrir þessa færslu notum við eftirfarandi hljóðskrá.

Stereo- eða fjölrása hljóðskrám er sjálfkrafa blandað niður í mónó með því að reikna meðaltal rásanna. Hljóðskrár sem teknar eru sýni á mismunandi hraða eru endursýndar í 16kHz sjálfkrafa við hleðslu.

Forkröfur

Ljúktu eftirfarandi forkröfum:

  1. Búðu til SageMaker lén.
  2. Gakktu úr skugga um AWS auðkenni og aðgangsstjórnun (IAM) notandi hefur nauðsynlegar aðgangsheimildir til að búa til a SageMaker hlutverk.
  3. Gakktu úr skugga um að AWS reikningurinn hafi þjónustukvóta til að hýsa SageMaker endapunkt fyrir ml.g5.2xlarge tilvik.

Búðu til fyrirmyndaraðgerð til að fá aðgang að PyAnnote hátalaratalningu frá Hugging Face

Þú getur notað Hugging Face Hub til að fá aðgang að viðkomandi forþjálfun PyAnnote hátalaratalningarlíkan. Þú notar sömu skriftu til að hlaða niður líkanaskránni þegar þú býrð til SageMaker endapunktinn.

andlit faðmandi

Sjá eftirfarandi kóða:

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

Pakkaðu líkankóðann

Undirbúa nauðsynlegar skrár eins og inference.py, sem inniheldur ályktunarkóðann:

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

Undirbúa a requirements.txt skrá, sem inniheldur nauðsynleg Python bókasöfn sem nauðsynleg eru til að keyra ályktunina:

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

Að lokum, þjappaðu saman inference.py og requirements.txt skrár og vistaðu þær sem model.tar.gz:

!tar zcvf model.tar.gz *

Stilltu SageMaker líkan

Skilgreindu SageMaker líkan tilföng með því að tilgreina mynd URI, líkan gagna staðsetningu í Amazon einföld geymsluþjónusta (S3), og SageMaker hlutverk:

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

Hladdu líkaninu upp á Amazon S3

Hladdu upp rituðu PyAnnote Hugging Face líkanskránni í S3 fötu:

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

Búðu til SageMaker ósamstilltan endapunkt

Stilltu ósamstilltan endapunkt til að dreifa líkaninu á SageMaker með því að nota meðfylgjandi ósamstillta ályktunarstillingu:

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

Prófaðu endapunktinn

Metið virkni endapunktsins með því að senda hljóðskrá til að stilla upp og sækja JSON úttakið sem er geymt í tilgreindri S3 úttaksslóð:

# 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

Til að dreifa þessari lausn í mælikvarða mælum við með að nota AWS Lambda, Amazon einföld tilkynningaþjónusta (Amazon SNS), eða Amazon einföld biðröð þjónusta (Amazon SQS). Þessi þjónusta er hönnuð fyrir sveigjanleika, atburðadrifinn arkitektúr og skilvirka auðlindanýtingu. Þeir geta hjálpað til við að aftengja ósamstillta ályktunarferlið frá niðurstöðuvinnslunni, sem gerir þér kleift að skala hvern íhlut sjálfstætt og meðhöndla ályktunarbeiðnir á skilvirkari hátt.

Niðurstöður

Úttak líkans er geymt kl s3://sagemaker-xxxx /async_inference/output/. Úttakið sýnir að hljóðupptökunni hefur verið skipt í þrjá dálka:

  • Byrja (upphafstími í sekúndum)
  • Lok (lokatími í sekúndum)
  • Hátalari (merki hátalara)

Eftirfarandi kóði sýnir dæmi um niðurstöður okkar:

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

Hreinsa upp

Þú getur stillt skalunarstefnu á núll með því að stilla MinCapacity á 0; ósamstilltur ályktun gerir þér kleift að kvarða sjálfvirkt í núll án beiðni. Þú þarft ekki að eyða endapunktinum, honum Vog úr núlli þegar þörf er á aftur, sem dregur úr kostnaði þegar það er ekki í notkun. Sjá eftirfarandi kóða:

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

Ef þú vilt eyða endapunktinum skaltu nota eftirfarandi kóða:

async_predictor.delete_endpoint(async_endpoint_name)

Ávinningur af ósamstilltri endapunktadreifingu

Þessi lausn býður upp á eftirfarandi kosti:

  • Lausnin getur meðhöndlað margar eða stórar hljóðskrár á skilvirkan hátt.
  • Þetta dæmi notar eitt tilvik til sýnikennslu. Ef þú vilt nota þessa lausn fyrir hundruð eða þúsundir myndskeiða og nota ósamstilltan endapunkt til að vinna úr mörgum tilfellum, geturðu notað sjálfvirk stærðarstefna, sem er hannað fyrir mikinn fjölda frumskjala. Sjálfvirk stigstærð stillir á kraftmikinn hátt fjölda tilvika sem útvegað er fyrir líkan til að bregðast við breytingum á vinnuálagi þínu.
  • Lausnin hámarkar auðlindir og dregur úr kerfisálagi með því að aðskilja langvarandi verkefni frá rauntímaályktun.

Niðurstaða

Í þessari færslu veittum við einfalda nálgun til að dreifa hugging Face hátalaradagsetningarlíkani á SageMaker með því að nota Python forskriftir. Að nota ósamstilltan endapunkt veitir skilvirka og stigstærða aðferð til að skila spám um dagbókun sem þjónustu og koma til móts við samhliða beiðnir óaðfinnanlega.

Byrjaðu í dag með ósamstilltri hátalarastillingu fyrir hljóðverkefnin þín. Hafðu samband í athugasemdunum ef þú hefur einhverjar spurningar um að koma þínum eigin ósamstilltu dagsetningarendapunkti í gang.


Um höfunda

Sanjay Tiwary er sérhæfður lausnaarkitekt AI/ML sem eyðir tíma sínum í að vinna með stefnumótandi viðskiptavinum til að skilgreina viðskiptakröfur, bjóða upp á L300 lotur í kringum ákveðin notkunartilvik og hanna AI/ML forrit og þjónustu sem eru skalanleg, áreiðanleg og árangursrík. Hann hefur hjálpað til við að koma og skala AI/ML knúna Amazon SageMaker þjónustuna og hefur innleitt nokkrar sannanir fyrir hugmyndafræði með því að nota Amazon AI þjónustu. Hann hefur einnig þróað háþróaðan greiningarvettvang sem hluta af stafrænni umbreytingarferð.

Kiran Challapalli er djúptækni viðskiptafræðingur hjá AWS opinbera geiranum. Hann hefur meira en 8 ára reynslu í gervigreind/ML og 23 ára heildarreynslu í hugbúnaðarþróun og sölu. Kiran hjálpar opinberum fyrirtækjum víðs vegar um Indland að kanna og búa til skýjatengdar lausnir sem nota gervigreind, ML og skapandi gervigreind—þar á meðal stór tungumálalíkön—tækni.

blettur_img

Nýjasta upplýsingaöflun

blettur_img

Spjallaðu við okkur

Sæll! Hvernig get ég aðstoðað þig?