Trí thông minh dữ liệu tạo

Triển khai mô hình ghi nhật ký loa Ôm Mặt (PyAnnote) trên Amazon SageMaker dưới dạng điểm cuối không đồng bộ | Dịch vụ web của Amazon

Ngày:

Nhật ký người nói, một quá trình thiết yếu trong phân tích âm thanh, phân đoạn tệp âm thanh dựa trên nhận dạng người nói. Bài viết này đi sâu vào việc tích hợp PyAnnote của Hugging Face để ghi nhật ký diễn giả với Amazon SageMaker điểm cuối không đồng bộ.

Chúng tôi cung cấp hướng dẫn toàn diện về cách triển khai các giải pháp phân cụm và phân cụm loa bằng SageMaker trên Đám mây AWS. Bạn có thể sử dụng giải pháp này cho các ứng dụng xử lý bản ghi âm nhiều loa (trên 100).

Tổng quan về giải pháp

Phiên âm Amazon là dịch vụ phù hợp để ghi nhật ký người phát biểu trong AWS. Tuy nhiên, đối với các ngôn ngữ không được hỗ trợ, bạn có thể sử dụng các mô hình khác (trong trường hợp của chúng tôi là PyAnnote) sẽ được triển khai trong SageMaker để suy luận. Đối với các tệp âm thanh ngắn trong đó quá trình suy luận mất tối đa 60 giây, bạn có thể sử dụng suy luận thời gian thực. Trong thời gian dài hơn 60 giây, không đồng bộ nên sử dụng suy luận. Lợi ích bổ sung của suy luận không đồng bộ là tiết kiệm chi phí bằng cách tự động điều chỉnh số lượng phiên bản về 0 khi không có yêu cầu xử lý.

Ôm mặt là một trung tâm nguồn mở phổ biến dành cho các mô hình học máy (ML). AWS và Ôm Mặt có quan hệ đối tác cho phép tích hợp liền mạch thông qua SageMaker với một bộ AWS Deep Learning Containers (DLC) để đào tạo và suy luận trong PyTorch hoặc TensorFlow cũng như các công cụ ước tính và dự đoán Ôm khuôn mặt cho SageMaker Python SDK. Các tính năng và khả năng của SageMaker giúp các nhà phát triển và nhà khoa học dữ liệu bắt đầu xử lý ngôn ngữ tự nhiên (NLP) trên AWS một cách dễ dàng.

Việc tích hợp cho giải pháp này liên quan đến việc sử dụng mô hình ghi nhật ký diễn giả được đào tạo trước của Hugging Face bằng cách sử dụng thư viện PyAnnote. PyAnnote là bộ công cụ mã nguồn mở được viết bằng Python để ghi nhật ký người nói. Mô hình này, được đào tạo trên tập dữ liệu âm thanh mẫu, cho phép phân vùng loa hiệu quả trong các tệp âm thanh. Mô hình này được triển khai trên SageMaker dưới dạng thiết lập điểm cuối không đồng bộ, cung cấp khả năng xử lý các tác vụ nhật ký hiệu quả và có thể mở rộng.

Sơ đồ sau minh họa kiến ​​trúc giải pháp.Giải pháp xây dựng

Đối với bài đăng này, chúng tôi sử dụng tệp âm thanh sau.

Các tệp âm thanh nổi hoặc đa kênh sẽ tự động được trộn xuống đơn âm bằng cách tính trung bình các kênh. Các tệp âm thanh được lấy mẫu ở tốc độ khác sẽ tự động được lấy mẫu lại thành 16kHz khi tải.

Điều kiện tiên quyết

Hoàn thành các điều kiện tiên quyết sau:

  1. Tạo miền SageMaker.
  2. Hãy chắc chắn rằng bạn Quản lý truy cập và nhận dạng AWS (IAM) người dùng có các quyền truy cập cần thiết để tạo Vai trò của SageMaker.
  3. Đảm bảo tài khoản AWS có hạn ngạch dịch vụ để lưu trữ điểm cuối SageMaker cho phiên bản ml.g5.2xlarge.

Tạo chức năng mô hình để truy cập nhật ký loa PyAnnote từ Ôm mặt

Bạn có thể sử dụng Hugging Face Hub để truy cập vào các chế độ được đào tạo trước mà bạn mong muốn. Mô hình nhật ký loa PyAnnote. Bạn sử dụng cùng một tập lệnh để tải xuống tệp mô hình khi tạo điểm cuối SageMaker.

ôm mặt

Xem mã sau đây:

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

Đóng gói mã mẫu

Chuẩn bị các tệp cần thiết như inference.py, chứa mã suy luậ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
    }

Chuẩn bị một requirements.txt tệp chứa các thư viện Python cần thiết để chạy suy luận:

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

Cuối cùng, nén inference.py và các tệp require.txt rồi lưu nó dưới dạng model.tar.gz:

!tar zcvf model.tar.gz *

Định cấu hình mô hình SageMaker

Xác định tài nguyên mô hình SageMaker bằng cách chỉ định URI hình ảnh, vị trí dữ liệu mô hình trong Dịch vụ lưu trữ đơn giản của Amazon (S3) và vai trò 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}")

Tải mô hình lên Amazon S3

Tải tệp mô hình Khuôn mặt ôm PyAnnote đã nén lên vùng lưu trữ S3:

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

Tạo điểm cuối không đồng bộ SageMaker

Định cấu hình điểm cuối không đồng bộ để triển khai mô hình trên SageMaker bằng cấu hình suy luận không đồng bộ được cung cấp:

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

