ปรับต้นทุนการปรับใช้ให้เหมาะสมของโมเดลพื้นฐาน Amazon SageMaker JumpStart ด้วยจุดสิ้นสุดแบบอะซิงโครนัสของ Amazon SageMaker อเมซอนเว็บเซอร์วิส

ปรับต้นทุนการปรับใช้ให้เหมาะสมของโมเดลพื้นฐาน Amazon SageMaker JumpStart ด้วยจุดสิ้นสุดแบบอะซิงโครนัสของ Amazon SageMaker อเมซอนเว็บเซอร์วิส

ความสำเร็จของแอปพลิเคชั่น generative AI ในหลากหลายอุตสาหกรรมได้ดึงดูดความสนใจและความสนใจของบริษัทต่างๆ ทั่วโลกที่กำลังมองหาการทำซ้ำและก้าวข้ามความสำเร็จของคู่แข่ง หรือแก้ไขกรณีการใช้งานใหม่ๆ ที่น่าตื่นเต้น ลูกค้าเหล่านี้กำลังมองหาโมเดลพื้นฐาน เช่น TII Falcon, Stable Diffusion XL หรือ GPT-3.5 ของ OpenAI เพื่อเป็นกลไกที่ขับเคลื่อนนวัตกรรม AI แบบสร้างสรรค์

โมเดลพื้นฐานคือคลาสของโมเดล AI เชิงสร้างสรรค์ที่สามารถทำความเข้าใจและสร้างเนื้อหาที่เหมือนมนุษย์ได้ ต้องขอบคุณข้อมูลที่ไม่มีโครงสร้างจำนวนมหาศาลที่พวกเขาได้รับการฝึกฝน โมเดลเหล่านี้ได้ปฏิวัติงานคอมพิวเตอร์วิทัศน์ (CV) และการประมวลผลภาษาธรรมชาติ (NLP) ต่างๆ รวมถึงการสร้างภาพ การแปล และการตอบคำถาม สิ่งเหล่านี้ทำหน้าที่เป็นรากฐานสำหรับแอปพลิเคชัน AI มากมาย และได้กลายเป็นองค์ประกอบสำคัญในการพัฒนาระบบอัจฉริยะขั้นสูง

อย่างไรก็ตาม การใช้งานโมเดลพื้นฐานอาจมาพร้อมกับความท้าทายที่สำคัญ โดยเฉพาะอย่างยิ่งในแง่ของต้นทุนและความต้องการทรัพยากร โมเดลเหล่านี้ขึ้นชื่อในเรื่องขนาด ซึ่งมักจะมีตั้งแต่พารามิเตอร์หลายร้อยล้านไปจนถึงหลายพันล้านพารามิเตอร์ ขนาดใหญ่ต้องการทรัพยากรการคำนวณที่กว้างขวาง รวมถึงฮาร์ดแวร์ที่ทรงพลังและความจุหน่วยความจำจำนวนมาก ในความเป็นจริง การปรับใช้โมเดลพื้นฐานมักจะต้องใช้ GPU อย่างน้อยหนึ่งตัว (มักจะมากกว่านั้น) เพื่อรองรับภาระการคำนวณอย่างมีประสิทธิภาพ ตัวอย่างเช่น โมเดลคำสั่ง TII Falcon-40B ต้องมีอินสแตนซ์ ml.g5.12xlarge เป็นอย่างน้อยจึงจะโหลดลงในหน่วยความจำได้สำเร็จ แต่จะทำงานได้ดีที่สุดกับอินสแตนซ์ที่ใหญ่กว่า เป็นผลให้ผลตอบแทนจากการลงทุน (ROI) ของการปรับใช้และการบำรุงรักษาโมเดลเหล่านี้อาจต่ำเกินไปที่จะพิสูจน์มูลค่าทางธุรกิจ โดยเฉพาะอย่างยิ่งในระหว่างรอบการพัฒนาหรือสำหรับปริมาณงานที่แหลมคม นี่เป็นเพราะต้นทุนการดำเนินงานของการมีอินสแตนซ์ที่ขับเคลื่อนด้วย GPU สำหรับเซสชันที่ยาวนาน ซึ่งอาจเกิดขึ้นตลอด 24 ชั่วโมงทุกวัน

