Generatív adatintelligencia

Átölelő arc (PyAnnote) hangszóró naplózási modell telepítése az Amazon SageMakeren aszinkron végpontként | Amazon webszolgáltatások

Találka:

A hangszóró naplózása, a hangelemzés alapvető folyamata, a hangszóró identitása alapján szegmentálja az audiofájlt. Ez a bejegyzés a Hugging Face PyAnnote integrálásával foglalkozik a hangszóró naplózásához Amazon SageMaker aszinkron végpontok.

Átfogó útmutatót adunk a hangszórószegmentálási és -fürtözési megoldások telepítéséhez a SageMaker segítségével az AWS felhőn. Ezt a megoldást több hangszórós (több mint 100) hangfelvétellel foglalkozó alkalmazásokhoz használhatja.

Megoldás áttekintése

Amazon átirat az AWS-ben a hangszórók naplózásához szükséges szolgáltatás. A nem támogatott nyelvek esetében azonban más modelleket is használhat (esetünkben a PyAnnote), amelyek a SageMakerben lesznek telepítve a következtetések levonására. Rövid hangfájlok esetén, ahol a következtetés legfeljebb 60 másodpercig tart, használhatja valós idejű következtetés. 60 másodpercnél hosszabb ideig, aszinkron következtetést kell használni. Az aszinkron következtetés további előnye a költségmegtakarítás a példányszám automatikus nullára skálázásával, amikor nincsenek feldolgozandó kérések.

Átölelő arc egy népszerű nyílt forráskódú központ a gépi tanulási (ML) modellekhez. Az AWS és Hugging Face rendelkezik a partnerség amely lehetővé teszi a SageMakeren keresztüli zökkenőmentes integrációt az AWS Deep Learning Container (DLC) készletével a PyTorch vagy TensorFlow oktatáshoz és következtetésekhez, valamint Hugging Face becslésekhez és előrejelzőkhöz a SageMaker Python SDK számára. A SageMaker funkciói és képességei segítenek a fejlesztőknek és az adattudósoknak abban, hogy könnyedén elkezdhessék a természetes nyelvi feldolgozást (NLP) az AWS-en.

Ennek a megoldásnak az integrációja magában foglalja a Hugging Face előre betanított hangszórónaplózási modelljét a PyAnnote könyvtár. A PyAnnote egy Python nyelven írt nyílt forráskódú eszközkészlet a hangszórók naplózásához. Ez a minta audioadatkészletre kiképzett modell hatékony hangszóróparticionálást tesz lehetővé az audiofájlokban. A modellt a SageMaker aszinkron végpont-beállításként telepíti, amely hatékony és méretezhető naplózási feladatok feldolgozását biztosítja.

A következő ábra a megoldás architektúráját mutatja be.Megoldás architektúra

Ehhez a bejegyzéshez a következő hangfájlt használjuk.

A sztereó vagy többcsatornás hangfájlokat a csatornák átlagolásával a rendszer automatikusan monóvá keveri le. Az eltérő frekvenciával mintavételezett audiofájlok betöltéskor automatikusan újramintavételezésre kerülnek 16 kHz-re.

Előfeltételek

Töltse ki a következő előfeltételeket:

  1. Hozzon létre egy SageMaker tartományt.
  2. Győződjön meg róla AWS Identity and Access Management (IAM) felhasználó rendelkezik a szükséges hozzáférési jogosultságokkal a létrehozásához SageMaker szerepe.
  3. Győződjön meg arról, hogy az AWS-fiók rendelkezik szolgáltatáskvótával a SageMaker-végpont tárolására egy ml.g5.2xlarge példányhoz.

Hozzon létre egy modellfüggvényt a PyAnnote hangszóró naplózásának eléréséhez a Hugging Face alkalmazásból

A Hugging Face Hub segítségével elérheti a kívánt előképzettet PyAnnote hangszóró naplózási modell. Ugyanazt a szkriptet használja a modellfájl letöltéséhez a SageMaker végpont létrehozásakor.

Átölelődő arc

Lásd a következő kódot:

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

Csomagolja be a modellkódot

Készítsen elő olyan alapvető fájlokat, mint az inference.py, amely tartalmazza a következtetési kódot:

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

Készítse elő a requirements.txt fájl, amely tartalmazza a következtetés futtatásához szükséges Python könyvtárakat:

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

Végül tömörítse a inference.py és követelmények.txt fájlokat, és mentse el másként model.tar.gz:

!tar zcvf model.tar.gz *

Konfiguráljon egy SageMaker modellt

Határozzon meg egy SageMaker modell-erőforrást a kép URI-jának megadásával, a modelladatok helyének megadásával Amazon egyszerű tárolási szolgáltatás (S3) és a SageMaker szerepkör:

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

Töltse fel a modellt az Amazon S3-ra

Töltse fel a tömörített PyAnnote Hugging Face modellfájlt egy S3 tárolóba:

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

