الصورة الرمزية جيف بودير


يسعدنا أن نعلن أن حاوية Hugging Face Embedding الجديدة لـ Amazon SageMaker متاحة الآن بشكل عام (GA). يمكن لعملاء AWS الآن نشر نماذج التضمين بكفاءة على SageMaker لإنشاء تطبيقات الذكاء الاصطناعي التوليدي، بما في ذلك تطبيقات الجيل المعزز للاسترجاع (RAG).

سنوضح لك في هذه المدونة كيفية نشر نماذج التضمين المفتوحة، مثل Snowflake/snowflake-arctic-embed-l، أو BAAI/bge-large-en-v1.5 أو Wholesale-transformers/all-MiniLM-L6-v2 إلى Amazon SageMaker للاستدلال باستخدام Hugging Face Embedding Container الجديدة. سنقوم بنشر Snowflake/snowflake-arctic-embed-m-v1.5 وهو أحد أفضل نماذج التضمين المفتوحة للاسترجاع – يمكنك التحقق من تصنيفاته على لوحة المتصدرين لـ MTEB.

يغطي المثال:

ما هي حاوية تضمين الوجه المعانقة؟

إن Hugging Face Embedding Container عبارة عن حاوية استدلالية جديدة مصممة لهذا الغرض لنشر نماذج التضمين بسهولة في بيئة آمنة ومدارة. يتم تشغيل المحتوى القابل للتنزيل (DLC) بواسطة استدلال تضمين النص (TEI)، وهو حل سريع للغاية وفعال في الذاكرة لنشر نماذج التضمين وتقديمها. يتيح TEI استخراجًا عالي الأداء للنماذج الأكثر شيوعًا، بما في ذلك FlagEmbedding وEmber وGTE وE5. تطبق TEI العديد من الميزات مثل:

  • لا توجد خطوة لتجميع الرسم البياني النموذجي
  • صور عامل إرساء صغيرة وأوقات تشغيل سريعة
  • التجميع الديناميكي القائم على الرمز المميز
  • رمز المحولات الأمثل للاستدلال باستخدام Flash Attention وCandle وcuBLASlt
  • تحميل وزن الأمانات
  • الإنتاج جاهز (التتبع الموزع باستخدام قياسات Open Telemetry وPrometheus)

يدعم TEI بنيات النماذج التالية

لنبدأ!

1. إعداد بيئة التطوير

نحن نذهب لاستخدام sagemaker python SDK لنشر Snowflake Arctic في Amazon SageMaker. نحتاج إلى التأكد من تكوين حساب AWS و sagemaker تم تثبيت بيثون SDK.

!pip install "sagemaker>=2.221.1" --upgrade --quiet

إذا كنت ستستخدم Sagemaker في بيئة محلية، فستحتاج إلى الوصول إلى دور IAM مع الأذونات المطلوبة لـ 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 session region: {sess.boto_region_name}")

2. قم باسترداد حاوية تضمين الوجه المعانقة الجديدة

بالمقارنة مع نشر نماذج Hugging Face العادية، نحتاج أولاً إلى استرداد معرف uri الخاص بالحاوية وتقديمه إلى موقعنا HuggingFaceModel فئة نموذجية مع أ image_uri مشيرا إلى الصورة. لاسترداد حاوية Hugging Face Embedding الجديدة في Amazon SageMaker، يمكننا استخدام ملف get_huggingface_llm_image_uri الطريقة المقدمة من sagemaker SDK. تسمح لنا هذه الطريقة باسترداد معرف URI لحاوية تضمين الوجه المرغوبة. من المهم ملاحظة أن TEI لديه إصداران مختلفان لوحدة المعالجة المركزية ووحدة معالجة الرسومات، لذلك قمنا بإنشاء وظيفة مساعدة لاسترداد معرف uri الصحيح للصورة بناءً على نوع المثيل.

from sagemaker.huggingface import get_huggingface_llm_image_uri


def get_image_uri(instance_type):
  key = "huggingface-tei" if instance_type.startswith("ml.g") or instance_type.startswith("ml.p") else "huggingface-tei-cpu"
  return get_huggingface_llm_image_uri(key, version="1.2.3")

