หน้านี้ได้รับการแปลโดย Cloud Translation API
Switch to English

ความเข้ากันได้ของเวอร์ชัน TensorFlow

เอกสารนี้มีไว้สำหรับผู้ใช้ที่ต้องการความเข้ากันได้แบบย้อนกลับในเวอร์ชันต่างๆของ TensorFlow (สำหรับโค้ดหรือข้อมูล) และสำหรับนักพัฒนาที่ต้องการแก้ไข TensorFlow ในขณะที่รักษาความเข้ากันได้

การกำหนดเวอร์ชันความหมาย 2.0

TensorFlow เป็นไปตาม Semantic Versioning 2.0 ( semver ) สำหรับ API สาธารณะ TensorFlow เวอร์ชันรีลีสแต่ละเวอร์ชันมีรูปแบบ MAJOR.MINOR.PATCH ตัวอย่างเช่น TensorFlow เวอร์ชัน 1.2.3 มี MAJOR เวอร์ชัน 1, MINOR เวอร์ชัน 2 และ PATCH เวอร์ชัน 3 การเปลี่ยนแปลงของแต่ละหมายเลขมีความหมายดังต่อไปนี้:

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

  • ขั้นต่ำ : คุณสมบัติที่เข้ากันได้ย้อนหลังการปรับปรุงความเร็ว ฯลฯ โค้ดและข้อมูลที่ทำงานร่วมกับรุ่นรองก่อนหน้านี้ และ ขึ้นอยู่กับ API สาธารณะที่ไม่ได้ทดลองเท่านั้นจะยังคงทำงานได้ไม่เปลี่ยนแปลง สำหรับรายละเอียดเกี่ยวกับสิ่งที่เป็นและไม่ใช่ API สาธารณะโปรดดู สิ่งที่ครอบคลุม

  • PATCH : แก้ไขข้อบกพร่องที่เข้ากันได้ย้อนหลัง

ตัวอย่างเช่นรีลีส 1.0.0 นำการเปลี่ยนแปลงที่ เข้ากันไม่ได้ ย้อนหลังจากรีลีส 0.12.1 อย่างไรก็ตามรีลีส 1.1.1 กลับ เข้ากันได้ กับรีลีส 1.0.0

สิ่งที่ครอบคลุม

เฉพาะ API สาธารณะของ TensorFlow เท่านั้นที่เข้ากันได้กับเวอร์ชันรองและเวอร์ชันแพตช์ API สาธารณะประกอบด้วย

  • ฟังก์ชันและคลาส Python ที่ บันทึกไว้ทั้งหมดในโมดูล tensorflow และโมดูลย่อยยกเว้น

    • สัญลักษณ์ส่วนตัว: ฟังก์ชันคลาส ฯลฯ ซึ่งชื่อขึ้นต้นด้วย _
    • สัญลักษณ์ Experimental และ tf.contrib โปรดดูรายละเอียด ด้านล่าง

    โปรดทราบว่าโค้ดใน examples/ และ tools/ ไดเร็กทอรีไม่สามารถเข้าถึงได้ผ่านโมดูล tensorflow Python และไม่ครอบคลุมโดยการรับประกันความเข้ากันได้

    หากสัญลักษณ์พร้อมใช้งานผ่านโมดูล tensorflow Python หรือโมดูลย่อยของมัน แต่ไม่ได้รับการจัดทำเป็นเอกสารสัญลักษณ์นั้นจะ ไม่ ถือว่าเป็นส่วนหนึ่งของ API สาธารณะ

  • API ความเข้ากันได้ (ใน Python โมดูล tf.compat ) ในเวอร์ชันหลักเราอาจเผยแพร่ยูทิลิตี้และอุปกรณ์ปลายทางเพิ่มเติมเพื่อช่วยผู้ใช้ในการเปลี่ยนไปใช้เวอร์ชันหลักใหม่ สัญลักษณ์ API เหล่านี้เลิกใช้และไม่ได้รับการสนับสนุน (กล่าวคือเราจะไม่เพิ่มคุณสมบัติใด ๆ และเราจะไม่แก้ไขข้อบกพร่องอื่น ๆ นอกเหนือจากการแก้ไขช่องโหว่) แต่จะอยู่ภายใต้การรับประกันความเข้ากันได้ของเรา

  • C API

  • ไฟล์บัฟเฟอร์โปรโตคอลต่อไปนี้:

สิ่งที่ ไม่ ครอบคลุม

บางส่วนของ TensorFlow สามารถเปลี่ยนวิธีย้อนกลับที่เข้ากันไม่ได้ ณ จุดใดก็ได้ ซึ่งรวมถึง:

  • Experimental APIs : เพื่ออำนวยความสะดวกในการพัฒนาเรายกเว้นสัญลักษณ์ API บางตัวที่ระบุไว้อย่างชัดเจนว่าเป็นการทดลองจากการรับประกันความเข้ากันได้ โดยเฉพาะอย่างยิ่งสิ่งต่อไปนี้ไม่ครอบคลุมอยู่ในการรับประกันความเข้ากันได้ใด ๆ :

    • สัญลักษณ์ใด ๆ ในโมดูล tf.contrib หรือโมดูลย่อย
    • สัญลักษณ์ใด ๆ (โมดูลฟังก์ชันอาร์กิวเมนต์คุณสมบัติคลาสหรือค่าคงที่) ซึ่งชื่อประกอบด้วย experimental หรือการ Experimental หรือ

    • สัญลักษณ์ใด ๆ ที่มีชื่อแบบเต็มรวมถึงโมดูลหรือคลาสที่เป็นการทดลอง ซึ่งรวมถึงช่องและข้อความย่อยของบัฟเฟอร์โปรโตคอลที่เรียกว่า experimental

  • ภาษาอื่น ๆ : TensorFlow API ในภาษาอื่นที่ไม่ใช่ Python และ C เช่น:

  • รายละเอียดของคอมโพสิต ops: ฟังก์ชันสาธารณะจำนวนมากใน Python ขยายไปยังอ็อพชันดั้งเดิมหลายตัวในกราฟและรายละเอียดเหล่านี้จะเป็นส่วนหนึ่งของกราฟใด ๆ ที่บันทึกลงดิสก์เป็น GraphDef s รายละเอียดเหล่านี้อาจมีการเปลี่ยนแปลงสำหรับรุ่นย่อย โดยเฉพาะอย่างยิ่งการทดสอบการถดถอยที่ตรวจสอบการจับคู่ที่แน่นอนระหว่างกราฟมีแนวโน้มที่จะทำลายในรุ่นย่อยแม้ว่าพฤติกรรมของกราฟจะไม่เปลี่ยนแปลงและจุดตรวจที่มีอยู่จะยังคงทำงานได้

  • รายละเอียดตัวเลข ทศนิยม: ค่าทศนิยมเฉพาะที่คำนวณโดยตัวเลือกอาจเปลี่ยนแปลงได้ตลอดเวลา ผู้ใช้ควรพึ่งพาความแม่นยำโดยประมาณและความเสถียรของตัวเลขเท่านั้นไม่ใช่เฉพาะบิตที่คำนวณ การเปลี่ยนแปลงสูตรตัวเลขในรุ่นย่อยและแพตช์ควรส่งผลให้มีความแม่นยำเทียบเท่าหรือดีขึ้นโดยมีข้อแม้ที่การปรับปรุงความแม่นยำของสูตรเฉพาะในการเรียนรู้ของเครื่องอาจทำให้ความแม่นยำลดลงสำหรับระบบโดยรวม

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

  • เวอร์ชันเอียงใน Tensorflow แบบกระจาย: การ เรียกใช้ TensorFlow สองเวอร์ชันที่แตกต่างกันในคลัสเตอร์เดียวไม่ได้รับการสนับสนุน ไม่มีการรับประกันเกี่ยวกับความเข้ากันได้แบบย้อนหลังของโปรโตคอล Wire

  • ข้อบกพร่อง: เราขอสงวนสิทธิ์ในการเปลี่ยนแปลงพฤติกรรมที่เข้ากันไม่ได้ย้อนหลัง (แม้ว่าจะไม่ใช่ API) หากการใช้งานปัจจุบันเสียอย่างชัดเจนนั่นคือหากขัดแย้งกับเอกสารประกอบหรือหากพฤติกรรมที่เป็นที่รู้จักและกำหนดไว้อย่างดีไม่ได้รับการปรับใช้อย่างเหมาะสมเนื่องจาก เพื่อจุดบกพร่อง ตัวอย่างเช่นหากเครื่องมือเพิ่มประสิทธิภาพอ้างว่าใช้อัลกอริทึมการเพิ่มประสิทธิภาพที่รู้จักกันดี แต่ไม่ตรงกับอัลกอริทึมนั้นเนื่องจากข้อบกพร่องเราจะแก้ไขเครื่องมือเพิ่มประสิทธิภาพ การแก้ไขของเราอาจทำลายรหัสโดยอาศัยพฤติกรรมที่ไม่ถูกต้องสำหรับการลู่เข้า เราจะบันทึกการเปลี่ยนแปลงดังกล่าวในบันทึกประจำรุ่น

  • API ที่ไม่ได้ใช้: เราขอสงวนสิทธิ์ในการเปลี่ยนแปลงย้อนกลับที่เข้ากันไม่ได้กับ API ซึ่งเราไม่พบการใช้งานที่เป็นเอกสาร (โดยดำเนินการตรวจสอบการใช้งาน TensorFlow ผ่านการค้นหา GitHub) ก่อนที่จะทำการเปลี่ยนแปลงใด ๆ เราจะประกาศความตั้งใจของเราที่จะทำการเปลี่ยนแปลงใน รายการส่งเมลประกาศ @ โดยให้คำแนะนำเกี่ยวกับวิธีจัดการกับความเสียหายใด ๆ (ถ้ามี) และรอสองสัปดาห์เพื่อให้ชุมชนของเรามีโอกาสแบ่งปันความคิดเห็น .

  • พฤติกรรมผิดพลาด: เราอาจแทนที่ข้อผิดพลาดด้วยพฤติกรรมที่ไม่ใช่ข้อผิดพลาด ตัวอย่างเช่นเราอาจเปลี่ยนฟังก์ชันเพื่อคำนวณผลลัพธ์แทนที่จะเพิ่มข้อผิดพลาดแม้ว่าข้อผิดพลาดนั้นจะได้รับการบันทึกไว้ก็ตาม เราขอสงวนสิทธิ์ในการเปลี่ยนแปลงข้อความแสดงข้อผิดพลาด นอกจากนี้ประเภทของข้อผิดพลาดอาจเปลี่ยนแปลงได้เว้นแต่จะระบุประเภทข้อยกเว้นสำหรับเงื่อนไขข้อผิดพลาดเฉพาะในเอกสารประกอบ