เมื่อต้นปีที่ผ่านมาเราได้ประกาศ อเมซอน เบดร็อคซึ่งเป็น API แบบไร้เซิร์ฟเวอร์เพื่อเข้าถึงโมเดลพื้นฐานจาก Amazon และพันธมิตร AI สร้างสรรค์ของเรา แม้ว่าปัจจุบันจะอยู่ในการแสดงตัวอย่างแบบส่วนตัว แต่ API แบบไร้เซิร์ฟเวอร์ช่วยให้คุณสามารถใช้โมเดลพื้นฐานจาก Amazon, Anthropic, Stability AI และ AI21 ได้โดยไม่ต้องปรับใช้ตำแหน่งข้อมูลใดๆ ด้วยตนเอง อย่างไรก็ตาม โมเดลโอเพ่นซอร์สจากชุมชน เช่น Hugging Face มีการเติบโตอย่างมาก และไม่ใช่ทุกโมเดลจะพร้อมใช้งานผ่าน Amazon Bedrock

ในโพสต์นี้ เรากำหนดเป้าหมายสถานการณ์เหล่านี้และแก้ไขปัญหาการเสี่ยงต่อต้นทุนสูงโดยการปรับใช้โมเดลพื้นฐานขนาดใหญ่ อเมซอน SageMaker จุดสิ้นสุดแบบอะซิงโครนัส ราคาเริ่มต้นที่ Amazon SageMaker JumpStart. วิธีนี้สามารถช่วยลดค่าใช้จ่ายของสถาปัตยกรรมได้ โดยอนุญาตให้อุปกรณ์ปลายทางทำงานได้เฉพาะเมื่อมีการร้องขออยู่ในคิวและในช่วงเวลาสั้นๆ เท่านั้น ในขณะที่ลดขนาดลงเหลือศูนย์เมื่อไม่มีคำขอใดรอรับบริการ ฟังดูดีสำหรับกรณีการใช้งานมากมาย อย่างไรก็ตาม จุดสิ้นสุดที่ลดขนาดลงเหลือศูนย์จะแนะนำเวลาเริ่มต้นแบบ Cold ก่อนที่จะสามารถให้บริการการอนุมานได้

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

ไดอะแกรมต่อไปนี้แสดงสถาปัตยกรรมโซลูชันของเรา

Optimize deployment cost of Amazon SageMaker JumpStart foundation models with Amazon SageMaker asynchronous endpoints | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

สถาปัตยกรรมที่เราปรับใช้นั้นตรงไปตรงมามาก:

  • อินเทอร์เฟซผู้ใช้คือโน้ตบุ๊ก ซึ่งสามารถแทนที่ได้ด้วย UI บนเว็บที่สร้างบน Streamlit หรือเทคโนโลยีที่คล้ายกัน ในกรณีของเรา โน้ตบุ๊กคือ สตูดิโอ Amazon SageMaker โน้ตบุ๊กที่ทำงานบนอินสแตนซ์ ml.m5.large พร้อมด้วยเคอร์เนล CPU PyTorch 2.0 Python 3.10
  • สมุดบันทึกสืบค้นตำแหน่งข้อมูลด้วยสามวิธี: SageMaker Python SDK, AWS SDK สำหรับ Python (Boto3) และ LangChain
  • ตำแหน่งข้อมูลทำงานแบบอะซิงโครนัสบน SageMaker และที่ตำแหน่งข้อมูล เราปรับใช้โมเดลคำสั่ง Falcon-40B ปัจจุบันมีความทันสมัยในแง่ของโมเดลการสอนและมีอยู่ใน SageMaker JumpStart การเรียก API เพียงครั้งเดียวช่วยให้เราสามารถปรับใช้โมเดลบนตำแหน่งข้อมูลได้

