هذا المستند مخصص للمستخدمين الذين يحتاجون إلى التوافق مع الإصدارات السابقة عبر إصدارات مختلفة من TensorFlow (إما للتعليمات البرمجية أو البيانات)، وللمطورين الذين يرغبون في تعديل TensorFlow مع الحفاظ على التوافق.
الإصدار الدلالي 2.0
يتبع TensorFlow الإصدار Semantic Versioning 2.0 ( semver ) لواجهة برمجة التطبيقات العامة الخاصة به. كل إصدار من TensorFlow له النموذج MAJOR.MINOR.PATCH
. على سبيل المثال، يحتوي الإصدار 1.2.3 من TensorFlow على الإصدار MAJOR
1، والإصدار MINOR
2، والإصدار 3 PATCH
. تحمل التغييرات في كل رقم المعنى التالي:
رئيسي : من المحتمل أن يكون هناك تغييرات غير متوافقة مع الإصدارات السابقة. التعليمات البرمجية والبيانات التي عملت مع إصدار رئيسي سابق لن تعمل بالضرورة مع الإصدار الجديد. ومع ذلك، في بعض الحالات، قد تكون الرسوم البيانية ونقاط التفتيش الموجودة في TensorFlow قابلة للترحيل إلى الإصدار الأحدث؛ راجع توافق الرسوم البيانية ونقاط التفتيش للحصول على تفاصيل حول توافق البيانات.
MINOR : الميزات المتوافقة مع الإصدارات السابقة، وتحسينات السرعة، وما إلى ذلك. التعليمات البرمجية والبيانات التي عملت مع إصدار ثانوي سابق والتي تعتمد فقط على واجهة برمجة التطبيقات العامة غير التجريبية ستستمر في العمل دون تغيير. للحصول على تفاصيل حول ما هو API العام وما هو ليس كذلك، راجع ما الذي يتم تغطيته .
التصحيح : إصلاحات الأخطاء المتوافقة مع الإصدارات السابقة.
على سبيل المثال، قدم الإصدار 1.0.0 تغييرات عكسية غير متوافقة من الإصدار 0.12.1. ومع ذلك، كان الإصدار 1.1.1 متوافقًا مع الإصدار 1.0.0.
ما هو مغطى
واجهات برمجة التطبيقات العامة لـ TensorFlow فقط هي المتوافقة مع الإصدارات السابقة عبر الإصدارات الثانوية والتصحيحية. تتكون واجهات برمجة التطبيقات العامة من
جميع وظائف وفئات بايثون الموثقة في وحدة
tensorflow
ووحداتها الفرعية، باستثناء- الرموز الخاصة: أي دالة أو فئة أو ما إلى ذلك، يبدأ اسمها بـ
_
- الرموز التجريبية و
tf.contrib
، انظر أدناه للحصول على التفاصيل.
لاحظ أن التعليمات البرمجية الموجودة في
examples/
tools/
الدلائل لا يمكن الوصول إليها من خلال وحدةtensorflow
Python، وبالتالي لا يغطيها ضمان التوافق.إذا كان الرمز متاحًا من خلال وحدة
tensorflow
Python أو وحداتها الفرعية، ولكن لم يتم توثيقه، فإنه لا يعتبر جزءًا من واجهة برمجة التطبيقات العامة.- الرموز الخاصة: أي دالة أو فئة أو ما إلى ذلك، يبدأ اسمها بـ
واجهة برمجة تطبيقات التوافق (في Python، الوحدة النمطية
tf.compat
). في الإصدارات الرئيسية، قد نقوم بإصدار أدوات مساعدة ونقاط نهاية إضافية لمساعدة المستخدمين في الانتقال إلى إصدار رئيسي جديد. تم إهمال رموز واجهة برمجة التطبيقات (API) هذه وغير مدعومة (على سبيل المثال، لن نضيف أي ميزات، ولن نقوم بإصلاح الأخطاء بخلاف إصلاح نقاط الضعف)، ولكنها تقع ضمن ضمانات التوافق لدينا.واجهة برمجة تطبيقات TensorFlow C:
ملفات المخزن المؤقت للبروتوكول التالية:
رقم إصدار منفصل لـ TensorFlow Lite
يتم حاليًا توزيع TensorFlow Lite كجزء من TensorFlow. ومع ذلك، فإننا نحتفظ بالحق في إجراء تغييرات في الإصدارات المستقبلية على واجهات برمجة تطبيقات TensorFlow Lite وفقًا لجدول زمني مختلف عن واجهات برمجة تطبيقات TensorFlow الأخرى، أو حتى نقل TensorFlow Lite إلى توزيع مصدر منفصل و/أو مستودع مصدر منفصل عن TensorFlow.
ولهذا السبب، نستخدم رقم إصدار مختلف لـ TensorFlow Lite ( TFLITE_VERSION_STRING
في tensorflow/lite/version.h
و TfLiteVersion()
في tensorflow/lite/c/c_api.h
) عن TensorFlow ( TF_VERSION_STRING
في tensorflow/core/public/version.h
و TF_Version()
في tensorflow/c/c_api.h
). في الوقت الحالي، يكون لرقمي الإصدارين نفس القيمة. لكن في المستقبل، قد يتباعدان؛ على سبيل المثال، قد نقوم بزيادة رقم الإصدار الرئيسي لـ TensorFlow Lite دون زيادة رقم الإصدار الرئيسي لـ TensorFlow، أو العكس.
يتكون سطح واجهة برمجة التطبيقات (API) الذي يغطيه رقم إصدار TensorFlow Lite من واجهات برمجة التطبيقات العامة التالية:
واجهة برمجة تطبيقات TensorFlow Lite C:
واجهة برمجة تطبيقات TensorFlow Lite Android (Java/Kotlin):
- في
org.tensorflow.lite
: - في
org.tensorflow.lite.gpu
:
- في
واجهات برمجة التطبيقات TensorFlow Lite Objective-C:
- Tensorflow/لايت/objc/apis/
- TFLCoreMLDelegate.h
- TFLDelegate.h
- TFLInterpreter.h
- TFLInterpreterOptions.h
- TFLMetalDelegate.h
- TFLQuantizationParameters.h
- TFLSignatureRunner.h
- TFLtensorFlowLite.h
- TFLtensor.h
- Tensorflow/لايت/objc/apis/
واجهات برمجة التطبيقات TensorFlow Lite Swift:
- Tensorflow/lite/swift/Sources/ .
- CoreMLDelegate.swift
- مندوب. سويفت
- InterpreterError.swift
- مترجم. سويفت
- MetalDelegate.swift
- نموذج. سويفت
- QuantizationParameters.swift
- SignatureRunnerError.swift
- SignatureRunner.swift
- TensorFlowLite.swift
- Tensor.swift
- Tensorflow/lite/swift/Sources/ .
لا يتم تغطية الرموز التجريبية؛ انظر أدناه للحصول على التفاصيل.
رقم إصدار منفصل لواجهات برمجة التطبيقات TensorFlow Lite Extension
يوفر TensorFlow Lite واجهات برمجة تطبيقات C لتوسيع مترجم TensorFlow Lite مع "عمليات مخصصة"، والتي توفر عمليات محددة من قبل المستخدم في الرسم البياني، أو "المفوضين"، والتي تسمح بتفويض حساب الرسم البياني (أو لمجموعة فرعية من الرسم البياني) إلى خلفية مخصصة. تتطلب واجهات برمجة التطبيقات هذه، والتي نطلق عليها بشكل جماعي "واجهات برمجة تطبيقات ملحق TensorFlow Lite"، تبعيات أكثر حميمية على بعض تفاصيل تنفيذ TensorFlow Lite.
نحن نحتفظ بالحق في إجراء تغييرات في الإصدارات المستقبلية على واجهات برمجة التطبيقات هذه، بما في ذلك التغييرات غير المتوافقة مع الإصدارات السابقة، وفقًا لجدول زمني مختلف عن واجهات برمجة تطبيقات TensorFlow Lite الأخرى. لذلك نستخدم رقم إصدار مختلفًا لواجهات برمجة تطبيقات TensorFlow Lite Extension عن أرقام إصدار TensorFlow Lite أو TensorFlow (التي تم وصفها في القسم السابق). نحن نقدم بعض واجهات برمجة التطبيقات الجديدة في TensorFlow Lite الإصدار 2.15 للحصول على إصدار TensorFlow Lite Extension APIs ( TFLITE_EXTENSION_APIS_VERSION_STRING
في tensorflow/lite/version.h
و TfLiteExtensionApisVersion() في tensorflow/lite/c/c_api.h
). رقم إصدار TensorFlow Lite Extension APIs هو حاليًا نفس رقم إصدار TensorFlow وTensorFlow Lite. لكن في المستقبل، قد يتباعدان؛ على سبيل المثال، قد نقوم بزيادة رقم الإصدار الرئيسي لـ TensorFlow Lite Extension APIs دون زيادة رقم الإصدار الرئيسي لـ TensorFlow Lite، أو العكس.
يتكون سطح واجهة برمجة التطبيقات (API) الذي يغطيه رقم إصدار TensorFlow Lite Extension APIs من واجهات برمجة التطبيقات العامة التالية:
- Tensorflow/lite/c/c_api_opaque.h
- Tensorflow/lite/c/common.h
- Tensorflow/lite/c/builtin_op_data.h
- Tensorflow/lite/builtin_ops.h
مرة أخرى، لا يتم تغطية الرموز التجريبية؛ انظر أدناه للحصول على التفاصيل.
ما لم يتم تغطيته
يمكن أن تتغير بعض أجزاء TensorFlow بطرق غير متوافقة مع الإصدارات السابقة في أي وقت. وتشمل هذه:
واجهات برمجة التطبيقات التجريبية : لتسهيل التطوير، قمنا بإعفاء بعض رموز واجهة برمجة التطبيقات المميزة بوضوح على أنها تجريبية من ضمانات التوافق. وعلى وجه الخصوص، لا تشمل أي ضمانات للتوافق ما يلي:
- أي رمز في وحدة
tf.contrib
أو وحداتها الفرعية؛ - أي رمز (وحدة، وظيفة، وسيطة، خاصية، فئة، ثابت، نوع، حزمة، وما إلى ذلك) يحتوي اسمه على
experimental
أوExperimental
؛ أو - أي رمز يتضمن اسمه المؤهل بالكامل وحدة أو فئة أو حزمة تكون في حد ذاتها تجريبية. يتضمن ذلك الحقول والرسائل الفرعية لأي مخزن مؤقت للبروتوكول يسمى
experimental
.
- أي رمز في وحدة
لغات أخرى : واجهات برمجة تطبيقات TensorFlow بلغات أخرى غير Python وC، مثل:
- C++ (مكشوف من خلال ملفات الرأس في
tensorflow/cc/
). - جافا ،
- يذهب
- جافا سكريبت
وواجهات برمجة تطبيقات TensorFlow Lite بلغات أخرى غير Java/Kotlin وC وObjective-C وSwift، على وجه الخصوص.
- C++ (مكشوف من خلال ملفات الرأس في
tensorflow/lite/
)
- C++ (مكشوف من خلال ملفات الرأس في
تفاصيل العمليات المركبة: تتوسع العديد من الوظائف العامة في بايثون لتشمل عدة عمليات بدائية في الرسم البياني، وستكون هذه التفاصيل جزءًا من أي رسوم بيانية محفوظة على القرص باسم
GraphDef
s. قد تتغير هذه التفاصيل بالنسبة للإصدارات الثانوية. على وجه الخصوص، من المرجح أن تتقاطع اختبارات الانحدار التي تتحقق من المطابقة الدقيقة بين الرسوم البيانية عبر الإصدارات الثانوية، على الرغم من أن سلوك الرسم البياني يجب أن يظل دون تغيير وأن نقاط التفتيش الحالية ستظل تعمل.التفاصيل الرقمية للفاصلة العائمة: قد تتغير قيم النقطة العائمة المحددة المحسوبة بواسطة العمليات في أي وقت. يجب أن يعتمد المستخدمون فقط على الدقة التقريبية والثبات العددي، وليس على البتات المحددة المحسوبة. يجب أن تؤدي التغييرات في الصيغ الرقمية في الإصدارات الصغيرة والإصدارات التصحيحية إلى دقة قابلة للمقارنة أو محسنة، مع التحذير من أن الدقة المحسنة لصيغ معينة في التعلم الآلي قد تؤدي إلى انخفاض الدقة للنظام ككل.
الأرقام العشوائية: قد تتغير الأرقام العشوائية المحددة المحسوبة في أي وقت. يجب أن يعتمد المستخدمون فقط على التوزيعات الصحيحة تقريبًا والقوة الإحصائية، وليس على البتات المحددة المحسوبة. راجع دليل إنشاء الأرقام العشوائية للحصول على التفاصيل.
انحراف الإصدار في Tensorflow الموزع: تشغيل إصدارين مختلفين من TensorFlow في مجموعة واحدة غير مدعوم. لا توجد ضمانات بشأن التوافق العكسي لبروتوكول السلك.
الأخطاء: نحتفظ بالحق في إجراء تغييرات على السلوك غير المتوافق مع الإصدارات السابقة (على الرغم من عدم توافق واجهة برمجة التطبيقات) إذا كان التنفيذ الحالي معطلاً بشكل واضح، أي إذا كان يتعارض مع الوثائق أو إذا لم يتم تنفيذ السلوك المقصود المعروف والمحدد جيدًا بشكل صحيح بسبب إلى خلل. على سبيل المثال، إذا ادعى أحد المُحسِّن أنه ينفذ خوارزمية تحسين معروفة ولكنه لا يطابق تلك الخوارزمية بسبب خطأ ما، فسنقوم بإصلاح المُحسِّن. قد يؤدي إصلاحنا إلى كسر التعليمات البرمجية بالاعتماد على السلوك الخاطئ للتقارب. سنلاحظ مثل هذه التغييرات في ملاحظات الإصدار.
واجهة برمجة التطبيقات غير المستخدمة: نحتفظ بالحق في إجراء تغييرات عكسية غير متوافقة على واجهات برمجة التطبيقات التي لم نجد لها أي استخدامات موثقة (من خلال إجراء تدقيق لاستخدام TensorFlow من خلال بحث GitHub). قبل إجراء أي تغييرات من هذا القبيل، سنعلن عن نيتنا إجراء التغيير على القائمة البريدية للإعلان@ ، مع تقديم إرشادات حول كيفية معالجة أي أعطال (إن أمكن)، والانتظار لمدة أسبوعين لمنح مجتمعنا فرصة لمشاركة تعليقاتهم .
سلوك الخطأ: قد نستبدل الأخطاء بسلوك خالٍ من الأخطاء. على سبيل المثال، قد نقوم بتغيير دالة لحساب نتيجة بدلاً من ظهور خطأ، حتى لو تم توثيق هذا الخطأ. كما نحتفظ بالحق في تغيير نص رسائل الخطأ. بالإضافة إلى ذلك، قد يتغير نوع الخطأ ما لم يتم تحديد نوع الاستثناء لحالة خطأ معينة في الوثائق.
توافق النماذج المحفوظة والرسوم البيانية ونقاط التفتيش
SavedModel هو تنسيق التسلسل المفضل للاستخدام في برامج TensorFlow. تحتوي SavedModels على جزأين: واحد أو أكثر من الرسوم البيانية المشفرة كـ GraphDefs
ونقطة تفتيش. تصف الرسوم البيانية تدفق البيانات للعمليات التي سيتم تشغيلها، وتحتوي نقاط التفتيش على قيم الموتر المحفوظة للمتغيرات في الرسم البياني.
يقوم العديد من مستخدمي TensorFlow بإنشاء SavedModels، وتحميلها وتنفيذها باستخدام إصدار لاحق من TensorFlow. وفقًا لـ semver ، يمكن تحميل SavedModels المكتوبة بإصدار واحد من TensorFlow وتقييمها باستخدام إصدار أحدث من TensorFlow بنفس الإصدار الرئيسي.
نحن نقدم ضمانات إضافية للنماذج المحفوظة المدعومة . نحن نطلق على SavedModel الذي تم إنشاؤه باستخدام واجهات برمجة التطبيقات غير المهملة وغير التجريبية وغير المتوافقة في الإصدار الرئيسي N
TensorFlow، و SavedModel المدعوم في الإصدار N
يمكن تحميل وتنفيذ أي SavedModel مدعوم في الإصدار الرئيسي N
TensorFlow باستخدام الإصدار الرئيسي من TensorFlow N+1
. ومع ذلك، فإن الوظيفة المطلوبة لإنشاء مثل هذا النموذج أو تعديله قد لا تكون متاحة بعد الآن، لذلك ينطبق هذا الضمان فقط على SavedModel غير المعدل.
سنسعى للحفاظ على التوافق مع الإصدارات السابقة لأطول فترة ممكنة، بحيث تكون الملفات المتسلسلة قابلة للاستخدام على مدى فترات زمنية طويلة.
التوافق مع GraphDef
يتم إجراء تسلسل للرسوم البيانية عبر المخزن المؤقت لبروتوكول GraphDef
. لتسهيل إجراء التغييرات غير المتوافقة مع الرسوم البيانية، يكون لكل GraphDef
رقم إصدار منفصل عن إصدار TensorFlow. على سبيل المثال، قام الإصدار 17 GraphDef
بإهمال inv
op لصالح 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 إضافة الإصدار 8
GraphDef
ودعم الإصدارات من 4 إلى 8. - وبعد ستة أشهر على الأقل، يمكن أن يسقط TensorFlow 2.0.0 الدعم للإصدارات من 4 إلى 7، ويترك الإصدار 8 فقط.
لاحظ أنه نظرًا لأن الإصدارات الرئيسية من TensorFlow يتم نشرها عادةً بفارق يزيد عن 6 أشهر، فإن ضمانات SavedModels المدعومة المفصلة أعلاه أقوى بكثير من ضمان 6 أشهر لـ GraphDefs.
- قد يدعم TensorFlow 1.2 إصدارات
أخيرًا، عند توقف دعم إصدار 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
.
قم بإضافة سمة جديدة بشكل افتراضي إلى عملية موجودة
يمنحك اتباع الإرشادات أدناه التوافق المستقبلي فقط إذا لم تتغير مجموعة العمليات:
- إذا كان التوافق للأمام مطلوبًا، فاضبط
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
- يؤدي هذا إلى إزالة السمات ذات القيمة الافتراضية في وقت إنتاج/تصدير النماذج. يؤدي هذا إلى التأكد من أن
tf.MetaGraphDef
الذي تم تصديره لا يحتوي على سمة العملية الجديدة عند استخدام القيمة الافتراضية. - قد يسمح وجود عنصر التحكم هذا للمستهلكين القدامى (على سبيل المثال، خدمة الثنائيات التي تتخلف عن ثنائيات التدريب) بمواصلة تحميل النماذج ومنع الانقطاعات في عرض النماذج.
تطور إصدارات GraphDef
يشرح هذا القسم كيفية استخدام آلية الإصدار هذه لإجراء أنواع مختلفة من التغييرات على تنسيق GraphDef
.
أضف عملية
قم بإضافة المرجع الجديد لكل من المستهلكين والمنتجين في نفس الوقت، ولا تقم بتغيير أي إصدارات GraphDef
. هذا النوع من التغيير متوافق تلقائيًا مع الإصدارات السابقة، ولا يؤثر على خطة التوافق الأمامية نظرًا لأن البرامج النصية للمنتج الحالية لن تستخدم الوظيفة الجديدة فجأة.
قم بإضافة عملية وتبديل أغلفة Python الموجودة لاستخدامها
- تنفيذ وظائف المستهلك الجديدة وزيادة إصدار
GraphDef
. - إذا كان من الممكن جعل الأغلفة تستخدم الوظيفة الجديدة فقط في الحالات التي لم تعمل من قبل، فيمكن تحديث الأغلفة الآن.
- قم بتغيير أغلفة Python لاستخدام الوظيفة الجديدة. لا تقم بزيادة
min_consumer
، نظرًا لأن النماذج التي لا تستخدم هذه العملية يجب ألا تنكسر.
إزالة أو تقييد وظيفة العملية
- أصلح جميع البرامج النصية للمنتج (وليس TensorFlow نفسه) لعدم استخدام العملية أو الوظيفة المحظورة.
- قم بزيادة إصدار
GraphDef
وقم بتنفيذ وظيفة المستهلك الجديدة التي تحظر العملية أو الوظيفة التي تمت إزالتها لـ GraphDefs في الإصدار الجديد وما فوق. إذا أمكن، اجعل TensorFlow يتوقف عن إنتاجGraphDefs
باستخدام الوظيفة المحظورة. للقيام بذلك، قم بإضافةREGISTER_OP(...).Deprecated(deprecated_at_version, message)
. - انتظر إصدارًا رئيسيًا لأغراض التوافق مع الإصدارات السابقة.
- قم بزيادة
min_producer
إلى إصدار GraphDef من (2) وقم بإزالة الوظيفة بالكامل.
تغيير وظيفة العملية
- قم بإضافة عملية مشابهة جديدة تسمى
SomethingV2
أو ما شابه ذلك وقم بعملية إضافتها وتبديل أغلفة Python الموجودة لاستخدامها. لضمان التوافق الأمامي، استخدم عمليات التحقق المقترحة في compat.py عند تغيير أغلفة Python. - قم بإزالة العملية القديمة (لا يمكن أن تتم إلا مع تغيير كبير في الإصدار بسبب التوافق مع الإصدارات السابقة).
- قم بزيادة
min_consumer
لاستبعاد المستهلكين باستخدام المرجع القديم، وأضف المرجع القديم مرة أخرى كاسم مستعار لـSomethingV2
، وقم بتنفيذ العملية لتبديل أغلفة Python الحالية لاستخدامها. - تابع العملية لإزالة
SomethingV2
.
حظر إصدار واحد غير آمن للمستهلك
- قم بتبديل إصدار
GraphDef
وأضف الإصدار السيئ إلىbad_consumers
لجميع GraphDefs الجديدة. إذا كان ذلك ممكنًا، أضف إلىbad_consumers
فقط بالنسبة لـ GraphDefs التي تحتوي على عملية معينة أو ما شابه ذلك. - إذا كان لدى المستهلكين الحاليين الإصدار السيئ، فقم بطردهم في أقرب وقت ممكن.