ความเข้ากันได้ของ SavedModels กราฟและจุดตรวจ

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

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

เราทำการรับประกันเพิ่มเติมสำหรับ SavedModels ที่ รองรับ เราเรียกว่า SavedModel ซึ่งสร้างขึ้นโดยใช้ เฉพาะ API ที่ไม่เลิกใช้งานไม่ทดลองและไม่เข้ากันได้ ใน TensorFlow เวอร์ชันหลัก N ที่ SavedModel รองรับในเวอร์ชัน N SavedModel ใด ๆ ที่รองรับใน TensorFlow เวอร์ชันหลัก N สามารถโหลดและดำเนินการกับ TensorFlow เวอร์ชันหลัก N+1 อย่างไรก็ตามฟังก์ชันที่จำเป็นในการสร้างหรือปรับเปลี่ยนโมเดลดังกล่าวอาจไม่มีให้ใช้งานอีกต่อไปดังนั้นการรับประกันนี้จะใช้เฉพาะกับ SavedModel ที่ไม่ได้ปรับเปลี่ยน

เราจะพยายามรักษาความเข้ากันได้แบบย้อนกลับไว้ให้นานที่สุดเพื่อให้ไฟล์ซีเรียลสามารถใช้งานได้เป็นระยะเวลานาน

ความเข้ากันได้ของ GraphDef

