Người được uỷ quyền LiteRT

Người được uỷ quyền bật tính năng tăng tốc phần cứng cho các mô hình LiteRT bằng cách Tận dụng các trình tăng tốc trên thiết bị như GPU và Bộ xử lý tín hiệu kỹ thuật số (DSP).

Theo mặc định, LiteRT sử dụng nhân CPU được tối ưu hoá cho ARM Neon tập lệnh. Tuy nhiên, CPU là bộ xử lý đa năng không được tối ưu hoá một cách cần thiết cho số học nặng thường thấy trong Máy Mô hình học tập (ví dụ: toán học ma trận liên quan đến tích chập và mật độ lớp).

Mặt khác, hầu hết các điện thoại di động hiện đại đều có chip tốt hơn xử lý các công việc nặng nhọc này. Sử dụng chúng cho các hoạt động mạng nơron mang lại lợi ích rất lớn về độ trễ và hiệu quả sử dụng pin. Ví dụ: GPU có thể cung cấp hiệu suất lên tới 5 lần tăng tốc độ trễ.

Mỗi trình tăng tốc này đều có các API liên kết cho phép tính toán tuỳ chỉnh, chẳng hạn như OpenCL hoặc OpenGL ES cho GPU di động. Thông thường, bạn sẽ phải viết nhiều mã tuỳ chỉnh để chạy mạng nơron thông qua các giao diện này. Mọi thứ thậm chí trở nên phức tạp hơn khi bạn cho rằng mỗi trình tăng tốc đều có ưu và và không thể thực hiện mọi phép toán trong mạng nơron. TensorFlow API uỷ quyền của Lite giải quyết vấn đề này bằng cách đóng vai trò là cầu nối giữa TFLite thời gian chạy và các API cấp thấp hơn này.

thời gian chạy với đại biểu

Chọn người được uỷ quyền

LiteRT hỗ trợ nhiều đại biểu, mỗi đại biểu được tối ưu hoá cho nền tảng nhất định và các loại mô hình cụ thể. Thông thường, sẽ có nhiều đại biểu có thể áp dụng cho trường hợp sử dụng của bạn, tuỳ thuộc vào hai tiêu chí chính: Nền tảng (Android hoặc iOS?) mà bạn nhắm mục tiêu và Loại mô hình (dấu phẩy động hoặc lượng tử hoá?) mà bạn đang cố gắng tăng tốc.

Người được uỷ quyền theo nền tảng

Nhiều nền tảng (Android và iOS)

  • Uỷ quyền của GPU – Bạn có thể sử dụng uỷ quyền của GPU trên cả Android và iOS. Nó được tối ưu hoá để chạy các mô hình dựa trên độ chính xác đơn 32 bit và 16 bit dựa trên độ chính xác đơn khi có GPU sẵn có. Nền tảng này cũng hỗ trợ các mô hình lượng tử hoá 8 bit và cung cấp GPU tương đương với các phiên bản có độ chính xác đơn. Thông tin chi tiết về GPU hãy xem phần LiteRT trên GPU.

iOS

  • Uỷ quyền công nghệ học máy chính cho iPhone và iPad mới hơn – Đối với iPhone và iPad mới hơn iPad ở những nơi hỗ trợ Neural Engine, bạn có thể sử dụng Core ML uỷ quyền để để rút ngắn thời gian suy luận cho các mô hình dấu phẩy động 32 bit hoặc 16 bit. Neural Công cụ này được cung cấp cho các thiết bị di động của Apple có chip A12 SoC trở lên. Để có một tổng quan về đại diện Core ML và hướng dẫn từng bước, xem Người được uỷ quyền cho công nghệ học máy LiteRT Core.

Số uỷ quyền theo loại mô hình

Mỗi trình tăng tốc được thiết kế với một độ rộng bit nhất định của dữ liệu. Nếu bạn cung cấp mô hình dấu phẩy động cho một đại biểu chỉ hỗ trợ lượng tử hoá 8 bit toán tử, thì mô hình sẽ từ chối mọi toán tử và mô hình sẽ chạy hoàn toàn trên CPU. Để tránh những bất ngờ như vậy, bảng dưới đây cung cấp tổng quan về hỗ trợ uỷ quyền dựa trên loại mô hình:

