التوافق مع إصدار TensorFlow

تنظيم صفحاتك في مجموعات يمكنك حفظ المحتوى وتصنيفه حسب إعداداتك المفضّلة.

هذا المستند مخصص للمستخدمين الذين يحتاجون إلى التوافق مع الإصدارات السابقة عبر إصدارات مختلفة من TensorFlow (إما للكود أو البيانات) ، وللمطورين الذين يرغبون في تعديل TensorFlow مع الحفاظ على التوافق.

الإصدار الدلالي 2.0

TensorFlow يلي الدلالية الإصدار 2.0 ( semver ) لAPI العلني. كل نسخة إصدار TensorFlow لديه شكل MAJOR.MINOR.PATCH . على سبيل المثال، TensorFlow النسخة 1.2.3 ديه MAJOR النسخة 1، MINOR الإصدار 2، و PATCH الإصدار 3. التغييرات في كل عدد لديهم وهذا يعني ما يلي:

  • الرئيسية: يحتمل أن تكون التغييرات غير المتوافقة إلى الوراء. لن تعمل التعليمات البرمجية والبيانات التي عملت مع إصدار رئيسي سابق بالضرورة مع الإصدار الجديد. ومع ذلك ، في بعض الحالات ، قد تكون الرسوم البيانية ونقاط الفحص TensorFlow الحالية قابلة للترحيل إلى الإصدار الأحدث ؛ رؤية التوافق من الرسوم البيانية ونقاط التفتيش للاطلاع على تفاصيل التوافق البيانات.

  • MINOR: ميزات الوراء متوافقة، تحسينات في السرعة، الخ المدونة والبيانات التي عملت مع بيان قاصر السابق والذي يعتمد فقط على API العام غير التجريبية سوف نواصل العمل دون تغيير. للحصول على تفاصيل حول ما هو مقبول وما هو ليس API العام، نرى ما هو مغطى .

  • PATCH: إلى الوراء متوافقة الاصلاحات.

على سبيل المثال، وإطلاق سراح 1.0.0 أدخلت تغييرات غير المتوافقة إلى الوراء من الإفراج 0.12.1. ومع ذلك، كان إطلاق 1.1.1 معكوس متوافق مع الافراج 1.0.0.

ما هو مغطى

لا تتوافق سوى واجهات برمجة التطبيقات العامة لـ TensorFlow مع الإصدارات السابقة عبر الإصدارات الثانوية والإصدارات التصحيحية. تتكون واجهات برمجة التطبيقات العامة من

  • جميع موثقة بيثون الوظائف والفئات في tensorflow حدة والوحدات الفرعية لها، باستثناء

    • رموز خاصة: أي وظيفة، والطبقة، وما إلى ذلك، التي تبدأ مع اسم _
    • التجريبية و tf.contrib حرف، انظر أدناه للحصول على التفاصيل.

    علما بأن التعليمات البرمجية في examples/ و tools/ الدلائل غير قابلة للوصول من خلال tensorflow حدة بيثون، وبالتالي لا يغطيه الضمان التوافق.

    إذا كان الرمز هو متاح من خلال tensorflow حدة بيثون أو الوحدات الفرعية، ولكن لم يتم توثيقها، فلا تعتبر جزءا من API العام.

  • وAPI التوافق (في بيثون، و tf.compat وحدة). في الإصدارات الرئيسية ، قد نصدر أدوات مساعدة ونقاط نهاية إضافية لمساعدة المستخدمين في الانتقال إلى إصدار رئيسي جديد. رموز واجهة برمجة التطبيقات هذه مهملة وغير مدعومة (على سبيل المثال ، لن نضيف أي ميزات ، ولن نصلح الأخطاء بخلاف إصلاح الثغرات الأمنية) ، لكنها تندرج ضمن ضمانات التوافق الخاصة بنا.

  • و C API .

  • ملفات المخزن المؤقت للبروتوكول التالية:

ما الذي لا تغطيه

