مدل‌های ML گروهی را در Amazon SageMaker PlatoBlockchain Data Intelligence اجرا کنید. جستجوی عمودی Ai.

مدل‌های ML گروهی را در Amazon SageMaker اجرا کنید

استقرار مدل در یادگیری ماشین (ML) به طور فزاینده ای پیچیده می شود. شما می‌خواهید نه تنها یک مدل ML، بلکه گروه‌های بزرگی از مدل‌های ML را که به‌عنوان گردش‌های کاری مجموعه نمایش داده می‌شوند، مستقر کنید. این گردش کار از چندین مدل ML تشکیل شده است. تولید این مدل‌های ML چالش برانگیز است زیرا باید به الزامات مختلف عملکرد و تأخیر پایبند باشید.

آمازون SageMaker پشتیبانی از گروه های تک نمونه با سرور استنتاج تریتون. این قابلیت به شما اجازه می دهد تا مجموعه های مدلی را اجرا کنید که در یک نمونه واحد قرار می گیرند. در پشت صحنه، SageMaker از Triton Inference Server برای مدیریت مجموعه در هر نمونه پشت نقطه پایانی استفاده می کند تا با تأخیر استنتاج فوق العاده کم (تک رقمی میلی ثانیه) توان عملیاتی و استفاده از سخت افزار را به حداکثر برساند. با Triton، می‌توانید از میان طیف گسترده‌ای از چارچوب‌های پشتیبانی‌شده ML (از جمله TensorFlow، PyTorch، ONNX، XGBoost، و NVIDIA TensorRT) و پشتیبان‌های زیرساخت، از جمله GPU، CPU و استنتاج AWS.

با استفاده از این قابلیت در SageMaker، می‌توانید با اجتناب از تأخیر پرهزینه شبکه و بهره‌مندی از مزایای محاسبات و محل داده‌ها برای خطوط لوله استنتاج مجموعه، بارهای کاری خود را بهینه کنید. در این پست، مزایای استفاده از Triton Inference Server را به همراه ملاحظاتی در مورد اینکه آیا این گزینه مناسب برای حجم کاری شما است، مورد بحث قرار می دهیم.

بررسی اجمالی راه حل

سرور استنتاج تریتون به گونه‌ای طراحی شده است که تیم‌ها را قادر می‌سازد تا مدل‌های هوش مصنوعی آموزش‌دیده را از هر چارچوبی بر روی هر زیرساخت مبتنی بر GPU یا CPU، استقرار، اجرا و مقیاس‌بندی کنند. علاوه بر این، برای ارائه استنتاج با کارایی بالا در مقیاس با ویژگی‌هایی مانند دسته‌بندی پویا، اجرای همزمان، پیکربندی مدل بهینه، قابلیت‌های مجموعه مدل و پشتیبانی از ورودی‌های جریان بهینه شده است.

بارهای کاری باید قابلیت هایی را که تریتون فراهم می کند تا اطمینان حاصل شود که مدل هایشان قابل ارائه هستند، در نظر بگیرند. تریتون از تعدادی فریم ورک محبوب خارج از جعبه، از جمله TensorFlow، PyTorch، ONNX، XGBoost و NVIDIA TensorRT پشتیبانی می کند. تریتون همچنین از باطن های مختلف پشتیبانی می کند که برای اجرای صحیح الگوریتم ها لازم است. شما باید اطمینان حاصل کنید که مدل‌های شما توسط این Backendها پشتیبانی می‌شوند و در صورتی که یک Backend پشتیبانی نمی‌کند، Triton به شما اجازه می‌دهد مدل خود را پیاده‌سازی و ادغام کنید. همچنین باید تأیید کنید که نسخه الگوریتم شما پشتیبانی می شود و همچنین اطمینان حاصل کنید که مصنوعات مدل توسط باطن مربوطه قابل قبول هستند. برای بررسی اینکه آیا الگوریتم خاص شما پشتیبانی می شود یا خیر، به تریتون استنتاج سرور باطن برای لیستی از پشتیبان های بومی پشتیبانی شده توسط NVIDIA.

ممکن است سناریوهایی وجود داشته باشد که در آن مدل‌ها یا مجموعه‌های مدل شما بدون نیاز به تلاش بیشتر روی Triton کار نکنند، مثلاً اگر یک باطن پشتیبانی شده بومی برای الگوریتم شما وجود نداشته باشد. ملاحظات دیگری نیز وجود دارد که باید در نظر گرفته شوند، از جمله اینکه قالب محموله ممکن است ایده آل نباشد، به خصوص زمانی که اندازه بار شما ممکن است برای درخواست شما بزرگ باشد. مثل همیشه، باید عملکرد خود را پس از استقرار این بارهای کاری تأیید کنید تا اطمینان حاصل کنید که انتظارات شما برآورده شده است.

