Nắm vững tối ưu hóa Yolo và resnet trên CPU Hisilicon

Bạn muốn có hiệu suất tốt nhất từ các mẫu của mình trên CPU Hisilicon. Đây có thể là một nhiệm vụ khó khăn. Bạn có thể thấy Performan

Mastering

Bạn muốn có hiệu suất tốt nhất từ các mẫu của mình trên CPU Hisilicon. Đây có thể là một nhiệm vụ khó khăn. Bạn có thể thấy nút chai hiệu suất hoặc phần cứng kém sử dụng. Kiến trúc Ascend npu thể hiện những thách thức độc đáo. Ví dụ,Nó không sử dụng sự song song mức sợi lớn để che giấu sự chậm trễ truy cập bộ nhớ.

Khung Thành: Hướng dẫn này cung cấp cho bạn một quy trình làm việc hoàn chỉnh để tối ưu hóa Yolo/resnet. Bạn sẽ học cách chuẩn bị mô hình, chuyển đổi chúng bằng Trình biên dịch Ascend tensor, áp dụng định lượng int8 và triển khai chúng bằng cách sử dụng ascendcl để đạt hiệu quả cao nhất.🚀

Mang theo chìa khóa

  • Chuẩn bị mô hình của bạn choCPU Hisilicon. Chuyển đổi nó sang định dạng onnx. Tỉa nó để làm cho nó nhỏ hơn và nhanh hơn.
  • Sử dụng trình biên dịch Ascend tensor (ATC) để chuyển đổi mẫu onnx của bạn. Điều này tạo ra một tập tin '.om' tối ưu hóa cho npu.
  • Áp dụng định lượng int8. để tăng hiệu suất. Sử dụng định lượng sau đào tạo (ptq) hoặc đào tạo nhận thức lượng hóa (qat).
  • Sử dụng bộ lọc Ascend để tìm các bộ phận chậm của mô hình của bạn. Điều này giúp bạn khắc phục các vấn đề về hiệu suất.
  • Triển khaiMẫu được tối ưu hóaSử dụng ascendcl. Đo độ trễ và fps để kiểm tra tốc độ của nó.

Chuẩn bị và tối ưu hóa Yolo/resnet để chuyển đổi

Chuẩn bị

Bước đầu tiên của bạn là chuẩn bị mô hình cho HiSilicon npu. Một mô hình được chuẩn bị tốt chuyển đổi trơn tru và hoạt động tốt hơn. Việc chuẩn bị này bao gồm một số giai đoạn quan trọng.

  1. Chuyển đổi mô hình: Bạn sẽ chuyển đổi mô hình được đào tạo của mình thành Định dạng tương thích với npu. Trình biên dịch lên tensor (ATC) giúp ích cho quá trình này.
  2. Thích ứng với người vận hành: Mẫu của bạn có thể có các nhà khai thác tùy chỉnh. Bạn cần điều chỉnh chúng cho npu nếu chúng không được hỗ trợ nguyên bản.
  3. Suy Luận mô hình: Bạn sẽ triển khai mô hình đã chuyển đổi lên npu. Điều này liên quan đến việc tải mô hình và cho nó dữ liệu để có được dự đoán.
  4. Tối ưu hóa hiệu suất: Bạn có thể cải thiện hiệu suất hơn nữa với các kỹ thuật như lượng hóa và tổng hợp vận hành.

Sử dụng resnet như một xương sống Yolo

Bạn có thể sử dụng kiến trúc resnet làm xương sống cho mô hình Yolo của bạn. Resnet là tuyệt vời trong việc chiết xuất các tính năng phức tạp từ hình ảnh. Công suất này tốn kém. Resnet tăng thêm trọng lượng tính toán đáng kể. Điều này làm cho bước tiếp theo, cắt tỉa, rất quan trọng để tối ưu hóa Yolo/resnet trên các thiết bị có hạn chế về Tài Nguyên.

Tỉa cho khả năng tương thích npu