يمكن أن تتغير بعض أجزاء TensorFlow بطرق غير متوافقة مع الإصدارات السابقة في أي وقت. وتشمل هذه:

  • واجهات برمجة التطبيقات التجريبية: تسهيل التنمية، ونحن إعفاء بعض الرموز API بشكل واضح كما التجريبية من الضمانات التوافق. على وجه الخصوص ، لا تغطي أي ضمانات توافق ما يلي:

    • أي رمز في tf.contrib الوحدة أو الوحدات الفرعية بها؛
    • أي رمز (وحدة، وظيفة، حجة، والملكية، والطبقة، أو ثابت) الذي يحتوي على اسم experimental أو Experimental . أو
    • أي رمز يتضمن اسمه المؤهل بالكامل وحدة أو فئة والتي هي نفسها تجريبية. ويشمل ذلك المجالات وsubmessages أي عازلة بروتوكول يسمى experimental .
  • لغات أخرى: واجهات برمجة التطبيقات TensorFlow في لغات أخرى غير بيثون وC، مثل:

  • تفاصيل التقاط المركبة: العديد من الوظائف العامة في بيثون توسيع إلى عدة التقاط البدائية في الرسم البياني، وهذه التفاصيل ستكون جزءا من أي رسوم بيانية المحفوظة على القرص كما GraphDef الصورة. قد تتغير هذه التفاصيل للإصدارات الطفيفة. على وجه الخصوص ، من المرجح أن تتخطى اختبارات الانحدار التي تتحقق من المطابقة الدقيقة بين الرسوم البيانية إصدارات ثانوية ، على الرغم من أن سلوك الرسم البياني يجب أن يظل دون تغيير وأن نقاط التحقق الحالية ستظل تعمل.

  • النقطة العائمة تفاصيل العددية: وتحديدا القيم النقطة العائمة محسوبة من قبل مكتب خدمات المشاريع قد تتغير في أي وقت. يجب على المستخدمين الاعتماد فقط على الدقة التقريبية والاستقرار العددي ، وليس على وحدات البت المحددة المحسوبة. يجب أن تؤدي التغييرات التي يتم إجراؤها على الصيغ العددية في الإصدارات الثانوية والتصحيحات إلى دقة قابلة للمقارنة أو محسّنة ، مع التحذير من أن تحسين دقة الصيغ المحددة في التعلم الآلي قد يؤدي إلى انخفاض الدقة في النظام ككل.

  • أرقام عشوائية: الأرقام العشوائية محددة حسابها قد تتغير في أي وقت. يجب أن يعتمد المستخدمون فقط على التوزيعات الصحيحة تقريبًا والقوة الإحصائية ، وليس البتات المحددة المحسوبة. اطلع على رقم عشوائي الجيل دليل للحصول على التفاصيل.

  • تحرف الإصدار في توزيع Tensorflow: تشغيل إصدارين مختلفين من TensorFlow في كتلة واحدة غير معتمد. لا توجد ضمانات حول التوافق مع الإصدارات السابقة لبروتوكول الأسلاك.

  • البق: نحن نحتفظ بالحق في إجراء السلوك يتنافى الوراء (ولكن ليس API) يتغير إذا ما تم كسر التنفيذ الحالي بشكل واضح، وهذا هو، إذا كان يتعارض مع وثائق أو إذا كان معروفة ولم يتم تنفيذ واضحة المعالم السلوك المقصود بشكل صحيح بسبب لخلل. على سبيل المثال ، إذا ادعى مُحسِّن تنفيذ خوارزمية تحسين معروفة جيدًا ولكنه لا يتطابق مع تلك الخوارزمية بسبب خطأ ، فسنصلح المحسن. قد يؤدي إصلاحنا إلى كسر الشفرة بالاعتماد على السلوك الخاطئ للتقارب. سوف نلاحظ هذه التغييرات في ملاحظات الإصدار.

  • API غير المستخدمة: نحن نحتفظ بالحق في إجراء تغييرات غير متوافقة إلى الوراء إلى واجهات برمجة التطبيقات التي لا نجد استخدامات الموثقة (عن طريق إجراء مراجعة استخدام TensorFlow من خلال البحث جيثب). قبل اتخاذ أي من هذه التغييرات، سنعلن عزمنا على إجراء التغيير على القائمة البريدية أعلن @ ، وتوفير إرشادات حول كيفية معالجة أي كسور (إن وجدت)، والانتظار لمدة أسبوعين لإعطاء مجتمعنا فرصة لتبادل ملاحظاتهم .

  • السلوك الخطأ: نحن قد يحل محل أخطاء مع السلوك غير خطأ. على سبيل المثال ، قد نقوم بتغيير دالة لحساب نتيجة بدلاً من رفع خطأ ، حتى لو تم توثيق هذا الخطأ. نحتفظ أيضًا بالحق في تغيير نص رسائل الخطأ. بالإضافة إلى ذلك ، قد يتغير نوع الخطأ ما لم يتم تحديد نوع الاستثناء لحالة خطأ معينة في الوثائق.

