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

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

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

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

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

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

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

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

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

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

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

    • สัญลักษณ์ส่วนตัว: ฟังก์ชั่นใด ๆ ในชั้นเรียนและอื่น ๆ ที่มีชื่อขึ้นต้นด้วย _
    • ทดลองและ tf.contrib สัญลักษณ์ให้ดู ด้านล่าง เพื่อดูรายละเอียด

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

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

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

  • C API

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

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

บางส่วนของ TensorFlow สามารถเปลี่ยนแปลงในลักษณะที่เข้ากันไม่ได้แบบย้อนหลังได้ทุกเมื่อ ซึ่งรวมถึง:

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

    • สัญลักษณ์ใด ๆ ใน tf.contrib โมดูลหรือ submodules ของตน
    • สัญลักษณ์ใด ๆ (โมดูลฟังก์ชั่นการโต้แย้งทรัพย์สินชั้นเรียนหรือคงที่) ที่มีชื่อประกอบด้วย experimental หรือ Experimental ; หรือ
    • สัญลักษณ์ใด ๆ ที่มีชื่อเต็มรวมถึงโมดูลหรือคลาสที่เป็นแบบทดลอง ซึ่งรวมถึงเขต submessages ของบัฟเฟอร์โปรโตคอลที่เรียกว่า experimental
  • ภาษาอื่น ๆ : APIs TensorFlow ในภาษาอื่น ๆ กว่างูหลามและ C เช่น:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  • กราฟที่สร้างขึ้นใหม่ที่ได้รับมอบหมายล่าสุด GraphDef หมายเลขรุ่น

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

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

  • หาก 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 ลบปฏิบัติการหรือการเปลี่ยนแปลงการทำงานของปฏิบัติการที่มีอยู่ ส่วนก่อนหน้านี้น่าจะเพียงพอสำหรับผู้ใช้ส่วนใหญ่

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

โครงร่างการกำหนดเวอร์ชันของเรามีข้อกำหนดสามประการ:

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

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

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

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

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

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

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

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

ชิ้นส่วนของข้อมูล versioned แต่ละคนมี 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 ไม่ได้มีใหม่สหกรณ์แอตทริบิวต์เมื่อค่าเริ่มต้นที่มีการใช้
  3. การมีการควบคุมนี้อาจอนุญาตให้ผู้บริโภคที่ล้าสมัย (เช่น ให้บริการไบนารีที่ล้าหลังไบนารีการฝึกอบรม) ให้โหลดแบบจำลองต่อไปและป้องกันการหยุดชะงักในการแสดงแบบจำลอง

การพัฒนา GraphDef เวอร์ชันต่างๆ

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

เพิ่ม op

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

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

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

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

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

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

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

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

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