Cắt tỉa loại bỏ các kết nối hoặc tế bào thần kinh không cần thiết khỏi Mạng thần kinh của bạn. Quá trình này tạo ra một mô hình nhỏ hơn, nhanh hơn mà không bị mất chính xác. Mô hình cắt tỉa có ít thông số và thao tác hơn. Điều này làm cho nó lý tưởng cho npu, giảmBộ nhớCách sử dụng và tăng tốc độ suy luận. Đây là một kỹ thuật quan trọng để tối ưu hóa Yolo/resnet.

Xuất mẫu sang onnx

Bạn phải xuất mô hình của mình sang định dạng Open neural Network Exchange (onnx). Onnx là một định dạng trung gian mà công cụ ATC hiểu. Bạn có thể dễ dàng xuất một mô hình pytorch bằng một lệnh đơn giản.

Ví dụ: Xuất Mẫu yolov8n sang onnx.

# Lệnh này tạo ra 'yolov8n.onnx' từ mô hình pytorch của bạn
Mô hình xuất khẩu Yolo = định dạng yolov8n.pt = onnx

Ghi chú: Bạn có thể gặp phải lỗi trong quá trình Xuất Khẩu. Các vấn đề nhưLoại dữ liệu onnx không được hỗ trợ: int64Hoặc định hình không phù hợp trongFusedmatmulRất phổ biến. Bạn thường có thể sửa chúng bằng cách đảm bảo kích thước tensor đầu vào của bạn là chính xác hoặc bằng cách chuyển đổi các loại dữ liệu trước khi xuất.

Xác minh đồ thị onnx

Bạn nên luôn xác minh tệp onnx đã xuất. Kiểm tra này đảm bảo cấu trúc mô hình là chính xác trước khi bạn tiến hành chuyển đổi. Một số công cụ có thể giúp bạn bước chuẩn bị cuối cùng này.⚙️

  • Netron: Đây là một công cụ trực quan. Bạn có thể tải lên. OnnxĐể xem toàn bộ biểu đồ mô hình. Nó cho phép bạn kiểm tra các thuộc tính, đầu vào và đầu ra của mỗi lớp.
  • Bộ kiểm tra onnx: Đây là thư viện Python. Bạn có thể sử dụngOnnx. Checker. check_model()Hoạt động trong một kịch bản. Nó xác nhận theo chương trình cấu trúc mô hình của bạn là hợp lệ và sẽ gây ra lỗi nếu nó tìm thấy bất kỳ vấn đề.

Chuyển đổi mô hình với ATC

Sau khi chuẩn bị mô hình onnx, Nhiệm Vụ tiếp theo của bạn là chuyển đổi nó thành định dạng mà HiSilicon npu có thể hiểu được. Bạn sẽ sử dụngMáy biên dịch Ascend tensor (ATC)Đối với bước quan trọng này. ATC là một công cụ mạnh mẽ trong chuỗi công cụ cann (Compute Architecture For neural Networks).

Công việc chính của nó là biến mô hình của bạn thành một mô hình ngoại tuyến được tối ưu hóa cao.

  • ATC là một công cụ chuyển đổi cốt lõi trong chuỗi công cụ Huawei cann.
  • Bạn sử dụng nó để điều chỉnh các mô hình từ các khuôn khổ phổ biến thành Định dạng tương thích.
  • Nó giúp bạn triển khai các mẫu ai được đào tạo hiệu quả trên Huawei Ascend hardware.

Quá trình chuyển đổi này tạo ra một. OmTập tin, đó là mô hình thực thi cuối cùng bạn sẽ triển khai trên npu.

Chuyển đổi ATC cơ bản

Bạn có thể bắt đầu với một lệnh cơ bản để chuyển đổi xác minh của bạn. OnnxHồ sơ. Lệnh này cho ATC Mô hình đầu vào, khung gốc, tên tệp đầu ra mong muốn và phiên bản chip Ascend mục tiêu.

💡Mô hình ngoại tuyến Là Gì (. Om)? Mô hình ngoại tuyến là một tập tin đã được xử lý trước và tối ưu hóa cho một mục tiêu phần cứng cụ thể. Nó bao gồm các nhiệm vụ như hợp nhất của nhà điều hành và tối ưu hóa bộ nhớ, có nghĩa là npu có thể thực hiện nó với thời gian thiết lập tối thiểu trong khi suy luận.

