TensorFlow Serving คือระบบการให้บริการที่ยืดหยุ่นและมีประสิทธิภาพสูงสำหรับโมเดลการเรียนรู้ของเครื่อง ซึ่งออกแบบมาสำหรับสภาพแวดล้อมการใช้งานจริง TensorFlow Serving ช่วยให้ปรับใช้อัลกอริทึมและการทดลองใหม่ๆ ได้อย่างง่ายดาย ขณะเดียวกันก็รักษาสถาปัตยกรรมเซิร์ฟเวอร์และ API เดิมไว้ TensorFlow Serving ให้การผสานรวมกับโมเดล TensorFlow ได้ทันที แต่สามารถขยายเพื่อรองรับโมเดลประเภทอื่นๆ ได้อย่างง่ายดาย
แนวคิดหลัก
หากต้องการทำความเข้าใจสถาปัตยกรรมของ TensorFlow Serving คุณต้องเข้าใจแนวคิดหลักต่อไปนี้:
เสิร์ฟได้
การให้บริการ เป็นส่วนสำคัญในการให้บริการ TensorFlow การให้บริการคือออบเจ็กต์พื้นฐานที่ไคลเอ็นต์ใช้ในการคำนวณ (เช่น การค้นหาหรือการอนุมาน)
ขนาดและรายละเอียดของ Servable นั้นมีความยืดหยุ่น Servable เดียวอาจรวมอะไรก็ได้ตั้งแต่ส่วนเดียวของตารางการค้นหาไปจนถึงโมเดลเดียวไปจนถึงโมเดลการอนุมานจำนวนหนึ่ง ที่สามารถให้บริการได้ทุกประเภทและอินเทอร์เฟซ ช่วยให้เกิดความยืดหยุ่นและการปรับปรุงในอนาคต เช่น:
- ผลลัพธ์การสตรีม
- API ทดลอง
- โหมดการทำงานแบบอะซิงโครนัส
ผู้ให้บริการไม่ได้จัดการวงจรการใช้งานของตนเอง
เสิร์ฟทั่วไปมีดังต่อไปนี้:
- TensorFlow SavedModelBundle (
tensorflow::Session
) - ตารางการค้นหาสำหรับการฝังหรือการค้นหาคำศัพท์
เวอร์ชันที่ให้บริการได้
TensorFlow Serving สามารถรองรับ เวอร์ชัน ที่ให้บริการได้ตั้งแต่หนึ่งเวอร์ชันขึ้นไปตลอดอายุการใช้งานของอินสแตนซ์เซิร์ฟเวอร์เดียว ซึ่งช่วยให้สามารถโหลดการกำหนดค่าอัลกอริทึม น้ำหนัก และข้อมูลอื่นๆ ใหม่ได้เมื่อเวลาผ่านไป เวอร์ชันต่างๆ ช่วยให้สามารถโหลดบริการได้มากกว่าหนึ่งเวอร์ชันพร้อมกัน โดยรองรับการเปิดตัวและการทดลองแบบค่อยเป็นค่อยไป ณ เวลาให้บริการ ลูกค้าอาจขอเวอร์ชันล่าสุดหรือรหัสเวอร์ชันเฉพาะสำหรับรุ่นใดรุ่นหนึ่ง
สตรีมที่ให้บริการได้
สตรีมที่ให้บริการได้ คือลำดับของเวอร์ชันของสตรีมที่ให้บริการได้ โดยจัดเรียงตามการเพิ่มหมายเลขเวอร์ชัน
โมเดล
TensorFlow Serving แสดงถึง โมเดล หนึ่งรายการหรือมากกว่านั้น โมเดลการเรียนรู้ของเครื่องอาจมีอัลกอริธึมอย่างน้อยหนึ่งอัลกอริธึม (รวมถึงน้ำหนักที่เรียนรู้) และการค้นหาหรือการฝังตาราง
คุณสามารถแสดง แบบจำลองคอมโพสิตได้ ด้วยวิธีใดวิธีหนึ่งต่อไปนี้:
- เสิร์ฟอิสระหลายรายการ
- เสิร์ฟแบบคอมโพสิตเดี่ยวได้
การให้บริการอาจสอดคล้องกับเศษส่วนของโมเดลด้วย ตัวอย่างเช่น ตารางการค้นหาขนาดใหญ่สามารถแบ่งย่อยในอินสแตนซ์ TensorFlow Serving จำนวนมากได้
รถตัก
ตัวโหลด จะจัดการวงจรชีวิตของผู้ให้บริการ Loader API ช่วยให้โครงสร้างพื้นฐานทั่วไปเป็นอิสระจากอัลกอริธึมการเรียนรู้เฉพาะ ข้อมูล หรือกรณีการใช้งานผลิตภัณฑ์ที่เกี่ยวข้อง โดยเฉพาะอย่างยิ่ง Loaders จะสร้างมาตรฐานให้กับ API สำหรับการโหลดและยกเลิกการโหลดที่ให้บริการ
แหล่งที่มา
แหล่งที่มา คือโมดูลปลั๊กอินที่ค้นหาและให้บริการได้ แต่ละแหล่งที่มามีสตรีมที่ให้บริการได้เป็นศูนย์หรือมากกว่า สำหรับสตรีมที่ให้บริการแต่ละรายการ แหล่งที่มาจะจัดหาอินสแตนซ์ Loader หนึ่งอินสแตนซ์สำหรับแต่ละเวอร์ชันที่ทำให้พร้อมสำหรับการโหลด (จริงๆ แล้ว Source ถูกเชื่อมโยงเข้าด้วยกันกับ SourceAdapters เป็นศูนย์หรือมากกว่า และรายการสุดท้ายในห่วงโซ่จะปล่อย Loaders)
อินเทอร์เฟซของ TensorFlow Serving สำหรับ Sources สามารถค้นหาบริการได้จากระบบจัดเก็บข้อมูลที่กำหนดเอง TensorFlow Serving รวมถึงการใช้งานซอร์สอ้างอิงทั่วไป ตัวอย่างเช่น แหล่งที่มาอาจเข้าถึงกลไกเช่น RPC และสามารถสำรวจระบบไฟล์ได้
แหล่งที่มาสามารถรักษาสถานะที่แชร์ระหว่างบริการหรือเวอร์ชันต่างๆ ได้ สิ่งนี้มีประโยชน์สำหรับการให้บริการที่ใช้การอัปเดตเดลต้า (diff) ระหว่างเวอร์ชัน
เวอร์ชันที่ต้องการ
เวอร์ชันที่ต้องการ แสดงถึงชุดของเวอร์ชันที่ให้บริการซึ่งควรโหลดและพร้อมใช้งาน แหล่งที่มาจะสื่อสารชุดเวอร์ชันที่ให้บริการได้นี้สำหรับสตรีมที่ให้บริการได้ครั้งละรายการ เมื่อแหล่งที่มามอบรายการเวอร์ชันที่ต้องการใหม่ให้กับผู้จัดการ แหล่งที่มาจะเข้ามาแทนที่รายการก่อนหน้าสำหรับสตรีมที่ให้บริการนั้น ตัวจัดการจะยกเลิกการโหลดเวอร์ชันที่โหลดไว้ก่อนหน้านี้ซึ่งไม่ปรากฏอยู่ในรายการอีกต่อไป
ดู บทช่วยสอนขั้นสูง เพื่อดูว่าการโหลดเวอร์ชันทำงานอย่างไรในทางปฏิบัติ
ผู้จัดการ
ผู้จัดการ จะจัดการวงจรการใช้งานเต็มรูปแบบของ Servables รวมถึง:
- กำลังโหลดเสิร์ฟ
- เสิร์ฟ
- กำลังยกเลิกการโหลด Servables
ผู้จัดการรับฟังแหล่งที่มาและติดตามทุกเวอร์ชัน ผู้จัดการพยายามตอบสนองคำขอของแหล่งที่มา แต่อาจปฏิเสธที่จะโหลดเวอร์ชันที่ต้องการ หากไม่มีทรัพยากรที่ต้องการ ผู้จัดการอาจเลื่อนการ "ขนถ่าย" ออกไป ตัวอย่างเช่น ผู้จัดการอาจรอเพื่อยกเลิกการโหลดจนกว่าเวอร์ชันที่ใหม่กว่าจะเสร็จสิ้นการโหลด ตามนโยบายที่จะรับประกันว่าจะมีการโหลดอย่างน้อยหนึ่งเวอร์ชันตลอดเวลา
TensorFlow Serving Managers มอบอินเทอร์เฟซที่เรียบง่ายและแคบ -- GetServableHandle()
-- เพื่อให้ไคลเอ็นต์เข้าถึงอินสแตนซ์ที่ให้บริการที่โหลดไว้
แกนกลาง
การใช้ TensorFlow Serving APIs มาตรฐานทำให้ TensorFlow Serving Core จัดการด้านต่างๆ ของการให้บริการได้ดังต่อไปนี้:
- วงจรชีวิต
- เมตริก
TensorFlow Serving Core ถือว่าผู้ให้บริการและตัวโหลดเป็นวัตถุทึบแสง
ชีวิตของผู้รับใช้
พูดกว้างๆ:
- แหล่งที่มาสร้างตัวโหลดสำหรับเวอร์ชันที่ให้บริการ
- ตัวโหลดจะถูกส่งเป็นเวอร์ชัน Aspired ไปยัง Manager ซึ่งจะโหลดและให้บริการตามคำขอของลูกค้า
รายละเอียดเพิ่มเติม:
- ปลั๊กอิน Source จะสร้าง Loader สำหรับเวอร์ชันเฉพาะ Loader มีข้อมูลเมตาที่จำเป็นในการโหลด Servable
- Source ใช้การโทรกลับเพื่อแจ้งผู้จัดการเกี่ยวกับเวอร์ชัน Aspired
- ผู้จัดการใช้นโยบายเวอร์ชันที่กำหนดค่าไว้เพื่อกำหนดการดำเนินการถัดไปที่จะดำเนินการ ซึ่งอาจเป็นการยกเลิกการโหลดเวอร์ชันที่โหลดไว้ก่อนหน้านี้หรือโหลดเวอร์ชันใหม่
- หากผู้จัดการพิจารณาว่าปลอดภัย มันจะมอบทรัพยากรที่จำเป็นให้กับ Loader และแจ้งให้ Loader โหลดเวอร์ชันใหม่
- ลูกค้าขอให้ผู้จัดการสำหรับการให้บริการ โดยระบุเวอร์ชันอย่างชัดเจนหรือเพียงแค่ขอเวอร์ชันล่าสุด ผู้จัดการส่งคืนหมายเลขอ้างอิงสำหรับการให้บริการ
ตัวอย่างเช่น สมมติว่าแหล่งที่มาแสดงถึงกราฟ TensorFlow ที่มีน้ำหนักโมเดลที่อัปเดตบ่อยครั้ง ตุ้มน้ำหนักจะถูกจัดเก็บไว้ในไฟล์บนดิสก์
- Source ตรวจพบน้ำหนักโมเดลเวอร์ชันใหม่ โดยจะสร้าง Loader ที่มีตัวชี้ไปยังข้อมูลโมเดลบนดิสก์
- แหล่งที่มาจะแจ้ง Dynamic Manager ของเวอร์ชัน Aspired
- Dynamic Manager ใช้นโยบายเวอร์ชันและตัดสินใจโหลดเวอร์ชันใหม่
- Dynamic Manager บอก Loader ว่ามีหน่วยความจำเพียงพอ Loader จะสร้างกราฟ TensorFlow ทันทีด้วยน้ำหนักใหม่
- ไคลเอนต์ร้องขอตัวจัดการเป็นเวอร์ชันล่าสุดของโมเดล และ Dynamic Manager จะส่งคืนตัวจัดการเป็นเวอร์ชันใหม่ของ Servable
ความสามารถในการขยาย
TensorFlow Serving มีส่วนขยายหลายจุดซึ่งคุณสามารถเพิ่มฟังก์ชันการทำงานใหม่ได้
นโยบายเวอร์ชัน
นโยบายเวอร์ชันระบุลำดับของการโหลดและยกเลิกการโหลดเวอร์ชันภายในสตรีมที่ให้บริการเดียว
TensorFlow Serving ประกอบด้วยนโยบาย 2 ประการที่รองรับกรณีการใช้งานส่วนใหญ่ที่เป็นที่รู้จัก สิ่งเหล่านี้คือนโยบายการรักษาความพร้อมใช้งาน (หลีกเลี่ยงการโหลดเวอร์ชันเป็นศูนย์ โดยทั่วไปจะโหลดเวอร์ชันใหม่ก่อนที่จะยกเลิกการโหลดเวอร์ชันเก่า) และนโยบายการเก็บรักษาทรัพยากร (หลีกเลี่ยงการโหลดสองเวอร์ชันพร้อมกัน จึงต้องใช้ทรัพยากรเป็นสองเท่า; ยกเลิกการโหลดเวอร์ชันเก่าก่อนที่จะโหลด อันใหม่) สำหรับการใช้งาน TensorFlow Serving แบบง่ายๆ โดยที่ความพร้อมใช้งานในการให้บริการของโมเดลมีความสำคัญและมีต้นทุนทรัพยากรต่ำ นโยบายการรักษาความพร้อมใช้งานจะทำให้แน่ใจได้ว่าเวอร์ชันใหม่ได้รับการโหลดและพร้อมก่อนที่จะยกเลิกการโหลดเวอร์ชันเก่า สำหรับการใช้งานที่ซับซ้อนของ TensorFlow Serving เช่น การจัดการเวอร์ชันข้ามอินสแตนซ์เซิร์ฟเวอร์หลายรายการ นโยบายการเก็บรักษาทรัพยากรต้องใช้ทรัพยากรน้อยที่สุด (ไม่มีบัฟเฟอร์พิเศษสำหรับการโหลดเวอร์ชันใหม่)
แหล่งที่มา
New Sources สามารถรองรับระบบไฟล์ใหม่ ข้อเสนอระบบคลาวด์ และแบ็กเอนด์อัลกอริทึม TensorFlow Serving จัดเตรียมองค์ประกอบทั่วไปบางส่วนเพื่อให้สร้างแหล่งที่มาใหม่ได้ง่ายและรวดเร็ว ตัวอย่างเช่น TensorFlow Serving มียูทิลิตีเพื่อสรุปพฤติกรรมการโพลรอบแหล่งที่มาแบบธรรมดา แหล่งที่มามีความเกี่ยวข้องอย่างใกล้ชิดกับตัวโหลดสำหรับอัลกอริธึมเฉพาะและการโฮสต์ข้อมูลที่ให้บริการ
ดูเอกสาร แหล่งที่มาที่กำหนดเอง สำหรับข้อมูลเพิ่มเติมเกี่ยวกับวิธีการสร้างแหล่งที่มาที่กำหนดเอง
รถตัก
ตัวโหลดเป็นจุดขยายสำหรับการเพิ่มอัลกอริทึมและแบ็กเอนด์ข้อมูล TensorFlow เป็นหนึ่งในแบ็กเอนด์อัลกอริทึมดังกล่าว ตัวอย่างเช่น คุณจะต้องใช้ Loader ใหม่เพื่อโหลด ให้สิทธิ์เข้าถึง และยกเลิกการโหลดอินสแตนซ์ของโมเดล Machine Learning ที่ให้บริการได้ประเภทใหม่ เราคาดหวังที่จะสร้างตัวโหลดสำหรับตารางการค้นหาและอัลกอริธึมเพิ่มเติม
ดูเอกสาร ที่สามารถให้บริการแบบกำหนดเองได้ เพื่อเรียนรู้วิธีสร้างการให้บริการที่กำหนดเอง
แบตเชอร์
การรวมคำขอหลายรายการเป็นคำขอเดียวสามารถลดต้นทุนการดำเนินการอนุมานได้อย่างมาก โดยเฉพาะอย่างยิ่งเมื่อมีตัวเร่งฮาร์ดแวร์ เช่น GPU TensorFlow Serving มีวิดเจ็ตการจัดกลุ่มคำขอที่ช่วยให้ลูกค้าจัดกลุ่มการอนุมานเฉพาะประเภทของตนในคำขอต่างๆ ไปเป็นคำขอแบบกลุ่มที่ระบบอัลกอริทึมสามารถประมวลผลได้อย่างมีประสิทธิภาพมากขึ้น ดู คู่มือการจัดชุด สำหรับข้อมูลเพิ่มเติม