بیایید یک مدل شبکه عصبی طبقه‌بندی تصویر بگیریم و ببینیم چگونه می‌توانیم بار کاری خود را تسریع کنیم. در این مثال، ما از پشتیبان NVIDIA DALI برای سرعت بخشیدن به پیش پردازش خود در زمینه مجموعه خود استفاده می کنیم.

مجموعه های مدل تریتون را ایجاد کنید

سرور استنتاج تریتون استقرار مدل های هوش مصنوعی را در مقیاس ساده می کند. سرور استنتاج تریتون با راه حل مناسبی ارائه می شود که ساخت خطوط لوله پیش پردازش و پس پردازش را ساده می کند. پلت فرم سرور استنتاج تریتون زمانبندی گروهی را ارائه می دهد که می توانید از آن برای ساخت مدل های مجموعه خط لوله که در فرآیند استنتاج شرکت می کنند استفاده کنید و در عین حال از کارایی و بهینه سازی توان عملیاتی اطمینان حاصل کنید.

سرور استنتاج تریتون مدل هایی را از مخازن مدل ارائه می دهد. بیایید به طرح‌بندی مخزن مدل برای مدل مجموعه‌ای که شامل مدل پیش‌پردازش DALI، مدل V3 ابتدایی TensorFlow و پیکربندی مجموعه مدل است نگاهی بیندازیم. هر زیر شاخه حاوی اطلاعات مخزن برای مدل های مربوطه است. این config.pbtxt فایل پیکربندی مدل را برای مدل ها شرح می دهد. هر دایرکتوری باید یک زیر پوشه عددی برای هر نسخه از مدل داشته باشد و توسط یک باطن خاص که تریتون پشتیبانی می کند اجرا می شود.

مخزن مدل NVIDIA Triton

NVIDIA DALI

برای این پست، ما از NVIDIA Data Loading Library (DALI) به عنوان مدل پیش پردازش در مجموعه مدل خود استفاده می کنیم. NVIDIA DALI کتابخانه ای برای بارگذاری و پیش پردازش داده ها برای تسریع برنامه های یادگیری عمیق است. مجموعه‌ای از بلوک‌های ساختمانی بهینه‌شده برای بارگیری و پردازش داده‌های تصویر، ویدیو و صدا را فراهم می‌کند. می‌توانید از آن به عنوان جایگزینی قابل حمل برای بارگذارهای داده داخلی و تکرارکننده‌های داده در چارچوب‌های یادگیری عمیق محبوب استفاده کنید.

انویدیا دالی

کد زیر پیکربندی مدل برای backend DALI را نشان می دهد:

name: "dali"
backend: "dali"
max_batch_size: 256
input [
  {
    name: "DALI_INPUT_0"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "DALI_OUTPUT_0"
    data_type: TYPE_FP32
    dims: [ 299, 299, 3 ]
  }
]
parameters: [
  {
    key: "num_threads"
    value: { string_value: "12" }
  }
]

مدل Inception V3

برای این پست، نحوه استفاده از DALI در یک مجموعه مدل با Inception V3 را نشان می‌دهیم. مدل از پیش آموزش دیده Inception V3 TensorFlow در قالب GraphDef به عنوان یک فایل منفرد به نام ذخیره می شود. model.graphdef. config.pbtxt فایل دارای اطلاعاتی در مورد نام مدل، پلت فرم، max_batch_sizeو قراردادهای ورودی و خروجی. توصیه می کنیم تنظیم کنید max_batch_size پیکربندی کمتر از اندازه دسته ای مدل اولیه V3. فایل برچسب دارای برچسب کلاس برای 1,000 کلاس مختلف است. ما برچسب های مدل طبقه بندی اولیه را به کپی می کنیم inception_graphdef دایرکتوری در مخزن مدل فایل labels شامل 1,000 برچسب کلاسی است IMAGEnet مجموعه داده طبقه بندی

name: "inception_graphdef"
platform: "tensorflow_graphdef"
max_batch_size: 256
input [
  {
    name: "input"
    data_type: TYPE_FP32
    format: FORMAT_NHWC
    dims: [ 299, 299, 3 ]
  }
]
output [
  {
    name: "InceptionV3/Predictions/Softmax"
    data_type: TYPE_FP32
    dims: [ 1001 ]
    label_filename: "inception_labels.txt"
  }
]

گروه تریتون

کد زیر یک پیکربندی مدل از یک مدل مجموعه برای پیش پردازش و طبقه بندی تصویر DALI را نشان می دهد:

name: "ensemble_dali_inception"
platform: "ensemble"
max_batch_size: 256
input [
  {
    name: "INPUT"
    data_type: TYPE_UINT8
    dims: [ -1 ]
  }
]
output [
  {
    name: "OUTPUT"
    data_type: TYPE_FP32
    dims: [ 1001 ]
  }
]
ensemble_scheduling {
  step [
    {
      model_name: "dali"
      model_version: -1
      input_map {
        key: "DALI_INPUT_0"
        value: "INPUT"
      }
      output_map {
        key: "DALI_OUTPUT_0"
        value: "preprocessed_image"
      }
    },
    {
      model_name: "inception_graphdef"
      model_version: -1
      input_map {
        key: "input"
        value: "preprocessed_image"
      }
      output_map {
        key: "InceptionV3/Predictions/Softmax"
        value: "OUTPUT"
      }
    }
  ]
}

یک نقطه پایانی SageMaker ایجاد کنید

نقاط پایانی SageMaker امکان میزبانی بلادرنگ در جایی که زمان پاسخ دهی میلی ثانیه ای مورد نیاز است. SageMaker مدیریت مدل میزبانی را بر عهده می گیرد و توانایی مقیاس خودکار را دارد. علاوه بر این، تعدادی از قابلیت ها نیز ارائه شده است، از جمله میزبانی انواع مختلف مدل شما، تست A/B مدل های شما، ادغام با CloudWatch آمازون برای به دست آوردن قابلیت مشاهده عملکرد مدل، و نظارت بر رانش مدل.

بیایید یک مدل SageMaker از مصنوعات مدلی که در آنها آپلود کردیم ایجاد کنیم سرویس ذخیره سازی ساده آمازون (Amazon S3).

در مرحله بعد، ما همچنین یک متغیر محیطی اضافی ارائه می دهیم: SAGEMAKER_TRITON_DEFAULT_MODEL_NAME، که نام مدل بارگذاری شده توسط تریتون را مشخص می کند. مقدار این کلید باید با نام پوشه در بسته مدل آپلود شده در Amazon S3 مطابقت داشته باشد. این متغیر در مواردی که از یک مدل استفاده می کنید اختیاری است. در مورد مدل های گروهی، این کلید باید برای راه اندازی تریتون در SageMaker مشخص شود.

علاوه بر این، می توانید تنظیم کنید SAGEMAKER_TRITON_BUFFER_MANAGER_THREAD_COUNT و SAGEMAKER_TRITON_THREAD_COUNT برای بهینه سازی تعداد موضوعات

container = {
    "Image": triton_image_uri,
    "ModelDataUrl": model_uri,
    "Environment": {"SAGEMAKER_TRITON_DEFAULT_MODEL_NAME": "ensemble_dali_inception"},
}
create_model_response = sm_client.create_model(
    ModelName=sm_model_name, ExecutionRoleArn=role, PrimaryContainer=container
)

با مدل قبلی، یک پیکربندی نقطه پایانی ایجاد می‌کنیم که در آن می‌توانیم نوع و تعداد نمونه‌هایی را که می‌خواهیم در نقطه پایانی مشخص کنیم:

create_endpoint_config_response = sm_client.create_endpoint_config(
    EndpointConfigName=endpoint_config_name,
    ProductionVariants=[
        {
            "InstanceType": instance_type,
            "InitialVariantWeight": 1,
            "InitialInstanceCount": 1,
            "ModelName": sm_model_name,
            "VariantName": "AllTraffic",
        }
    ],
)
endpoint_config_arn = create_endpoint_config_response["EndpointConfigArn"]

ما از این پیکربندی نقطه پایانی برای ایجاد یک نقطه پایانی جدید SageMaker استفاده می کنیم و منتظر می مانیم تا استقرار به پایان برسد. با موفقیت آمیز بودن استقرار، وضعیت به InService تغییر می کند.

create_endpoint_response = sm_client.create_endpoint(
    EndpointName=endpoint_name, EndpointConfigName=endpoint_config_name
)
endpoint_arn = create_endpoint_response["EndpointArn"]

بار استنتاج

تصویر محموله ورودی از خط لوله پیش پردازش DALI عبور می کند و در زمانبندی مجموعه ارائه شده توسط Triton Inference Server استفاده می شود. ما بار را می سازیم تا به نقطه پایانی استنتاج منتقل شود:

payload = {
    "inputs": [
        {
            "name": "INPUT",
            "shape": rv2.shape,
            "datatype": "UINT8",
            "data": rv2.tolist(),
        }
    ]
}

استنتاج مجموعه