Đây là một cơ bảnATCVí dụ dòng lệnh:

ATC -- Model = yolov8n.onnx \
-- Khung = 5 \
-- Output = yolov8n
-- Soc_version = ascend310

Hãy phá vỡ những gì mỗi phần của lệnh này làm:

CờMô tả
-- ModelChỉ định đường dẫn đến đầu vào của bạn. OnnxHồ sơ.
-- Framework = 5Cho ATC biết mô hình ở định dạng onnx. (Các giá trị khác dành cho caffe, v. v.)
-- OutputXác định tên cơ sở cho đầu ra của bạn. OmTệp (không cần mở rộng).
-- Soc_versionChỉ định Bộ xử lý Target Ascend, nhưAscend310HoặcAscend710.

Đầu vào cấu hình

Mô hình của bạn cần biết kích thước và định dạng chính xác của dữ liệu bạn sẽ gửi. Bạn cấu hình điều này trong quá trình chuyển đổi ATC bằng các cờ cụ thể. Bước này rất quan trọng đối với hiệu suất và ngăn ngừa lỗi thời gian chạy.

Bạn sử dụng-- Input_shapeCờ để xác định kích thước của tensor đầu vào của bạn. Bạn có thể thiết lập một Kích thước lô cố định cho hiệu suất phù hợp hoặc kích thước lô động để linh hoạt.

  • Kích thước lô tĩnh:"-- Input_shape = Images: 1,3,640,640"(Lô 1)
  • Kích thước lô động:"-- Input_shape = Images:-1,3,640,640"(Kích thước lô biến đổi)

Bạn cũng cần chỉ định bố cục dữ liệu. Hầu hết các mô hình tầm nhìn máy tính được đào tạo trong pytorch sử dụngNchwĐịnh dạng. Bố cục này tổ chức dữ liệu tensor như (số lượng mẫu, kênh, chiều cao, chiều rộng). Nhận được điều này là điều cần thiết cho hiệu quả tính toán, vì nó ảnh hưởng đến cách npu truy cập dữ liệu trong bộ nhớ. Bạn có thể sử dụng-- Input_formatCờ để đặt cái này.

Dưới đây là lệnh nâng cao với cấu hình đầu vào:

ATC -- Model = yolov8n.onnx \
-- Khung = 5 \
-- Output = yolov8n
-- Input_format = nchw \
-- Input_shape = "hình ảnh: 1,3,640,640" \
-- Soc_version = ascend310

Xử lý các hoạt động không được hỗ trợ

Đôi khi, mô hình của bạn có thể chứa các lớp đặc biệt hoặc các hoạt động ("Ops") mà ATC không hỗ trợ nguyên bản. Khi điều này xảy ra, việc chuyển đổi sẽ thất bại. Bạn có một công cụ mạnh mẽ để giải quyết vấn đề này:Động cơ tăng tensor (tbe). Tbe cho phép bạn xác định và triển khai các nhà khai thác tùy chỉnh theo cách thức Ascend npu có thể thực hiện.⚙️

Phát triển một nhà điều hành tùy chỉnh với tbe là một quy trình tiên tiến bao gồm nhiều giai đoạn:

  1. Mô-đun DSL: Trước tiên, bạn hãy viết logic toán học cốt lõi của người vận hành. Bạn sử dụng ngôn ngữ dành riêng cho miền để xác định các bước tính toán và luồng dữ liệu.
  2. Mô-đun Lập lịch: Tiếp theo, bạn chỉ cho phần cứng Cách thực hiện logic của mình một cách hiệu quả. Điều này liên quan đến việc lập kế hoạch cách phân đoạn dữ liệu (Ốp lát) để tối ưu hóa khả năng truy cập và hiệu suất bộ nhớ.
  3. Mô-đun IR: Tbe sau đó tạo ra một đại diện trung gian (IR) của nhà điều hành của bạn. Đây là định dạng chuẩn hóa mà Trình biên dịch có thể hiểu và bắt đầu tối ưu hóa.
  4. Mô-đun chuyển đổi biên dịch: Trình biên dịch lấy IR và áp dụng tối ưu hóa hơn nữa. Nó sử dụng các kỹ thuật như đệm kép và phân bổ Bộ nhớ thông minh để chuẩn bị cho người vận hành phần cứng npu cụ thể.
  5. Mô-đun CODEGEN: Cuối cùng, mô-đun CODEGEN tạo ra một tệp mã giống như C. Tập tin này được biên soạn thành một nhà điều hành thực thi mà khung cann có thể tải và chạy trực tiếp trên npu.