توافق SavedModels والرسوم البيانية ونقاط التفتيش

SavedModel هو تنسيق التسلسل المفضل للاستخدام في برامج TensorFlow. SavedModels يحتوي على قسمين: واحد أو أكثر من الرسوم البيانية المشفرة كما GraphDefs ونقطة تفتيش. تصف الرسوم البيانية تدفق البيانات للعمليات التي سيتم تشغيلها ، وتحتوي نقاط التحقق على قيم الموتر المحفوظة للمتغيرات في الرسم البياني.

يقوم العديد من مستخدمي TensorFlow بإنشاء SavedModels ، وتحميلها وتنفيذها بإصدار لاحق من TensorFlow. وامتثالا semver ، SavedModels مكتوبة مع إصدار واحد من TensorFlow يمكن تحميلها وتقييمها مع إصدار أحدث من TensorFlow مع نفس الإصدار الرئيسي.

نحن تقديم ضمانات إضافية لSavedModels معتمد. نسميه SavedModel التي تم إنشاؤها باستخدام فقط غير مستنكر، غير التجريبية، واجهات برمجة التطبيقات غير التوافق في TensorFlow إصدار رئيسي N على SavedModel معتمدة في نسخة N . أي SavedModel معتمدة في TensorFlow إصدار رئيسي N يمكن تحميل وأعدم مع TensorFlow إصدار رئيسي N+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 الشكل، مثل عند إضافة التقاط، وإزالة مكتب خدمات المشاريع، أو تغيير وظائف مكتب خدمات المشاريع القائمة. يجب أن يكون القسم السابق كافيًا لمعظم المستخدمين.

التوافق مع الإصدارات السابقة والجزئية

يحتوي مخطط الإصدار لدينا على ثلاثة متطلبات:

  • التوافق على الرسوم البيانية تحميل الدعم ونقاط التفتيش خلق مع الإصدارات القديمة من TensorFlow.
  • التوافق إلى الأمام لسيناريوهات الدعم حيث يتم ترقية منتج رسم بياني أو نقطة تفتيش إلى إصدار أحدث من TensorFlow قبل المستهلك.
  • تفعيل TensorFlow المتطور بطرق غير متوافقة. على سبيل المثال ، إزالة العمليات وإضافة السمات وإزالة السمات.

ملاحظة أنه في حين أن GraphDef نسخة آلية منفصلة عن النسخة TensorFlow، والتغيرات غير متوافقة إلى الوراء إلى GraphDef شكل لا تزال مقيدة الدلالية الإصدار. هذه الوظيفة وسيلة لا يمكن إزالتها أو تغييرها بين MAJOR إصدارات TensorFlow (مثل 1.7 إلى 2.0 ). بالإضافة إلى ذلك، يتم فرض التوافق إلى الأمام ضمن إصدارات تصحيح ( 1.x.1 إلى 1.x.2 على سبيل المثال).

لتحقيق التوافق مع الإصدارات السابقة والأمامية ومعرفة وقت فرض التغييرات في التنسيقات ، تحتوي الرسوم البيانية ونقاط التحقق على بيانات وصفية تصف وقت إنتاجها. الأقسام التالية بالتفصيل تنفيذ TensorFlow والمبادئ التوجيهية لتتطور GraphDef الإصدارات.

مخططات إصدار البيانات المستقلة

توجد إصدارات مختلفة من البيانات للرسوم البيانية ونقاط التفتيش. يتطور تنسيقي البيانات بمعدلات مختلفة عن بعضهما البعض وأيضًا بمعدلات مختلفة من TensorFlow. يتم تعريف كل أنظمة الإصدارات في core/public/version.h . عند إضافة إصدار جديد ، تتم إضافة ملاحظة إلى العنوان توضح بالتفصيل ما تم تغييره والتاريخ.

