สถาปัตยกรรม

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 ถือว่าผู้ให้บริการและตัวโหลดเป็นวัตถุทึบแสง

ชีวิตของผู้รับใช้

แผนภาพสถาปัตยกรรมการให้บริการ tf

พูดกว้างๆ:

  1. แหล่งที่มาสร้างตัวโหลดสำหรับเวอร์ชันที่ให้บริการ
  2. ตัวโหลดจะถูกส่งเป็นเวอร์ชัน Aspired ไปยัง Manager ซึ่งจะโหลดและให้บริการตามคำขอของลูกค้า

รายละเอียดเพิ่มเติม:

  1. ปลั๊กอิน Source จะสร้าง Loader สำหรับเวอร์ชันเฉพาะ Loader มีข้อมูลเมตาที่จำเป็นในการโหลด Servable
  2. Source ใช้การโทรกลับเพื่อแจ้งผู้จัดการเกี่ยวกับเวอร์ชัน Aspired
  3. ผู้จัดการใช้นโยบายเวอร์ชันที่กำหนดค่าไว้เพื่อกำหนดการดำเนินการถัดไปที่จะดำเนินการ ซึ่งอาจเป็นการยกเลิกการโหลดเวอร์ชันที่โหลดไว้ก่อนหน้านี้หรือโหลดเวอร์ชันใหม่
  4. หากผู้จัดการพิจารณาว่าปลอดภัย มันจะมอบทรัพยากรที่จำเป็นให้กับ Loader และแจ้งให้ Loader โหลดเวอร์ชันใหม่
  5. ลูกค้าขอให้ผู้จัดการสำหรับการให้บริการ โดยระบุเวอร์ชันอย่างชัดเจนหรือเพียงแค่ขอเวอร์ชันล่าสุด ผู้จัดการส่งคืนหมายเลขอ้างอิงสำหรับการให้บริการ

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

  1. Source ตรวจพบน้ำหนักโมเดลเวอร์ชันใหม่ โดยจะสร้าง Loader ที่มีตัวชี้ไปยังข้อมูลโมเดลบนดิสก์
  2. แหล่งที่มาจะแจ้ง Dynamic Manager ของเวอร์ชัน Aspired
  3. Dynamic Manager ใช้นโยบายเวอร์ชันและตัดสินใจโหลดเวอร์ชันใหม่
  4. Dynamic Manager บอก Loader ว่ามีหน่วยความจำเพียงพอ Loader จะสร้างกราฟ TensorFlow ทันทีด้วยน้ำหนักใหม่
  5. ไคลเอนต์ร้องขอตัวจัดการเป็นเวอร์ชันล่าสุดของโมเดล และ 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 มีวิดเจ็ตการจัดกลุ่มคำขอที่ช่วยให้ลูกค้าจัดกลุ่มการอนุมานเฉพาะประเภทของตนในคำขอต่างๆ ไปเป็นคำขอแบบกลุ่มที่ระบบอัลกอริทึมสามารถประมวลผลได้อย่างมีประสิทธิภาพมากขึ้น ดู คู่มือการจัดชุด สำหรับข้อมูลเพิ่มเติม