⚠Lưu ý: Việc tạo ra các nhà khai thác tùy chỉnh đòi hỏi sự hiểu biết sâu sắc về cả chức năng của người vận hành và kiến trúc npu cơ bản. Trước tiên bạn nên kiểm tra danh sách nhà điều hành cann chính thức. Chỉ tạo một nhà điều hành tùy chỉnh nếu bạn không thể tìm thấy một lựa chọn được hỗ trợ.

Tối ưu hóa và điều chỉnh nâng cao

Bạn đã chuyển đổi mô hình của bạn. Bây giờ bạn có thể mở khóa sức mạnh thực sự của HiSilicon npu. Các kỹ thuật tối ưu hóa tiên tiến sẽ đẩy hiệu suất của mô hình của bạn lên mức cao nhất. Giai đoạn này tập trung vào việc giảm độ chính xác của mô hình và phân tích hành vi Thời gian chạy của nó để tìm và sửa các nút thắt.

Các npus Like kiến trúc Da Vinci của HiSilicon được xây dựng để tăng tốc các hoạt động Toán Học cụ thể. Mô hình của bạn phải sử dụng các nhà khai thác "npu thân thiện" này để kết hợp, tổng hợp và kích hoạt để đạt được tốc độ tối đa. Bất kỳ thao tác nào không được npu Hỗ trợ chạy trên CPU chậm hơn, tạo ra nút cổ chai hiệu suất.Định lượng là một kỹ thuật quan trọng giúp mô hình của bạn thân thiện hơn với PU. Nó làm giảm độ chính xác của Số mô hình của bạn, ví dụ, từ điểm nổi 32 bit (fp32) đến số nguyên 8 bit (int8). Sự thay đổi này làm cho mô hình nhỏ hơn và nhanh hơn.MộtKiểm tra điểm chuẩn aiCho thấy tác động này rõ ràng.Một mô hình chạy ở tốc độ 12 khung hình mỗi giây sử dụng fp32 có thể đạt được 30 khung hình mỗi giây khi tối ưu hóa với định lượng int8.

Định lượng sau đào tạo (ptq)

Định lượng sau đào tạo (ptq) là một kỹ thuật mạnh mẽ để tối ưu hóa Yolo/resnet. Bạn áp dụng nó cho mẫu fp32 đã được đào tạo. Công cụ chính bạn sẽ sử dụng cho sản phẩm này là bộ công cụ nén mô hình Ascend (amct). Ptq rất phổ biến vì đây là một cách nhanh chóng và đơn giản để đạt được hiệu suất tăng đáng kể mà không cần đào tạo lại mô hình của bạn.

Tuy nhiên, ptq Đôi khi có thể làm giảm độ chính xác của người mẫu.Đối với một Model như yolov8 Nano, bạn có thể thấy độ chính xác suy luận giảm nhẹ. Trong một số trường hợp, đặc biệt là với các mẫu nhỏ hơn, tổn thất chính xác này có thể đáng kể hơn. Định lượng tĩnh int8 có thể dẫn đến sự sụt giảm độ chính xác vừa phải khoảng 3-7% trong mAP50-95 tuyệt đối.

Nếu mất độ chính xác từ ptq quá cao, bạn có một lựa chọn khác:Đào tạo nhận thức lượng hóa (qat). Qat giới thiệu mô phỏng lượng hóa trong quá trình đào tạo. Điều này cho phép mô hình tìm hiểu làm thế nào để bù đắp cho tổn thất chính xác, thường dẫn đến độ chính xác cuối cùng tốt hơn.

Dưới đây là một so sánh để giúp bạn quyết định sử dụng phương pháp nào:

Tính năngĐịnh lượng sau đào tạo (ptq)Đào tạo nhận thức lượng hóa (qat)
Sân khấu ứng dụngÁp dụng cho một mô hình được đào tạo trướcKết hợp trực tiếp vào quá trình đào tạo mô hình
Cần đào tạo lạiKhông, bạn không cần đào tạo lạiVâng, cần thời gian đào tạo lâu hơn để thích ứng với định lượng
Độ phức tạpĐơn giản hơn và nhanh hơn để thực hiệnPhức tạp hơn, vì nó mô phỏng lượng hóa trong quá trình đào tạo
Tác động chính xácCó thể dẫn đến giảm độ chính xác đáng chú ýThường đạt được độ chính xác tốt hơn bằng cách tối ưu hóa lượng suy luận

Khi nào bạn nên chọn một cái khác?

  • Chọn ptqKhi bạn không thể huấn luyện lại mô hình của mình hoặc khi một sự sụt giảm độ chính xác nhỏ là chấp nhận được Để Tăng Tốc độ lớn.
  • Chọn qatKhi độ chính xác là ưu tiên hàng đầu của bạn và bạn có nguồn lực cho một chu kỳ đào tạo dài hơn, phức tạp hơn.

Chuẩn bị một bộ dữ liệu hiệu chuẩn

Để thực hiện ptq, bạn cần mộtBộ dữ liệu hiệu chuẩn. Đây là một bộ sưu tập dữ liệu đầu vào đại diện nhỏ (ví dụ, hình ảnh) mà amct sử dụng. Nó chạy dữ liệu này thông qua mô hình của bạn để phân tích phạm vi các giá trị kích hoạt. Thông tin này giúp nó tính toán các yếu tố mở rộng tối ưu để chuyển đổi giá trị fp32 Thành int8 mà không mất quá nhiều thông tin.

Tạo một bộ dữ liệu hiệu chuẩn tốt là rất quan trọng để định lượng thành công.

  • Chất lượng hơn số lượng: Bạn không cần một tập hợp dữ liệu lớn. Một bộ xung quanh1024 hình ảnh đa dạng và chuẩn bị tốtThường là đủ. Đơn giản chỉ cần sử dụng nhiều hình ảnh hơn không phải lúc nào cũng tốt hơn. Một bộ dữ liệu không cân bằng hoặc dư thừa có thể làm lệch số liệu thống kê hiệu chuẩn. Điều này có thể khiến mô hình được định lượng hoạt động kém trong suy luận của thế giới thực.
  • Đại diện là chìa khóa: Hình ảnh hiệu chuẩn của bạn sẽ phản ánh sự đa dạng của dữ liệu mô hình của bạn sẽ thấy trong sản xuất. Bao gồm hình ảnh với các điều kiện ánh sáng khác nhau, kích thước đối tượng và hình nền để đảm bảo quá trình hiệu chuẩn mạnh mẽ.

Một bộ hiệu chuẩn được lựa chọn tốt là một nền tảng của định lượng hiệu quả khi tối ưu hóa Yolo/resnet.

Hồ sơ với Ascend profiler

Sau khi bạn chuyển đổi và định lượng mô hình của mình, bạn cần đo lường hiệu suất của nó.Ascend profilerLà công cụ bạn sẽ sử dụng để tìm bất kỳ nút thắt hiệu suất nào còn lại. Nó cung cấp cho bạn một phân tích chi tiết về cách mô hình của bạn thực hiện trên npu.

Bạn có thể sử dụng dữ liệu của Trình Phân Tích để trả lời các câu hỏi quan trọng:

  • Các nhà khai thác nào đang mất nhiều thời gian nhất?
  • Có nhà khai thác nào bất ngờ chạy trên CPU thay vì npu không?
  • Có chuyển động dữ liệu không hiệu quả giữa máy chủ và thiết bị không?