3. قم بنشر Snowflake Arctic على Amazon SageMaker

لنشر Snowflake/snowflake-arctic-embed-m-v1.5 في Amazon SageMaker، قمنا بإنشاء HuggingFaceModel فئة النموذج وتحديد تكوين نقطة النهاية لدينا بما في ذلك HF_MODEL_ID, instance_type إلخ. سوف نستخدم أ c6i.2xlarge نوع المثيل، والذي يحتوي على 4 وحدات معالجة مركزية افتراضية Intel Ice-Lake وذاكرة سعة 8 جيجابايت ويكلف حوالي 0.204 دولارًا أمريكيًا في الساعة.

import json
from sagemaker.huggingface import HuggingFaceModel


instance_type = "ml.g5.xlarge"


config = {
  'HF_MODEL_ID': "Snowflake/snowflake-arctic-embed-m-v1.5", 
}


emb_model = HuggingFaceModel(
  role=role,
  image_uri=get_image_uri(instance_type),
  env=config
)

بعد أن أنشأنا HuggingFaceModel يمكننا نشره على Amazon SageMaker باستخدام deploy طريقة. سوف نقوم بنشر النموذج مع ml.c6i.2xlarge نوع المثيل.



emb = emb_model.deploy(
  initial_instance_count=1,
  instance_type=instance_type,
)

سيقوم SageMaker الآن بإنشاء نقطة النهاية الخاصة بنا ونشر النموذج عليها. قد يستغرق هذا حوالي 5 دقائق.

4. تشغيل وتقييم أداء الاستدلال

بعد نشر نقطة النهاية الخاصة بنا، يمكننا إجراء الاستدلال عليها. سوف نستخدم predict الطريقة من predictor لتشغيل الاستدلال على نقطة النهاية لدينا.

data = {
  "inputs": "the mesmerizing performances of the leads keep the film grounded and keep the audience riveted .",
}
 
res = emb.predict(data=data)
 
 

print(f"length of embeddings: {len(res[0])}")
print(f"first 10 elements of embeddings: {res[0][:10]}")

مذهل! الآن بعد أن أصبح بإمكاننا إنشاء التضمينات، فلنختبر أداء نموذجنا.

سنرسل 3900 طلبًا إلى نقطة النهاية لدينا ونستخدم الترابط مع 10 سلاسل رسائل متزامنة. سنقوم بقياس متوسط ​​زمن الوصول والإنتاجية لنقطة النهاية لدينا. سنقوم بإرسال 256 رمزًا مميزًا ليصبح المجموع ~1 مليون رمز مميز. قررنا استخدام 256 رمزًا كطول إدخال لإيجاد التوازن الصحيح بين المدخلات الأقصر والأطول.

ملاحظة: عند تشغيل اختبار التحميل، يتم إرسال الطلبات من أوروبا، ويتم نشر نقطة النهاية في us-east-1. يؤدي هذا إلى إضافة زمن الوصول الزائد للشبكة إلى الطلبات.

