การให้บริการประสิทธิภาพสูงด้วย Triton Inference Server
คลังแบบจำลอง การตั้งค่าแบบจำลอง config.pbtxt อินสแตนซ์แบบจำลองพร้อมกัน และการจัดชุดข้อมูลแบบไดนามิก
การให้บริการประสิทธิภาพสูงด้วย Triton Inference Server เป็นบทเรียน Learn AI with Python ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Learn AI with Python และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
Triton คืออะไร
NVIDIA Triton Inference Server คือระบบให้บริการระดับพร้อมใช้งานจริงที่โฮสต์โมเดลจำนวนมากพร้อมกันบน CPU และ GPU โดยรองรับแบ็กเอนด์หลายแบบ (TensorRT, ONNX, PyTorch, TensorFlow, Python) ผ่าน API HTTP/gRPC เดียว พร้อมการจัดกลุ่มคำขอและการทำงานพร้อมกันในตัว
คลังโมเดล
Triton จะโหลดโมเดลจาก คลังโมเดล ซึ่งเป็นไดเรกทอรีที่แต่ละโมเดลมีโฟลเดอร์ของตัวเอง โฟลเดอร์ย่อยสำหรับเวอร์ชันที่เป็นตัวเลข และไฟล์ config.pbtxt
model_repository/
resnet50/
config.pbtxt
1/
model.onnx
bert/
config.pbtxt
1/
model.ptconfig.pbtxt: แบ็กเอนด์
ไฟล์ config.pbtxt อธิบายว่า Triton ควรเรียกใช้โมเดลอย่างไร ส่วน แบ็กเอนด์ (หรือแพลตฟอร์ม) จะระบุรันไทม์ที่ Triton ต้องใช้
name: "resnet50"
backend: "onnxruntime"
max_batch_size: 32เทนเซอร์อินพุตและเอาต์พุต
คุณต้องประกาศอินพุตและเอาต์พุตแต่ละรายการ ได้แก่ ชื่อ ชนิดข้อมูล และ มิติ ของเทนเซอร์ (รูปร่าง) รูปร่างเหล่านี้ต้องตรงกับสิ่งที่โมเดลคาดไว้ มิติแบตช์ที่อยู่ด้านหน้าจะถูกกำหนดโดยนัยจาก max_batch_size
input [
{
name: "input"
data_type: TYPE_FP32
dims: [ 3, 224, 224 ]
}
]
output [
{
name: "output"
data_type: TYPE_FP32
dims: [ 1000 ]
}
]ชนิดข้อมูล
Triton ใช้ชนิดข้อมูลเทนเซอร์ที่ระบุอย่างชัดเจน เพื่อให้ไคลเอ็นต์และโมเดลใช้รูปแบบการจัดวางไบต์ตรงกัน:
TYPE_FP32เลขทศนิยมแบบ 32 บิต (ใช้บ่อยกับรูปภาพ)TYPE_FP16ความละเอียดครึ่งหนึ่ง (ทำงานเร็วขึ้นบน GPU)TYPE_INT64รหัสโทเค็นสำหรับ NLPTYPE_INT8โมเดลที่ผ่านการลดความละเอียด
การจัดกลุ่มคำขอแบบไดนามิก: แนวคิด
การจัดกลุ่มคำขอแบบไดนามิก ช่วยให้ Triton รวมคำขอขาเข้าหลายรายการเป็นแบตช์ขนาดใหญ่รายการเดียวก่อนเรียกใช้โมเดล GPU จะทำงานได้มีประสิทธิภาพกว่ามากกับแบตช์ขนาดใหญ่ จึงเพิ่มปริมาณงานได้อย่างมากโดยไม่ต้องเปลี่ยนโค้ดของไคลเอ็นต์
การกำหนดค่าการจัดกลุ่มคำขอแบบไดนามิก
คุณเปิดใช้ฟีเจอร์นี้ในการกำหนดค่าและตั้งระยะเวลาที่ Triton จะรอเพื่อรวบรวมคำขอ ค่า max_queue_delay_microseconds ที่ต่ำจะแลกเวลาแฝงเล็กน้อยกับปริมาณงานที่สูงขึ้นมาก
dynamic_batching {
preferred_batch_size: [ 8, 16 ]
max_queue_delay_microseconds: 1000
}อินสแตนซ์โมเดลที่ทำงานพร้อมกัน
ตามค่าเริ่มต้น Triton จะเรียกใช้สำเนาเดียว (อินสแตนซ์) ของโมเดล ด้วย instance_group คุณสามารถเรียกใช้อินสแตนซ์หลายรายการพร้อมกันบน GPU หนึ่งตัวหรือหลายตัว เพื่อประมวลผลคำขอที่เป็นอิสระต่อกันพร้อมกันและเพิ่มการใช้ทรัพยากร
instance_group [
{
count: 2
kind: KIND_GPU
gpus: [ 0 ]
}
]การจัดกลุ่มคำขอเทียบกับการทำงานพร้อมกัน
แนวทางทั้งสองแก้ปัญหาคนละด้าน:
- การจัดกลุ่มคำขอแบบไดนามิก รวมคำขอหลายรายการเป็นการเรียกใช้โมเดลครั้งเดียว (ปริมาณงานต่อการเรียกใช้)
- อินสแตนซ์ที่ทำงานพร้อมกัน เรียกใช้โมเดลหลายครั้งในเวลาเดียวกัน (การทำงานแบบขนาน)
ทั้งสองแนวทางเสริมกัน การกำหนดค่าสำหรับใช้งานจริงมักใช้ทั้งคู่
perf_analyzer
perf_analyzer คือเครื่องมือของ Triton ที่ส่งคำขอสังเคราะห์เพื่อสร้างภาระให้เซิร์ฟเวอร์ และรายงานปริมาณงาน (การอนุมานต่อวินาที) กับเปอร์เซ็นไทล์ของเวลาแฝง ใช้เครื่องมือนี้เพื่อค้นหาการตั้งค่าแบตช์และการทำงานพร้อมกันที่เพิ่มปริมาณงานสูงสุดภายใต้งบประมาณเวลาแฝงของคุณ
perf_analyzer -m resnet50 \
--concurrency-range 1:8 \
--percentile 95การอ่านเอาต์พุตของ perf_analyzer
เครื่องมือจะทดสอบระดับการทำงานพร้อมกันหลายระดับและพิมพ์ปริมาณงานพร้อมเวลาแฝงของแต่ละระดับ ให้มองหาจุดหักของเส้นโค้ง ซึ่งเป็นจุดที่การเพิ่มการทำงานพร้อมกันไม่ช่วยเพิ่มปริมาณงานอีกต่อไป หรือทำให้เวลาแฝง P95 สูงเกินขีดจำกัดของคุณ
# Concurrency: 4, throughput: 1820 infer/sec, p95 latency: 9.1 ms
# Concurrency: 8, throughput: 1905 infer/sec, p95 latency: 17.4 msตรวจสอบอย่างรวดเร็ว
ทดสอบความรู้ของคุณเกี่ยวกับ Triton
สรุปทบทวน
คุณได้เรียนรู้การให้บริการประสิทธิภาพสูงด้วย Triton:
- คลังโมเดล: โฟลเดอร์แยกตามโมเดล พร้อมโฟลเดอร์ย่อยตามเวอร์ชันและ
config.pbtxt config.pbtxtประกาศแบ็กเอนด์ รูปร่างและชนิดข้อมูลของเทนเซอร์อินพุต/เอาต์พุต- การจัดกลุ่มคำขอแบบไดนามิก เพิ่มปริมาณงาน ส่วน อินสแตนซ์ที่ทำงานพร้อมกัน เพิ่มการทำงานแบบขนาน
- perf_analyzer ใช้เปรียบเทียบปริมาณงานกับเวลาแฝงเพื่อปรับการตั้งค่า
คำถามที่พบบ่อย
บทเรียน “การให้บริการประสิทธิภาพสูงด้วย Triton Inference Server” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การให้บริการประสิทธิภาพสูงด้วย Triton Inference Server” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Learn AI with Python ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Learn AI with Python มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การให้บริการประสิทธิภาพสูงด้วย Triton Inference Server”
คลังแบบจำลอง การตั้งค่าแบบจำลอง config.pbtxt อินสแตนซ์แบบจำลองพร้อมกัน และการจัดชุดข้อมูลแบบไดนามิก คุณปฏิบัติ Learn AI with Python ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Learn AI with Python หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Learn AI with Python บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การให้บริการประสิทธิภาพสูงด้วย Triton Inference Server” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Learn AI with Python นี้ได้ไหม
ได้ บทเรียน Learn AI with Python ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การบรรจุโมเดลแมชชีนเลิร์นนิงลงคอนเทนเนอร์ด้วย Docker
- การนำไปใช้งานบนคลาวด์: AWS SageMaker
- การให้บริการประสิทธิภาพสูงด้วย Triton Inference Server
- การปรับขนาดและปรับขนาดอัตโนมัติของจุดปลายทางแบบจำลอง