البيانات والمنتجين والمستهلكين

نحن نميز بين الأنواع التالية من معلومات إصدار البيانات:

  • المنتجين: الثنائيات التي تنتج البيانات. المنتجين لديهم نسخة ( producer ) والحد الأدنى نسخة المستهلك من أنها متوافقة مع ( min_consumer ).
  • المستهلكون: الثنائيات التي تستهلك البيانات. المستهلكين لديهم نسخة ( consumer ) ونسخة الحد الأدنى منتج من أنها متوافقة مع ( min_producer ).

كل قطعة من البيانات إصداراتها لديه 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 .

أضف سمة جديدة افتراضيًا إلى مرجع موجود

يمنحك اتباع الإرشادات أدناه التوافق مع التوجيه فقط إذا لم تتغير مجموعة العمليات:

  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 الشكل.

أضف المرجع

إضافة المرجع الجديد لكل من المستهلكين والمنتجين في نفس الوقت، وعدم تغيير أي GraphDef الإصدارات. هذا النوع من التغيير متوافق تلقائيًا مع الإصدارات السابقة ، ولا يؤثر على خطة التوافق المتقدمة نظرًا لأن البرامج النصية الحالية للمنتجين لن تستخدم الوظيفة الجديدة فجأة.

أضف مرجعًا وقم بتبديل أغلفة Python الحالية لاستخدامها

  1. تنفيذ وظائف جديدة للمستهلكين وزيادة في GraphDef الإصدار.
  2. إذا كان من الممكن جعل الأغلفة تستخدم الوظيفة الجديدة فقط في الحالات التي لم تنجح من قبل ، فيمكن تحديث الأغلفة الآن.
  3. قم بتغيير أغلفة Python لاستخدام الوظيفة الجديدة. لا زيادة min_consumer ، منذ النماذج التي لا تستخدم هذا المرجع لا ينبغي أن كسر.

إزالة أو تقييد وظيفة المرجع

  1. أصلح جميع نصوص المنتج (وليس TensorFlow نفسه) لعدم استخدام المرجع أو الوظيفة المحظورة.
  2. زيادة على GraphDef إصدار وتنفيذ وظائف الاستهلاكية الجديدة التي حظر المرجع إزالتها أو وظيفة لGraphDefs في النسخة الجديدة وما فوق. إذا كان ذلك ممكنا، وجعل TensorFlow إنتاج المحطة GraphDefs مع وظيفة المحظورة. للقيام بذلك، إضافة REGISTER_OP(...).Deprecated(deprecated_at_version, message) .
  3. انتظر إصدارًا رئيسيًا لأغراض التوافق مع الإصدارات السابقة.
  4. زيادة min_producer إلى إصدار GraphDef من (2)، وإزالة وظيفة تماما.

تغيير وظائف المرجع

  1. إضافة المرجع مماثل جديد اسمه SomethingV2 أو ما شابه ذلك وتذهب من خلال عملية واضاف انه والتبديل مغلفة بيثون القائمة لاستخدامها. لضمان الاستخدام التوافق إلى الأمام الشيكات المقترحة في compat.py عند تغيير مغلفة بيثون.
  2. قم بإزالة المرجع القديم (يمكن أن يحدث فقط مع تغيير إصدار رئيسي بسبب التوافق مع الإصدارات السابقة).
  3. زيادة min_consumer استبعاد المستهلكين مع المرجع القديم، إضافة إلى الوراء المرجع القديم كاسم مستعار ل SomethingV2 ، وتذهب من خلال عملية للتبديل مغلفة بيثون القائمة لاستخدامها.
  4. تذهب من خلال عملية لإزالة SomethingV2 .

حظر إصدار مستهلك واحد غير آمن

  1. عثرة في GraphDef نسخة وإضافة نسخة سيئة ل bad_consumers لجميع GraphDefs جديدة. إذا كان ذلك ممكنا، إضافة إلى bad_consumers فقط لGraphDefs التي تحتوي على مرجع معين أو ما شابه ذلك.
  2. إذا كان لدى المستهلكين الحاليين النسخة السيئة ، فادفعهم في أسرع وقت ممكن.