เรียกใช้โมเดล ML ทั้งมวลบน Amazon SageMaker PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.

เรียกใช้โมเดล ML ทั้งมวลบน Amazon SageMaker

การปรับใช้โมเดลในแมชชีนเลิร์นนิง (ML) มีความซับซ้อนมากขึ้นเรื่อยๆ คุณต้องการปรับใช้ไม่ใช่แค่โมเดล ML เดียว แต่โมเดล ML กลุ่มใหญ่แสดงเป็นเวิร์กโฟลว์ทั้งมวล เวิร์กโฟลว์เหล่านี้ประกอบด้วยโมเดล ML หลายแบบ การผลิตโมเดล ML เหล่านี้เป็นสิ่งที่ท้าทาย เนื่องจากคุณต้องปฏิบัติตามข้อกำหนดด้านประสิทธิภาพและเวลาในการตอบสนองที่หลากหลาย

อเมซอน SageMaker รองรับชุดอินสแตนซ์เดียวด้วย เซิร์ฟเวอร์การอนุมานไทรทัน. ความสามารถนี้ช่วยให้คุณเรียกใช้ชุดโมเดลที่พอดีกับอินสแตนซ์เดียวได้ เบื้องหลัง SageMaker ใช้ประโยชน์จากเซิร์ฟเวอร์ Triton Inference เพื่อจัดการทุกอินสแตนซ์ที่อยู่เบื้องหลังปลายทางเพื่อเพิ่มปริมาณงานและการใช้ฮาร์ดแวร์ให้เกิดประโยชน์สูงสุดด้วยเวลาแฝงในการอนุมานที่ต่ำมาก (มิลลิวินาทีหลักเดียว) ด้วย Triton คุณสามารถเลือกเฟรมเวิร์ก ML ที่รองรับได้หลากหลาย (รวมถึง TensorFlow, PyTorch, ONNX, XGBoost และ NVIDIA TensorRT) และแบ็กเอนด์โครงสร้างพื้นฐาน รวมถึง GPU, CPU และ การอนุมาน AWS.

ด้วยความสามารถนี้บน SageMaker คุณสามารถปรับปริมาณงานของคุณให้เหมาะสมโดยหลีกเลี่ยงเวลาแฝงของเครือข่ายที่มีราคาแพง และเก็บเกี่ยวผลประโยชน์จากการคำนวณและตำแหน่งข้อมูลสำหรับไปป์ไลน์การอนุมานทั้งมวล ในบทความนี้ เราจะพูดถึงประโยชน์ของการใช้ Triton Inference Server ควบคู่ไปกับการพิจารณาว่านี่เป็นตัวเลือกที่เหมาะสมสำหรับปริมาณงานของคุณหรือไม่

ภาพรวมโซลูชัน

Triton Inference Server ได้รับการออกแบบมาเพื่อให้ทีมสามารถปรับใช้ รัน และปรับขนาดโมเดล AI ที่ผ่านการฝึกอบรมจากเฟรมเวิร์กใดก็ได้บนโครงสร้างพื้นฐานที่ใช้ GPU หรือ CPU นอกจากนี้ ยังได้รับการปรับให้เหมาะสมเพื่อเสนอการอนุมานประสิทธิภาพสูงตามขนาดด้วยคุณสมบัติต่างๆ เช่น การแบ่งกลุ่มแบบไดนามิก การรันพร้อมกัน การกำหนดค่าโมเดลที่เหมาะสมที่สุด ความสามารถของชุดโมเดล และการรองรับอินพุตการสตรีม

ปริมาณงานควรคำนึงถึงความสามารถที่ Triton จัดหาให้เพื่อให้แน่ใจว่าสามารถให้บริการรุ่นต่างๆ ได้ Triton รองรับเฟรมเวิร์กยอดนิยมจำนวนมาก รวมถึง TensorFlow, PyTorch, ONNX, XGBoost และ NVIDIA TensorRT ไทรทันยังรองรับแบ็กเอนด์ต่างๆ ที่จำเป็นสำหรับอัลกอริทึมในการทำงานอย่างถูกต้อง คุณควรตรวจสอบให้แน่ใจว่าแบ็กเอนด์เหล่านี้รองรับโมเดลของคุณ และในกรณีที่แบ็กเอนด์ไม่รองรับ Triton อนุญาตให้คุณปรับใช้ของคุณเองและรวมเข้าด้วยกัน คุณควรตรวจสอบด้วยว่าเวอร์ชันอัลกอริธึมของคุณได้รับการสนับสนุน และตรวจสอบให้แน่ใจว่าส่วนหลังที่เกี่ยวข้องยอมรับอาร์ติแฟกต์ของโมเดล หากต้องการตรวจสอบว่าอัลกอริธึมเฉพาะของคุณรองรับหรือไม่ โปรดดูที่ แบ็กเอนด์เซิร์ฟเวอร์การอนุมานไทรทัน สำหรับรายการแบ็กเอนด์ที่รองรับโดยกำเนิดซึ่งดูแลโดย NVIDIA