กราฟถูกทำให้เป็นอนุกรมผ่านบัฟเฟอร์โปรโตคอล GraphDef เพื่ออำนวยความสะดวกในการเปลี่ยนแปลงกราฟย้อนกลับที่เข้ากันไม่ได้ GraphDef แต่ละ GraphDef มีหมายเลขเวอร์ชันแยกจากเวอร์ชัน TensorFlow ตัวอย่างเช่น GraphDef เวอร์ชัน 17 เลิกใช้งาน inv op เพื่อสนับสนุน reciprocal ความหมายคือ:

  • TensorFlow แต่ละเวอร์ชันรองรับช่วงเวลาของเวอร์ชัน GraphDef ช่วงเวลานี้จะคงที่ตลอดการเผยแพร่แพตช์และจะเพิ่มขึ้นในรุ่นย่อยเท่านั้น การสนับสนุนการลดลงสำหรับเวอร์ชัน GraphDef จะเกิดขึ้นกับ GraphDef รุ่นหลักเท่านั้น (และสอดคล้องกับการสนับสนุนเวอร์ชันที่รับประกันสำหรับ SavedModels เท่านั้น)

  • กราฟที่สร้างขึ้นใหม่จะถูกกำหนดหมายเลขเวอร์ชันล่าสุดของ GraphDef

  • หาก TensorFlow เวอร์ชันที่กำหนดรองรับ GraphDef เวอร์ชัน GraphDef กราฟจะโหลดและประเมินด้วยลักษณะการทำงานเดียวกันกับเวอร์ชัน TensorFlow ที่ใช้ในการสร้าง (ยกเว้นสำหรับรายละเอียดตัวเลขทศนิยมและตัวเลขสุ่มตามที่ระบุไว้ด้านบน) โดยไม่คำนึงถึงหลัก เวอร์ชันของ TensorFlow โดยเฉพาะอย่างยิ่ง GraphDef ซึ่งเข้ากันได้กับไฟล์จุดตรวจใน TensorFlow เวอร์ชันหนึ่ง (เช่นกรณีใน SavedModel) จะยังคงเข้ากันได้กับจุดตรวจนั้นในเวอร์ชันต่อ ๆ ไปตราบใดที่รองรับ GraphDef

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

  • ถ้า GraphDef บนของ GraphDef เพิ่มขึ้นเป็น X ในรีลีส (รอง) จะมีเวลาอย่างน้อยหกเดือนก่อนที่ขอบเขต ล่าง จะเพิ่มเป็น X ตัวอย่างเช่น (เราใช้หมายเลขเวอร์ชันสมมุติที่นี่):

    • TensorFlow 1.2 อาจรองรับ GraphDef เวอร์ชัน 4 ถึง 7
    • TensorFlow 1.3 สามารถเพิ่ม GraphDef เวอร์ชัน 8 และรองรับเวอร์ชัน 4 ถึง 8 ได้
    • อย่างน้อยหกเดือนต่อมา TensorFlow 2.0.0 สามารถยกเลิกการสนับสนุนสำหรับเวอร์ชัน 4 ถึง 7 โดยเหลือเวอร์ชัน 8 เท่านั้น

    โปรดทราบว่าเนื่องจาก TensorFlow เวอร์ชันหลักมักจะเผยแพร่ห่างกันมากกว่า 6 เดือนการรับประกันสำหรับ SavedModels ที่รองรับตามรายละเอียดข้างต้นจึงแข็งแกร่งกว่าการรับประกัน 6 เดือนสำหรับ GraphDefs

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