Loại mô hình GPU CoreML
Dấu phẩy động (32 bit)
Định lượng lượng tử float16 sau quá trình đào tạo
Định lượng dải động sau khi đào tạo Không
Định lượng số nguyên sau khi đào tạo Không
Đào tạo nhận biết lượng tử Không

Đang xác thực hiệu suất

Thông tin trong phần này đóng vai trò là hướng dẫn sơ bộ để lập danh sách rút gọn đại biểu có thể cải thiện ứng dụng của bạn. Tuy nhiên, điều quan trọng cần lưu ý mỗi đại biểu có một nhóm tác vụ được xác định trước mà nó hỗ trợ và có thể hoạt động khác nhau tuỳ thuộc vào kiểu máy và thiết bị. Do đó, thông thường bạn nên thực hiện một số phép đo điểm chuẩn để đánh giá mức độ hữu ích của đại biểu cho nhu cầu của bạn. Điều này cũng giúp chứng minh việc tăng kích thước nhị phân liên quan đến đính kèm thực thể đại diện vào thời gian chạy LiteRT.

LiteRT có nhiều công cụ đánh giá hiệu suất và độ chính xác có thể giúp nhà phát triển tự tin sử dụng người được uỷ quyền trong ứng dụng của họ. Những công cụ này sẽ được thảo luận trong phần tiếp theo.

Công cụ đánh giá

Độ trễ và mức sử dụng bộ nhớ

Công cụ đo điểm chuẩn của LiteRT có thể được sử dụng với các tham số phù hợp để ước tính hiệu suất của mô hình, bao gồm cả suy luận trung bình độ trễ, chi phí khởi động, mức sử dụng bộ nhớ, v.v. Công cụ này hỗ trợ nhiều cờ để tìm ra cấu hình uỷ quyền tốt nhất cho mô hình của bạn. Cho thực thể, bạn có thể chỉ định --gpu_backend=gl bằng --use_gpu để đo lường GPU bằng OpenGL. Dưới đây là danh sách đầy đủ các tham số uỷ quyền được hỗ trợ được xác định trong cột chi tiết .

Dưới đây là ví dụ chạy cho mô hình lượng tử hoá có GPU thông qua adb:

adb shell /data/local/tmp/benchmark_model \
  --graph=/data/local/tmp/mobilenet_v1_224_quant.tflite \
  --use_gpu=true

Bạn có thể tải phiên bản tạo sẵn của công cụ này dành cho Android, ARM 64 bit cấu trúc tại đây (xem thêm chi tiết).

Độ chính xác và tính chính xác

Người được uỷ quyền thường thực hiện các phép tính với độ chính xác khác với CPU bản sao. Do đó, sẽ có sự đánh đổi độ chính xác (thường không đáng kể) liên quan đến việc sử dụng uỷ quyền để tăng tốc phần cứng. Lưu ý rằng không phải luôn đúng; Ví dụ: vì GPU sử dụng độ chính xác dấu phẩy động để chạy các mô hình lượng tử hoá thì độ chính xác có thể được cải thiện đôi chút (ví dụ: <1% cải thiện trong số 5 vị trí hàng đầu trong phân loại hình ảnh ILSVRC).

