Các phương pháp hay nhất về hiệu suất

Thiết bị di động và thiết bị nhúng có tài nguyên điện toán hạn chế, vì vậy, bạn phải đảm bảo tài nguyên ứng dụng hiệu quả. Chúng tôi đã tổng hợp một danh sách các chiến lược và phương pháp hay nhất mà bạn có thể dùng để cải thiện hiệu suất của mô hình TensorFlow Lite.

Chọn mô hình tốt nhất cho nhiệm vụ

Tuỳ thuộc vào nhiệm vụ, bạn sẽ cần phải cân bằng giữa độ phức tạp và kích thước của mô hình. Nếu tác vụ yêu cầu độ chính xác cao, thì bạn có thể cần một mô hình lớn và phức tạp. Đối với các tác vụ yêu cầu độ chính xác thấp hơn, bạn nên sử dụng một mô hình nhỏ hơn vì các tác vụ này không chỉ sử dụng ít dung lượng ổ đĩa và bộ nhớ hơn mà còn thường nhanh hơn và tiết kiệm năng lượng hơn. Ví dụ: các biểu đồ bên dưới cho thấy sự đánh đổi về độ chính xác và độ trễ đối với một số mô hình phân loại hình ảnh phổ biến.

Biểu đồ về kích thước mô hình so với
độ chính xác

Biểu đồ độ chính xác so với độ trễ

Một ví dụ về các mô hình được tối ưu hoá cho thiết bị di động là MobileNets, được tối ưu hoá cho các ứng dụng thị giác di động. TensorFlow Hub liệt kê một số mô hình khác đã được tối ưu hoá dành riêng cho thiết bị di động và thiết bị được nhúng.

Bạn có thể huấn luyện lại các mô hình được liệt kê trên tập dữ liệu của riêng mình bằng cách sử dụng công nghệ học chuyển.

Phân tích tài nguyên cho mô hình của bạn

Sau khi chọn một mô hình đề xuất phù hợp với nhiệm vụ của mình, bạn nên lập hồ sơ và đo điểm chuẩn cho mô hình đó. Công cụ đo điểm chuẩn của TensorFlow Lite có trình phân tích tài nguyên tích hợp hiển thị số liệu thống kê lập hồ sơ của mỗi toán tử. Điều này có thể giúp bạn hiểu điểm tắc nghẽn hiệu suất và toán tử nào chiếm ưu thế trong thời gian tính toán.

Bạn cũng có thể sử dụng tính năng theo dõi TensorFlow Lite để lập hồ sơ mô hình trong ứng dụng Android bằng cách sử dụng tính năng theo dõi hệ thống Android tiêu chuẩn và trực quan hoá các lệnh gọi toán tử theo thời gian bằng các công cụ lập hồ sơ dựa trên GUI.

Phân tích và tối ưu hoá toán tử trong biểu đồ

Nếu một toán tử cụ thể xuất hiện thường xuyên trong mô hình và dựa trên việc lập hồ sơ, bạn nhận thấy rằng toán tử đó tốn nhiều thời gian nhất, thì bạn có thể tìm hiểu việc tối ưu hoá toán tử đó. Trường hợp này rất hiếm khi xảy ra vì TensorFlow Lite có các phiên bản được tối ưu hoá cho hầu hết các toán tử. Tuy nhiên, bạn có thể viết phiên bản nhanh hơn của một hoạt động tuỳ chỉnh nếu biết các hạn chế mà toán tử được thực thi. Hãy xem hướng dẫn về toán tử tuỳ chỉnh.

Tối ưu hoá mô hình của bạn

Mục đích của việc tối ưu hoá mô hình là tạo ra các mô hình nhỏ hơn, có tốc độ nhanh hơn và tiết kiệm năng lượng hơn để có thể triển khai trên thiết bị di động. TensorFlow Lite hỗ trợ nhiều kỹ thuật tối ưu hoá, chẳng hạn như lượng tử hoá.

Hãy xem tài liệu về việc tối ưu hoá mô hình để biết thông tin chi tiết.

Chỉnh sửa số lượng luồng