Kiểm tra điểm cuối

Đánh giá chức năng điểm cuối bằng cách gửi tệp âm thanh để ghi nhật ký và truy xuất đầu ra JSON được lưu trữ trong đường dẫn đầu ra S3 được chỉ định:

# 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

Để triển khai giải pháp này trên quy mô lớn, chúng tôi khuyên bạn nên sử dụng AWS Lambda, Dịch vụ thông báo đơn giản của Amazon (Amazon SNS), hoặc Dịch vụ xếp hàng đơn giản trên Amazon (SQS của Amazon). Các dịch vụ này được thiết kế để có khả năng mở rộng, kiến ​​trúc hướng sự kiện và sử dụng tài nguyên hiệu quả. Chúng có thể giúp tách rời quy trình suy luận không đồng bộ khỏi quá trình xử lý kết quả, cho phép bạn mở rộng quy mô từng thành phần một cách độc lập và xử lý các loạt yêu cầu suy luận hiệu quả hơn.

Kết quả

Đầu ra mô hình được lưu trữ tại s3://sagemaker-xxxx /async_inference/output/. Đầu ra cho thấy bản ghi âm đã được phân thành ba cột:

  • Bắt đầu (thời gian bắt đầu tính bằng giây)
  • Kết thúc (thời gian kết thúc tính bằng giây)
  • Loa (nhãn loa)

Đoạn mã sau đây hiển thị một ví dụ về kết quả của chúng tôi:

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

Làm sạch

Bạn có thể đặt chính sách chia tỷ lệ thành 0 bằng cách đặt MinCapacity thành XNUMX; suy luận không đồng bộ cho phép bạn tự động chia tỷ lệ về 0 mà không cần yêu cầu. Bạn không cần phải xóa điểm cuối, nó quy mô từ con số 0 khi cần thiết trở lại, giảm chi phí khi không sử dụng. Xem đoạn mã sau:

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

Nếu bạn muốn xóa điểm cuối, hãy sử dụng đoạn mã sau:

async_predictor.delete_endpoint(async_endpoint_name)

Lợi ích của việc triển khai điểm cuối không đồng bộ

Giải pháp này mang lại những lợi ích sau:

  • Giải pháp có thể xử lý hiệu quả nhiều tệp âm thanh lớn hoặc lớn.
  • Ví dụ này sử dụng một trường hợp duy nhất để trình diễn. Nếu bạn muốn sử dụng giải pháp này cho hàng trăm hoặc hàng nghìn video và sử dụng điểm cuối không đồng bộ để xử lý trên nhiều phiên bản, bạn có thể sử dụng chính sách mở rộng tự động, được thiết kế cho một số lượng lớn các tài liệu nguồn. Tự động thay đổi quy mô sẽ tự động điều chỉnh số lượng phiên bản được cung cấp cho một mô hình để đáp ứng những thay đổi trong khối lượng công việc của bạn.
  • Giải pháp tối ưu hóa tài nguyên và giảm tải hệ thống bằng cách tách các tác vụ chạy dài khỏi suy luận thời gian thực.

Kết luận

Trong bài đăng này, chúng tôi đã cung cấp một cách tiếp cận đơn giản để triển khai mô hình ghi nhật ký loa của Hugging Face trên SageMaker bằng cách sử dụng tập lệnh Python. Việc sử dụng điểm cuối không đồng bộ cung cấp một phương tiện hiệu quả và có thể mở rộng để cung cấp các dự đoán phân tích dữ liệu dưới dạng dịch vụ, đáp ứng các yêu cầu đồng thời một cách liền mạch.

Hãy bắt đầu ngay hôm nay với tính năng ghi nhật ký loa không đồng bộ cho các dự án âm thanh của bạn. Hãy liên hệ trong phần nhận xét nếu bạn có bất kỳ câu hỏi nào về việc thiết lập và chạy điểm cuối ghi nhật ký không đồng bộ của riêng mình.


Về các tác giả

Sanjay Tiwary là Kiến trúc sư giải pháp chuyên gia AI/ML, người dành thời gian làm việc với các khách hàng chiến lược để xác định các yêu cầu kinh doanh, cung cấp các phiên L300 xung quanh các trường hợp sử dụng cụ thể, đồng thời thiết kế các ứng dụng và dịch vụ AI/ML có khả năng mở rộng, đáng tin cậy và hiệu quả. Anh ấy đã giúp khởi chạy và mở rộng quy mô dịch vụ Amazon SageMaker được hỗ trợ bởi AI/ML và đã triển khai một số bằng chứng về khái niệm bằng cách sử dụng các dịch vụ AI của Amazon. Anh cũng đã phát triển nền tảng phân tích nâng cao như một phần của hành trình chuyển đổi kỹ thuật số.

Kiran Challapalli là nhà phát triển kinh doanh công nghệ sâu hoạt động trong khu vực công AWS. Ông có hơn 8 năm kinh nghiệm về AI/ML và 23 năm kinh nghiệm bán hàng và phát triển phần mềm tổng thể. Kiran giúp các doanh nghiệp khu vực công trên khắp Ấn Độ khám phá và đồng tạo ra các giải pháp dựa trên đám mây sử dụng AI, ML và AI tổng quát—bao gồm các công nghệ—mô hình ngôn ngữ lớn.

tại chỗ_img

Tin tức mới nhất

tại chỗ_img

Trò chuyện trực tiếp với chúng tôi (chat)

Chào bạn! Làm thế nào để tôi giúp bạn?