การอนุมานแบบอะซิงโครนัสของ SageMaker คืออะไร

การอนุมานแบบอะซิงโครนัสของ SageMaker เป็นหนึ่งในสี่ตัวเลือกการใช้งานใน SageMaker ร่วมกับจุดสิ้นสุดแบบเรียลไทม์ การอนุมานแบบแบตช์ และการอนุมานแบบไร้เซิร์ฟเวอร์ หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับตัวเลือกการใช้งานต่างๆ โปรดดูที่ ปรับใช้โมเดลสำหรับการอนุมาน.

SageMaker การอนุมานแบบอะซิงโครนัสจัดคิวคำขอขาเข้าและประมวลผลคำขอแบบอะซิงโครนัส ทำให้ตัวเลือกนี้เหมาะสำหรับคำขอที่มีขนาดเพย์โหลดขนาดใหญ่สูงสุด 1 GB เวลาประมวลผลที่ยาวนาน และข้อกำหนดด้านเวลาแฝงที่เกือบจะเรียลไทม์ อย่างไรก็ตาม ข้อได้เปรียบหลักที่ได้รับเมื่อต้องรับมือกับโมเดลพื้นฐานขนาดใหญ่ โดยเฉพาะอย่างยิ่งระหว่างการพิสูจน์แนวคิด (POC) หรือระหว่างการพัฒนา คือความสามารถในการกำหนดค่าการอนุมานแบบอะซิงโครนัสเพื่อปรับขนาดเป็นจำนวนอินสแตนซ์เป็นศูนย์เมื่อไม่มีการร้องขอ กระบวนการจึงช่วยประหยัดต้นทุน สำหรับข้อมูลเพิ่มเติมเกี่ยวกับการอนุมานแบบอะซิงโครนัสของ SageMaker โปรดดูที่ การอนุมานแบบอะซิงโครนัส. แผนภาพต่อไปนี้แสดงสถาปัตยกรรมนี้

Optimize deployment cost of Amazon SageMaker JumpStart foundation models with Amazon SageMaker asynchronous endpoints | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

หากต้องการปรับใช้ตำแหน่งข้อมูลการอนุมานแบบอะซิงโครนัส คุณต้องสร้าง AsyncInferenceConfig วัตถุ. ถ้าคุณสร้าง AsyncInferenceConfig โดยไม่ต้องระบุอาร์กิวเมนต์เป็นค่าเริ่มต้น S3OutputPath จะ s3://sagemaker-{REGION}-{ACCOUNTID}/async-endpoint-outputs/{UNIQUE-JOB-NAME} และ S3FailurePath จะ s3://sagemaker-{REGION}-{ACCOUNTID}/async-endpoint-failures/{UNIQUE-JOB-NAME}.

SageMaker JumpStart คืออะไร

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

ภาพหน้าจอต่อไปนี้แสดงตัวอย่างเพียงบางรุ่นที่มีอยู่ใน SageMaker JumpStart UI

Optimize deployment cost of Amazon SageMaker JumpStart foundation models with Amazon SageMaker asynchronous endpoints | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

ปรับใช้โมเดล

ขั้นตอนแรกของเราคือการปรับใช้โมเดลกับ SageMaker ในการทำเช่นนั้น เราสามารถใช้ UI สำหรับ SageMaker JumpStart หรือ SageMaker Python SDK ซึ่งมี API ที่เราสามารถใช้เพื่อปรับใช้โมเดลกับตำแหน่งข้อมูลแบบอะซิงโครนัส:

%%time
from sagemaker.jumpstart.model import JumpStartModel, AsyncInferenceConfig
from sagemaker.serializers import JSONSerializer
from sagemaker.deserializers import JSONDeserializer model_id, model_version = "huggingface-llm-falcon-40b-instruct-bf16", "*"
my_model = JumpStartModel(model_id=model_id)
predictor = my_model.deploy( initial_instance_count=0, instance_type="ml.g5.12xlarge", async_inference_config=AsyncInferenceConfig()
)