Hozzon létre egy SageMaker aszinkron végpontot

Konfiguráljon egy aszinkron végpontot a modell SageMaker rendszerben történő telepítéséhez a mellékelt aszinkron következtetési konfiguráció segítségével:

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

Tesztelje a végpontot

Értékelje ki a végpont funkcionalitását úgy, hogy elküld egy hangfájlt naplózásra, és lekéri a megadott S3 kimeneti útvonalon tárolt JSON-kimenetet:

# 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

A megoldás nagyarányú üzembe helyezéséhez javasoljuk a használatát AWS Lambda, Amazon Simple Notification Service (Amazon SNS), ill Amazon Simple Queue Service (Amazon SQS). Ezeket a szolgáltatásokat a méretezhetőségre, az eseményvezérelt architektúrákra és az erőforrások hatékony kihasználására tervezték. Segíthetnek leválasztani az aszinkron következtetési folyamatot az eredményfeldolgozásról, lehetővé téve az egyes komponensek független skálázását, és hatékonyabban kezelheti a következtetési kérések sorozatait.

Eredmények

A modell kimenetének tárolása a következő helyen történik: s3://sagemaker-xxxx /async_inference/output/. A kimenet azt mutatja, hogy a hangfelvétel három oszlopra van szegmentálva:

  • Indítás (kezdési idő másodpercben)
  • vége (végi idő másodpercben)
  • Hangszóró (hangszóró címke)

Az alábbi kód példát mutat az eredményeinkre:

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

Tisztítsuk meg

A méretezési szabályzatot nullára állíthatja, ha a MinCapacity értéket 0-ra állítja; aszinkron következtetés lehetővé teszi az automatikus nullára skálázást kérések nélkül. Nem kell törölnie a végpontot, azt Mérleg nulláról, amikor ismét szükség van rá, csökkentve a költségeket, ha nincs használatban. Lásd a következő kódot:

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

Ha törölni szeretné a végpontot, használja a következő kódot:

async_predictor.delete_endpoint(async_endpoint_name)

Az aszinkron végpontok telepítésének előnyei

Ez a megoldás a következő előnyökkel jár:

  • A megoldás hatékonyan képes több vagy nagyméretű hangfájl kezelésére.
  • Ez a példa egyetlen példányt használ a demonstrációhoz. Ha ezt a megoldást több száz vagy több ezer videóhoz szeretné használni, és aszinkron végpontot használ a több példányon keresztüli feldolgozáshoz, használhat automatikus méretezési szabályzat, amely nagyszámú forrásdokumentumhoz készült. Az automatikus méretezés dinamikusan módosítja a modellhez kiépített példányok számát a munkaterhelés változásai alapján.
  • A megoldás optimalizálja az erőforrásokat és csökkenti a rendszerterhelést azáltal, hogy elválasztja a hosszan futó feladatokat a valós idejű következtetésektől.

Következtetés

Ebben a bejegyzésben egy egyszerű megközelítést adtunk a Hugging Face hangszórónaplózási modelljének telepítéséhez a SageMakeren Python-szkriptek használatával. Az aszinkron végpontok használata hatékony és méretezhető eszközt biztosít a naplózási előrejelzések szolgáltatásként történő kézbesítésére, zökkenőmentesen fogadva az egyidejű kéréseket.

Kezdje el még ma az aszinkron hangszóró naplózással audioprojektjeihez. Ha bármilyen kérdése van a saját aszinkron naplózási végpontjának üzembe helyezésével és futtatásával kapcsolatban, forduljon a megjegyzésekhez.


A szerzőkről

Sanjay Tiwary egy Specialist Solutions Architect AI/ML, aki azzal tölti idejét, hogy stratégiai ügyfelekkel dolgozik, hogy meghatározza az üzleti követelményeket, L300-as munkameneteket biztosítson bizonyos felhasználási esetek körül, valamint skálázható, megbízható és hatékony AI/ML alkalmazásokat és szolgáltatásokat tervezzen. Segített a mesterséges intelligencia/ML-alapú Amazon SageMaker szolgáltatás elindításában és méretezésében, és számos elméleti bizonyítékot implementált az Amazon AI-szolgáltatások segítségével. A digitális átalakulási út részeként kifejlesztette a fejlett analitikai platformot is.

Kiran Challapalli egy mélytechnológiai üzleti fejlesztő az AWS állami szektorban. Több mint 8 éves tapasztalattal rendelkezik az AI/ML területén, és 23 éves átfogó szoftverfejlesztési és értékesítési tapasztalattal rendelkezik. A Kiran segít a közszektorbeli vállalkozásoknak India-szerte felfedezni és közösen létrehozni olyan felhőalapú megoldásokat, amelyek mesterséges intelligenciát, ML-t és generatív mesterséges intelligenciát – beleértve a nagy nyelvi modelleket is – használnak.

spot_img

Legújabb intelligencia

spot_img

Beszélj velünk

Szia! Miben segíthetek?