ความเข้ากันได้ของกราฟและจุดตรวจเมื่อขยาย TensorFlow

ส่วนนี้มีความเกี่ยวข้องเฉพาะเมื่อทำการเปลี่ยนแปลงที่เข้ากันไม่ได้กับรูปแบบ GraphDef เช่นเมื่อเพิ่ม ops ลบ ops หรือเปลี่ยนการทำงานของ ops ที่มีอยู่ ส่วนก่อนหน้าควรเพียงพอสำหรับผู้ใช้ส่วนใหญ่

ความเข้ากันได้ย้อนหลังและไปข้างหน้าบางส่วน

รูปแบบการกำหนดเวอร์ชันของเรามีข้อกำหนดสามประการ:

  • ความเข้ากันได้ย้อนหลัง เพื่อรองรับการโหลดกราฟและจุดตรวจที่สร้างขึ้นด้วย TensorFlow เวอร์ชันเก่า
  • ส่งต่อความเข้ากันได้ เพื่อสนับสนุนสถานการณ์ที่ผู้ผลิตกราฟหรือจุดตรวจได้รับการอัปเกรดเป็น TensorFlow เวอร์ชันใหม่กว่าก่อนผู้บริโภค
  • เปิดใช้งานการพัฒนา TensorFlow ด้วยวิธีที่เข้ากันไม่ได้ ตัวอย่างเช่นการลบ ops การเพิ่มแอตทริบิวต์และการลบแอตทริบิวต์

โปรดทราบว่าในขณะที่กลไกเวอร์ชัน GraphDef แยกจากเวอร์ชัน TensorFlow แต่การเปลี่ยนแปลงที่เข้ากันไม่ได้ย้อนหลังกับรูปแบบ GraphDef ยังคงถูก จำกัด โดยการกำหนดเวอร์ชันความหมาย ซึ่งหมายความว่าฟังก์ชันสามารถลบออกหรือเปลี่ยนแปลงได้ระหว่าง TensorFlow เวอร์ชัน MAJOR เท่านั้น (เช่น 1.7 ถึง 2.0 ) นอกจากนี้การทำงานร่วมกันไปข้างหน้าจะถูกบังคับใช้ภายใน Patch รุ่น ( 1.x.1 เพื่อ 1.x.2 ตัวอย่าง)

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

โครงร่างเวอร์ชันข้อมูลอิสระ

มีเวอร์ชันข้อมูลที่แตกต่างกันสำหรับกราฟและจุดตรวจ รูปแบบข้อมูลทั้งสองมีวิวัฒนาการในอัตราที่แตกต่างกันและในอัตราที่แตกต่างกันจาก TensorFlow ระบบกำหนดเวอร์ชันทั้งสองถูกกำหนดไว้ใน core/public/version.h เมื่อใดก็ตามที่มีการเพิ่มเวอร์ชันใหม่หมายเหตุจะถูกเพิ่มลงในส่วนหัวซึ่งมีรายละเอียดสิ่งที่เปลี่ยนแปลงและวันที่

ข้อมูลผู้ผลิตและผู้บริโภค

เราแยกความแตกต่างระหว่างข้อมูลเวอร์ชันข้อมูลต่อไปนี้:

  • ผู้ผลิต : ไบนารีที่สร้างข้อมูล ผู้ผลิตมีเวอร์ชัน ( producer ) และเวอร์ชันผู้บริโภคขั้นต่ำที่เข้ากันได้ ( min_consumer )
  • ผู้บริโภค : ไบนารีที่ใช้ข้อมูล ผู้บริโภคมีเวอร์ชัน ( consumer ) และเวอร์ชันผู้ผลิตขั้นต่ำที่เข้ากันได้ ( min_producer )

ข้อมูล VersionDef versions แต่ละส่วนมีฟิลด์ VersionDef versions ซึ่งบันทึก producer ที่สร้างข้อมูล min_consumer ที่เข้ากันได้และรายการเวอร์ชัน bad_consumers ที่ไม่ได้รับอนุญาต