import threading
import time
number_of_threads = 10
number_of_requests = int(3900 // number_of_threads)
print(f"number of threads: {number_of_threads}")
print(f"number of requests per thread: {number_of_requests}")
 
def send_requests():
    for _ in range(number_of_requests):
        
        emb.predict(data={"inputs": "Hugging Face is a company and a popular platform in the field of natural language processing (NLP) and machine learning. They are known for their contributions to the development of state-of-the-art models for various NLP tasks and for providing a platform that facilitates the sharing and usage of pre-trained models. One of the key offerings from Hugging Face is the Transformers library, which is an open-source library for working with a variety of pre-trained transformer models, including those for text generation, translation, summarization, question answering, and more. The library is widely used in the research and development of NLP applications and is supported by a large and active community. Hugging Face also provides a model hub where users can discover, share, and download pre-trained models. Additionally, they offer tools and frameworks to make it easier for developers to integrate and use these models in their own projects. The company has played a significant role in advancing the field of NLP and making cutting-edge models more accessible to the broader community. Hugging Face also provides a model hub where users can discover, share, and download pre-trained models. Additionally, they offer tools and frameworks to make it easier for developers and ma"})
 

threads = [threading.Thread(target=send_requests) for _ in range(number_of_threads) ]

start = time.time()
[t.start() for t in threads]

[t.join() for t in threads]
print(f"total time: {round(time.time() - start)} seconds")

استغرق إرسال 3900 طلب أو تضمين مليون رمز حوالي 841 ثانية. هذا يعني أنه يمكننا تشغيل حوالي 5 طلبات في الثانية. لكن ضع في اعتبارك أن ذلك يشمل زمن انتقال الشبكة من أوروبا إلى شرق الولايات المتحدة 1. عندما نتفحص زمن الوصول لنقطة النهاية من خلال cloudwatch، يمكننا أن نرى أن زمن الوصول لنموذج Embeddings الخاص بنا هو 2 ثانية عند 10 طلبات متزامنة. يعد هذا أمرًا مثيرًا للإعجاب للغاية بالنسبة لمثيل وحدة المعالجة المركزية الصغيرة والقديمة، والذي يكلف حوالي 150 دولارًا شهريًا. يمكنك نشر النموذج على مثيل GPU للحصول على أوقات استدلال أسرع.

ملاحظة: أجرينا نفس الاختبار على أ ml.g5.xlarge مع وحدة معالجة الرسومات NVIDIA A10G 1x. استغرق تضمين مليون رمز حوالي 30 ثانية. هذا يعني أنه يمكننا تشغيل حوالي 130 طلبًا في الثانية. زمن الوصول لنقطة النهاية هو 4 مللي ثانية عند 10 طلبات متزامنة. ال ml.g5.xlarge تكلف حوالي 1.408 دولارًا للساعة على Amazon SageMaker.

تعد مثيلات GPU أسرع بكثير من مثيلات وحدة المعالجة المركزية، ولكنها أيضًا أكثر تكلفة. إذا كنت تريد معالجة عمليات التضمين بشكل مجمّع، فيمكنك استخدام مثيل GPU. إذا كنت تريد تشغيل نقطة نهاية صغيرة بتكاليف منخفضة، فيمكنك استخدام مثيل وحدة المعالجة المركزية (CPU). نحن نخطط للعمل على معيار مخصص لحاوية Hugging Face Embedding في المستقبل.

print(f"https://console.aws.amazon.com/cloudwatch/home?region={sess.boto_region_name}#metricsV2:graph=~(metrics~(~(~'AWS*2fSageMaker~'ModelLatency~'EndpointName~'{emb.endpoint_name}~'VariantName~'AllTraffic))~view~'timeSeries~stacked~false~region~'{sess.boto_region_name}~start~'-PT5M~end~'P0D~stat~'Average~period~30);query=~'*7bAWS*2fSageMaker*2cEndpointName*2cVariantName*7d*20{emb.endpoint_name}")

أسلحة كيميائية

5. احذف النموذج ونقطة النهاية

للتنظيف، يمكننا حذف النموذج ونقطة النهاية

emb.delete_model()
emb.delete_endpoint()

خاتمة

تسمح لك حاوية Hugging Face Embedding الجديدة بنشر نماذج التضمين المفتوحة بسهولة مثل Snowflake/snowflake-arctic-embed-l إلى Amazon SageMaker للاستدلال. لقد مررنا بإعداد بيئة التطوير، واسترداد الحاوية، ونشر النموذج، وتقييم أداء الاستدلال الخاص به.

باستخدام هذه الحاوية الجديدة، يمكن للعملاء الآن بسهولة نشر نماذج التضمين عالية الأداء، مما يتيح إنشاء تطبيقات ذكاء اصطناعي توليدية متطورة بكفاءة محسنة. يسعدنا أن نرى ما تقوم ببنائه باستخدام حاوية Hugging Face Embedding الجديدة لـ Amazon SageMaker. إذا كان لديك أي أسئلة أو تعليقات، يرجى إعلامنا بذلك.

شاركها.
اترك تعليقاً