TensorFlow Lite hỗ trợ các hạt nhân đa luồng cho nhiều toán tử. Bạn có thể tăng số lượng luồng và tăng tốc độ thực thi các toán tử. Tuy nhiên, việc tăng số lượng luồng sẽ khiến mô hình của bạn dùng nhiều tài nguyên và năng lượng hơn.

Đối với một số ứng dụng, độ trễ có thể quan trọng hơn hiệu quả năng lượng. Bạn có thể tăng số lượng luồng bằng cách đặt số lượng luồng thông dịch. Tuy nhiên, việc thực thi đa luồng sẽ làm tăng hiệu suất thay đổi tuỳ thuộc vào những nội dung khác được thực thi đồng thời. Điều này đặc biệt đúng với ứng dụng dành cho thiết bị di động. Ví dụ: các phép kiểm thử tách biệt có thể cho thấy tốc độ tăng gấp 2 lần so với kiểu kiểm thử đơn luồng, nhưng nếu một ứng dụng khác đang thực thi cùng lúc, thì hiệu suất có thể kém hơn so với đơn luồng.

Loại bỏ các bản sao thừa

Nếu ứng dụng không được thiết kế cẩn thận, có thể có các bản sao thừa khi cấp dữ liệu đầu vào và đọc đầu ra từ mô hình. Hãy nhớ loại bỏ các bản sao thừa. Nếu bạn đang sử dụng API cấp cao hơn, chẳng hạn như Java, hãy nhớ kiểm tra kỹ tài liệu để biết các cảnh báo về hiệu suất. Ví dụ: API Java sẽ nhanh hơn rất nhiều nếu ByteBuffers được sử dụng làm dữ liệu đầu vào.

Phân tích tài nguyên cho ứng dụng của bạn bằng các công cụ dành riêng cho nền tảng

Các công cụ dành riêng cho nền tảng như Trình phân tích tài nguyên AndroidCông cụ cung cấp rất nhiều thông tin lập hồ sơ có thể dùng để gỡ lỗi ứng dụng của bạn. Đôi khi, lỗi hiệu suất có thể không nằm ở mô hình mà ở các phần mã xử lý ứng dụng tương tác với mô hình. Hãy nhớ làm quen với các công cụ lập hồ sơ dành riêng cho nền tảng và các phương pháp hay nhất dành cho nền tảng của bạn.

Đánh giá xem mô hình của bạn có được hưởng lợi từ việc sử dụng trình tăng tốc phần cứng có sẵn trên thiết bị hay không

TensorFlow Lite đã thêm những cách mới để tăng tốc các mô hình bằng phần cứng nhanh hơn như GPU, DSP và trình tăng tốc nơron. Thông thường, các trình tăng tốc này được hiển thị thông qua các mô-đun con uỷ quyền đảm nhận một số phần trong quá trình thực thi trình thông dịch. TensorFlow Lite có thể sử dụng thực thể đại diện bằng cách:

  • Tính năng uỷ quyền GPU có trên Android và iOS, lần lượt sử dụng OpenGL/OpenCL và Metal. Để dùng thử, hãy xem trang Uỷ quyền GPU.
  • Bạn có thể tạo uỷ quyền của riêng mình nếu có quyền truy cập vào phần cứng không tiêu chuẩn. Hãy xem các đại diện cho TensorFlow Lite để biết thêm thông tin.

Xin lưu ý rằng một số trình tăng tốc hoạt động tốt hơn trên nhiều loại mô hình. Một số thực thể đại diện chỉ hỗ trợ các mô hình số thực hoặc mô hình số thực được tối ưu hoá theo cách cụ thể. Điều quan trọng là phải đo điểm chuẩn cho từng đại biểu để xem đó có phải là lựa chọn tốt cho ứng dụng của bạn hay không. Ví dụ: nếu bạn có một mô hình rất nhỏ, thì việc uỷ quyền mô hình đó cho GPU có thể không đáng kể. Ngược lại, trình tăng tốc là một lựa chọn tuyệt vời cho các mô hình lớn có cường độ số học cao.