อาจมีบางสถานการณ์ที่โมเดลหรือชุดโมเดลของคุณไม่ทำงานบน Triton โดยไม่ต้องใช้ความพยายามมากขึ้น เช่น หากไม่มีแบ็กเอนด์ที่รองรับโดยกำเนิดสำหรับอัลกอริทึมของคุณ มีข้อควรพิจารณาอื่นๆ บางประการ เช่น รูปแบบเพย์โหลดอาจไม่เหมาะ โดยเฉพาะอย่างยิ่งเมื่อขนาดของเพย์โหลดของคุณอาจมีขนาดใหญ่สำหรับคำขอของคุณ และเช่นเคย คุณควรตรวจสอบประสิทธิภาพของคุณหลังจากปรับใช้ปริมาณงานเหล่านี้ เพื่อให้แน่ใจว่าตรงตามความคาดหวังของคุณ

มาดูโมเดลโครงข่ายประสาทเทียมการจำแนกรูปภาพ และดูว่าเราจะเร่งปริมาณงานของเราได้อย่างไร ในตัวอย่างนี้ เราใช้แบ็คเอนด์ NVIDIA DALI เพื่อเร่งการประมวลผลล่วงหน้าของเราในบริบทของชุดของเรา

สร้างชุดโมเดลไทรทัน

Triton Inference Server ช่วยลดความยุ่งยากในการปรับใช้โมเดล AI ในทุกขนาด Triton Inference Server มาพร้อมกับโซลูชันที่สะดวกสบายซึ่งช่วยลดความยุ่งยากในการสร้างขั้นตอนก่อนการประมวลผลและขั้นตอนหลังการประมวลผล แพลตฟอร์ม Triton Inference Server มีตัวจัดกำหนดการทั้งมวล ซึ่งคุณสามารถใช้เพื่อสร้างโมเดลทั้งมวลของ pipelining ensemble ที่เข้าร่วมในกระบวนการอนุมาน ในขณะเดียวกันก็รับประกันประสิทธิภาพและปริมาณงานที่เหมาะสมที่สุด

Triton Inference Server ให้บริการโมเดลจากที่เก็บโมเดล ลองดูโครงร่างที่เก็บโมเดลสำหรับโมเดลทั้งมวลที่มีโมเดลการประมวลผลล่วงหน้าของ DALI, โมเดล TensorFlow inception V3 และการกำหนดค่าชุดโมเดล แต่ละไดเร็กทอรีย่อยมีข้อมูลที่เก็บสำหรับโมเดลที่เกี่ยวข้อง ดิ config.pbtxt ไฟล์อธิบายการกำหนดค่าแบบจำลองสำหรับรุ่นต่างๆ แต่ละไดเร็กทอรีต้องมีโฟลเดอร์ย่อยที่เป็นตัวเลขหนึ่งโฟลเดอร์สำหรับแต่ละรุ่นของโมเดล และทำงานโดยแบ็กเอนด์เฉพาะที่ Triton รองรับ

ที่เก็บรุ่น NVIDIA Triton

NVIDIA ดาลี

สำหรับโพสต์นี้ เราใช้ NVIDIA Data Loading Library (DALI) เป็นโมเดลการประมวลผลล่วงหน้าในชุดโมเดลของเรา NVIDIA DALI เป็นไลบรารีสำหรับการโหลดข้อมูลและการประมวลผลล่วงหน้าเพื่อเร่งความเร็วแอปพลิเคชันการเรียนรู้เชิงลึก มีคอลเล็กชันการสร้างบล็อคที่ปรับให้เหมาะสมสำหรับการโหลดและประมวลผลข้อมูลรูปภาพ วิดีโอ และเสียง คุณสามารถใช้แทนดรอปอินแบบพกพาสำหรับตัวโหลดข้อมูลในตัวและตัววนซ้ำข้อมูลในเฟรมเวิร์กการเรียนรู้เชิงลึกยอดนิยม

NVIDIA Dali

รหัสต่อไปนี้แสดงการกำหนดค่าแบบจำลองสำหรับแบ็กเอนด์ 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 ไดเร็กทอรีในที่เก็บโมเดล ไฟล์ป้ายกำกับมี 1,000 คลาสเลเบลของ อิมเมจเน็ต ชุดข้อมูลการจัดหมวดหมู่

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 ของแบบจำลองของคุณ การผสานรวมกับ อเมซอน คลาวด์วอตช์ เพื่อให้ได้ความสามารถในการสังเกตประสิทธิภาพของแบบจำลอง และการตรวจสอบการเคลื่อนตัวของแบบจำลอง

มาสร้างโมเดล SageMaker จากสิ่งประดิษฐ์ของโมเดลที่เราอัปโหลดไปยัง บริการจัดเก็บข้อมูลอย่างง่ายของ Amazon (อเมซอน เอส3).

