Tài liệu này dành cho những người dùng cần khả năng tương thích ngược trên các phiên bản khác nhau của TensorFlow (đối với mã hoặc dữ liệu) và dành cho các nhà phát triển muốn sửa đổi TensorFlow trong khi vẫn duy trì khả năng tương thích.
Phiên bản ngữ nghĩa 2.0
TensorFlow tuân theo Phiên bản ngữ nghĩa 2.0 ( semver ) cho API công khai của nó. Mỗi phiên bản phát hành của TensorFlow đều có dạng MAJOR.MINOR.PATCH
. Ví dụ: TensorFlow phiên bản 1.2.3 có phiên bản MAJOR
1, phiên bản MINOR
2 và phiên bản PATCH
3. Những thay đổi đối với mỗi số có ý nghĩa như sau:
CHÍNH : Những thay đổi có khả năng không tương thích ngược. Mã và dữ liệu hoạt động với bản phát hành chính trước đó không nhất thiết phải hoạt động với bản phát hành mới. Tuy nhiên, trong một số trường hợp, các biểu đồ và điểm kiểm tra TensorFlow hiện có có thể được di chuyển sang bản phát hành mới hơn; xem Khả năng tương thích của biểu đồ và điểm kiểm tra để biết chi tiết về khả năng tương thích dữ liệu.
NHỎ : Các tính năng tương thích ngược, cải thiện tốc độ, v.v. Mã và dữ liệu hoạt động với bản phát hành nhỏ trước đó và chỉ phụ thuộc vào API công khai không thử nghiệm sẽ tiếp tục hoạt động không thay đổi. Để biết chi tiết về API công khai và không phải là API công khai, hãy xem Nội dung được đề cập .
PATCH : Sửa lỗi tương thích ngược.
Ví dụ: bản phát hành 1.0.0 có những thay đổi không tương thích ngược so với bản phát hành 0.12.1. Tuy nhiên, bản phát hành 1.1.1 tương thích ngược với bản phát hành 1.0.0.
Những gì được bảo hiểm
Chỉ các API công khai của TensorFlow mới tương thích ngược trên các phiên bản vá lỗi và nhỏ. Các API công khai bao gồm
Tất cả các hàm và lớp Python được ghi lại trong mô-đun
tensorflow
và các mô-đun con của nó, ngoại trừ- Ký hiệu riêng: bất kỳ hàm, lớp, v.v. nào có tên bắt đầu bằng
_
- Các biểu tượng thử nghiệm và
tf.contrib
, xem bên dưới để biết chi tiết.
Lưu ý rằng mã trong các thư mục
examples/
vàtools/
không thể truy cập được thông qua mô-đun Pythontensorflow
và do đó không được bảo đảm tương thích.Nếu một biểu tượng có sẵn thông qua mô-đun
tensorflow
Python hoặc các mô-đun con của nó nhưng không được ghi lại thì nó không được coi là một phần của API công khai.- Ký hiệu riêng: bất kỳ hàm, lớp, v.v. nào có tên bắt đầu bằng
API tương thích (trong Python, mô-đun
tf.compat
). Ở các phiên bản chính, chúng tôi có thể phát hành các tiện ích và điểm cuối bổ sung để giúp người dùng chuyển đổi sang phiên bản chính mới. Các ký hiệu API này không được dùng nữa và không được hỗ trợ (nghĩa là chúng tôi sẽ không thêm bất kỳ tính năng nào và chúng tôi sẽ không sửa các lỗi khác ngoài việc sửa các lỗ hổng), nhưng chúng nằm trong phạm vi đảm bảo về khả năng tương thích của chúng tôi.API TensorFlow C:
Các tệp đệm giao thức sau:
Số phiên bản riêng cho TensorFlow Lite
Hiện tại TensorFlow Lite được phân phối như một phần của TensorFlow. Tuy nhiên, chúng tôi có quyền thực hiện các thay đổi trong bản phát hành trong tương lai đối với API TensorFlow Lite theo lịch khác với các API TensorFlow khác hoặc thậm chí chuyển TensorFlow Lite sang một bản phân phối nguồn riêng và/hoặc kho lưu trữ nguồn riêng biệt với TensorFlow.
Do đó, chúng tôi sử dụng số phiên bản khác cho TensorFlow Lite ( TFLITE_VERSION_STRING
trong tensorflow/lite/version.h
và TfLiteVersion()
trong tensorflow/lite/c/c_api.h
) so với TensorFlow ( TF_VERSION_STRING
trong tensorflow/core/public/version.h
và TF_Version()
trong tensorflow/c/c_api.h
). Hiện tại, hai số phiên bản này có cùng giá trị. Nhưng trong tương lai, chúng có thể khác nhau; ví dụ: chúng tôi có thể tăng số phiên bản chính cho TensorFlow Lite mà không tăng số phiên bản chính cho TensorFlow hoặc ngược lại.
Bề mặt API được bao phủ bởi số phiên bản TensorFlow Lite bao gồm các API công khai sau:
API TensorFlow Lite C:
API TensorFlow Lite Android (Java/Kotlin):
- Trong
org.tensorflow.lite
: - Trong
org.tensorflow.lite.gpu
:
- Trong
API mục tiêu-C của TensorFlow Lite:
- tenorflow/lite/objc/apis/
- TFLCoreMLDelegate.h
- TFLDelegate.h
- TFLInterpreter.h
- TFLInterpreterOptions.h
- TFLMetalDelegate.h
- TFLQuantizationParameters.h
- TFLSignatureRunner.h
- TFLtensorFlowLite.h
- TFLtensor.h
- tenorflow/lite/objc/apis/
API TensorFlow Lite Swift:
- tensorflow/lite/swift/Sources/ .
- CoreMLDelegate.swift
- Đại biểu.swift
- Thông dịch viênError.swift
- Thông dịch viên.swift
- MetalDelegate.swift
- Model.swift
- Lượng tử hóaParameters.swift
- SignatureRunnerError.swift
- Chữ kýRunner.swift
- TensorFlowLite.swift
- Tenor.swift
- tensorflow/lite/swift/Sources/ .
Các ký hiệu thí nghiệm không được đề cập; xem bên dưới để biết chi tiết.
Số phiên bản riêng cho API tiện ích mở rộng TensorFlow Lite
TensorFlow Lite cung cấp các API C để mở rộng trình thông dịch TensorFlow Lite với "ops tùy chỉnh", cung cấp các hoạt động do người dùng xác định trong biểu đồ hoặc "đại biểu", cho phép ủy quyền tính toán cho biểu đồ (hoặc cho một tập hợp con của biểu đồ) cho một phụ trợ tùy chỉnh. Các API này, mà chúng tôi gọi chung là "API mở rộng TensorFlow Lite", yêu cầu sự phụ thuộc chặt chẽ hơn vào một số chi tiết của quá trình triển khai TensorFlow Lite.
Chúng tôi có quyền phát hành các thay đổi trong tương lai đối với các API này, có thể bao gồm các thay đổi không tương thích ngược, theo lịch khác với các API TensorFlow Lite khác. Vì vậy, chúng tôi sử dụng số phiên bản cho API tiện ích mở rộng TensorFlow Lite khác với số phiên bản cho TensorFlow Lite hoặc TensorFlow (đã được mô tả trong phần trước). Chúng tôi đang giới thiệu một số API mới trong TensorFlow Lite phiên bản 2.15 để có phiên bản API mở rộng TensorFlow Lite ( TFLITE_EXTENSION_APIS_VERSION_STRING
trong tensorflow/lite/version.h
và TfLiteExtensionApisVersion() trong tensorflow/lite/c/c_api.h
). Số phiên bản của API tiện ích mở rộng TensorFlow Lite hiện giống với số phiên bản của TensorFlow và TensorFlow Lite. Nhưng trong tương lai, chúng có thể khác nhau; ví dụ: chúng tôi có thể tăng số phiên bản chính cho API tiện ích mở rộng TensorFlow Lite mà không tăng số phiên bản chính cho TensorFlow Lite hoặc ngược lại.
Bề mặt API được bao phủ bởi số phiên bản API mở rộng TensorFlow Lite bao gồm các API công khai sau:
- tenorflow/lite/c/c_api_opaque.h
- tensorflow/lite/c/common.h
- tenorflow/lite/c/buildin_op_data.h
- tensorflow/lite/buildin_ops.h
Một lần nữa, các ký hiệu thử nghiệm không được đề cập; xem bên dưới để biết chi tiết.
Những gì không được bảo hiểm
Một số phần của TensorFlow có thể thay đổi theo cách không tương thích ngược vào bất kỳ thời điểm nào. Bao gồm các:
API thử nghiệm : Để tạo điều kiện phát triển, chúng tôi miễn đảm bảo tính tương thích cho một số ký hiệu API được đánh dấu rõ ràng là thử nghiệm. Đặc biệt, những điều sau đây không được bảo đảm bởi bất kỳ đảm bảo tương thích nào:
- bất kỳ ký hiệu nào trong mô-đun
tf.contrib
hoặc các mô-đun con của nó; - bất kỳ ký hiệu nào (mô-đun, hàm, đối số, thuộc tính, lớp, hằng số, loại, gói, v.v.) có tên chứa
experimental
hoặcExperimental
; hoặc - bất kỳ biểu tượng nào có tên đủ điều kiện bao gồm một mô-đun hoặc lớp hoặc gói mà bản thân nó mang tính thử nghiệm. Điều này bao gồm các trường và tin nhắn con của bất kỳ bộ đệm giao thức nào được gọi là
experimental
.
- bất kỳ ký hiệu nào trong mô-đun
Các ngôn ngữ khác : API TensorFlow bằng các ngôn ngữ khác ngoài Python và C, chẳng hạn như:
- C++ (được hiển thị thông qua các tệp tiêu đề trong
tensorflow/cc/
). - Java ,
- Đi
- JavaScript
và API TensorFlow Lite bằng các ngôn ngữ khác ngoài Java/Kotlin, C, Objective-C và Swift, đặc biệt
- C++ (được hiển thị thông qua các tệp tiêu đề trong
tensorflow/lite/
)
- C++ (được hiển thị thông qua các tệp tiêu đề trong
Chi tiết về các hoạt động tổng hợp: Nhiều hàm công khai trong Python mở rộng thành một số hoạt động nguyên thủy trong biểu đồ và các chi tiết này sẽ là một phần của bất kỳ biểu đồ nào được lưu vào đĩa dưới dạng
GraphDef
s. Những chi tiết này có thể thay đổi đối với các bản phát hành nhỏ. Cụ thể, các thử nghiệm hồi quy kiểm tra sự khớp chính xác giữa các biểu đồ có khả năng vượt qua các bản phát hành nhỏ, mặc dù hoạt động của biểu đồ sẽ không thay đổi và các điểm kiểm tra hiện có vẫn hoạt động.Chi tiết số dấu phẩy động: Các giá trị dấu phẩy động cụ thể được tính toán bởi các op có thể thay đổi bất kỳ lúc nào. Người dùng chỉ nên dựa vào độ chính xác gần đúng và độ ổn định bằng số chứ không nên dựa vào các bit cụ thể được tính toán. Những thay đổi đối với công thức số trong các bản phát hành nhỏ và bản vá sẽ mang lại độ chính xác tương đương hoặc được cải thiện, với lời cảnh báo rằng trong quá trình học máy cải thiện độ chính xác của các công thức cụ thể có thể dẫn đến giảm độ chính xác cho toàn bộ hệ thống.
Số ngẫu nhiên: Các số ngẫu nhiên cụ thể được tính có thể thay đổi bất kỳ lúc nào. Người dùng chỉ nên dựa vào các phân bố gần đúng và cường độ thống kê chứ không phải các bit cụ thể được tính toán. Xem hướng dẫn tạo số ngẫu nhiên để biết chi tiết.
Phiên bản lệch trong Tensorflow phân tán: Việc chạy hai phiên bản TensorFlow khác nhau trong một cụm không được hỗ trợ. Không có sự đảm bảo nào về khả năng tương thích ngược của giao thức dây.
Lỗi: Chúng tôi có quyền thực hiện các thay đổi về hành vi không tương thích ngược (mặc dù không phải API) nếu việc triển khai hiện tại bị hỏng rõ ràng, nghĩa là nếu nó mâu thuẫn với tài liệu hoặc nếu một hành vi dự kiến được biết rõ và được xác định rõ không được triển khai đúng cách do đến một lỗi. Ví dụ: nếu trình tối ưu hóa tuyên bố triển khai thuật toán tối ưu hóa phổ biến nhưng không khớp với thuật toán đó do lỗi thì chúng tôi sẽ sửa trình tối ưu hóa. Bản sửa lỗi của chúng tôi có thể phá vỡ mã dựa vào hành vi hội tụ sai. Chúng tôi sẽ lưu ý những thay đổi như vậy trong ghi chú phát hành.
API không được sử dụng: Chúng tôi có quyền thực hiện các thay đổi không tương thích ngược đối với các API mà chúng tôi nhận thấy không có cách sử dụng nào được ghi lại (bằng cách thực hiện kiểm tra việc sử dụng TensorFlow thông qua tìm kiếm GitHub). Trước khi thực hiện bất kỳ thay đổi nào như vậy, chúng tôi sẽ thông báo ý định thực hiện thay đổi trên danh sách gửi thư notification@ , cung cấp hướng dẫn về cách giải quyết mọi sai sót (nếu có) và đợi hai tuần để cộng đồng của chúng tôi có cơ hội chia sẻ phản hồi của họ .
Hành vi lỗi: Chúng tôi có thể thay thế lỗi bằng hành vi không có lỗi. Ví dụ: chúng ta có thể thay đổi hàm để tính kết quả thay vì đưa ra lỗi, ngay cả khi lỗi đó được ghi lại. Chúng tôi cũng có quyền thay đổi nội dung của thông báo lỗi. Ngoài ra, loại lỗi có thể thay đổi trừ khi loại ngoại lệ cho một tình trạng lỗi cụ thể được chỉ định trong tài liệu.
Khả năng tương thích của SavingModels, đồ thị và điểm kiểm tra
SavingModel là định dạng tuần tự hóa ưa thích để sử dụng trong các chương trình TensorFlow. SavedModels chứa hai phần: Một hoặc nhiều biểu đồ được mã hóa dưới dạng GraphDefs
và Điểm kiểm tra. Các biểu đồ mô tả luồng dữ liệu của các hoạt động sẽ được chạy và các điểm kiểm tra chứa các giá trị tensor đã lưu của các biến trong biểu đồ.
Nhiều người dùng TensorFlow tạo SavingModels, tải và thực thi chúng bằng bản phát hành TensorFlow sau này. Để tuân thủ semver , các SavingModel được viết bằng một phiên bản TensorFlow có thể được tải và đánh giá bằng phiên bản TensorFlow mới hơn với cùng một bản phát hành chính.
Chúng tôi đưa ra các đảm bảo bổ sung cho các SavingModels được hỗ trợ . Chúng tôi gọi một SavingModel được tạo bằng cách chỉ sử dụng các API không dùng nữa, không thử nghiệm, không tương thích trong phiên bản chính của TensorFlow N
là SavingModel được hỗ trợ trong phiên bản N
. Bất kỳ SavingModel nào được hỗ trợ trong TensorFlow phiên bản chính N
đều có thể được tải và thực thi bằng TensorFlow phiên bản chính N+1
. Tuy nhiên, chức năng cần thiết để xây dựng hoặc sửa đổi mô hình như vậy có thể không còn khả dụng nữa, vì vậy đảm bảo này chỉ áp dụng cho SavingModel chưa sửa đổi.
Chúng tôi sẽ cố gắng duy trì khả năng tương thích ngược càng lâu càng tốt để các tệp được tuần tự hóa có thể sử dụng được trong thời gian dài.
Khả năng tương thích của GraphDef
Đồ thị được tuần tự hóa thông qua bộ đệm giao thức GraphDef
. Để tạo điều kiện thuận lợi cho những thay đổi không tương thích ngược đối với biểu đồ, mỗi GraphDef
có số phiên bản riêng biệt với phiên bản TensorFlow. Ví dụ: GraphDef
phiên bản 17 không dùng inv
op mà thay vào đó là reciprocal
. Ngữ nghĩa là:
Mỗi phiên bản TensorFlow hỗ trợ một khoảng phiên bản
GraphDef
. Khoảng thời gian này sẽ không đổi trên các bản vá lỗi và sẽ chỉ tăng lên trên các bản phát hành nhỏ. Việc ngừng hỗ trợ cho phiên bảnGraphDef
sẽ chỉ xảy ra đối với bản phát hành chính của TensorFlow (và chỉ phù hợp với hỗ trợ phiên bản được đảm bảo cho SavingModels).Các biểu đồ mới tạo được gán số phiên bản
GraphDef
mới nhất.Nếu một phiên bản TensorFlow nhất định hỗ trợ phiên bản
GraphDef
của biểu đồ, nó sẽ tải và đánh giá với hành vi tương tự như phiên bản TensorFlow được sử dụng để tạo ra nó (ngoại trừ các chi tiết số dấu phẩy động và số ngẫu nhiên như đã nêu ở trên), bất kể chính phiên bản TensorFlow. Cụ thể, GraphDef tương thích với tệp điểm kiểm tra trong một phiên bản của TensorFlow (chẳng hạn như trường hợp trong SavingModel) sẽ vẫn tương thích với điểm kiểm tra đó trong các phiên bản tiếp theo, miễn là GraphDef được hỗ trợ.Lưu ý rằng điều này chỉ áp dụng cho các Biểu đồ được tuần tự hóa trong GraphDefs (và SavingModels): Mã đọc điểm kiểm tra có thể không đọc được các điểm kiểm tra được tạo bởi cùng một mã chạy phiên bản TensorFlow khác.
Nếu giới hạn trên của
GraphDef
được tăng lên X trong một bản phát hành (nhỏ), sẽ có ít nhất sáu tháng trước khi giới hạn dưới được tăng lên X. Ví dụ: (chúng tôi đang sử dụng số phiên bản giả định ở đây):- TensorFlow 1.2 có thể hỗ trợ
GraphDef
phiên bản 4 đến 7. - TensorFlow 1.3 có thể thêm
GraphDef
phiên bản 8 và hỗ trợ các phiên bản 4 đến 8. - Ít nhất sáu tháng sau, TensorFlow 2.0.0 có thể ngừng hỗ trợ các phiên bản 4 đến 7, chỉ còn lại phiên bản 8.
Lưu ý rằng vì các phiên bản chính của TensorFlow thường được xuất bản cách nhau hơn 6 tháng nên các cam kết dành cho các SavingModel được hỗ trợ nêu chi tiết ở trên mạnh hơn nhiều so với cam kết 6 tháng dành cho GraphDefs.
- TensorFlow 1.2 có thể hỗ trợ
Cuối cùng, khi ngừng hỗ trợ phiên bản GraphDef
, chúng tôi sẽ cố gắng cung cấp các công cụ để tự động chuyển đổi biểu đồ sang phiên bản GraphDef
được hỗ trợ mới hơn.
Khả năng tương thích đồ thị và điểm kiểm tra khi mở rộng TensorFlow
Phần này chỉ liên quan khi thực hiện các thay đổi không tương thích với định dạng GraphDef
, chẳng hạn như khi thêm các hoạt động, loại bỏ các hoạt động hoặc thay đổi chức năng của các hoạt động hiện có. Phần trước sẽ đủ cho hầu hết người dùng.
Khả năng tương thích ngược và một phần về phía trước
Sơ đồ lập phiên bản của chúng tôi có ba yêu cầu:
- Khả năng tương thích ngược để hỗ trợ tải biểu đồ và điểm kiểm tra được tạo bằng các phiên bản TensorFlow cũ hơn.
- Khả năng tương thích chuyển tiếp để hỗ trợ các tình huống trong đó nhà sản xuất biểu đồ hoặc điểm kiểm tra được nâng cấp lên phiên bản TensorFlow mới hơn trước người tiêu dùng.
- Cho phép phát triển TensorFlow theo những cách không tương thích. Ví dụ: xóa hoạt động, thêm thuộc tính và xóa thuộc tính.
Lưu ý rằng mặc dù cơ chế phiên bản GraphDef
tách biệt với phiên bản TensorFlow, nhưng những thay đổi không tương thích ngược đối với định dạng GraphDef
vẫn bị hạn chế bởi Phiên bản ngữ nghĩa. Điều này có nghĩa là chức năng chỉ có thể bị xóa hoặc thay đổi giữa các phiên bản MAJOR
của TensorFlow (chẳng hạn như 1.7
đến 2.0
). Ngoài ra, khả năng tương thích về phía trước được thực thi trong các bản phát hành Bản vá (ví dụ: 1.x.1
đến 1.x.2
).
Để đạt được khả năng tương thích ngược và xuôi cũng như để biết thời điểm thực thi các thay đổi về định dạng, biểu đồ và điểm kiểm tra có siêu dữ liệu mô tả thời điểm chúng được tạo. Các phần bên dưới nêu chi tiết cách triển khai TensorFlow và hướng dẫn để phát triển các phiên bản GraphDef
.
Đề án phiên bản dữ liệu độc lập
Có nhiều phiên bản dữ liệu khác nhau cho biểu đồ và điểm kiểm tra. Hai định dạng dữ liệu phát triển với tốc độ khác nhau và cũng ở tốc độ khác nhau từ TensorFlow. Cả hai hệ thống phiên bản đều được xác định trong core/public/version.h
. Bất cứ khi nào một phiên bản mới được thêm vào, một ghi chú sẽ được thêm vào tiêu đề nêu chi tiết những gì đã thay đổi và ngày tháng.
Dữ liệu, nhà sản xuất và người tiêu dùng
Chúng tôi phân biệt giữa các loại thông tin phiên bản dữ liệu sau:
- nhà sản xuất : nhị phân tạo ra dữ liệu. Nhà sản xuất có một phiên bản (
producer
) và phiên bản dành cho người tiêu dùng tối thiểu mà họ tương thích (min_consumer
). - người tiêu dùng : nhị phân tiêu thụ dữ liệu. Người tiêu dùng có một phiên bản (
consumer
) và phiên bản nhà sản xuất tối thiểu mà họ tương thích với (min_producer
).
Mỗi phần dữ liệu được phiên bản có trường VersionDef versions
ghi lại producer
đã tạo dữ liệu, min_consumer
tương thích và danh sách các phiên bản bad_consumers
không được phép.
Theo mặc định, khi nhà sản xuất tạo một số dữ liệu, dữ liệu sẽ kế thừa phiên bản producer
sản xuất và min_consumer
của nhà sản xuất đó. bad_consumers
có thể được đặt nếu các phiên bản dành cho người tiêu dùng cụ thể được biết là có lỗi và phải tránh. Người tiêu dùng có thể chấp nhận một phần dữ liệu nếu tất cả những điều sau đây đều đúng:
-
consumer
>=min_consumer
của dữ liệu -
producer
dữ liệu >=min_producer
của người tiêu dùng -
consumer
không có trongbad_consumers
của dữ liệu
Vì cả nhà sản xuất và người tiêu dùng đều đến từ cùng một cơ sở mã TensorFlow, core/public/version.h
chứa một phiên bản dữ liệu chính được coi là producer
hoặc consumer
tùy thuộc vào ngữ cảnh và cả min_consumer
và min_producer
(lần lượt là cần thiết cho nhà sản xuất và người tiêu dùng) . Đặc biệt,
- Đối với các phiên bản
GraphDef
, chúng tôi cóTF_GRAPH_DEF_VERSION
,TF_GRAPH_DEF_VERSION_MIN_CONSUMER
vàTF_GRAPH_DEF_VERSION_MIN_PRODUCER
. - Đối với các phiên bản điểm kiểm tra, chúng tôi có
TF_CHECKPOINT_VERSION
,TF_CHECKPOINT_VERSION_MIN_CONSUMER
vàTF_CHECKPOINT_VERSION_MIN_PRODUCER
.
Thêm thuộc tính mới có mặc định vào op hiện có
Việc làm theo hướng dẫn bên dưới chỉ mang lại cho bạn khả năng tương thích về phía trước nếu tập hợp các hoạt động không thay đổi:
- Nếu muốn có khả năng tương thích về phía trước, hãy đặt
strip_default_attrs
thànhTrue
trong khi xuất mô hình bằng cách sử dụng các phương thứctf.saved_model.SavedModelBuilder.add_meta_graph_and_variables
vàtf.saved_model.SavedModelBuilder.add_meta_graph
của lớpSavedModelBuilder
hoặctf.estimator.Estimator.export_saved_model
- Điều này loại bỏ các thuộc tính có giá trị mặc định tại thời điểm sản xuất/xuất mô hình. Điều này đảm bảo rằng
tf.MetaGraphDef
đã xuất không chứa thuộc tính op mới khi sử dụng giá trị mặc định. - Việc có quyền kiểm soát này có thể cho phép người tiêu dùng lỗi thời (ví dụ: phân phối các tệp nhị phân tụt hậu so với tệp nhị phân đào tạo) tiếp tục tải mô hình và ngăn chặn sự gián đoạn trong việc phân phối mô hình.
Các phiên bản GraphDef đang phát triển
Phần này giải thích cách sử dụng cơ chế lập phiên bản này để thực hiện các loại thay đổi khác nhau đối với định dạng GraphDef
.
Thêm một lựa chọn
Thêm op mới cho cả người tiêu dùng và nhà sản xuất cùng một lúc và không thay đổi bất kỳ phiên bản GraphDef
nào. Loại thay đổi này tự động tương thích ngược và không ảnh hưởng đến kế hoạch tương thích về phía trước vì các tập lệnh của nhà sản xuất hiện tại sẽ không đột ngột sử dụng chức năng mới.
Thêm một op và chuyển các trình bao bọc Python hiện có để sử dụng nó
- Triển khai chức năng tiêu dùng mới và tăng phiên bản
GraphDef
. - Nếu có thể làm cho các trình bao bọc chỉ sử dụng chức năng mới trong các trường hợp trước đây không hoạt động thì các trình bao bọc có thể được cập nhật ngay bây giờ.
- Thay đổi trình bao bọc Python để sử dụng chức năng mới. Không tăng
min_consumer
, vì các mô hình không sử dụng op này sẽ không bị hỏng.
Loại bỏ hoặc hạn chế chức năng của op
- Sửa tất cả các tập lệnh của nhà sản xuất (không phải chính TensorFlow) để không sử dụng chức năng hoặc chức năng bị cấm.
- Tăng phiên bản
GraphDef
và triển khai chức năng tiêu dùng mới cấm hoạt động hoặc chức năng đã bị loại bỏ đối với GraphDefs ở phiên bản mới trở lên. Nếu có thể, hãy yêu cầu TensorFlow ngừng sản xuấtGraphDefs
có chức năng bị cấm. Để làm như vậy, hãy thêmREGISTER_OP(...).Deprecated(deprecated_at_version, message)
. - Chờ bản phát hành chính cho mục đích tương thích ngược.
- Tăng
min_producer
lên phiên bản GraphDef từ (2) và xóa hoàn toàn chức năng.
Thay đổi chức năng của op
- Thêm một op tương tự mới có tên
SomethingV2
hoặc tương tự và thực hiện quá trình thêm nó và chuyển đổi các trình bao bọc Python hiện có để sử dụng nó. Để đảm bảo khả năng tương thích về phía trước, hãy sử dụng các kiểm tra được đề xuất trong compat.py khi thay đổi trình bao bọc Python. - Xóa op cũ (Chỉ có thể diễn ra khi có thay đổi lớn về phiên bản do tính tương thích ngược).
- Tăng
min_consumer
để loại trừ người tiêu dùng với op cũ, thêm lại op cũ làm bí danh choSomethingV2
và thực hiện quy trình chuyển đổi các trình bao bọc Python hiện có để sử dụng nó. - Thực hiện quy trình để xóa
SomethingV2
.
Cấm một phiên bản tiêu dùng không an toàn
- Thay đổi phiên bản
GraphDef
và thêm phiên bản xấu vàobad_consumers
cho tất cả các GraphDef mới. Nếu có thể, hãy chỉ thêm vàobad_consumers
những GraphDef có chứa một op nhất định hoặc tương tự. - Nếu người tiêu dùng hiện tại có phiên bản xấu, hãy đẩy họ ra ngoài càng sớm càng tốt.