บทนำ: คำถามเชิงกลยุทธ์ของการให้บริการในระดับขนาดใหญ่
ทุกทีม AI จะมาถึงจุดเปลี่ยนที่เหมือนกัน: โมเดลที่ดูมีแนวโน้มในสมุดบันทึกจะต้องเปลี่ยนไปสู่การอนุมานที่เชื่อถือได้ มีเวลาแฝงต่ำ และประหยัดค่าใช้จ่ายในการผลิต คำถามเชิงกลยุทธ์ไม่ใช่แค่ "วิธีปรับใช้โมเดล" แต่เป็น "วิธีสร้างเลเยอร์การอนุมานที่ปรับขนาดได้ในทุกเฟรมเวิร์ก ฮาร์ดแวร์ และปริมาณงาน โดยไม่เพิ่มความซับซ้อนในการปฏิบัติงาน" ของ NVIDIA ตอบคำถามนี้โดยการทำให้การให้บริการเป็นมาตรฐาน ปรับประสิทธิภาพให้เหมาะสมใน GPU และ CPU และแยกความแตกต่างของโมเดลให้เป็นระนาบการดำเนินงานเดียว ดังนั้น วิธีการใช้ จึงแยกไม่ออกจากเหตุผล: การสร้างมาตรฐานช่วยลดต้นทุนส่วนเพิ่ม เพิ่มการใช้ประโยชน์ และเพิ่มพูนผลกระทบจากการเรียนรู้ในแพลตฟอร์มเมื่อเวลาผ่านไป นั่นคือข้อได้เปรียบทางธุรกิจพอๆ กับข้อได้เปรียบทางเทคนิค
คู่มือนี้อธิบายวิธีการใช้ —การตั้งค่า การกำหนดค่าโมเดล การปรับแต่งประสิทธิภาพ และรูปแบบการปรับใช้—ผ่านมุมมองของผู้ปฏิบัติงาน เป้าหมายคือการนำไปปฏิบัติได้จริง: สร้างสแต็กการให้บริการที่พร้อมสำหรับการผลิต ซึ่งมีความยืดหยุ่น ปรับขนาดได้ และวัดผลได้ นัยยะที่กว้างกว่านั้นคือเชิงกลยุทธ์: การให้บริการคือจุดควบคุม หากคุณเป็นเจ้าของการอนุมานที่เชื่อถือได้ คุณจะมีอิทธิพลต่อต้นทุน เวลาแฝง และประสบการณ์ของผู้ใช้ปลายทางในที่สุด เป็นเส้นทางที่น่าเชื่อถือไปยังจุดควบคุมนั้น เนื่องจากรวบรวมความหลากหลายของโมเดลไว้เบื้องหลังอินเทอร์เฟซการให้บริการที่สอดคล้องกัน และมีการปรับปรุงอย่างต่อเนื่องด้วยการลงทุนของ NVIDIA ในรันไทม์ การจัดตารางเวลา และเครื่องมือต่างๆ
ความเป็นมา: ทำไม ถึงมีความสำคัญในสแต็กการอนุมาน
เพื่อให้เข้าใจบทบาทของ ให้เริ่มต้นด้วยความเป็นจริงของพอร์ตโฟลิโอ ML สมัยใหม่:
- เฟรมเวิร์กหลายรายการ: , , Runtime, /Fil, เอ็นจินที่ปรับให้เหมาะสมกับ
- รูปแบบการทำงานหลายรูปแบบ: ข้อความ ภาพ เสียง ข้อมูลตาราง
- สภาพแวดล้อมหลายรูปแบบ: GPU ในองค์กร, GPU บนคลาวด์, คลัสเตอร์ไฮบริด, เอดจ์
หากไม่มีเลเยอร์ที่เป็นหนึ่งเดียว แต่ละโมเดลจะกำหนดตรรกะการให้บริการแบบเฉพาะเจาะจง ซึ่งจะเพิ่มต้นทุนในการดำเนินงานและทำให้การทำซ้ำช้าลง รวมศูนย์ปัญหานี้: รองรับแบ็กเอนด์หลายรายการ ให้ API การอนุมาน HTTP/GRPC ที่สม่ำเสมอ จัดการการจัดกลุ่มแบบไดนามิก อินสแตนซ์โมเดลพร้อมกัน และการควบคุมเวอร์ชัน และผสานรวมกับการสังเกตการณ์มาตรฐาน () และการจัดระเบียบ () นอกจากนี้ยังได้รับการออกแบบมาเพื่อประสิทธิภาพ—โดยเฉพาะอย่างยิ่งกับ , กราฟ และการจัดตารางเวลาที่ปรับให้เหมาะสม ซึ่งดึงเอาปริมาณงานออกมาโดยไม่กระทบต่อ SLO การผสมผสานนี้—ความกว้างบวกกับประสิทธิภาพ—อธิบายถึงการนำ ไปใช้ในแพลตฟอร์มคลาวด์และสแต็กขององค์กร
กรอบความคิดที่เป็นประโยชน์ในที่นี้คือ ทฤษฎีการรวมกลุ่ม ที่นำไปใช้กับระนาบ MLOps: การให้บริการรวมอุปทานที่หลากหลาย (โมเดลและเฟรมเวิร์กจำนวนมาก) ไว้เบื้องหลังอินเทอร์เฟซความต้องการที่สอดคล้องกัน (แอปพลิเคชัน) ผู้รวบรวม—ในที่นี้คือ —ได้รับประโยชน์จากผลกระทบของเครือข่ายข้อมูลรอบรูปแบบการใช้งาน (เช่น การจัดกลุ่มและการค้นพบฮิวริสติกของการจัดตารางเวลาที่เหมาะสม) และการประหยัดจากขนาดในการลงทุนด้านวิศวกรรม กล่าวอีกนัยหนึ่ง ยิ่งคุณรวมปริมาณงานเข้ากับ มากเท่าใด คุณก็ยิ่งเพิ่มพูนอำนาจในการดำเนินงานของคุณมากขึ้นเท่านั้น
วิธีการ: Playbook เชิงปฏิบัติสำหรับ
คำแนะนำทีละขั้นตอนต่อไปนี้เน้นที่ความสามารถในการทำซ้ำ: พื้นฐานที่เรียบง่าย พกพาได้ ซึ่งสามารถปรับขนาดได้
- เลือกสารตั้งต้นการปรับใช้ที่เหมาะสม
- การพัฒนาในเครื่อง: บนเวิร์กสเตชันที่เปิดใช้งาน GPU เริ่มต้นที่นี่เพื่อตรวจสอบโมเดลและการกำหนดค่าอย่างรวดเร็ว
- คลาวด์แบบโหนดเดียว: VM GPU ที่มีการจัดการหรือบริการคอนเทนเนอร์ เหมาะสำหรับปริมาณงานนำร่อง
- : ค่าเริ่มต้นสำหรับขนาดการผลิต ใช้พูลโหนดที่มี GPU ปลั๊กอินอุปกรณ์ GPU และแผนภูมิ เพื่อจัดการวงจรชีวิต มอบเส้นทางที่มีการจัดการสำหรับการเรียกใช้ ในคอนเทนเนอร์แบบกำหนดเอง ซึ่งมีประโยชน์หากคุณต้องการควบคุมด้วยไพรมิทีฟคลาวด์
กฎการตัดสินใจ: หากคุณต้องการ SLO ที่เข้มงวด การแยกโมเดลหลายรายการ และการอัปเกรดแบบโรลลิ่ง จะให้ระนาบการควบคุมที่จำเป็นแก่คุณ หากคุณต้องการเวลาในการสร้างมูลค่าอย่างรวดเร็วภายในผู้จำหน่ายคลาวด์ เส้นทางที่มีการจัดการเช่นคอนเทนเนอร์แบบกำหนดเองของ เป็นสิ่งที่สมเหตุสมผล
- ประกอบที่เก็บโมเดลของคุณ
โหลดโมเดลจากที่เก็บโมเดล—ระบบไฟล์ภายในเครื่อง NFS ที่เก็บข้อมูลออบเจ็กต์—ซึ่งจัดระเบียบเป็น:
หลักการสำคัญ:
- ไดเรกทอรีเวอร์ชัน (1, 2, …) ช่วยให้สามารถโรลเอาต์และโรลแบ็กได้อย่างปลอดภัย
- เก็บสิ่งประดิษฐ์ของโมเดลไว้ให้คงที่ ใช้ CI/CD เพื่อโปรโมตเวอร์ชันผ่านสภาพแวดล้อมต่างๆ
- เลือกใช้ที่เก็บข้อมูลที่รองรับการอัปเดตแบบอะตอมมิกหรือการควบคุมเวอร์ชัน (เช่น ที่เก็บข้อมูลออบเจ็กต์ที่มีการแก้ไข) เพื่อหลีกเลี่ยงการโหลดบางส่วน
- สร้าง config.pbtxt สำหรับแต่ละโมเดล
การกำหนดค่าโมเดลคือที่ที่อำนาจของ ปรากฏขึ้น อย่างน้อยที่สุด:
- backend หรือ platform: เช่น "tensorflow", "pytorch", "onnxruntime", "tensorrt"
- max_batch_size: ตั้งค่า >0 เพื่อเปิดใช้งานการจัดกลุ่มแบบไดนามิก
- รูปร่างอินพุต/เอาต์พุตและประเภทข้อมูล
ฟิลด์การเพิ่มประสิทธิภาพ:
- instance_group: กำหนดค่าหลายอินสแตนซ์ต่อ GPU สำหรับการทำงานพร้อมกัน
- dynamic_batching: preferred_batch_size, max_queue_delay_microseconds สำหรับการแลกเปลี่ยนปริมาณงาน/เวลาแฝง
- response_cache: เปิดใช้งานสำหรับรูปแบบการอนุมานที่สามารถแคชได้ (เมื่อรองรับ)
- การเลือกการจัดตารางเวลาสำหรับโมเดล Ensemble: กำหนดไปป์ไลน์ในทุกแบ็กเอนด์สำหรับการประมวลผลล่วงหน้า/หลังการประมวลผล
- แพ็กเกจและเรียกใช้
จุดเริ่มต้นที่ง่ายที่สุดคือคอนเทนเนอร์อย่างเป็นทางการ:
- docker run --gpus all -p8000:8000 -p8001:8001 -p8002:8002 -v /path/to/models:/models nvcr.io/nvidia/tritonserver:xx.yy-py3 tritonserver --model-repository=/models
พอร์ต:
- 8002: เมตริก (Prometheus)
เพิ่มแฟล็กสำหรับ:
- --exit-on-error=false ระหว่างการทำซ้ำ
- --strict-model-config=false สำหรับการกำหนดค่าที่สร้างขึ้นโดยอัตโนมัติ (เหมาะสำหรับการสร้างต้นแบบ เขียนการกำหนดค่าที่ชัดเจนสำหรับการผลิต)
- ส่งคำขออนุมาน
ใช้ SDK ของ (Python, C++, Java) หรือ HTTP/gRPC ดิบ ขั้นตอน REST พื้นฐาน:
- รับข้อมูลเมตาของโมเดลและการกำหนดค่าสำหรับการตรวจสอบรูปร่าง/ประเภท
- POST คำขออนุมานด้วยเทนเซอร์ที่มีรูปร่างที่ถูกต้อง
- ตีความเอาต์พุต; จับคู่กับเลเยอร์แอปพลิเคชัน
รูปแบบ:
- วอร์มโมเดล (ส่งคำขอเริ่มต้น)
- ตรวจสอบความถูกต้องของเวลาแฝงภายใต้โหลดที่สมจริง (การจราจรสังเคราะห์หรือการจราจรที่เล่นซ้ำ)
- การจัดกลุ่มแบบไดนามิกและการปรับแต่งการทำงานพร้อมกัน
ตัวจัดกำหนดการของ สามารถรวมคำขอเพื่อเพิ่มการใช้ GPU ได้สูงสุด การแลกเปลี่ยนหลักคือเวลาแฝงของการจัดคิว (เวลาแฝง) กับขนาดแบทช์ (ปริมาณงาน) ลูปเชิงปฏิบัติ:
- ตั้งค่า max_batch_size ตามขีดจำกัดสถาปัตยกรรมของโมเดล
- กำหนดค่า dynamic_batching ด้วยขนาดแบทช์ที่ต้องการสองหรือสามขนาด (เช่น 8, 16, 32) และ max_queue_delay ที่สั้น (เช่น 100–400 ไมโครวินาทีสำหรับเป้าหมายเวลาแฝงต่ำ นานกว่าสำหรับงานแบทช์ที่มีปริมาณงานสูง)
- เพิ่มจำนวน instance_group เพื่อปรับขนาดการทำงานพร้อมกัน ตรวจสอบเวลาแฝงส่วนท้าย (p95/p99) และหน่วยความจำ GPU
- เปิดใช้งาน บนพอร์ต 8002 ขูดเมตริกต่อโมเดล (คำขอ เวลาคิว เวลาคำนวณ การใช้ GPU)
- กำหนด SLO: เช่น p95 < 50 ms อัตราข้อผิดพลาด < 0.1%
- สร้างการแจ้งเตือนสำหรับการเปลี่ยนแปลง: การเพิ่มขึ้นของเวลาคิวอย่างกะทันหันหรือการเพิ่มขึ้นของการคำนวณอาจบ่งชี้ถึงการกำหนดค่าโมเดลที่เสียหายหรือการเพิ่มขึ้นของการเข้าชม
- การเพิ่มประสิทธิภาพโมเดล: และการหาปริมาณ
- แปลงโมเดลที่เข้ากันได้เป็นเอ็นจิน เพื่อให้ได้เวลาแฝงที่มากขึ้นบน NVIDIA GPU ใช้ FP16 หรือ INT8 ด้วยการปรับเทียบ ตรวจสอบความถูกต้องของงบประมาณ
- ใช้การส่งออก เป็นเลเยอร์การทำงานร่วมกันได้ที่เป็นไปได้ ทดสอบตัวเลขในทุกแบ็กเอนด์
- สำหรับปริมาณงานของทรานสฟอร์มเมอร์ ให้เปิดใช้งาน Graphs ที่รองรับเพื่อลดค่าใช้จ่ายในการเปิดตัว
- การให้บริการหลายโมเดลและ Ensemble
- โหนดหลายโมเดล: โฮสต์หลายโมเดลบน GPU เดียวกันด้วยการแยกอินสแตนซ์ ใช้การจำกัดอัตราต่อโมเดล
- Ensemble: กำหนดไปป์ไลน์แบบ end-to-end (ประมวลผลล่วงหน้า -> โมเดล A -> โมเดล B -> ประมวลผลภายหลัง) โดยตรงใน ลดฮอปเครือข่ายและค่าใช้จ่ายในการซีเรียลไลซ์
- หนึ่งโมเดลต่อการปรับใช้เทียบกับหลายโมเดลต่อพ็อด: เลือกตามความต้องการในการแยก หน่วยความจำ GPU และจังหวะการโรลเอาต์
- (HPA) บนเมตริกแบบกำหนดเอง (เวลาคิว การใช้ GPU) สำหรับการปรับขนาดแบบยืดหยุ่น
- การโรลเอาต์ โดยการเผยแพร่โมเดลเวอร์ชันใหม่ จากนั้นกำหนดเปอร์เซ็นต์ของการเข้าชมผ่านเลเยอร์แอปพลิเคชันหรือ
วิธีใช้ บน (รูปแบบที่มีการจัดการ)
หากคุณต้องการเรียกใช้ ด้วยจุดควบคุมที่มีการจัดการบนคลาวด์ (การปรับขนาดอัตโนมัติ การบันทึก การรักษาความปลอดภัย) รองรับคอนเทนเนอร์แบบกำหนดเอง ขั้นตอน:
- สร้างอิมเมจจากฐาน อย่างเป็นทางการ COPY ที่เก็บโมเดลของคุณหรือเมานต์จากที่เก็บข้อมูลออบเจ็กต์
- สร้างโมเดล ที่ชี้ไปยังคอนเทนเนอร์
- ปรับใช้กับปลายทางด้วยพารามิเตอร์การปรับขนาด
รูปแบบนี้มีประโยชน์สำหรับทีมที่ต้องการความยืดหยุ่นของ โดยไม่ต้องจัดการ หรือการจัดตารางเวลา GPU ด้วยตนเอง
ตัวอย่างแบบ End-to-End อย่างง่าย
สถานการณ์: คุณมีโมเดลการจัดประเภทรูปภาพ ที่ส่งออกไปยัง
ขั้นตอน:
- ส่งออกโมเดลไปยัง : resnet50.onnx
- ตัวอย่าง config.pbtxt:
name: "resnet50"
platform: "onnxruntime_onnx"
max_batch_size: 32
อินพุตและการอ้างอิงการเพิ่มประสิทธิภาพโดยละเอียดของ NVIDIA
นัยยะเชิงกลยุทธ์: จุดควบคุมและเส้นโค้งต้นทุน
มีบทเรียนเชิงกลยุทธ์สามประการจากการดำเนินการ ในระดับขนาดใหญ่:
- การสร้างมาตรฐานจะเพิ่มพูน การรวมการให้บริการไว้เบื้องหลัง จะช่วยลดต้นทุนส่วนเพิ่มต่อโมเดล—ขั้นตอนการปรับใช้ การตรวจสอบ และการเพิ่มประสิทธิภาพจะถูกแชร์—และสร้างความทรงจำขององค์กร ซึ่งจะเร่งการทดลองในขณะที่รักษาระดับความน่าเชื่อถือให้สูง
- การจัดตารางเวลาคืออำนาจ การจัดกลุ่มแบบไดนามิกและการทำงานพร้อมกันของอินสแตนซ์ไม่ได้เป็นเพียงคุณสมบัติประสิทธิภาพ แต่เป็นคันโยกควบคุมต้นทุน การจับคู่รูปแบบคำขอกับการใช้ GPU จะช่วยลดเส้นโค้งต้นทุนต่อการอนุมาน ในขณะที่ตรงตาม SLO
- ความสามารถในการพกพาช่วยลดความเสี่ยง ด้วยการรองรับแบ็กเอนด์หลายรายการและการปรับใช้คอนเทนเนอร์ ช่วยให้คุณป้องกันการเปลี่ยนแปลงของเฟรมเวิร์กและการล็อกอินของคลาวด์ ตัวเลือกนั้นมีค่าเมื่อสถาปัตยกรรมโมเดลและผู้ขายมีการพัฒนาอย่างรวดเร็ว
จากมุมมองเชิงปฏิบัติ เปลี่ยนการอนุมานให้เป็นระเบียบวินัยทางวิศวกรรม: อินพุตที่วัดได้ (ขนาดแบทช์ การทำงานพร้อมกัน ความแม่นยำ) เอาต์พุตที่วัดได้ (เวลาแฝง p95 ปริมาณงาน ต้นทุน) และกระบวนการเพิ่มประสิทธิภาพแบบวงปิด ระเบียบวินัยนั้นเป็นพื้นฐานสำหรับการปรับขนาดแอปพลิเคชัน AI ในทุกโดเมน
พิจารณา Sider.AITriton ในเวิร์กโฟลว์
พิจารณา Sider.AI เป็นส่วนเสริมของเวิร์กโฟลว์การพัฒนาและการดำเนินงาน ในขณะที่ Sider.AITriton สร้างมาตรฐานการให้บริการ ทีมยังคงต้องการการทำซ้ำอย่างรวดเร็วเกี่ยวกับพรอมต์ รูปแบบโมเดล และการวินิจฉัยประสิทธิภาพในเอกสารและโค้ด จากมุมมองเชิงกลยุทธ์ เครื่องมือที่รวมศูนย์การวิเคราะห์และการทำงานร่วมกันรอบโมเดล การกำหนดค่า และบันทึกสามารถลดวงจรการตอบสนองระหว่างนักวิทยาศาสตร์ข้อมูลและวิศวกรแพลตฟอร์มได้ นั่นคือที่มาของการเพิ่มพูนผลิตภาพ: การเปลี่ยนแปลงที่ชัดเจนยิ่งขึ้นในการเปลี่ยนแปลง config.pbtxt บันทึกการเปรียบเทียบเกณฑ์มาตรฐานที่แชร์ และการวิเคราะห์สาเหตุหลักที่รวดเร็วยิ่งขึ้นเกี่ยวกับการเปลี่ยนแปลงหรือการถดถอยของเวลาแฝง ข้อผิดพลาดทั่วไปและวิธีหลีกเลี่ยง
- รูปร่าง/ชนิดข้อมูลที่ไม่ถูกต้อง: ตรวจสอบความถูกต้องด้วยข้อมูลเมตาของโมเดลและบังคับใช้การตรวจสอบสคีมาในไคลเอนต์
- การจัดกลุ่มที่ทะเยอทะยานเกินไป: แบตช์ขนาดใหญ่ที่เกินงบประมาณเวลาแฝง เริ่มต้นเล็กๆ แล้วขยาย
- การคอมมิตหน่วยความจำ GPU มากเกินไป: คำนึงถึงค่าใช้จ่ายของเฟรมเวิร์ก ใช้ nvidia-smi เพื่อตรวจสอบ headroom
- ละเลยการประมวลผลล่วงหน้า/หลังการประมวลผล: ย้ายขั้นตอนก่อน/หลังไปที่ Ensemble ของ เพื่อหลีกเลี่ยงค่าใช้จ่ายของเครือข่ายและสภาพแวดล้อมที่ไม่สอดคล้องกัน
- ขาดระเบียบวินัยด้านเวอร์ชัน: ตรึงเวอร์ชันเสมอ ใช้การโปรโมตที่มีโครงสร้าง และบันทึกค่าพื้นฐานของประสิทธิภาพต่อเวอร์ชัน
หมายเหตุสั้นๆ เกี่ยวกับการสร้างแบบจำลองต้นทุน
- ต้นทุน GPU ต่อชั่วโมงลดลงเมื่อการใช้งานเพิ่มขึ้น การจัดกลุ่มแบบไดนามิกคือคันโยก แต่การใช้งานที่สูงขึ้นสามารถเพิ่มเวลาแฝงส่วนท้ายได้ กำหนดงบประมาณที่ชัดเจนและปรับแต่งตามนั้น
- การแลกเปลี่ยนความแม่นยำ (FP32 -> FP16 -> INT8) มอบผลกำไรแบบขั้นบันได ตรวจสอบความถูกต้องของข้อมูลในลักษณะเดียวกับการผลิตเสมอ
- การจัดวางหลายโมเดลช่วยประหยัดค่าใช้จ่าย แต่เพิ่มความเสี่ยงของเพื่อนบ้านที่มีเสียงดัง แยกโมเดลที่สำคัญต่อเวลาแฝงเพียงไม่กี่โมเดล
การรับรู้ถึงแผนงาน
NVIDIA อัปเดต บ่อยครั้งด้วยแบ็กเอนด์ การเพิ่มประสิทธิภาพ และการผสานรวมใหม่ๆ การติดตามบันทึกประจำรุ่นเป็นส่วนหนึ่งของวินัยในการดำเนินงาน เมื่อแพลตฟอร์มคลาวด์ขยายการรองรับคอนเทนเนอร์แบบกำหนดเองและ GPU ที่มีการจัดการ ตัวเลือกสำหรับการเรียกใช้ โดยไม่ต้องยกของหนักที่ไม่ได้แยกความแตกต่างยังคงปรับปรุงอย่างต่อเนื่อง
สรุป: ทำให้การอนุมานเป็นผลิตภัณฑ์ ไม่ใช่โครงการ
การใช้ ไม่ใช่งานปรับใช้แบบครั้งเดียว แต่เป็นรากฐานของผลิตภัณฑ์ที่ทำซ้ำได้และปรับขนาดได้สำหรับการอนุมาน ส่วนประกอบทางเทคโนโลยี—ที่เก็บโมเดล config.pbtxt การจัดกลุ่มแบบไดนามิก Ensemble—เป็นสิ่งที่ตรงไปตรงมา มูลค่าเชิงกลยุทธ์เกิดขึ้นจากการสร้างมาตรฐาน การสังเกตการณ์ และการเพิ่มประสิทธิภาพอย่างต่อเนื่อง หากคุณปฏิบัติต่อการอนุมานในฐานะผลิตภัณฑ์ที่มี SLO และหน่วยเศรษฐศาสตร์ จะมอบคันโยกเพื่อให้บรรลุเป้าหมายเหล่านั้น และเมื่อภูมิทัศน์ของโมเดลมีความหลากหลาย เลเยอร์การให้บริการที่แยกความซับซ้อนของเฟรมเวิร์กออก ในขณะที่ส่งมอบประสิทธิภาพ คือจุดควบคุมที่เพิ่มพูนข้อได้เปรียบเมื่อเวลาผ่านไป สำหรับทีมส่วนใหญ่ คำตอบที่ถูกต้องคือเริ่มต้นเล็กๆ น้อยๆ สร้างเครื่องมืออย่างจริงจัง และทำซ้ำ: การให้บริการคือความสามารถ และ มอบส่วนประกอบที่เหมาะสมในการเป็นเจ้าของ
คำถามที่พบบ่อย
Q1: คืออะไรและทำไมฉันจึงควรใช้
คือระบบการให้บริการประสิทธิภาพสูงแบบหลายแบ็กเอนด์ที่สร้างมาตรฐานการอนุมานในทุกเฟรมเวิร์กและฮาร์ดแวร์ ช่วยลดความซับซ้อนในการดำเนินงาน เปิดใช้งานการจัดกลุ่มแบบไดนามิกและการทำงานพร้อมกัน และมอบ API ที่สอดคล้องกันสำหรับปริมาณงานการผลิต
Q2: ฉันจะกำหนดค่าการจัดกลุ่มแบบไดนามิกใน เพื่อลดเวลาแฝงได้อย่างไร
ตั้งค่า max_batch_size และใช้ dynamic_batching ด้วยขนาดแบทช์ที่ต้องการขนาดเล็กและ max_queue_delay ที่เข้มงวดสำหรับเส้นทางที่ไวต่อเวลาแฝง ตรวจสอบเวลาแฝง p95/p99 และปรับจำนวน instance_group เพื่อปรับสมดุลปริมาณงานและเวลาแฝงส่วนท้าย
Q3: ฉันสามารถปรับใช้ บนแพลตฟอร์มคลาวด์ที่มีการจัดการเช่น ได้หรือไม่
ได้ คุณสามารถเรียกใช้ ในคอนเทนเนอร์แบบกำหนดเองบน จากนั้นปรับใช้กับปลายทางที่มีการจัดการด้วยการปรับขนาดอัตโนมัติและการบันทึก แนวทางนี้มอบความยืดหยุ่นของ ในขณะที่ใช้ประโยชน์จากระนาบการควบคุมคลาวด์
Q4: ฉันจะเพิ่มประสิทธิภาพโมเดลสำหรับ บน NVIDIA GPU ได้อย่างไร
แปลงโมเดลที่เข้ากันได้เป็น เปิดใช้งาน FP16 หรือ INT8 ด้วยการปรับเทียบ และพิจารณา Graphs สำหรับปริมาณงานของทรานสฟอร์มเมอร์ ตรวจสอบความถูกต้องของงบประมาณและปรับแต่งการจัดกลุ่มแบบไดนามิกและการทำงานพร้อมกันของอินสแตนซ์สำหรับ SLO ของคุณ
Q5: วิธีที่ดีที่สุดในการจัดโครงสร้างที่เก็บโมเดลสำหรับ คืออะไร
ใช้ไดเรกทอรีเวอร์ชันต่อโมเดลด้วย config.pbtxt ที่ชัดเจน ซึ่งระบุแบ็กเอนด์ รูปร่าง และการตั้งค่าการจัดกลุ่ม ปฏิบัติต่อสิ่งประดิษฐ์ในลักษณะที่ไม่เปลี่ยนรูป และโปรโมตเวอร์ชันผ่าน CI/CD เพื่อการโรลเอาต์และการโรลแบ็กที่ปลอดภัย