การโทรนี้อาจใช้เวลาประมาณ 10 นาทีจึงจะเสร็จสิ้น ในช่วงเวลานี้ ตำแหน่งข้อมูลจะถูกหมุน คอนเทนเนอร์พร้อมกับสิ่งประดิษฐ์ของโมเดลจะถูกดาวน์โหลดไปยังตำแหน่งข้อมูล การกำหนดค่าโมเดลจะถูกโหลดจาก SageMaker JumpStart จากนั้นตำแหน่งข้อมูลแบบอะซิงโครนัสจะถูกเปิดเผยผ่านตำแหน่งข้อมูล DNS เพื่อให้แน่ใจว่าตำแหน่งข้อมูลของเราสามารถลดขนาดลงเหลือศูนย์ได้ เราจำเป็นต้องกำหนดค่าการปรับขนาดอัตโนมัติบนตำแหน่งข้อมูลแบบอะซิงโครนัสโดยใช้ Application Auto Scaling คุณต้องลงทะเบียนตัวแปรตำแหน่งข้อมูลกับ Application Auto Scaling ก่อน จากนั้นกำหนดนโยบายการปรับขนาด จากนั้นจึงใช้นโยบายการปรับขนาด ในการกำหนดค่านี้ เราใช้เมตริกที่กำหนดเองโดยใช้ CustomizedMetricSpecificationที่เรียกว่า ApproximateBacklogSizePerInstanceดังแสดงในโค้ดต่อไปนี้ สำหรับรายการโดยละเอียดของ อเมซอน คลาวด์วอตช์ เมตริกที่ใช้ได้กับจุดสิ้นสุดการอนุมานแบบอะซิงโครนัสของคุณ โปรดดูที่ การตรวจสอบด้วย CloudWatch.

import boto3 client = boto3.client("application-autoscaling")
resource_id = "endpoint/" + my_model.endpoint_name + "/variant/" + "AllTraffic" # Configure Autoscaling on asynchronous endpoint down to zero instances
response = client.register_scalable_target( ServiceNamespace="sagemaker", ResourceId=resource_id, ScalableDimension="sagemaker:variant:DesiredInstanceCount", MinCapacity=0, # Miminum number of instances we want to scale down to - scale down to 0 to stop incurring in costs MaxCapacity=1, # Maximum number of instances we want to scale up to - scale up to 1 max is good enough for dev
) response = client.put_scaling_policy( PolicyName="Invocations-ScalingPolicy", ServiceNamespace="sagemaker", # The namespace of the AWS service that provides the resource. ResourceId=resource_id, # Endpoint name ScalableDimension="sagemaker:variant:DesiredInstanceCount", # SageMaker supports only Instance Count PolicyType="TargetTrackingScaling", # 'StepScaling'|'TargetTrackingScaling' TargetTrackingScalingPolicyConfiguration={ "TargetValue": 5.0, # The target value for the metric. - here the metric is - SageMakerVariantInvocationsPerInstance "CustomizedMetricSpecification": { "MetricName": "ApproximateBacklogSizePerInstance", "Namespace": "AWS/SageMaker", "Dimensions": [{"Name": "EndpointName", "Value": my_model.endpoint_name}], "Statistic": "Average", }, "ScaleInCooldown": 600, # The amount of time, in seconds, after a scale in activity completes before another scale in activity can start. "ScaleOutCooldown": 300, # ScaleOutCooldown - The amount of time, in seconds, after a scale out activity completes before another scale out activity can start. # 'DisableScaleIn': True|False - indicates whether scale in by the target tracking policy is disabled. # If the value is true, scale in is disabled and the target tracking policy won't remove capacity from the scalable resource. },
)

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

Optimize deployment cost of Amazon SageMaker JumpStart foundation models with Amazon SageMaker asynchronous endpoints | Amazon Web Services PlatoBlockchain Data Intelligence. Vertical Search. Ai.