ตามค่าเริ่มต้นเมื่อผู้ผลิตสร้างข้อมูลบางอย่างข้อมูลจะสืบทอดเวอร์ชันผู้ผลิตของ producer และเวอร์ชัน min_consumer bad_consumers สามารถตั้งค่าได้หากทราบว่าเวอร์ชันของผู้บริโภคที่ระบุมีข้อบกพร่องและต้องหลีกเลี่ยง ผู้บริโภคสามารถยอมรับข้อมูลบางส่วนได้หากข้อมูลต่อไปนี้เป็นจริงทั้งหมด:

  • consumer > = min_consumer ของข้อมูล
  • producer ข้อมูล> = min_producer ของผู้บริโภค
  • consumer ไม่ได้อยู่ในข้อมูลของ bad_consumers

เนื่องจากทั้งผู้ผลิตและผู้บริโภคมาจากฐานรหัส TensorFlow เดียวกัน core/public/version.h มีเวอร์ชันข้อมูลหลักซึ่งถือว่าเป็น producer หรือ consumer ขึ้นอยู่กับบริบทและทั้ง min_consumer และ min_producer (ต้องการโดยผู้ผลิตและผู้บริโภคตามลำดับ) . โดยเฉพาะ

  • สำหรับเวอร์ชัน GraphDef เรามี TF_GRAPH_DEF_VERSION , TF_GRAPH_DEF_VERSION_MIN_CONSUMER และ TF_GRAPH_DEF_VERSION_MIN_PRODUCER
  • สำหรับเวอร์ชันด่านเรามี TF_CHECKPOINT_VERSION , TF_CHECKPOINT_VERSION_MIN_CONSUMER และ TF_CHECKPOINT_VERSION_MIN_PRODUCER

เพิ่มแอตทริบิวต์ใหม่ที่มีค่าเริ่มต้นให้กับ op ที่มีอยู่

การปฏิบัติตามคำแนะนำด้านล่างจะช่วยให้คุณสามารถใช้งานร่วมกันได้เฉพาะในกรณีที่ชุดตัวดำเนินการไม่มีการเปลี่ยนแปลง:

  1. ถ้าเข้ากันได้ไปข้างหน้าเป็นที่ต้องการตั้ง strip_default_attrs ไป True ในขณะที่การส่งออกรูปแบบการใช้ทั้ง tf.saved_model.SavedModelBuilder.add_meta_graph_and_variables และ tf.saved_model.SavedModelBuilder.add_meta_graph วิธีการของ SavedModelBuilder ชั้นเรียนหรือ tf.estimator.Estimator.export_saved_model
  2. สิ่งนี้จะตัดแอตทริบิวต์มูลค่าเริ่มต้นในขณะที่ผลิต / ส่งออกโมเดล สิ่งนี้ทำให้แน่ใจว่า tf.MetaGraphDef ส่งออกไม่มี op-attribute ใหม่เมื่อใช้ค่าเริ่มต้น
  3. การมีการควบคุมนี้อาจทำให้ผู้บริโภคที่ล้าสมัย (ตัวอย่างเช่นการให้บริการไบนารีที่ล้าหลังไบนารีการฝึกอบรม) โหลดโมเดลต่อไปและป้องกันการหยุดชะงักในการให้บริการโมเดล

การพัฒนาเวอร์ชัน GraphDef

ส่วนนี้อธิบายถึงวิธีการใช้กลไกการกำหนดเวอร์ชันนี้เพื่อทำการเปลี่ยนแปลงรูปแบบ GraphDef ต่างๆ

เพิ่ม op

เพิ่ม op ใหม่ให้กับทั้งผู้บริโภคและผู้ผลิตในเวลาเดียวกันและอย่าเปลี่ยนเวอร์ชัน GraphDef ใด ๆ การเปลี่ยนแปลงประเภทนี้เข้ากันได้แบบย้อนหลังโดยอัตโนมัติและไม่ส่งผลกระทบต่อแผนความเข้ากันได้ไปข้างหน้าเนื่องจากสคริปต์ผู้ผลิตที่มีอยู่จะไม่ใช้ฟังก์ชันใหม่ในทันที