هنگامی که نقطه پایانی در حال اجرا است، می توانیم از تصویر نمونه برای انجام یک درخواست استنتاج با استفاده از JSON به عنوان فرمت بار استفاده کنیم. برای فرمت درخواست استنتاج، تریتون از پروتکل های استنتاج استاندارد جامعه KFServing استفاده می کند.

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name, ContentType="application/octet-stream", Body=json.dumps(payload)
)
print(json.loads(response["Body"].read().decode("utf8")))

با binary+json فرمت، ما باید طول فراداده درخواست را در هدر مشخص کنیم تا به تریتون اجازه دهیم بار دودویی را به درستی تجزیه کند. این کار با استفاده از یک هدر Content-Type سفارشی انجام می شود application/vnd.sagemaker-triton.binary+json;json-header-size={}.

این با استفاده از یک متفاوت است Inference-Header-Content-Length هدر روی سرور تریتون مستقل زیرا هدرهای سفارشی در SageMaker مجاز نیستند.

بسته tritonclient روش‌های کاربردی را برای تولید محموله بدون نیاز به دانستن جزئیات مشخصات ارائه می‌کند. ما از روش‌های زیر برای تبدیل درخواست استنتاج خود به فرمت باینری استفاده می‌کنیم که تأخیر کمتری برای استنتاج فراهم می‌کند. به GitHub مراجعه کنید دفتر یادداشت برای جزئیات پیاده سازی

response = runtime_sm_client.invoke_endpoint(
    EndpointName=endpoint_name,
    ContentType="application/vnd.sagemaker-triton.binary+json;json-header-size={}".format(
        header_length
    ),
    Body=request_body,
)

نتیجه

در این پست، ما نشان دادیم که چگونه می‌توانید مجموعه‌های مدلی را تولید کنید که روی یک نمونه در SageMaker اجرا می‌شوند. این الگوی طراحی می تواند برای ترکیب هر منطق پیش پردازش و پس پردازش همراه با پیش بینی استنتاج مفید باشد. SageMaker از تریتون برای اجرای استنتاج مجموعه بر روی یک کانتینر در نمونه ای استفاده می کند که از تمام چارچوب های اصلی پشتیبانی می کند.

برای نمونه‌های بیشتر در مورد گروه‌های تریتون در SageMaker، به آدرس زیر مراجعه کنید GitHub repo. آن را امتحان کنید!


درباره نویسنده

مدل‌های ML گروهی را در Amazon SageMaker PlatoBlockchain Data Intelligence اجرا کنید. جستجوی عمودی Ai.جیمز پارک یک معمار راه حل در خدمات وب آمازون است. او با Amazon.com برای طراحی، ساخت و استقرار راه حل های فناوری در AWS کار می کند و علاقه خاصی به هوش مصنوعی و یادگیری ماشین دارد. او در اوقات فراغت خود از جستجوی فرهنگ های جدید، تجربیات جدید و به روز ماندن با آخرین روندهای فناوری لذت می برد.

مدل‌های ML گروهی را در Amazon SageMaker PlatoBlockchain Data Intelligence اجرا کنید. جستجوی عمودی Ai.ویکرام الانگو یک معمار ارشد راه حل های تخصصی AI/ML در خدمات وب آمازون، مستقر در ویرجینیا، ایالات متحده است. Vikram با طراحی و رهبری فکری به مشتریان صنعت مالی و بیمه کمک می کند تا برنامه های یادگیری ماشین را در مقیاس بسازند و به کار گیرند. او در حال حاضر روی پردازش زبان طبیعی، هوش مصنوعی مسئول، بهینه‌سازی استنتاج و مقیاس‌بندی ML در سراسر سازمان متمرکز است. او در اوقات فراغت خود از مسافرت، پیاده روی، آشپزی و کمپینگ با خانواده لذت می برد.

مدل‌های ML گروهی را در Amazon SageMaker PlatoBlockchain Data Intelligence اجرا کنید. جستجوی عمودی Ai.ساوراب تریکاند مدیر محصول ارشد Amazon SageMaker Inference است. او مشتاق کار با مشتریان است و هدفش دموکراتیک کردن یادگیری ماشین است. او بر چالش‌های اصلی مربوط به استقرار برنامه‌های کاربردی پیچیده ML، مدل‌های ML چند مستاجر، بهینه‌سازی هزینه‌ها و در دسترس‌تر کردن استقرار مدل‌های یادگیری عمیق تمرکز می‌کند. Saurabh در اوقات فراغت خود از پیاده روی، یادگیری در مورد فن آوری های نوآورانه، دنبال کردن TechCrunch و گذراندن وقت با خانواده خود لذت می برد.

تمبر زمان:

بیشتر از آموزش ماشین AWS