เรียกใช้จุดสิ้นสุดแบบอะซิงโครนัส

หากต้องการเรียกใช้ตำแหน่งข้อมูล คุณต้องวางเพย์โหลดคำขอไว้ บริการจัดเก็บข้อมูลอย่างง่ายของ Amazon (Amazon S3) และจัดให้มีตัวชี้ไปยังเพย์โหลดนี้โดยเป็นส่วนหนึ่งของ InvokeEndpointAsync ขอ. เมื่อมีการเรียกใช้ SageMaker จะจัดคิวคำขอเพื่อประมวลผลและส่งคืนตัวระบุและตำแหน่งเอาต์พุตเป็นการตอบกลับ เมื่อประมวลผล SageMaker จะวางผลลัพธ์ในตำแหน่ง Amazon S3 คุณสามารถเลือกรับการแจ้งเตือนความสำเร็จหรือข้อผิดพลาดได้ บริการแจ้งเตือนแบบง่ายของ Amazon (อเมซอน SNS).

SageMaker Python SDK

หลังจากการปรับใช้เสร็จสมบูรณ์ มันจะส่งคืนไฟล์ AsyncPredictor วัตถุ. หากต้องการทำการอนุมานแบบอะซิงโครนัส คุณต้องอัปโหลดข้อมูลไปยัง Amazon S3 และใช้ไฟล์ predict_async() วิธีการที่มี S3 URI เป็นอินพุต มันจะส่งคืน AsyncInferenceResponse object และคุณสามารถตรวจสอบผลลัพธ์ได้โดยใช้ get_response() วิธี

หรือหากคุณต้องการตรวจสอบผลลัพธ์เป็นระยะและส่งคืนตามรุ่น ให้ใช้ predict() วิธี. เราใช้วิธีที่สองนี้ในรหัสต่อไปนี้:

import time # Invoking the asynchronous endpoint with the SageMaker Python SDK
def query_endpoint(payload): """Query endpoint and print the response""" response = predictor.predict_async( data=payload, input_path="s3://{}/{}".format(bucket, prefix), ) while True: try: response = response.get_result() break except: print("Inference is not ready ...") time.sleep(5) print(f"33[1m Input:33[0m {payload['inputs']}") print(f"33[1m Output:33[0m {response[0]['generated_text']}") query_endpoint(payload)

โบโต3

ตอนนี้เรามาสำรวจกัน invoke_endpoint_async วิธีการจาก Boto3's sagemaker-runtime ลูกค้า. ช่วยให้นักพัฒนาสามารถเรียกใช้ตำแหน่งข้อมูล SageMaker แบบอะซิงโครนัส โดยมอบโทเค็นสำหรับการติดตามความคืบหน้าและเรียกข้อมูลการตอบสนองในภายหลัง Boto3 ไม่มีวิธีรอให้การอนุมานแบบอะซิงโครนัสเสร็จสิ้นเหมือนกับ SageMaker Python SDK get_result() การดำเนินการ. ดังนั้นเราจึงใช้ประโยชน์จากข้อเท็จจริงที่ว่า Boto3 จะจัดเก็บเอาต์พุตการอนุมานใน Amazon S3 ไว้ในไฟล์ response["OutputLocation"]. เราสามารถใช้ฟังก์ชันต่อไปนี้เพื่อรอให้ไฟล์การอนุมานถูกเขียนลงใน Amazon S3:

import json
import time
import boto3
from botocore.exceptions import ClientError s3_client = boto3.client("s3") # Wait until the prediction is generated
def wait_inference_file(bucket, prefix): while True: try: response = s3_client.get_object(Bucket=bucket, Key=prefix) break except ClientError as ex: if ex.response['Error']['Code'] == 'NoSuchKey': print("Waiting for file to be generated...") time.sleep(5) next else: raise except Exception as e: print(e.__dict__) raise return response

ด้วยฟังก์ชันนี้ เราสามารถสืบค้นจุดสิ้นสุดได้:

# Invoking the asynchronous endpoint with the Boto3 SDK
import boto3 sagemaker_client = boto3.client("sagemaker-runtime") # Query the endpoint function
def query_endpoint_boto3(payload): """Query endpoint and print the response""" response = sagemaker_client.invoke_endpoint_async( EndpointName=my_model.endpoint_name, InputLocation="s3://{}/{}".format(bucket, prefix), ContentType="application/json", Accept="application/json" ) output_url = response["OutputLocation"] output_prefix = "/".join(output_url.split("/")[3:]) # Read the bytes of the file from S3 in output_url with Boto3 output = wait_inference_file(bucket, output_prefix) output = json.loads(output['Body'].read())[0]['generated_text'] # Emit output print(f"33[1m Input:33[0m {payload['inputs']}") print(f"33[1m Output:33[0m {output}") query_endpoint_boto3(payload)

หลังเชน

LangChain เป็นเฟรมเวิร์กโอเพ่นซอร์สที่เปิดตัวในเดือนตุลาคม 2022 โดย Harrison Chase ช่วยให้การพัฒนาแอปพลิเคชันโดยใช้โมเดลภาษาขนาดใหญ่ (LLM) ง่ายขึ้นโดยการผสานรวมกับระบบและแหล่งข้อมูลต่างๆ LangChain ช่วยให้สามารถวิเคราะห์เอกสาร การสรุป การสร้างแชทบอท การวิเคราะห์โค้ด และอื่นๆ อีกมากมาย มันได้รับความนิยม โดยได้รับการสนับสนุนจากนักพัฒนาหลายร้อยคนและได้รับเงินทุนจำนวนมากจากบริษัทร่วมทุน LangChain ช่วยให้สามารถเชื่อมต่อ LLM กับแหล่งข้อมูลภายนอก ทำให้สามารถสร้างแอปพลิเคชันแบบไดนามิกและตอบสนองต่อข้อมูลได้ มีไลบรารี, API และเอกสารประกอบเพื่อปรับปรุงกระบวนการพัฒนา

LangChain จัดเตรียมไลบรารีและตัวอย่างสำหรับการใช้ตำแหน่งข้อมูล SageMaker พร้อมเฟรมเวิร์ก ทำให้ง่ายต่อการใช้โมเดล ML ที่โฮสต์บน SageMaker เป็น “สมอง” ของเชน หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับวิธีที่ LangChain ทำงานร่วมกับ SageMaker โปรดดูที่ จุดสิ้นสุด SageMaker ในเอกสารประกอบของ LangChain

ข้อจำกัดประการหนึ่งของการใช้งาน LangChain ในปัจจุบันก็คือมันไม่รองรับจุดสิ้นสุดแบบอะซิงโครนัสโดยกำเนิด หากต้องการใช้จุดสิ้นสุดแบบอะซิงโครนัสกับ LangChain เราต้องกำหนดคลาสใหม่ SagemakerAsyncEndpointที่ขยาย SagemakerEndpoint มีคลาสอยู่แล้วใน LangChain นอกจากนี้เรายังให้ข้อมูลต่อไปนี้:

  • บัคเก็ต S3 และคำนำหน้าซึ่งการอนุมานแบบอะซิงโครนัสจะจัดเก็บอินพุต (และเอาต์พุต)
  • จำนวนวินาทีสูงสุดในการรอก่อนที่จะหมดเวลา
  • An updated _call() ฟังก์ชั่นในการสืบค้นจุดสิ้นสุดด้วย invoke_endpoint_async() แทน invoke_endpoint()
  • วิธีการปลุกจุดสิ้นสุดแบบอะซิงโครนัสหากอยู่ในสถานะ Cold Start (ลดขนาดลงเหลือศูนย์)

เพื่อทบทวนสิ่งที่สร้างขึ้นใหม่ SagemakerAsyncEndpointคุณสามารถเช็คเอาท์ sagemaker_async_endpoint.py ไฟล์ ใช้ได้กับ GitHub.