The Ascend profiler có hai thành phần chính cho phân tích này:

  1. Phân Tích Dòng Thời Gian: Chế độ xem này mang đến cho bạn một hình ảnh đại diện trực quan về việc thực hiện mô hình của bạn. Mỗi khối màu trên dòng thời gian hiển thị thời gian và thời gian bắt đầu của một nhà điều hành. Bạn có thể thấy chính xác các nhà khai thác đang chạy trênAicore(Npu chính),AIPU, HoặcMáy chủ. Điều này giúp bạn xác định chính xác các nhà khai thác với thời gian thực hiện dài. Bạn có thể tải xuống dữ liệu dòng thời gian này dưới dạng tệp json và mở nó trong các công cụ nhưChrome://TracingĐể có cái nhìn sâu hơn.

  2. Phân Tích Hiệu suất vận hành: Thành phần này cung cấp số liệu thống kê cấp cao. Nó hiển thị thời gian thực hiện của nhà điều hành trong bảng và biểu đồ, được sắp xếp theo thời gian. Bạn có thể nhanh chóng xem các loại nhà điều hành nào (ví dụ như, aicore so với AIPU) và các nhà khai thác cụ thể nào đang tốn nhiều thời gian nhất. Điều này là hoàn hảo để xác định xem một phần đáng kể thời gian chạy của mô hình của bạn có được chi tiêu cho một vài thao tác chậm hay không.

Bằng cách sử dụng hai quan điểm này cùng nhau, bạn có thể chẩn đoán hiệu quả các vấn đề về hiệu suất. Ví dụ, nếu Trình Phân Tích cho thấy rằng một nhà điều hành tùy chỉnh hoặc không được hỗ trợ đang chạy trên máy chủ, bạn biết rằng việc tạo một nhà điều hành tbe tùy chỉnh vì nó có thể sẽ cung cấp tốc độ tăng tốc lớn.

Triển khai và suy luận

Triển khai

Bạn đã tối ưu hóa mẫu của mình. Bây giờ bạn sẽ triển khai nó trên HiSilicon npu. Giai đoạn cuối cùng này là nơi bạn chạy mô hình của mình để đưa ra dự đoán trong thế giới thực. Bạn sẽ sử dụngNgôn ngữ Ascend Compute(Ascendcl) để giao tiếp với phần cứng và đo lường hiệu suất cuối cùng của mô hình của bạn.

Khởi tạo thiết bị bằng ascendcl

Trước tiên, bạn cần thiết lập npu để suy luận. Bạn sẽ sử dụng ascendcl để làm điều này. Ngôn ngữ tính toán Python Ascend (pyacl) là một thư viện API Python giúp quá trình này trở nên đơn giản. Nó cho phép bạn kiểm soát Bộ xử lý Ascend ai trực tiếp từ mã Python của bạn.

Quy trình làm việc tiêu chuẩn để chạy một mô hình theo một chuỗi rõ ràng:

  1. Khởi tạo pyacl: Bạn khởi động thư viện pyacl để chuẩn bị tài nguyên hệ thống.
  2. Phân bổ Tài Nguyên: Bạn đặt sang một bên tài nguyên Thời gian chạy mà ứng dụng của bạn cần.
  3. Truyền dữ liệu: Bạn di chuyển dữ liệu đầu vào, như hình ảnh, vào bộ nhớ của thiết bị.
  4. Xử lý dữ liệu: Bạn có thể thực hiện thay đổi hình ảnh vào phút cuối, như thay đổi kích thước.
  5. Mô hình thực hiện: Bạn tải lên. OmMô hình và chạy quá trình suy luận.
  6. Phá hủy phân bổ: Bạn giải phóng tài nguyên Thời gian chạy sau khi suy luận xong.
  7. Deinitialize pyacl: Bạn tắt thư viện để phát hành tất cả các nguồn lực.

Viết mã suy luận

Kịch bản suy luận của bạn tập hợp tất cả các bước này lại với nhau. Mã này là động cơ tải mô hình của bạn, cung cấp dữ liệu và truy xuất dự đoán.

💡Sử dụng pyacl cho suy luận The PyaclThư viện là công cụ chính của bạn cho nhiệm vụ này. Bạn sử dụng các chức năng của nó để quản lý thiết bị, xử lý bộ nhớ, tải của bạn. OmMô hình, và thực hiện nó. Nó cung cấp cho bạn toàn quyền kiểm soát toàn bộ đường ống Suy Luận Trong một môi trường Python.

