Generative Data Intelligence

Розгорніть модель діаризації мовця Hugging Face (PyAnnote) на Amazon SageMaker як асинхронну кінцеву точку | Веб-сервіси Amazon

Дата:

Діарізація мовця, важливий процес аналізу аудіо, сегментує аудіофайл на основі ідентичності мовця. У цьому дописі йдеться про інтеграцію PyAnnote Hugging Face для щоденника диктора з Amazon SageMaker асинхронні кінцеві точки.

Ми надаємо вичерпний посібник із розгортання рішень сегментації динаміків і кластеризації за допомогою SageMaker у хмарі AWS. Ви можете використовувати це рішення для додатків, які мають справу з аудіозаписами з кількома динаміками (понад 100).

Огляд рішення

Амазонська розшифровка це основний сервіс для діаризації доповідачів у AWS. Однак для непідтримуваних мов ви можете використовувати інші моделі (у нашому випадку PyAnnote), які будуть розгорнуті в SageMaker для висновку. Для коротких аудіофайлів, де висновок займає до 60 секунд, ви можете використовувати висновок у реальному часі. Більше 60 секунд, асинхронний слід використовувати висновок. Додатковою перевагою асинхронного висновку є економія коштів завдяки автоматичному масштабуванню кількості екземплярів до нуля, коли немає запитів для обробки.

Обіймати обличчя це популярний центр з відкритим кодом для моделей машинного навчання (ML). AWS і Hugging Face мають a партнерство що забезпечує плавну інтеграцію через SageMaker із набором контейнерів AWS Deep Learning Containers (DLC) для навчання та висновків у PyTorch або TensorFlow, а також оцінювачів і предикторів Hugging Face для SDK SageMaker Python. Функції та можливості SageMaker допомагають розробникам і дослідникам даних легко розпочати роботу з обробки природної мови (NLP) на AWS.

Інтеграція цього рішення передбачає використання попередньо навченої моделі діаризації мовця Hugging Face за допомогою Бібліотека PyAnnote. PyAnnote — це набір інструментів з відкритим вихідним кодом, написаний на Python для діаризації доповідачів. Ця модель, навчена на зразковому наборі аудіоданих, забезпечує ефективне розділення динаміків в аудіофайлах. Модель розгортається на SageMaker як асинхронне налаштування кінцевої точки, що забезпечує ефективну та масштабовану обробку завдань діаризації.

Наступна діаграма ілюструє архітектуру рішення.Архітектура рішення

Для цієї публікації ми використовуємо наступний аудіофайл.

Стерео- або багатоканальні аудіофайли автоматично мікшуються до моно шляхом усереднення каналів. Під час завантаження аудіофайли, відібрані з іншою частотою, автоматично змінюються до 16 кГц.

Передумови

Виконайте такі передумови:

  1. Створіть домен SageMaker.
  2. Переконайтеся, що ваш Управління ідентифікацією та доступом AWS (IAM) користувач має необхідні права доступу для створення a Роль SageMaker.
  3. Переконайтеся, що обліковий запис AWS має квоту обслуговування для розміщення кінцевої точки SageMaker для екземпляра ml.g5.2xlarge.

Створіть функцію моделі для доступу до діаризації мовця PyAnnote із Hugging Face

Ви можете використовувати Hugging Face Hub, щоб отримати доступ до потрібного попередньо навченого Модель діаризації спікера PyAnnote. Ви використовуєте той самий сценарій для завантаження файлу моделі під час створення кінцевої точки SageMaker.

Обіймати обличчя

Дивіться наступний код:

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
    }

Підготуйте a requirements.txt файл, який містить необхідні бібліотеки Python, необхідні для виконання висновку:

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 та файли requirements.txt і збережіть його як model.tar.gz:

!tar zcvf model.tar.gz *

Налаштуйте модель SageMaker

Визначте ресурс моделі SageMaker, вказавши URI зображення, розташування даних моделі Служба простого зберігання Amazon (S3) і роль SageMaker:

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 Hugging Face у відро S3:

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

Створіть асинхронну кінцеву точку SageMaker

Налаштуйте асинхронну кінцеву точку для розгортання моделі на SageMaker за допомогою наданої конфігурації асинхронного висновку:

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

Перевірте кінцеву точку

Оцініть функціональність кінцевої точки, надіславши аудіофайл для діаризації та отримавши вихідні дані JSON, які зберігаються в указаному вихідному шляху S3:

# 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 Lambda, Служба простих сповіщень Amazon (Amazon SNS), або Служба простої черги Amazon (Amazon SQS). Ці служби створені для масштабованості, керованих подіями архітектур та ефективного використання ресурсів. Вони можуть допомогти відокремити процес асинхронного висновку від обробки результатів, дозволяючи масштабувати кожен компонент незалежно та ефективніше обробляти пакети запитів на висновки.

результати

Вихідні дані моделі зберігаються в 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)

Переваги асинхронного розгортання кінцевої точки

Це рішення пропонує такі переваги:

  • Рішення може ефективно обробляти кілька або великі аудіофайли.
  • У цьому прикладі використовується один екземпляр для демонстрації. Якщо ви хочете використовувати це рішення для сотень або тисяч відео та використовувати асинхронну кінцеву точку для обробки в кількох екземплярах, ви можете використовувати політика автоматичного масштабування, який розрахований на велику кількість вихідних документів. Автоматичне масштабування динамічно регулює кількість екземплярів, наданих для моделі, у відповідь на зміни у вашому робочому навантаженні.
  • Рішення оптимізує ресурси та зменшує навантаження на систему, відокремлюючи довгострокові завдання від висновків у реальному часі.

Висновок

У цій публікації ми запропонували простий підхід до розгортання моделі діаризації мовця Hugging Face на SageMaker за допомогою сценаріїв Python. Використання асинхронної кінцевої точки забезпечує ефективний і масштабований засіб для доставки прогнозів діаризації як служби, безперебійно задовольняючи одночасні запити.

Почніть вже сьогодні з асинхронної діаризації динаміків для ваших аудіопроектів. Зв’яжіться з нами в коментарях, якщо у вас виникнуть запитання щодо запуску та запуску власної асинхронної кінцевої точки діаризації.


Про авторів

Санджай Тіварі є спеціалізованим архітектором рішень AI/ML, який проводить свій час, працюючи зі стратегічними клієнтами, щоб визначити бізнес-вимоги, забезпечити сеанси L300 для конкретних випадків використання та розробити програми та послуги AI/ML, які є масштабованими, надійними та продуктивними. Він допоміг запустити та розширити сервіс Amazon SageMaker на базі AI/ML і реалізував кілька доказів концепції за допомогою служб Amazon AI. Він також розробив передову аналітичну платформу як частину шляху цифрової трансформації.

Кіран Чаллапаллі є розробником глибоких технологій у державному секторі AWS. Він має понад 8 років досвіду роботи зі штучним інтелектом/ML і 23 роки загального досвіду розробки програмного забезпечення та продажів. Kiran допомагає підприємствам державного сектора по всій Індії досліджувати та спільно створювати хмарні рішення, які використовують штучний інтелект, машинне навчання та технології генеративного штучного інтелекту, включаючи великі мовні моделі.

spot_img

Остання розвідка

spot_img

Зв'яжіться з нами!

Привіт! Чим я можу вам допомогти?