Üretken Veri Zekası

Eşzamansız bir uç nokta olarak Amazon SageMaker'da Hugging Face (PyAnnote) konuşmacı günlüğü oluşturma modelini dağıtın | Amazon Web Hizmetleri

Tarih:

Ses analizinde önemli bir süreç olan konuşmacı günlük kaydı, bir ses dosyasını konuşmacı kimliğine göre bölümlere ayırır. Bu yazı, Hugging Face'in PyAnnote'unun konuşmacı günlüğü oluşturma için entegre edilmesini ele alıyor. Amazon Adaçayı Yapıcı eşzamansız uç noktalar.

AWS Bulut'ta SageMaker'ı kullanarak hoparlör segmentasyonu ve kümeleme çözümlerinin nasıl dağıtılacağına ilişkin kapsamlı bir kılavuz sunuyoruz. Bu çözümü çok hoparlörlü (100'den fazla) ses kaydıyla ilgili uygulamalar için kullanabilirsiniz.

Çözüme genel bakış

Amazon Yazısı AWS'de konuşmacı günlüğü oluşturma için başvurulacak hizmettir. Ancak desteklenmeyen diller için, çıkarım amacıyla SageMaker'da konuşlandırılacak diğer modelleri (bizim durumumuzda PyAnnote) kullanabilirsiniz. Çıkarımın 60 saniyeye kadar sürdüğü kısa ses dosyaları için şunu kullanabilirsiniz: gerçek zamanlı çıkarım. 60 saniyeden uzun süre, eşzamanlı olmayan çıkarım kullanılmalıdır. Eşzamansız çıkarımın ek yararı, işlenecek istek olmadığında örnek sayısını otomatik olarak sıfıra ölçeklendirerek maliyet tasarrufu sağlamasıdır.

Sarılma Yüz makine öğrenimi (ML) modelleri için popüler bir açık kaynak merkezdir. AWS ve Hugging Face'in bir özelliği var: ortaklık Bu, PyTorch veya TensorFlow'da eğitim ve çıkarım için bir dizi AWS Derin Öğrenme Konteyneri (DLC) ve SageMaker Python SDK için Hugging Face tahmin edicileri ve tahmincileri ile SageMaker aracılığıyla sorunsuz bir entegrasyona olanak tanır. SageMaker özellikleri ve yetenekleri, geliştiricilerin ve veri bilimcilerinin AWS'de doğal dil işlemeye (NLP) kolaylıkla başlamalarına yardımcı olur.

Bu çözümün entegrasyonu, Hugging Face'in önceden eğitilmiş konuşmacı günlüğü modelinin kullanılmasını içerir. PyAnnote kütüphanesi. PyAnnote, konuşmacı günlüğü oluşturmak için Python'da yazılmış açık kaynaklı bir araç setidir. Örnek ses veri kümesi üzerinde eğitilen bu model, ses dosyalarında etkili hoparlör bölümlendirmesine olanak tanır. Model, SageMaker'da eşzamansız bir uç nokta kurulumu olarak konuşlandırılarak günlük oluşturma görevlerinin verimli ve ölçeklenebilir şekilde işlenmesini sağlar.

Aşağıdaki şemada çözüm mimarisi gösterilmektedir.Çözüm mimarisi

Bu yazı için aşağıdaki ses dosyasını kullanıyoruz.

Stereo veya çok kanallı ses dosyaları, kanalların ortalaması alınarak otomatik olarak monoya dönüştürülür. Farklı bir hızda örneklenen ses dosyaları, yükleme sonrasında otomatik olarak 16kHz'e yeniden örneklenir.

Önkoşullar

Aşağıdaki ön koşulları tamamlayın:

  1. SageMaker alanı oluşturun.
  2. Emin olun sizin AWS Kimlik ve Erişim Yönetimi (IAM) kullanıcısı, bir kullanıcı adı oluşturmak için gerekli erişim izinlerine sahiptir. SageMaker rolü.
  3. AWS hesabının, ml.g5.2xlarge bulut sunucusu için SageMaker uç noktasını barındırmaya yönelik bir hizmet kotasına sahip olduğundan emin olun.

Hugging Face'ten PyAnnote konuşmacı günlüğüne erişmek için bir model işlevi oluşturun

İstediğiniz önceden eğitilmiş içeriğe erişmek için Hugging Face Hub'ı kullanabilirsiniz. PyAnnote konuşmacı günlüğü modeli. SageMaker uç noktasını oluştururken model dosyasını indirmek için aynı komut dosyasını kullanırsınız.

sarılma yüz

Aşağıdaki koda bakın:

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

Model kodunu paketleyin

Çıkarım kodunu içeren inference.py gibi temel dosyaları hazırlayın:

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

Bir ... hazırlamak requirements.txt Çıkarımı çalıştırmak için gerekli Python kitaplıklarını içeren dosya:

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

Son olarak sıkıştırın inference.py ve require.txt dosyalarını seçin ve farklı kaydedin model.tar.gz:

!tar zcvf model.tar.gz *

SageMaker modelini yapılandırma

Görüntü URI'sini ve model veri konumunu belirterek bir SageMaker model kaynağı tanımlayın. Amazon Basit Depolama Hizmeti (S3) ve SageMaker rolü:

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

Modeli Amazon S3'e yükleyin

Sıkıştırılmış PyAnnote Hugging Face model dosyasını bir S3 klasörüne yükleyin:

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

SageMaker eşzamansız uç noktası oluşturma

Sağlanan eşzamansız çıkarım yapılandırmasını kullanarak modeli SageMaker'da dağıtmak için eşzamansız bir uç nokta yapılandırın:

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

Uç noktayı test edin

Günlük oluşturma için bir ses dosyası göndererek ve belirtilen S3 çıkış yolunda depolanan JSON çıkışını alarak uç nokta işlevselliğini değerlendirin:

# 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

Bu çözümü geniş ölçekte dağıtmak için kullanmanızı öneririz AWS Lambda, Amazon Basit Bildirim Servisi (Amazon SNS) veya Amazon Basit Kuyruk Hizmeti (Amazon SQS). Bu hizmetler ölçeklenebilirlik, olay odaklı mimariler ve verimli kaynak kullanımı için tasarlanmıştır. Eşzamansız çıkarım sürecini sonuç işlemeden ayırmaya yardımcı olarak her bileşeni bağımsız olarak ölçeklendirmenize ve çıkarım isteklerinin patlamalarını daha etkili bir şekilde ele almanıza olanak tanır.

Sonuçlar

Model çıktısı şurada saklanır: s3://sagemaker-xxxx /async_inference/output/. Çıktı, ses kaydının üç sütuna bölündüğünü gösterir:

  • Başlangıç ​​(saniye cinsinden başlangıç ​​zamanı)
  • Bitiş (saniye cinsinden bitiş zamanı)
  • Hoparlör (hoparlör etiketi)

Aşağıdaki kod sonuçlarımızın bir örneğini göstermektedir:

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

Temizlemek

MinCapacity'yi 0'a ayarlayarak bir ölçeklendirme ilkesini sıfıra ayarlayabilirsiniz; asenkron çıkarım hiçbir istek olmadan otomatik olarak sıfıra ölçeklendirmenizi sağlar. Uç noktayı silmenize gerek yok, terazi ihtiyaç duyulduğunda tekrar sıfırdan, kullanılmadığında maliyetleri düşürür. Aşağıdaki koda bakın:

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

Uç noktayı silmek istiyorsanız aşağıdaki kodu kullanın:

async_predictor.delete_endpoint(async_endpoint_name)

Eşzamansız uç nokta dağıtımının faydaları

Bu çözüm aşağıdaki avantajları sunar:

  • Çözüm, birden fazla veya büyük ses dosyasını verimli bir şekilde işleyebilir.
  • Bu örnekte gösterim için tek bir örnek kullanılmaktadır. Bu çözümü yüzlerce veya binlerce video için kullanmak ve birden çok örnekte işlem yapmak için eşzamansız bir uç nokta kullanmak istiyorsanız, otomatik ölçeklendirme politikasıÇok sayıda kaynak belge için tasarlanmıştır. Otomatik ölçeklendirme, iş yükünüzdeki değişikliklere yanıt olarak bir model için sağlanan bulut sunucusu sayısını dinamik olarak ayarlar.
  • Çözüm, uzun süredir devam eden görevleri gerçek zamanlı çıkarımlardan ayırarak kaynakları optimize eder ve sistem yükünü azaltır.

Sonuç

Bu yazıda, Hugging Face'in konuşmacı günlüğü modelini Python komut dosyalarını kullanarak SageMaker'da dağıtmak için basit bir yaklaşım sunduk. Eşzamansız bir uç noktanın kullanılması, günlük oluşturma tahminlerini bir hizmet olarak sunmak için etkili ve ölçeklenebilir bir araç sağlar ve eşzamanlı istekleri sorunsuz bir şekilde karşılar.

Ses projeleriniz için eşzamansız konuşmacı günlüğü oluşturmaya bugün başlayın. Kendi eşzamansız günlük oluşturma uç noktanızı çalışır duruma getirme konusunda sorularınız varsa yorumlardan bize ulaşın.


Yazarlar Hakkında

Sanjay Tiwary zamanını stratejik müşterilerle çalışarak iş gereksinimlerini tanımlamak, belirli kullanım örnekleri etrafında L300 oturumları sağlamak ve ölçeklenebilir, güvenilir ve performanslı AI/ML uygulamaları ve hizmetleri tasarlamak için harcayan bir Uzman Çözüm Mimarı AI/ML'dir. AI/ML destekli Amazon SageMaker hizmetinin başlatılmasına ve ölçeklendirilmesine yardımcı oldu ve Amazon AI hizmetlerini kullanarak çeşitli konsept kanıtları uyguladı. Ayrıca dijital dönüşüm yolculuğunun bir parçası olarak ileri analitik platformunu da geliştirdi.

Kiran Challapalli AWS kamu sektöründe derin teknoloji iş geliştiricisidir. AI/ML'de 8 yıldan fazla deneyime ve 23 yıllık genel yazılım geliştirme ve satış deneyimine sahiptir. Kiran, Hindistan'daki kamu sektörü işletmelerinin yapay zeka, makine öğrenimi ve büyük dil modelleri de dahil olmak üzere üretken yapay zeka teknolojilerini kullanan bulut tabanlı çözümleri keşfetmesine ve birlikte oluşturmasına yardımcı oluyor.

spot_img

En Son İstihbarat

spot_img

Bizimle sohbet

Merhaba! Size nasıl yardım edebilirim?