Kịch bản của bạn sẽ tải dữ liệu đầu vào được xử lý trước, gửi nó đến npu, kích hoạt thực hiện mô hình, sau đó xử lý đầu ra từ mô hình.

Hiệu suất chuẩn

Sau khi triển khai, bạn phải đo lường hiệu suất của mô hình của bạn. Điều này cho bạn biết mô hình của bạn chạy nhanh như thế nào. Hai Số liệu chính là điều cần thiết cho đánh giá này:

  • Độ trễ: Đây là thời gian mô hình của bạn xử lý một đầu vào, được đo bằng mili giây (MS). Độ trễ thấp hơn là tốt hơn.
  • Khung hình mỗi giây (fps): Điều này đo số lượng đầu vào mà mô hình của bạn có thể xử lý trong một giây. Fps cao hơn là tốt hơn.

Hai Số liệu này có liên quan trực tiếp.Đối với ứng dụng video thời gian thực chạy ở tốc độ 30 khung hình/giây, độ trễ của người mẫu phải nhỏ hơn 33.3MS.Các số liệu độ trễ quan trọng khác cũng có thể giúp bạn hiểu rõ hơn.

  • Lần tới mã thông báo đầu tiên: Thời gian cần thiết để có được phần đầu ra đầu tiên.
  • Tổng thời gian thế hệ: Thời gian kết thúc từ đầu vào đến đầu ra đầy đủ.

Đo lường những con số này giúp bạn xác nhận rằng công việc tối ưu hóa của bạn đã thành công.🚀


Bây giờ bạn đã nắm vững một quy trình làm việc hoàn chỉnh để tối ưu hóa npu. Hướng dẫn này giúp bạn trải qua bốn giai đoạn thiết yếu:

  1. Chuẩn bị mô hình
  2. Chuyển đổi ATC
  3. Điều chỉnh định lượng
  4. Triển khai ascendcl

Theo dõi quy trình có cấu trúc này là chìa khóa để mở khóa hiệu suất đầy đủ của các mẫu máy tính của bạn trênPhần cứng HiSilicon.

Bây giờ, áp dụng các kỹ thuật này cho các dự án của riêng bạn! Để được trợ giúp nhiều hơn, hãy tham khảo tài liệu cann chính thức hoặc diễn đàn cộng đồng. Chúc may mắn!🚀

Câu hỏi thường gặp

Sự khác biệt chính giữa ptq và qat là gì?

Bạn áp dụng định lượng sau đào tạo (ptq) cho một mô hình đã được đào tạo. Nó nhanh nhưng có thể giảm độ chính xác. Bạn sử dụng đào tạo nhận thức lượng hóa (qat) trong quá trình đào tạo. Phương pháp này mất nhiều thời gian hơn nhưng thường giữ độ chính xác cao.

Tại sao onnx lại là định dạng ưa thích để chuyển đổi?

Bạn sử dụng onnx làm định dạng phổ quát. Trình biên dịch Ascend tensor (ATC) hiểu các tệp onnx. Điều này cho phép bạn dễ dàng chuyển đổi các mô hình từ các khung như pytorch vào. OmĐịnh dạng npu có thể thực hiện.

Tôi Nên Làm Gì Nếu chuyển đổi ATC của tôi không thành công?

Lỗi ATC thường có nghĩa là mô hình của bạn có một nhà điều hành không được hỗ trợ. Đầu tiên, kiểm tra các bản ghi lỗi để tìm Manh Mối. Bạn có thể cần tạo một nhà điều hành tùy chỉnh bằng cách sử dụng tensor Boost Engine (tbe) để giải quyết vấn đề.⚙️

Tôi Cần bao nhiêu hình ảnh cho một bộ dữ liệu hiệu chuẩn?

Bạn không cần hàng ngàn hình ảnh. Một tập hợp đa dạng Khoảng 1024 hình ảnh là đủ thường xuyên. Chìa khóa là chất lượng, không phải số lượng. Dữ liệu hiệu chuẩn của bạn phải đại diện cho những gì mô hình của bạn sẽ nhìn thấy trong sản xuất.

Related Articles