from typing import Dict
from langchain import PromptTemplate
from langchain.llms.sagemaker_endpoint import LLMContentHandler
from langchain.chains import LLMChain
from sagemaker_async_endpoint import SagemakerAsyncEndpoint class ContentHandler(LLMContentHandler): content_type:str = "application/json" accepts:str = "application/json" len_prompt:int = 0 def transform_input(self, prompt: str, model_kwargs: Dict) -> bytes: self.len_prompt = len(prompt) input_str = json.dumps({"inputs": prompt, "parameters": {"max_new_tokens": 100, "do_sample": False, "repetition_penalty": 1.1}}) return input_str.encode('utf-8') def transform_output(self, output: bytes) -> str: response_json = output.read() res = json.loads(response_json) ans = res[0]['generated_text'] return ans chain = LLMChain( llm=SagemakerAsyncEndpoint( input_bucket=bucket, input_prefix=prefix, endpoint_name=my_model.endpoint_name, region_name=sagemaker.Session().boto_region_name, content_handler=ContentHandler(), ), prompt=PromptTemplate( input_variables=["query"], template="{query}", ),
) print(chain.run(payload['inputs']))

ทำความสะอาด

เมื่อคุณทดสอบการสร้างการอนุมานจากปลายทางเสร็จแล้ว อย่าลืมลบปลายทางเพื่อหลีกเลี่ยงค่าใช้จ่ายเพิ่มเติม:

predictor.delete_endpoint()

สรุป

เมื่อปรับใช้โมเดลพื้นฐานขนาดใหญ่ เช่น TII Falcon การเพิ่มประสิทธิภาพต้นทุนเป็นสิ่งสำคัญ โมเดลเหล่านี้ต้องการฮาร์ดแวร์ที่ทรงพลังและความจุหน่วยความจำสูง ส่งผลให้ต้นทุนโครงสร้างพื้นฐานสูง การอนุมานแบบอะซิงโครนัสของ SageMaker ซึ่งเป็นตัวเลือกการปรับใช้ที่ประมวลผลคำขอแบบอะซิงโครนัส ช่วยลดค่าใช้จ่ายโดยปรับขนาดจำนวนอินสแตนซ์ให้เป็นศูนย์เมื่อไม่มีคำขอที่รอดำเนินการ ในโพสต์นี้ เราได้สาธิตวิธีการปรับใช้โมเดลพื้นฐาน SageMaker JumpStart ขนาดใหญ่กับจุดสิ้นสุดแบบอะซิงโครนัสของ SageMaker เราได้จัดเตรียมตัวอย่างโค้ดโดยใช้ SageMaker Python SDK, Boto3 และ LangChain เพื่อแสดงวิธีการต่างๆ สำหรับการเรียกใช้จุดสิ้นสุดแบบอะซิงโครนัสและการดึงผลลัพธ์ เทคนิคเหล่านี้ช่วยให้นักพัฒนาและนักวิจัยสามารถปรับต้นทุนให้เหมาะสมในขณะที่ใช้ความสามารถของแบบจำลองพื้นฐานสำหรับระบบการทำความเข้าใจภาษาขั้นสูง

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับการอนุมานแบบอะซิงโครนัสและ SageMaker JumpStart โปรดดูโพสต์ต่อไปนี้:


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

รูปภาพของ ดาวิเด้ดาวิเด้ กัลลิเตลลี่ เป็น Specialist Solutions Architect สำหรับ AI/ML ในภูมิภาค EMEA เขาอยู่ในบรัสเซลส์และทำงานอย่างใกล้ชิดกับลูกค้าทั่วเบเนลักซ์ เขาเป็นนักพัฒนาตั้งแต่ยังเด็ก เริ่มเขียนโค้ดเมื่ออายุ 7 ขวบ เขาเริ่มเรียน AI/ML ที่มหาวิทยาลัย และตกหลุมรักมันตั้งแต่นั้นเป็นต้นมา

ประทับเวลา:

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