เพิ่ม op และสลับ Python wrapper ที่มีอยู่เพื่อใช้งาน

  1. ใช้ฟังก์ชันการทำงานของผู้บริโภคใหม่และเพิ่มเวอร์ชัน GraphDef
  2. หากเป็นไปได้ที่จะทำให้ Wrapper ใช้ฟังก์ชันใหม่เฉพาะในกรณีที่ใช้งานไม่ได้มาก่อนสามารถอัปเดต Wrapper ได้ทันที
  3. เปลี่ยน Python wrapper เพื่อใช้ฟังก์ชันใหม่ อย่าเพิ่ม min_consumer เนื่องจากรุ่นที่ไม่ใช้ op นี้ไม่ควรพัง

ลบหรือ จำกัด การทำงานของ op

  1. แก้ไขสคริปต์ผู้ผลิตทั้งหมด (ไม่ใช่ TensorFlow เอง) เพื่อไม่ใช้ op หรือฟังก์ชันที่ถูกห้าม
  2. เพิ่มเวอร์ชัน GraphDef และใช้ฟังก์ชันการทำงานของผู้บริโภคใหม่ที่ห้ามการดำเนินการหรือฟังก์ชันที่ถูกลบออกสำหรับ GraphDefs ในเวอร์ชันใหม่ขึ้นไป ถ้าเป็นไปได้ให้ TensorFlow หยุดผลิต GraphDefs ด้วยฟังก์ชันที่ถูกห้าม ในการทำเช่นนั้นให้เพิ่ม REGISTER_OP(...).Deprecated(deprecated_at_version, message)
  3. รอการเปิดตัวครั้งใหญ่เพื่อวัตถุประสงค์ด้านความเข้ากันได้แบบย้อนหลัง
  4. เพิ่ม min_producer เป็นเวอร์ชัน GraphDef จาก (2) และลบฟังก์ชันทั้งหมด

เปลี่ยนการทำงานของ op

  1. เพิ่ม op ใหม่ที่คล้ายกันชื่อ SomethingV2 หรือคล้ายกันและทำตามขั้นตอนการเพิ่มและเปลี่ยนเครื่องห่อ Python ที่มีอยู่เพื่อใช้งาน เพื่อให้แน่ใจว่าสามารถใช้งานร่วมกันได้ให้ใช้การตรวจสอบที่แนะนำใน compat.py เมื่อเปลี่ยนเครื่องห่อ Python
  2. ลบ op เก่า (สามารถเกิดขึ้นได้เฉพาะกับการเปลี่ยนแปลงเวอร์ชันหลักเนื่องจากความเข้ากันได้แบบย้อนหลัง)
  3. เพิ่ม min_consumer เพื่อ min_consumer ผู้บริโภคด้วย op เก่าเพิ่ม op เก่ากลับเป็นนามแฝงสำหรับ SomethingV2 และทำตามขั้นตอนเพื่อเปลี่ยนเครื่องห่อ Python ที่มีอยู่เพื่อใช้งาน
  4. ทำตามขั้นตอนเพื่อลบ SomethingV2

แบนผู้บริโภคเวอร์ชันเดียวที่ไม่ปลอดภัย

  1. Bump เวอร์ชัน GraphDef และเพิ่มเวอร์ชันเสียให้กับ bad_consumers สำหรับ GraphDefs ใหม่ทั้งหมด ถ้าเป็นไปได้ให้เพิ่ม bad_consumers สำหรับ GraphDefs ที่มี op หรือคล้ายกัน
  2. หากผู้บริโภคปัจจุบันมีเวอร์ชันที่ไม่ถูกต้องโปรดผลักดันออกโดยเร็วที่สุด