ต่อไป เรายังจัดเตรียมตัวแปรสภาพแวดล้อมเพิ่มเติม: SAGEMAKER_TRITON_DEFAULT_MODEL_NAMEซึ่งระบุชื่อรุ่นที่จะโหลดโดยไทรทัน ค่าของคีย์นี้ควรตรงกับชื่อโฟลเดอร์ในแพ็คเกจรุ่นที่อัปโหลดไปยัง Amazon S3 ตัวแปรนี้เป็นทางเลือกในกรณีที่คุณใช้โมเดลเดียว ในกรณีของรุ่นทั้งมวล ต้องระบุคีย์นี้เพื่อให้ Triton เริ่มทำงานใน 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 เราต้องระบุความยาวของข้อมูลเมตาของคำขอในส่วนหัวเพื่อให้ Triton แยกวิเคราะห์ข้อมูลไบนารีได้อย่างถูกต้อง ทำได้โดยใช้ส่วนหัว Content-Type ที่กำหนดเอง application/vnd.sagemaker-triton.binary+json;json-header-size={}.

ซึ่งแตกต่างจากการใช้ an Inference-Header-Content-Length ส่วนหัวบนเซิร์ฟเวอร์ Triton แบบสแตนด์อโลนเนื่องจากไม่อนุญาตให้ใช้ส่วนหัวที่กำหนดเองใน SageMaker

แพ็คเกจ tritonclient มีวิธียูทิลิตี้ในการสร้าง payload โดยไม่ต้องรู้รายละเอียดของข้อกำหนด เราใช้วิธีการต่อไปนี้เพื่อแปลงคำขอการอนุมานของเราให้อยู่ในรูปแบบไบนารี ซึ่งให้เวลาแฝงที่ต่ำกว่าสำหรับการอนุมาน อ้างถึง 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 ใช้ Triton เพื่อเรียกใช้การอนุมานทั้งมวลบนคอนเทนเนอร์เดียวบนอินสแตนซ์ที่รองรับเฟรมเวิร์กหลักทั้งหมด

สำหรับตัวอย่างเพิ่มเติมเกี่ยวกับชุด Triton บน SageMaker โปรดดูที่ repo GitHub. ลองดูสิ!


เกี่ยวกับผู้เขียน

เรียกใช้โมเดล ML ทั้งมวลบน Amazon SageMaker PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.เจมส์พาร์ค เป็นสถาปนิกโซลูชันที่ Amazon Web Services เขาทำงานร่วมกับ Amazon.com เพื่อออกแบบ สร้าง และปรับใช้โซลูชันเทคโนโลยีบน AWS และมีความสนใจเป็นพิเศษใน AI และการเรียนรู้ของเครื่อง ในเวลาว่าง เขาชอบค้นหาวัฒนธรรมใหม่ๆ ประสบการณ์ใหม่ๆ และติดตามเทรนด์เทคโนโลยีล่าสุดอยู่เสมอ

เรียกใช้โมเดล ML ทั้งมวลบน Amazon SageMaker PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.วิกรม เอลังโก เป็นสถาปนิกอาวุโสด้านโซลูชัน AI/ML ที่ Amazon Web Services ซึ่งตั้งอยู่ในเมืองเวอร์จิเนีย สหรัฐอเมริกา Vikram ช่วยเหลือลูกค้าในอุตสาหกรรมการเงินและการประกันภัยด้วยความเป็นผู้นำด้านการออกแบบและความคิดในการสร้างและปรับใช้แอปพลิเคชันการเรียนรู้ของเครื่องในวงกว้าง ปัจจุบันเขามุ่งเน้นไปที่การประมวลผลภาษาธรรมชาติ AI ที่รับผิดชอบ การเพิ่มประสิทธิภาพการอนุมาน และการปรับสเกล ML ทั่วทั้งองค์กร ในเวลาว่าง เขาสนุกกับการเดินทาง เดินป่า ทำอาหาร และตั้งแคมป์กับครอบครัว

เรียกใช้โมเดล ML ทั้งมวลบน Amazon SageMaker PlatoBlockchain Data Intelligence ค้นหาแนวตั้ง AI.ซอราภ ตรีกันเด เป็นผู้จัดการผลิตภัณฑ์อาวุโสสำหรับการอนุมานของ Amazon SageMaker เขาหลงใหลในการทำงานกับลูกค้าและมีแรงจูงใจโดยเป้าหมายของการทำให้แมชชีนเลิร์นนิงเป็นประชาธิปไตย เขามุ่งเน้นไปที่ความท้าทายหลักที่เกี่ยวข้องกับการปรับใช้งานแอปพลิเคชัน ML ที่ซับซ้อน โมเดล ML แบบหลายผู้เช่า การเพิ่มประสิทธิภาพต้นทุน และทำให้การปรับใช้โมเดลการเรียนรู้เชิงลึกสามารถเข้าถึงได้มากขึ้น ในเวลาว่าง Saurabh สนุกกับการเดินป่า เรียนรู้เกี่ยวกับเทคโนโลยีที่เป็นนวัตกรรม ติดตาม TechCrunch และใช้เวลากับครอบครัวของเขา

ประทับเวลา:

เพิ่มเติมจาก AWS Machine Learning AWS

ความน่าจะเป็นในการชนะการแข่งขันบุนเดสลีกา: การหาจำนวนผลกระทบของเหตุการณ์ในเกมต่อโอกาสในการชนะโดยใช้การเรียนรู้ของเครื่องบน AWS

โหนดต้นทาง: 1709670
ประทับเวลา: กันยายน 30, 2022