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 để giúp tài nguyên ứng dụng của bạn luôn hiệu quả. Chúng tôi đã tổng hợp một danh sách về các phương pháp hay nhất và chiến lược mà bạn có thể áp dụng để cải thiện TensorFlow Hiệu suất mô hình thu gọn.
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 mức độ phức tạp của mô hình và kích thước. Nếu nhiệm vụ của bạn yêu cầu độ chính xác cao, thì bạn có thể cần mô hình phức tạp. Đối với các công việc yêu cầu độ chính xác thấp hơn, bạn nên sử dụng mô hình nhỏ hơn vì chúng không chỉ sử dụng ít dung lượng ổ đĩa và bộ nhớ hơn mà còn cũng thường nhanh hơn và tiết kiệm năng lượng hơn. Ví dụ: biểu đồ bên dưới cho biết độ chính xác và sự đánh đổi độ trễ đối với 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, được tối ưu hoá cho thiết bị di động thị giác. Kaggle Mô hình liệt kê một số đã đượ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 trong danh sách trên tập dữ liệu của riêng mình bằng cách chuyển dữ liệu học tập.
Phân tích tài nguyên cho mô hình của bạn
Sau khi bạn chọn một mô hình đề xuất phù hợp với nhiệm vụ của mình, để lập hồ sơ và đo điểm chuẩn cho mô hình của mình. Đo điểm chuẩn LiteRT công cụ có sẵn trình phân tích tài nguyên để hiển thị số liệu thống kê phân tích tài nguyên của mỗi toán tử. Điều này có thể giúp bạn hiểu rõ điểm tắc nghẽn về hiệu suất và những toán tử chi phối thời gian tính toán.
Bạn cũng có thể dùng LiteRT theo dõi sang hồ sơ trong ứng dụng Android của bạn bằ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 tính năng lập hồ sơ dựa trên GUI và các công cụ lập mô hình tuỳ chỉnh.
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 phân tích tài nguyên, bạn sẽ thấy rằng toán tử tốn nhiều thời gian nhất, bạn có thể xem xét 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 nhà cung cấp dịch vụ. Tuy nhiên, bạn có thể viết phiên bản nhanh hơn của một vận hành tuỳ chỉnh nếu bạn biết những hạn chế mà trong đó đã thực thi toán tử. 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 tối ưu hoá mô hình là tạo ra các mô hình nhỏ hơn, với tốc độ nhanh hơn và hiệu quả hơn về năng lượng để 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 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
LiteRT hỗ trợ 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ử. Tăng tuy nhiên, số lượng luồng sẽ khiến mô hình của bạn dùng nhiều tài nguyên và nguồ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 chuỗi bằng cách đặt số lượng phiên dịch viên luồng. Tuy nhiên, thực thi đa luồng đi kèm với cái giá là hiệu suất sẽ tăng lên biến thiên tuỳ thuộc vào những thành phần khác được thực thi đồng thời. Đây là đặc biệt là với ứng dụng dành cho thiết bị di động. Ví dụ: các thử nghiệm riêng biệt có thể hiển thị kết quả gấp 2 lần tăng tốc so với đơn luồng, nhưng nếu một ứng dụng khác đang thực thi cùng lúc, thì từ đó có thể mang lại hiệu suất 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ể sẽ có bản sao thừa
khi cung cấp đầu vào và đọc đầu ra từ mô hình. Hãy nhớ
loại bỏ các bản sao dư thừa. Nếu bạn đang sử dụng API cấp cao hơn, như Java, hãy tạo
hãy nhớ xem 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ư Android trình phân tích tài nguyên và Công cụ mang lại sự giàu có về 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 trong mô hình nhưng nằm trong các phần của mã xử lý ứng dụng tương tác với mô hình. Hãy nhớ làm quen với nền tảng công cụ lập hồ sơ cụ thể và các phương pháp hay nhất cho nền tảng của mình.
Đá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
LiteRT đã 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à bộ 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 kiểm soát trong quá trình thực hiện phiên dịch. LiteRT có thể sử dụng uỷ quyền bằng cách:
- Tính năng uỷ quyền GPU có trên Android và iOS thông qua OpenGL/OpenCL và Metal, tương ứng. Để dùng thử, hãy xem trang Uỷ quyền GPU.
- Bạn có thể tạo người được uỷ quyền của riêng mình nếu bạn có quyền truy cập vào phần cứng không tiêu chuẩn. Xem LiteRT uỷ quyền để 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. Hơi nhiều uỷ quyề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 một cách cụ thể. Đó là rất quan trọng để đo điểm chuẩn cho từng đại biểu để xem đó có phải là một cho ứng dụng của bạn. Ví dụ: nếu bạn có một mô hình rất nhỏ, không đáng để uỷ quyền mô hình đó cho GPU. Ngược lại, trình tăng tốc là sự lựa chọn tuyệt vời cho các mô hình lớn có cường độ số học cao.