Thiết bị di động và thiết bị nhúng có tài nguyên tính toán hạn chế, vì vậy, điều quan trọng là bạn phải duy trì hiệu quả tài nguyên cho ứng dụng của mình. Chúng tôi đã tổng hợp một danh sách các phương pháp hay nhất và chiến lược mà bạn có thể sử dụng để cải thiện hiệu suất mô hình TensorFlow Lite.
Chọn mô hình phù hợp nhất cho nhiệm vụ
Tuỳ thuộc vào nhiệm vụ, bạn sẽ cần phải đánh đổi giữa độ phức tạp và kích thước của mô hình. Nếu nhiệm vụ của bạn đòi hỏi độ 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 những tác vụ không đòi hỏi độ chính xác cao, bạn nên sử dụng một mô hình nhỏ hơn vì mô hình 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 giữa độ chính xác và độ trễ của một số mô hình phân loại hình ảnh phổ biến.


Một ví dụ về các mô hình được tối ưu hoá cho thiết bị di động là MobileNets. Đây là các mô hình được tối ưu hoá cho các ứng dụng thị giác trên thiết bị di động. Kaggle Models (Các mô hình Kaggle) liệt kê một số mô hình khác được tối ưu hoá riêng cho thiết bị di động và thiết bị 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 phương pháp học chuyển giao.
Lập hồ sơ cho mô hình
Sau khi chọn được một mô hình phù hợp cho 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 LiteRT có một trình phân tích tài nguyên tích hợp cho biết số liệu thống kê phân tích tài nguyên cho mỗi toán tử. Điều này có thể giúp bạn hiểu được các điểm nghẽn về hiệu suất và những toán tử chiếm phần lớn thời gian tính toán.
Bạn cũng có thể sử dụng tính năng theo dõi LiteRT để 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 của toán tử theo thời gian bằng các công cụ lập hồ sơ dựa trên GUI.
Lập hồ sơ và tối ưu hoá các 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ử đó tiêu tốn nhiều thời gian nhất, thì bạn có thể xem xét việc tối ưu hoá toán tử đó. Trường hợp này 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 một phiên bản nhanh hơn của thao tác tuỳ chỉnh nếu biết các ràng buộc mà trong đó toán tử được thực thi. Hãy xem hướng dẫn về các toán tử tuỳ chỉnh.
Tối ưu hoá mô hình
Mục tiêu của việc tối ưu hoá mô hình là tạo ra các mô hình nhỏ hơn, thường 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. LiteRT 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 tối ưu hoá mô hình để biết thông tin chi tiết.
Điều chỉnh số lượng luồng
LiteRT hỗ trợ các 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ủa 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 sử 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 suất 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 viên. Tuy nhiên, việc thực thi đa luồng sẽ làm tăng độ biến thiên hiệu suất tuỳ thuộc vào những gì khác được thực thi đồng thời. Điều này đặc biệt đúng đối với các ứng dụng di động. Ví dụ: các thử nghiệm riêng biệt có thể cho thấy tốc độ tăng gấp 2 lần so với tốc độ của một luồng, nhưng nếu một ứng dụng khác đang thực thi cùng lúc, thì điều này có thể dẫn đến hiệu suất kém hơn so với tốc độ của một luồng.
Loại bỏ các bản sao dư thừa
Nếu ứng dụng của bạn không được thiết kế cẩn thận, có thể sẽ có các bản sao dư thừa khi truyền dữ liệu đầu vào và đọc dữ liệu đầu ra từ mô hình. Đảm bảo bạn loại bỏ các bản sao dư thừa. Nếu đang sử dụng các 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 những lưu ý về hiệu suất. Ví dụ: Java API sẽ nhanh hơn nhiều nếu ByteBuffers được dùng làm đầ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 Android và Instruments cung cấp nhiều thông tin về việc phân tích tài nguyên có thể dùng để gỡ lỗi ứng dụng. Đôi khi, lỗi hiệu suất có thể không nằm trong mô hình mà nằm trong các phần của mã ứ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 cho nền tảng của bạn.
Đánh giá xem mô hình của bạn có được lợi ích gì khi sử dụng các bộ tăng tốc phần cứng có trên thiết bị hay không
LiteRT đã bổ sung những cách thức mới để tăng tốc các mô hình bằng phần cứng nhanh hơn như GPU, DSP và bộ tăng tốc thần kinh. 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 delegate (uỷ quyền) đảm nhận các phần thực thi trình thông dịch. LiteRT có thể sử dụng các uỷ quyền bằng cách:
- Uỷ quyền GPU có trên Android và iOS, sử dụng OpenGL/OpenCL và Metal tương ứng. Để dùng thử, hãy xem GPU delegate.
- Bạn có thể tạo đại biểu của riêng mình nếu có quyền truy cập vào phần cứng không theo tiêu chuẩn. Hãy xem phần Uỷ quyền LiteRT để biết thêm thông tin.
Xin lưu ý rằng một số bộ tăng tốc hoạt động hiệu quả hơn đối với các loại mô hình khác nhau. Một số uỷ quyền chỉ hỗ trợ các mô hình số thực hoặc mô hình được tối ưu hoá theo một cách cụ thể. Điều quan trọng là bạn phải đo điểm chuẩn cho từng đại biểu để xem đó có phải là lựa chọn phù hợp cho ứng dụng của bạn hay không. Ví dụ: nếu có một mô hình rất nhỏ, thì có thể bạn không nên uỷ quyền mô hình cho GPU. Ngược lại, bộ tăng tốc là lựa chọn phù hợp cho các mô hình lớn có cường độ số học cao.