LiteRT có hai loại công cụ giúp đo lường độ chính xác của người được uỷ quyền hoạt động cho một mô hình nhất định: Task-BasedTask-Agnostic. Tất cả công cụ được mô tả trong phần này hỗ trợ uỷ quyền nâng cao tham số được công cụ đo điểm chuẩn sử dụng từ phần trước. Lưu ý rằng các phần phụ dưới đây tập trung vào đánh giá uỷ quyền (Uỷ quyền có thực hiện việc thay vì đánh giá mô hình (Mô hình đó có phù hợp với không?).

Đánh giá dựa trên nhiệm vụ

LiteRT có các công cụ để đánh giá độ chính xác đối với 2 nhiệm vụ dựa trên hình ảnh:

Tệp nhị phân tạo sẵn của các công cụ này (Android, kiến trúc ARM 64 bit), cùng với bạn có thể xem tài liệu tại đây:

Ví dụ dưới đây minh hoạ tính năng phân loại hình ảnh đánh giá có GPU trên Pixel 4:

adb shell /data/local/tmp/run_eval \
  --model_file=/data/local/tmp/mobilenet_quant_v1_224.tflite \
  --ground_truth_images_path=/data/local/tmp/ilsvrc_images \
  --ground_truth_labels=/data/local/tmp/ilsvrc_validation_labels.txt \
  --model_output_labels=/data/local/tmp/model_output_labels.txt \
  --output_file_path=/data/local/tmp/accuracy_output.txt \
  --num_images=0 # Run on all images. \
  --use_gpu=true

Kết quả dự kiến là danh sách các chỉ số Top-K từ 1 đến 10:

Top-1 Accuracy: 0.733333
Top-2 Accuracy: 0.826667
Top-3 Accuracy: 0.856667
Top-4 Accuracy: 0.87
Top-5 Accuracy: 0.89
Top-6 Accuracy: 0.903333
Top-7 Accuracy: 0.906667
Top-8 Accuracy: 0.913333
Top-9 Accuracy: 0.92
Top-10 Accuracy: 0.923333

Đánh giá không phụ thuộc vào nhiệm vụ

Đối với những tác vụ mà Google không thiết lập một công cụ đánh giá trên thiết bị, hoặc nếu bạn đang thử nghiệm với các mô hình tuỳ chỉnh, LiteRT có tính năng Suy luận Khác biệt . (Android, tệp nhị phân cấu trúc ARM 64 bit tại đây)

Suy luận Diff so sánh quá trình thực thi LiteRT (về độ trễ & độ lệch giá trị đầu ra) trong hai chế độ cài đặt:

  • Dự đoán CPU đơn luồng
  • Suy luận do người dùng xác định – được xác định bằng các tham số này

Để làm vậy, công cụ tạo dữ liệu Gaussian ngẫu nhiên và chuyển dữ liệu đó qua hai Trình thông dịch TFLite – một trình thông dịch chạy nhân CPU đơn luồng, còn một loại còn lại được tham số bởi các đối số của người dùng.

Chỉ số này đo độ trễ của cả hai chỉ số, cũng như sự khác biệt tuyệt đối giữa tensor đầu ra từ mỗi Trình thông dịch, trên cơ sở từng phần tử.

Đối với mô hình có một tensor đầu ra duy nhất, dữ liệu đầu ra có thể có dạng như sau:

Num evaluation runs: 50
Reference run latency: avg=84364.2(us), std_dev=12525(us)
Test run latency: avg=7281.64(us), std_dev=2089(us)
OutputDiff[0]: avg_error=1.96277e-05, std_dev=6.95767e-06

Điều này có nghĩa là đối với tensor đầu ra tại chỉ mục 0, các phần tử từ đầu ra của CPU khác với đầu ra uỷ quyền có giá trị trung bình là 1.96e-05.

Xin lưu ý rằng việc diễn giải các số liệu này yêu cầu bạn phải có kiến thức sâu hơn về mô hình này và ý nghĩa của từng tensor đầu ra. Nếu đó là phép hồi quy đơn giản xác định một số kiểu điểm số hoặc dạng nhúng, thì mức chênh lệch sẽ thấp (nếu không, đó là lỗi với thực thể đại diện). Tuy nhiên, các kết quả như "lớp phát hiện" một từ Các mô hình ổ SSD khó diễn giải hơn một chút. Ví dụ: trang này có thể hiển thị khi sử dụng công cụ này, nhưng điều đó có thể không có nghĩa là có vấn đề gì đó đại biểu: xem xét hai lớp (giả): "TV (ID: 10)", "Giám sát (ID:20)" – Nếu người được uỷ quyền hơi khó hiểu và trình bày màn hình thay vì TV, độ chênh lệch đầu ra cho tensor này có thể cao tới 20-10 = 10.